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秒)。谢谢分享这个库!