我刚接触Vue.js,现在想生成一个PDF,但不知道该怎么做。
以下是我的代码:
import * as jsPDF from "jspdf"
export default {
props: ['id'],
methods: {
pdf () {
const doc = new jsPDF()
}
}
}
错误:
在渲染过程中引用了实例上未定义的属性或方法"pdf"
错误:
在渲染时引用了实例上未定义的属性或方法“pdf”
我刚接触Vue.js,现在想生成一个PDF,但不知道该怎么做。
以下是我的代码:
import * as jsPDF from "jspdf"
export default {
props: ['id'],
methods: {
pdf () {
const doc = new jsPDF()
}
}
}
错误:
在渲染过程中引用了实例上未定义的属性或方法"pdf"
错误:
在渲染时引用了实例上未定义的属性或方法“pdf”
首先将PDF库导入:
import jsPDF from 'jspdf'
然后只需实例化该对象并为其提供内容:
methods: {
createPDF () {
let pdfName = 'test';
var doc = new jsPDF();
doc.text("Hello World", 10, 10);
doc.save(pdfName + '.pdf');
}
}
请务必阅读文档以获取更多信息。
下载HTML页面内容,可以按照以下步骤进行:
指定要下载为PDF的元素的引用
<div ref="content">
....
..
</div>
创建一个类似下载按钮的按钮
<button @click="download">Download PDF</button>
请确保将jsPDF库添加并导入到Vue组件中
import jsPDF from 'jspdf'
import html2canvas from "html2canvas"
像这样将方法指定到VUE组件中
methods: {
download() {
const doc = new jsPDF();
const contentHtml = this.$refs.content.innerHTML;
doc.fromHTML(contentHtml, 15, 15, {
width: 170
});
doc.save("sample.pdf");
},
downloadWithCSS() {
const doc = new jsPDF();
/** WITH CSS */
var canvasElement = document.createElement('canvas');
html2canvas(this.$refs.content, { canvas: canvasElement
}).then(function (canvas) {
const img = canvas.toDataURL("image/jpeg", 0.8);
doc.addImage(img,'JPEG',20,20);
doc.save("sample.pdf");
});
},
}
查看演示 @通过VUEJS下载PDF。
下载HTML页面内容,可以按照以下步骤进行:
Specify the ref to the element, whose content you want to download as pdf
<div ref="content">
....
..
</div>
<button @click="downloadWithCSS">Download PDF</button>
请确保将jsPDF库添加并导入到Vue组件中
import jsPDF from 'jspdf'
import domtoimage from "dom-to-image";
Specify the method into the VUE component like
methods: {
downloadWithCSS() {
/** WITH CSS */
domtoimage
.toPng(this.$refs.content)
.then(function(dataUrl) {
var img = new Image();
img.src = dataUrl;
const doc = new jsPDF({
orientation: "portrait",
// unit: "pt",
format: [900, 1400]
});
doc.addImage(img, "JPEG", 20, 20);
const date = new Date();
const filename =
"timechart_" +
date.getFullYear() +
("0" + (date.getMonth() + 1)).slice(-2) +
("0" + date.getDate()).slice(-2) +
("0" + date.getHours()).slice(-2) +
("0" + date.getMinutes()).slice(-2) +
("0" + date.getSeconds()).slice(-2) +
".pdf";
doc.save(filename);
})
.catch(function(error) {
console.error("oops, something went wrong!", error);
});
},
}
我曾有相似的问题,尤其是生成合适的大小和分辨率。
为了简洁起见,以下是一个帖子链接:
我进行了修改以适应我的需求:
downloadItem() {
const invoiceName = this.currentInvoice.invoiceId,
content = this.$refs.invoiceContent;
const doc = new jsPDF({
orientation: "landscape",
unit: "px",
format: "a4",
hotfixes: ["px_scaling"],
});
html2canvas(content, {
width: doc.internal.pageSize.getWidth(),
height: doc.internal.pageSize.getHeight(),
}).then((canvas) => {
const img = canvas.toDataURL("image/png");
doc.addImage(
img,
"PNG",
140,
10,
doc.internal.pageSize.getWidth(),
doc.internal.pageSize.getHeight()
);
doc.save("invoice-" + invoiceName + ".pdf");
});
},
new jspdf.jsPDF()
时它可以工作? - Akin Hwan