2009-12-16 14 views
0

J'essaie d'imprimer des fichiers PDF en mode silencieux à partir d'une application Java (plus précisément une application Web J2EE).PDF Renderer bousiller mes fichiers PDF?

Dans cette application, je crée des fichiers PDF avec iText. Les fichiers créés sont des lettres types composées chacune d'une seule page.

Pour afficher et imprimer ces fichiers PDF, j'ai essayé d'utiliser la bibliothèque pdf-renderer. (Voir ici: https://pdf-renderer.dev.java.net/)

J'ai trouvé un exemple de code utile à http://juixe.com/techknow/index.php/2008/01/17/print-a-pdf-document-in-java/ et en effet, il ne m'a pas fallu longtemps pour imprimer le premier document de mon ordinateur de travail.

Mais maintenant vient le plus drôle:

Après avoir imprimé chacun des fichiers PDF a été en quelque sorte foiré. C'était encore lisible et tout, mais tout le formatage était un peu fou. Linebrakes où ils ne devraient pas être, artefacts d'erreur dans l'image contenue, le déblocage du texte est soudainement plus long ou plus court comme supposé ...

En outre ce qui était imprimé était aussi cette version «hackée» ... Donc je suppose que le l'erreur doit être quelque part dans le processus de rendu.

C'est le code source responsable du processus de rendu et l'impression:

File f = this.file; //This accesses the created PDF file 

FileInputStream fis = new FileInputStream(f); 

FileChannel fc = fis.getChannel(); 

ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); 

PDFFile pdfFile = new PDFFile(bb); // Create PDF Print Page 

PDFPrintPage pages = new PDFPrintPage(pdfFile); 



// Create Print Job 

PageFormat pf = PrinterJob.getPrinterJob().defaultPage(); 

pjob.setJobName(f.getName()); 

Book book = new Book(); 

book.append(pages, pf, pdfFile.getNumPages()); 

pjob.setPageable(book); 

Autre fait amusant: Le vissage du PDF est produit uniquement sur les documents PDF créés iText. Si j'essaie d'imprimer un autre PDF aléatoire, il ne sera pas altéré.

Des idées sur ce que pourrait être le problème? Et comment le rendu peut-il affecter mes fichiers PDF? Comme je comprends ce code scource, le mode READ_ONLY devrait empêcher exactement cela ...

EDIT: J'ai juste vu que l'impression d'un PDF créé par iText supprime également les polices incorporées. Encore une fois, avant le rendu/impression via pdf-renderer cela a parfaitement fonctionné. (Les polices apparaissaient aussi dans les propriétés du PDF, etc ...)

Répondre

0

Peut-être que iText crée des fichiers PDF qui ne sont pas compatibles avec votre moteur de rendu? Avez-vous vérifié quelle version PDF il crée? Peut-être qu'il est possible de spécifier une version plus ancienne?

+0

Je ne crois pas que c'est le problème. Tous les fichiers que j'ai essayé d'imprimer ont la version PDF-1.4. – fgysin