我找到了一些repos,看起来并不像它们仍然保留:
我用libreoffice
尝试approach,但pdf输出非常糟糕,无法使用(差异页面上的文字等)。
如果可能,我想避免启动任何后台进程和/或在服务器上保存文件。最好的解决方案是我可以使用缓冲区。出于隐私原因,我不能使用任何外部服务。
doc buffer -> pdf buffer
如何在nodejs中将文档转换为pdf?
答案 0 :(得分:3)
迟来的答案,但是您现在可以尝试我们刚刚发布(2019年1月)的https://www.npmjs.com/package/@nativedocuments/docx-wasm。
它将在本地执行转换,不需要LibreOffice,unoconv或其他任何东西。
const fs = require('fs');
const docx = require("@nativedocuments/docx-wasm");
// init docx engine
docx.init({
// ND_DEV_ID: "XXXXXXXXXXXXXXXXXXXXXXXXXX", // goto https://developers.nativedocuments.com/ to get a dev-id/dev-secret
// ND_DEV_SECRET: "YYYYYYYYYYYYYYYYYYYYYYYYYY", // you can also set the credentials in the enviroment variables
ENVIRONMENT: "NODE", // required
LAZY_INIT: true // if set to false the WASM engine will be initialized right now, usefull pre-caching (like e.g. for AWS lambda)
}).catch( function(e) {
console.error(e);
});
async function convertHelper(document, exportFct) {
const api = await docx.engine();
await api.load(document);
const arrayBuffer = await api[exportFct]();
await api.close();
return arrayBuffer;
}
convertHelper("sample.docx", "exportPDF").then((arrayBuffer) => {
fs.writeFileSync("sample.pdf", new Uint8Array(arrayBuffer));
}).catch((e) => {
console.error(e);
});
从上面的代码中可以看到,您将需要一个API密钥(免费增值模型)。
答案 1 :(得分:2)
从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,它将在您提供的输出路径上生成
答案 2 :(得分:2)
对于那些如今可能会迷失于这个问题的人:
有一个很酷的工具,称为Gotenberg -由Docker驱动的无状态API,用于将HTML,Markdown和Office文档转换为PDF。它支持通过unoconv转换DOC。
我恰好是Gotenberg的JS / TS客户端的作者-gotenberg-js-client
我欢迎您使用它:)
答案 3 :(得分:1)
要将文档转换为PDF,我们可以使用Universal Office Converter (unoconv)命令行实用程序。
它可以由任何包管理器安装在您的操作系统上,例如使用apt-get
在ubuntu上安装它sudo apt-get install unoconv
根据unoconv的文档
如果您手动安装了unoconv,请确保已安装所需的LibreOffice或OpenOffice软件包
以下示例演示了如何调用unoconv实用程序
unoconv -f pdf sample_document.py
它生成包含sample_document.py
内容的PDF文档如果您想使用nodeJS程序,那么您可以通过child process
调用命令查找以下代码,演示如何使用子进程来使用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();
答案 4 :(得分:1)
在创建应用程序时,我需要将用户上传的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。
答案 5 :(得分:0)
根据@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
);