jsPDF/html2canvas 通常丢失空格和错位文本
jsPDF/html2canvas losing spaces and misaligning text generally
我正在使用 html2canvas 和 jsPDF 生成 pdf 客户端。无论我选择什么设置,在 html 到 pdf 渲染中,字母 space 都会作为人工制品丢失。
是否有解决此问题的设置?我浏览了 API 并更改了我能想到的所有可能的设置,但没有改变间距。
图像显示 space 丢失
之前(在浏览器中为 html):
之后 (pdf):
代码
代码正在使用 html2canvas 和 jsPDF。
async pdfOrder() {
const doc = new jsPDF({
orientation: "p",
unit: "mm",
format: "a4",
precision: 5
});
const options = {
background: "white",
scale: 3
};
for (let i = 0; i < this.numberOfPages; i++) {
const div = document.getElementById("html2Pdf-" + i.toString());
// create array of promises
await this.addPage(doc, div, options, i);
}
// Name of pdf
const fileName = "XXX.pdf";
// Make file
await doc.save(fileName);
}
private addPage(
doc: jsPDF,
div: HTMLElement,
options: any,
pageNumber: number
): any {
// return promise of canvas to a page
return html2canvas(div, options).then(canvas => {
// Converting canvas to Image
const imgData = canvas.toDataURL("image/PNG");
// Add image Canvas to PDF
const bufferX = 4;
const bufferY = 4;
const imgProps = (doc as any).getImageProperties(imgData);
const pdfWidth = doc.internal.pageSize.getWidth() - 2 * bufferX;
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
if (pageNumber > 0) {
doc.addPage();
}
doc.addImage(
imgData,
"JPEG",
bufferX,
bufferY,
pdfWidth,
pdfHeight,
undefined,
"FAST"
);
doc.setPage(pageNumber);
const pdfOutput = doc.output();
// using ArrayBuffer will allow you to put image inside PDF
const buffer = new ArrayBuffer(pdfOutput.length);
const array = new Uint8Array(buffer);
for (let i = 0; i < pdfOutput.length; i++) {
array[i] = pdfOutput.charCodeAt(i);
}
});
}
添加非零值 letter-spacing
css 似乎可以解决。
letter-spacing: 0.01px;
我正在使用 html2canvas 和 jsPDF 生成 pdf 客户端。无论我选择什么设置,在 html 到 pdf 渲染中,字母 space 都会作为人工制品丢失。
是否有解决此问题的设置?我浏览了 API 并更改了我能想到的所有可能的设置,但没有改变间距。
图像显示 space 丢失
之前(在浏览器中为 html):
之后 (pdf):
代码
代码正在使用 html2canvas 和 jsPDF。
async pdfOrder() {
const doc = new jsPDF({
orientation: "p",
unit: "mm",
format: "a4",
precision: 5
});
const options = {
background: "white",
scale: 3
};
for (let i = 0; i < this.numberOfPages; i++) {
const div = document.getElementById("html2Pdf-" + i.toString());
// create array of promises
await this.addPage(doc, div, options, i);
}
// Name of pdf
const fileName = "XXX.pdf";
// Make file
await doc.save(fileName);
}
private addPage(
doc: jsPDF,
div: HTMLElement,
options: any,
pageNumber: number
): any {
// return promise of canvas to a page
return html2canvas(div, options).then(canvas => {
// Converting canvas to Image
const imgData = canvas.toDataURL("image/PNG");
// Add image Canvas to PDF
const bufferX = 4;
const bufferY = 4;
const imgProps = (doc as any).getImageProperties(imgData);
const pdfWidth = doc.internal.pageSize.getWidth() - 2 * bufferX;
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
if (pageNumber > 0) {
doc.addPage();
}
doc.addImage(
imgData,
"JPEG",
bufferX,
bufferY,
pdfWidth,
pdfHeight,
undefined,
"FAST"
);
doc.setPage(pageNumber);
const pdfOutput = doc.output();
// using ArrayBuffer will allow you to put image inside PDF
const buffer = new ArrayBuffer(pdfOutput.length);
const array = new Uint8Array(buffer);
for (let i = 0; i < pdfOutput.length; i++) {
array[i] = pdfOutput.charCodeAt(i);
}
});
}
添加非零值 letter-spacing
css 似乎可以解决。
letter-spacing: 0.01px;