javascript - 使用pdfMake创建PDF后如何下载zip文件

标签 javascript jquery angularjs zip pdfmake

我正在使用 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)

关于javascript - 使用pdfMake创建PDF后如何下载zip文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41325731/

相关文章:

javascript - Tornado 翻译工具和 javascript

屏幕休眠时 JavaScript setInterval 延迟

javascript - 在剑道网格行和列中

jquery - 使用 jQuery 在 ID 之上放置一些东西

node.js - 在 NodeJS 中向外行用户隐藏 Web 服务

javascript - 不是函数时的自定义路由提供程序

javascript - Jquery ajax 与 XMLHttpRequest

html - 为什么 jQuery.live 函数不能用于静态元素?

javascript - 如何将两个按钮的值添加到单个输入框?

javascript - 将表单传递给 AngularJS 组件进行验证