javascript - 将 doc Node.js 缓冲区转换为 pdf 文件以将其输出到客户端
问题描述
我有一个 docx Node.js 缓冲区。
var buf = doc.getZip()
.generate({type: 'nodebuffer'});
console.log("buffer is ", buf);
我得到像这样的缓冲区
<Buffer 50 4b 03 04 0a 00 00 00 00 00 42 42 3d 4d 23 df 99 8f 65 05 00 00 65 05 00 00 13 00 00 00 5b 43 6f 6e 74 65 6e 74 5f 54 79 70 65 73 5d 2e 78 6d 6c 3c ... >
我希望将其转换为 pdf 文档并在客户端下载。我不希望将文档保存到服务器端。
我有一种解决方案,即将 docx 缓冲区转换为 docx 文件,然后将 docx 文件转换为 pdf。
fs.writeFileSync(path.resolve(__dirname, 'output.docx'), buf);
docToPdf('./output.docx').then(
console.log("it is done")
)
但是,通过这种方式,文档被保存在服务器中。并且 docToPdf 也在使用 LibreOffice。有没有更好的方法可以避免这一切。
解决方案
https://www.npmjs.com/package/@nativedocuments/docx-wasm(在我写的时候是新的,2019 年 1 月)会做你想做的事。
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 密钥(它的免费增值模型)。披露:我对此感兴趣。
推荐阅读
- r - 在 R 中用 pvalues 绘制多箱线图
- php - mPDF 不创建第二页继续,覆盖第一页
- javascript - 画布中最佳正方形大小的算法
- css - CSS:为什么“隐藏:溢出”会禁用文本下划线?
- javascript - 为什么无法使用 javascript、webpack 解析文件?
- time-complexity - 什么样的算法模式是多对数的?
- python - tensorflow-1.14,15中的操作组成
- mysql - 在 VBA excel 中查询 SQL
- python - 在 Alfred 工作流程中使用 Python:在脚本中调用多个用户输入变量
- docker - Docker-for-desktop kubernetes 从私有仓库拉取镜像