web-dev-qa-db-fra.com

Nodejs: convertir un document en PDF

J'ai trouvé quelques repos, qui n'ont pas l'air d'être encore maintenus:

J'ai essayé la approche avec libreoffice, mais la sortie pdf est si mauvaise qu'elle n'est pas utilisable (texte sur pages diff. Etc.).

Si possible, je voudrais éviter de démarrer des processus d'arrière-plan et/ou d'enregistrer le fichier sur le serveur. Le mieux serait une solution où je peux utiliser des tampons. Pour des raisons de confidentialité, je ne peux utiliser aucun service externe.

doc buffer -> pdf buffer

Question:

Comment convertir des documents en pdf dans nodejs?

15
Andi Giga

Docx en pdf Une bibliothèque qui convertit le fichier docx en pdf.

Installation:

npm install docx-pdf --save

Usage

 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);
 });

La sortie doit être output.pdf qui sera produite sur le chemin de sortie que vous avez fourni

1
Shepherd Gwasira

Pour ceux qui pourraient trébucher sur cette question de nos jours:

Il existe un outil génial appelé Gotenberg - API sans état alimentée par Docker pour convertir des documents HTML, Markdown et Office en PDF. Il prend en charge la conversion de DOC via noconv .

Et je suis un auteur du client JS/TS pour Gotenberg - gotenberg-js-client

Je vous souhaite la bienvenue pour l'utiliser :)

1
yumaa

Pour convertir un document en PDF nous pouvons utiliser niversal Office Converter (unoconv) utilitaire de ligne de commande.

Il peut être installé sur votre système d'exploitation par n'importe quel gestionnaire de packages, par exemple Pour l'installer sur ubuntu en utilisant apt-get

Sudo apt-get install unoconv

Selon la documentation d'unoconv

Si vous avez installé unoconv à la main, assurez-vous que les packages LibreOffice ou OpenOffice requis sont installés

L'exemple suivant montre comment appeler l'utilitaire unoconv

unoconv -f pdf sample_document.py

Il génère PDF contenant le contenu de sample_document.py

Si vous souhaitez utiliser un programme nodeJS, vous pouvez invoquer la commande via processus enfant

Trouvez le code ci-dessous qui montre comment utiliser le processus enfant pour utiliser le nonconv pour créer un 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();
1
GauravLuthra

Réponse tardive, mais vous pouvez maintenant essayer https://www.npmjs.com/package/@nativedocuments/docx-wasm que nous venons de publier (janvier 2019).

Il effectuera la conversion localement et ne nécessite pas LibreOffice, unoconv ou quoi que ce soit d'autre.

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);
});

Comme vous pouvez le voir dans le code ci-dessus, vous aurez besoin d'une clé API (modèle freemium).

1
JasonPlutext

Pendant que je créais une application, je dois convertir le fichier doc ou docx téléchargé par un utilisateur en un fichier pdf pour une analyse plus approfondie. J'ai utilisé le package npm libreoffice-convert à cet effet. libreoffice-convert nécessite l'installation de libreoffice sur votre machine Linux. Voici un exemple de code que j'ai utilisé. Ce code est écrit en javascript pour les applications basées sur 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 }
  }
}

Vous obtiendrez une très bonne qualité de pdf.

0
shubham singh