|
@@ -1,4 +1,6 @@
|
|
|
-import html2pdf from "html2pdf.js";
|
|
|
+// import html2pdf from "html2pdf.js";
|
|
|
+import html2canvas from "html2canvas";
|
|
|
+import jsPDF from "jspdf";
|
|
|
|
|
|
// jsPDF config doc
|
|
|
// https://rawgit.com/MrRio/jsPDF/master/docs/jsPDF.html
|
|
@@ -13,7 +15,7 @@ export const jsPDFConfigs = {
|
|
|
};
|
|
|
|
|
|
export async function buildPdf(
|
|
|
- { element, pageSize, filename, scale },
|
|
|
+ { elements, pageSize, filename, scale },
|
|
|
returnBlob = false
|
|
|
) {
|
|
|
const opt = {
|
|
@@ -26,9 +28,38 @@ export async function buildPdf(
|
|
|
},
|
|
|
};
|
|
|
|
|
|
+ const mergedPdf = await buildPdfFromElements(elements, opt);
|
|
|
+
|
|
|
if (returnBlob) {
|
|
|
- return await html2pdf().set(opt).from(element).outputPdf("blob");
|
|
|
+ return await mergedPdf.outputPdf("blob");
|
|
|
} else {
|
|
|
- await html2pdf().set(opt).from(element).save();
|
|
|
+ console.log(filename);
|
|
|
+ await mergedPdf.save(filename);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export async function buildPdfFromElements(domList, pdfOptions) {
|
|
|
+ const mergedPdf = new jsPDF(pdfOptions.jsPDF);
|
|
|
+
|
|
|
+ for (let i = 0; i < domList.length; i++) {
|
|
|
+ const element = domList[i];
|
|
|
+ const canvas = await html2canvas(element, pdfOptions.html2canvas);
|
|
|
+ const blob = await new Promise((resolve) =>
|
|
|
+ canvas.toBlob(
|
|
|
+ resolve,
|
|
|
+ `image/${pdfOptions.image.type}`,
|
|
|
+ pdfOptions.image.quality
|
|
|
+ )
|
|
|
+ );
|
|
|
+ const img = document.createElement("img");
|
|
|
+ img.src = URL.createObjectURL(blob);
|
|
|
+
|
|
|
+ const pdfWidth = mergedPdf.internal.pageSize.getWidth();
|
|
|
+ const pdfHeight = mergedPdf.internal.pageSize.getHeight();
|
|
|
+
|
|
|
+ if (i > 0) mergedPdf.addPage();
|
|
|
+ mergedPdf.addImage(img, "JPEG", 0, 0, pdfWidth, pdfHeight);
|
|
|
}
|
|
|
+
|
|
|
+ return mergedPdf;
|
|
|
}
|