我正在使用pdfMake在我的angular项目中创建pdf文档。同时,我想要创建包含多个pdf文档的zip文件。
是否有可能实现这样的功能呢?欢迎您提供答案或建议。
我正在使用pdfMake在我的angular项目中创建pdf文档。同时,我想要创建包含多个pdf文档的zip文件。
是否有可能实现这样的功能呢?欢迎您提供答案或建议。
我以类似的方式完成了类似的任务。使用React编写了一个网站。
import JSZip from 'jszip';
import * as FileSaver from "file-saver";
import * as pdfMake from "pdfmake/build/pdfmake";
interface forzip {
array: any[];
wordHeaders: string[];
dataKeys: string[];
image?: any;
headerName?:string
}
export const getHtmlStringFromJson = (
data: {}[],
headers: string[],
dataKeys: string[],
headerName?:string
) => {
let tableHeaders = "";
headers.forEach((h) => (tableHeaders += "<th>" + h + "</th>"));
let tableBody = "";
data?.forEach((d) => {
tableBody += "<tr>";
dataKeys.forEach((dk) => {
//@ts-ignore
tableBody += "<td>" + d[dk] + "</td>";
});
tableBody += "</tr>";
});
let html =
`<p>`+headerName!+`</p>
<table border="1">
<thead>
<tr>` +
tableHeaders +
`</tr>
</thead>
<tbody>` +
tableBody +
`</tbody>
</table>`;
return html;
};
export const export2zip = (arrforzip:forzip[]) => {
(window as any).pdfMake.vfs = pdfFonts.pdfMake.vfs;
const zip = new JSZip();
var pdf = zip.folder("pdf");
arrforzip.map(function(forpdf,i) {
let htmlString = getHtmlStringFromJson(forpdf.array, forpdf.wordHeaders,
forpdf.dataKeys,forpdf.headerName!);
let htmlPdf = htmlToPdfmake(htmlString)
let pdfData = pdfMake.createPdf({content:htmlPdf});
pdfData.getBlob(blob => {
pdf?.file(
`${forpdf.headerName}.pdf`,
blob,
{ binary: true }
);
});
})
zip.generateAsync({type:"blob"}).then(function (blob) {
zip.generateAsync({type:"blob"})
.then(function(content) {FileSaver.saveAs(content, `examples.zip`);});
});
};
export2zip(completData)
zip.file()
和zip.generateAsync({ type: "blob" })
吗?"base64" 是有效的data URI
吗?你能否在问题中包含你尝试过的javascript
代码?另请参阅 如何将 base64 转换为 zip 并移动到服务器。 - guest271314<a>
元素的download
属性中设置.zip
文件的名称;请参见第一个链接。 - guest271314