2011-06-08 3 views
2

Quelqu'un sait-il comment enregistrer un fichier PDF en tant que version PDF inférieure à l'aide d'iTextSharp afin de pouvoir utiliser certaines fonctions iTextSharp nécessitant la version 5 ou inférieure du PDF?Définition de la version PDF avec iTextSharp

Je tente de fusionner deux documents PDF version 7 ensemble et il insiste pour qu'ils soient version 5 ou inférieure.

Répondre

2

Comment impair. Les versions PDF sont principalement une suggestion. PDF doivent commencer par quelque chose comme:

%PDF-1.x 

Lorsque le X est 0,1,2, ...

Ceci est juste un indice de l'application lire le PDF. Le seul indice. La plupart des requêtes "J'ai besoin de la version X" que je vois de la part de différents clients sont fausses. Mes codeurs iText savent cela, donc il me semble étrange que iText demande une version différente.

Vous êtes sûr que c'est iText demandant v5?

En tout cas, pour répondre à votre question:

Oui, iText peut changer le numéro de version d'un fichier PDF. Malheureusement, cela ne peut être fait que lors de l'écriture d'un PDF, pas lors de sa lecture. Vous devrez ouvrir le fichier PDF, modifier sa version et le sauvegarder à nouveau.

Vous pourriez probablement tricher. Lire les fichiers PDF dans les tableaux d'octets et pdfBytes[7] = 4;, puis passez ces octets sur un PdfReader.

version 1 de la spécification PDF 1.0 est version 2 est de 1,1 ...

Donc, si vous voulez la version pdf 5, vous devez écrire "1.4", et non "1,5".

Si vous n'êtes pas à l'aise un octet piquer comme ça, vous pouvez analyser l'ensemble PDF, changer la version, puis d'écrire tout à nouveau:

PdfReader reader = new PdfReader(pdfPath); 
PdfStamper stamper = new PdfStamper(reader, outputStream); 
stamper.setPdfVersion(PdfWriter.PDF_VERSION_1_4); 
stamper.close(); 

Vous auriez alors lu à nouveau, et combinez-le comme vous l'avez été.

+0

Tu étais écrire, je ne savais pas que j'utilisais PdfSharp et non iTextSharp. iTextSharp semble beaucoup mieux mais j'ai un problème [ici] (http://stackoverflow.com/questions/6326506/how-do-i-combine-merge-pdfs-with-fillable-form-fields-using-itextsharp – EdenMachine

+0

"Comment étrange. Les versions PDF sont pour la plupart une suggestion. "Cela vaut la peine d'être explicite - je suis venu ici parce que je corrigeais des fichiers PDF avec des polices incorporées. Adobe a refusé de rendre les polices. J'ai mis le numéro de version dans le stamper à 1.4 et il s'est bien passé dans Adobe. On dirait qu'il prend la version littéralement au moins dans ce cas. –

+0

Aussi étrange. Adobe a tendance à travailler dur pour réparer les PDF «cassés», y compris ceux qui ont de mauvais numéros de version. –

5
///for itextSharp 5.4.4 
PdfReader reader = new PdfReader(pdfPath); 
PdfStamper stamper = new PdfStamper(reader, outputStream); 
stamper.Writer.setPdfVersion(PdfWriter.PDF_VERSION_1_4); 
stamper.close(); 
0

Utilisez ceci: writer.PdfVersion = PdfWriter.VERSION_1_3;

Cela a fonctionné pour moi