web-dev-qa-db-ja.com

Nodejs:ドキュメントをPDFに変換します

まだ維持されているために見えないいくつかのリポジトリを見つけました:

libreofficeアプローチ を試しましたが、PDF出力が非常に悪いため、使用できません(差分ページのテキストなど)。

可能であれば、バックグラウンドプロセスを開始したり、サーバーにファイルを保存したりしないようにします。バッファを使用できるソリューションが最適です。プライバシー上の理由から、外部サービスは利用できません。

doc buffer -> pdf buffer

質問:

Nodejsでドキュメントをpdfに変換する方法は?

15
Andi Giga

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である必要があります

1

今日この質問につまずくかもしれない人のために:

Gotenberg と呼ばれるクールなツールがあります— HTML、MarkdownおよびOfficeドキュメントをPDFに変換するためのDockerを利用したステートレスAPI。 noconv によるDOCの変換をサポートしています。

そして、私はたまたまGotenbergのJS/TSクライアントの著者です— gotenberg-js-client

私はそれを使うことを歓迎します:)

1
yumaa

ドキュメントをPDFに変換するには、 niversal Office Converter(unoconv) コマンドラインユーティリティを使用できます。

これは、任意のパッケージマネージャー(例: apt-getを使用してubuntuにインストールするには

Sudo apt-get install unoconv

Unoconvのドキュメントに従って

Unoconvを手動でインストールした場合は、必要なLibreOfficeまたはOpenOfficeパッケージがインストールされていることを確認してください

次の例は、unoconvユーティリティを呼び出す方法を示しています

unoconv -f pdf sample_document.py

PDF sample_document.pyのコンテンツを含むドキュメントを生成します

NodeJSプログラムを使用する場合は、 child process を使用してコマンドを呼び出すことができます

子プロセスを使用してPDFを作成するためのunoconvを使用する方法を示す以下のコードを見つけてください

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();
1
GauravLuthra

遅ればせながら、試してみてください https://www.npmjs.com/package/@nativedocuments/docx-wasm これは、リリースしたばかりです(2019年1月)。

ローカルで変換を実行します。LibreOffice、uno​​convなどは必要ありません。

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
JasonPlutext

アプリケーションの作成中に、ユーザーがアップロードしたdocまたはdocxファイルを、さらに分析するためにpdfファイルに変換する必要があります。この目的のために、npmパッケージlibreoffice-convertを使用しました。 libreoffice-convertを使用するには、Linuxマシンにlibreofficeをインストールする必要があります。ここに私が使用したサンプルコードがあります。このコードは、nodejsベースのアプリケーション用のJavaScriptで記述されています。

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が得られます。

0
shubham singh