Nodejs:将文档转换为PDF

az31mfrm  于 2023-04-05  发布在  Node.js
关注(0)|答案(6)|浏览(485)

我发现了一些仓库,它们看起来不像仍然在维护:

我尝试了approachlibreoffice,但pdf输出是如此糟糕,它是不可用的(文本上的差异。网页等)。
如果可能的话,我想避免启动任何后台进程和/或将文件保存在服务器上。最好的解决方案是我可以使用缓冲区。出于隐私原因,我不能使用任何外部服务。
doc buffer -> pdf buffer

问题:

如何在nodejs中转换docs于pdf?

woobm2wo

woobm2wo1#

对于那些今天可能会遇到这个问题的人:
有一个很酷的工具叫做Gotenberg- Docker-powered stateless API,用于将HTML,Markdown和Office文档转换为PDF。它支持通过unoconv转换DOC。
我碰巧是Gotenberg的JS/TS客户端的作者-gotenberg-js-client
欢迎您使用:)

UPD

Gotenberg有新网站-https://gotenberg.dev

r6hnlfcb

r6hnlfcb2#

当我创建一个应用程序时,我需要将用户上传的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质量。

webghufk

webghufk3#

要将文档转换为PDF,我们可以使用Universal Office Converter (unoconv)命令行实用程序。
它可以通过任何软件包管理器安装在您的操作系统上,例如使用apt-get将其安装在ubuntu上

sudo apt-get install 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();
d6kp6zgx

d6kp6zgx4#

根据@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
        );
krcsximq

krcsximq5#

Docx to 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,它将在您提供的输出路径上生成

jei2mxaa

jei2mxaa6#

const { spawn } = require('child_process');
const soffice = spawn('soffice ',['--convert-to',' pdf',inputFilePath,'--headless']);

相关问题