关于使用Node JS将PDF转换为图像的问题

eulz3vhy  于 2023-06-05  发布在  Node.js
关注(0)|答案(2)|浏览(511)

该计划是创建一个PDF文件(仅由一个单一的页面组成),然后用户选择是否下载为PDF或图像。我已经编写了生成PDF的代码,目前运行良好。现在的问题是如何将其转换为图像。是否可以在不安装Ghostscript等文件的情况下转换文件?
我是一个完整的noob,建议是非常感谢。(建议使用哪些库也会有所帮助)

PDF生成代码

import PDFDocument from "pdfkit";

  static async medicalPrescription(req, res) {
    // Some code for generating the PDF contents...

    filename = encodeURIComponent(filename) + '.pdf'
    res.setHeader('Content-disposition', 'attachment; filename="' + filename + '"')
    res.setHeader('Content-type', 'application/pdf')
    const content = req.body.content
    doc.y = 300
    doc.text(content, 50, 50)
    doc.pipe(res)
    doc.end()
  }

然后客户端接收生成的文件并在另一个选项卡中打开它。

发送请求并打开响应的React文件

const handleSubmit = async (e) => {
    // Some code for sending the pdf content from the user

    fetch("http://localhost:5050/generate-rx", { 
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: parsed
    })

      .then(async res => {
        if (res.status === 200) {
          const blob = await res.blob();
          const file = new Blob(
            [blob], 
            {type: 'application/pdf'}
          );
          const fileURL = URL.createObjectURL(file);
          window.open(fileURL);  
        }
      }) 
  }
8wtpewkr

8wtpewkr1#

可以使用pdf2pic。它可以将PDF转换为图像。

import { fromPath } from "pdf2pic";

const options = {
  density: 100,
  saveFilename: "untitled",
  savePath: "./images",
  format: "png",
  width: 600,
  height: 600
};
const storeAsImage = fromPath("/path/to/pdf/sample.pdf", options);
const pageToConvertAsImage = 1;

storeAsImage(pageToConvertAsImage).then((resolve) => {
  console.log("Page 1 is now converted as image");

 console.log(resolve); // send resolve to user
});
2ekbmq32

2ekbmq322#

是的,可以将pdf转换为image,而无需安装Ghostscript之类的东西,pdf.js + canvas可以做到这一点。
当您的主机/环境不允许安装额外的apt软件包(如Ghostscript)时,这是一个很好的选择。
这里是一个链接到pdf.jsnode-example用法转换pdf到png

  • 这个例子中的代码在我使用pdfjs-dist@2.16.105和最新的canvas@2.11.2时可以正常工作。
  • 还要注意,要在nodejs上使用pdf.js,你需要使用遗留构建:require("pdfjs-dist/legacy/build/pdf.js")

相关问题