Générer un PDF image à partir d’un document PDF avec PDFBox et iText

La génération de PDF image à partir de PDF vectorisé est un processus qui permet de convertir un fichier PDF vectorisé en un fichier PDF image. Le PDF vectorisé est un type de fichier qui utilise des formes géométriques simples (vecteurs) pour représenter des images et du texte, tandis que le PDF image est un type de fichier qui utilise des pixels pour représenter des images et du texte.

Suite à des problèmes avec des outils de signatures numérique j’ai été contraint d’effectuer quelques tests pour transformer des pdf vectorisés assez complexe (des plans de maisons) en format image. J’ai utilisé en Java les librairies PDFBox et iText. L’opération consiste à produire une image de chaque page de texte et ensuite d’intégrer ces images dans un nouveau PDF.

PDDocument document = PDDocument.load(new File("c:\\temp\\plan-exe.pdf"));
		    PDFRenderer pdfRenderer = new PDFRenderer(document);
		    int nbrP = document.getNumberOfPages();
		    for (int page = 0; page < document.getNumberOfPages(); ++page) {
		        BufferedImage bim = pdfRenderer.renderImageWithDPI(
		          page, 150, ImageType.RGB);
		        ImageIOUtil.writeImage(
		          bim, String.format("c:\\Temp\\output\\pdf-%d.%s", page + 1, "JPG"), 150);
		    }
		    document.close();
		    
		    Rectangle a3Format = new Rectangle(1188, 846);
		    a3Format.setBorder(0);
		    Document documentOut = new Document(); //a3Format);
		    
		    String output = "c:\\Temp\\output\\pdfout.pdf";
		    FileOutputStream fos = new FileOutputStream(output);

		    PdfWriter writer = PdfWriter.getInstance(documentOut, fos);
		    writer.open();
		    documentOut.open();
		    for (int page = 0; page < nbrP; ++page) {
		    	Image imageAdd = Image.getInstance(String.format("c:\\Temp\\output\\pdf-%d.%s", page + 1, "JPG"));
		    	//imageAdd.scaleAbsolute(a3Format);
		    	imageAdd.setAbsolutePosition(0f, 0f);
		    	documentOut.setPageSize(imageAdd);
		    	documentOut.newPage();
		    	documentOut.add(imageAdd);
		    }
		    documentOut.close();
		    writer.close();

La méthode principale qui effectue le travail est au dessus. Il m’a fallu ajouter les dépendances maven suivantes au projet.

	<dependency>
		<groupId>com.itextpdf</groupId>
		<artifactId>itextpdf</artifactId>
		<version>5.5.13.3</version>
	</dependency>
	<dependency>
		<groupId>org.apache.pdfbox</groupId>
		<artifactId>pdfbox</artifactId>
		<version>2.0.26</version>
	</dependency>

Il est important de noter que la conversion de PDF vectorisé en PDF image peut entraîner une perte de qualité de l’image. En effet, les fichiers PDF vectorisés sont généralement de meilleure qualité que les fichiers PDF image, car ils utilisent des formes géométriques simples pour représenter l’image, ce qui permet de conserver une qualité d’image nette et précise. En revanche, les fichiers PDF image utilisent des pixels pour représenter l’image, ce qui peut entraîner une perte de qualité lorsque l’image est agrandie ou modifiée.

0 Comments

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.