Node.js Nodejs:将文档转换为PDF

Node.js Nodejs:将文档转换为PDF,node.js,pdf,doc,Node.js,Pdf,Doc,我发现了一些回购协议,这些协议看起来并没有得到维护: 我尝试了使用libreoffice,但pdf输出太差,无法使用(不同页面上的文本等) 如果可能,我希望避免启动任何后台进程和/或在服务器上保存文件。最好的解决方案是我可以使用缓冲区。出于隐私原因,我不能使用任何外部服务 doc buffer->pdf buffer 问题: 如何在nodejs中将文档转换为pdf?要将文档转换为pdf,我们可以使用命令行实用程序 它可以由任何软件包管理器安装在您的操作系统上,例如,使用apt get在

我发现了一些回购协议,这些协议看起来并没有得到维护:

我尝试了使用
libreoffice
,但pdf输出太差,无法使用(不同页面上的文本等)

如果可能,我希望避免启动任何后台进程和/或在服务器上保存文件。最好的解决方案是我可以使用缓冲区。出于隐私原因,我不能使用任何外部服务

doc buffer->pdf buffer

问题:
如何在nodejs中将文档转换为pdf?

要将文档转换为pdf,我们可以使用命令行实用程序

它可以由任何软件包管理器安装在您的操作系统上,例如,使用apt get在ubuntu上安装它

sudo apt-get install unoconv
根据unoconv的文件

如果手动安装了unoconv,请确保已安装所需的LibreOffice或OpenOffice软件包

下面的示例演示如何调用unoconv实用程序

unoconv -f pdf sample_document.py
它生成包含sample_document.py内容的PDF文档

如果要使用nodeJS程序,则可以通过

下面的代码演示了如何使用子进程来使用unoconv创建PDF

const util = require('util');
const exec = util.promisify(require('child_process').exec);

async function createPDFExample() {
  const { stdout, stderr } = await exec('unoconv -f pdf sample.js');
  console.log('stdout:', stdout);
  console.log('stderr:', stderr);
}

createPDFExample();
Docx到pdf 将docx文件转换为pdf的库

安装:

npm install docx-pdf --save
用法

 var docxConverter = require('docx-pdf');

   docxConverter('./input.docx','./output.pdf',function(err,result){
   if(err){
      console.log(err);
     }
    console.log('result'+result);
 });

its basically docxConverter(inputPath,outPath,function(err,result){
  if(err){
   console.log(err);
  }
   console.log('result'+result);
 });

输出应该是Output.pdf,它将在您提供的输出路径上生成

,供现在可能遇到此问题的人使用:

有一个很酷的工具叫做Docker支持的无状态API,用于将HTML、Markdown和Office文档转换为PDF。它支持通过转换文档

我碰巧是Gotenberg的JS/TS客户端的作者-


我欢迎您使用它:)

当我创建应用程序时,我需要将用户上传的doc或docx文件转换为pdf文件以供进一步分析。为此,我使用了npm包libreoffice convert。libreoffice convert要求在Linux计算机上安装libreoffice。下面是我使用的示例代码。 这段代码是用javascript为基于nodejs的应用程序编写的

const libre = require('libreoffice-convert');
const path = require('path');
const fs = require('fs').promises;
let lib_convert = promisify(libre.convert)

async function convert(name="myresume.docx") {
  try {
    let arr = name.split('.')
    const enterPath = path.join(__dirname, `/public/Resume/${name}`);
    const outputPath = path.join(__dirname, `/public/Resume/${arr[0]}.pdf`);
    // Read file
    let data = await fs.readFile(enterPath)
    let done = await lib_convert(data, '.pdf', undefined)
    await fs.writeFile(outputPath, done)
    return { success: true, fileName: arr[0] };
  } catch (err) {
    console.log(err)
    return { success: false }
  }
}

您将获得高质量的pdf。

根据@shubham singh提供的答案,发布了一个稍微修改过的excel版本。我试过了,效果很好

    const fs = require('fs').promises;
    const path = require('path');
    const { promisify } = require('bluebird');
    const libre = require('libreoffice-convert');
    const libreConvert = promisify(libre.convert);

        // get current working directory
        let workDir = path.dirname(process.mainModule.filename)
        // read excel file
        let data = await fs.readFile(
          `${workDir}/my_excel.xlsx`
        );
        // create pdf file from excel
        let pdfFile = await libreConvert(data, '.pdf', undefined);
        // write new pdf file to directory
        await fs.writeFile(
          `${workDir}/my_pdf.pdf`,
          pdfFile
        );

在这方面有什么先例吗?有什么解决办法吗?libreoffice花了我4个小时安装,但仍然无法从命令行运行我遵循这条路径,在Amazon Linux上,它让我很难安装带有依赖项的unoconv,因为Yum没有所有的软件包,手动安装也浪费了我很多时间。docx-pdf使用文件系统,请求使用缓冲区。nativedocuments不需要将文件写入磁盘,这对于无服务器功能非常有用。这需要PhantomJS,它已被删除且不再受支持。应将其标记为可接受的答案。唯一缺少的细节是:const{promisify}=require('bluebird');这在谷歌云等无服务器功能中可行吗?看起来真的很好,会喜欢用无服务器的吗?我很想使用它,但我使用的是Firebase云函数,根据我所读到的,我需要在单独的实例上使用Gotenberg,所以第二个问题是它是否可扩展。谢谢@jeand'arme Gotenberg容器应该运行在某个地方,不幸的是,据我所知,没有任何公共实例。您应该在您的基础架构中运行它。关于可伸缩性,Gotenberg是无状态的,所以您可以根据需要对其进行扩展。Gotenberg文档中有关于可伸缩性的部分:@yumma感谢链接!我现在遇到了不同的问题——如何在Google Cloud run上部署它。我甚至在这里提出了一个问题:如果您有任何解决方案,我将不胜感激that@yumma它起作用了。平均来说,将简单的docx转换成pdf需要10-25秒(尝试了多个版本,似乎4k内存和2个CPU的工作效果最好——有时不到7秒)。谢谢分享这个库!