Maison > interface Web > js tutoriel > Comment convertir des pages PDF en images dans Node.js

Comment convertir des pages PDF en images dans Node.js

DDD
Libérer: 2024-09-18 19:47:36
original
558 Les gens l'ont consulté

How to Convert PDF Pages to Images in Node.js

Dans cet article, nous expliquerons comment convertir des pages PDF en images à l'aide de Node.js. Cela peut être utile pour générer des vignettes ou extraire du contenu visuel à partir de fichiers PDF. Nous utiliserons la bibliothèque pdfjs-dist pour charger et restituer les pages PDF, et le canevas pour créer des tampons d'image.

Prérequis
Avant de commencer, vous devez installer les packages requis :

npm install pdfjs-dist canevas

Code pour convertir des pages PDF en images et enregistrer localement :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

const fs = require('fs');

const path = require('path');

const pdfjs = require('pdfjs-dist/legacy/build/pdf.js');

const Canvas = require('canvas');

 

/**

 * Converts a PDF to images by rendering each page and saving them to a local directory.

 *

 * @param {Buffer} pdfBuffer - The PDF file as a buffer.

 * @param {string} outputDir - The directory where images will be saved.

 * @returns {Promise<void>} Resolves when all images are saved.

 */

async function convertPdfToImages(pdfBuffer, outputDir) {

  try {

    // Ensure the output directory exists

    if (!fs.existsSync(outputDir)) {

      fs.mkdirSync(outputDir, { recursive: true });

    }

 

    // Load the original PDF using pdf.js

    const loadingTask = pdfjs.getDocument({ data: pdfBuffer });

    const pdfDocument = await loadingTask.promise;

 

    // Loop through each page of the PDF

    for (let i = 1; i <= pdfDocument.numPages; i++) {

      const page = await pdfDocument.getPage(i);

 

      // Render the page as an image and save it

      const imageBuffer = await renderPageToImage(page);

 

      // Save the image to the output directory

      const imagePath = path.join(outputDir, `page_${i}.jpg`);

      fs.writeFileSync(imagePath, imageBuffer);

      console.log(`Saved: ${imagePath}`);

    }

  } catch (error) {

    console.error('Error converting PDF to images:', error);

  }

}

 

/**

 * Renders a single PDF page to an image buffer.

 *

 * @param {PDFPageProxy} page - The PDF.js page object.

 * @returns {Promise<Buffer>} The image as a buffer (JPEG format).

 */

async function renderPageToImage(page) {

  // Scale the page to 2x for a higher quality image output

  const viewport = page.getViewport({ scale: 2.0 });

  const canvas = Canvas.createCanvas(viewport.width, viewport.height);

  const context = canvas.getContext('2d');

 

  const renderContext = {

    canvasContext: context,

    viewport: viewport,

  };

 

  // Render the PDF page to the canvas

  await page.render(renderContext).promise;

 

  // Convert the canvas content to a JPEG image buffer and return it

  return canvas.toBuffer('image/jpeg');

}

 

// Example usage:

// const pdfBuffer = fs.readFileSync('sample.pdf');

// convertPdfToImages(pdfBuffer, './output_images');

Copier après la connexion

Explication du code

  1. Charger le PDF : nous utilisons pdfjs-dist pour charger un fichier PDF à partir d'un tampon.

1

2

const loadingTask = pdfjs.getDocument({ data: pdfBuffer });

const pdfDocument = await loadingTask.promise;

Copier après la connexion
  1. Rendu chaque page : pour chaque page du PDF, nous la rendons sur un canevas à l'aide des méthodes getPage et render de pdfjs-dist.

1

2

3

4

5

6

const page = await pdfDocument.getPage(pageNumber);

const renderContext = {

  canvasContext: context,

  viewport: viewport,

};

await page.render(renderContext).promise;

Copier après la connexion
  1. Enregistrer l'image localement : une fois la page rendue sur le canevas, nous enregistrons le tampon d'image au format JPEG à l'aide du module fs de Node.js.

1

fs.writeFileSync(imagePath, imageBuffer);

Copier après la connexion

Conclusion :
Cette approche fonctionne efficacement pour convertir des PDF en images, vous permettant de traiter ou de visualiser le contenu PDF. Pour des images de haute qualité, nous redimensionnons la toile à 2x. Cela peut être facilement ajusté en fonction de vos besoins.

J'espère que cela vous aidera ! N'hésitez pas à adapter le code selon vos besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal