2009-12-21 29 views
10

Estoy usando iTextSharp para combinar varios archivos pdf en un solo archivo.Cómo aplanar el formulario PDF ya lleno con iTextSharp

Estoy usando el método descrito en los tutoriales oficiales de iTextSharp, specifically here, que combina archivos página por página a través de PdfWriter y PdfImportedPage.

Resulta que algunos de los archivos que necesito para combinar se rellenan Formularios PDF y se pierde este método de combinación de datos de formulario.

He visto varios ejemplos del uso de PdfStamper para rellenar formularios y aplanarlos.

Lo que no puedo encontrar, es una forma de aplanar el PDF Formulario ya completado y, con suerte, combinarlo con los otros archivos sin guardar primero la versión aplanada.

Gracias

+0

trama ... es posible que tenga un problema allí. .. – Jason

+0

esto puede ayudar a otra persona, ya que estaba teniendo un problema donde no se aplanaba el texto libre, en el que iTextSharp tiene una configuración separada para esto: 'stamper.FreeTextFlattening = true;' – jtate

Respuesta

6

Simplemente estableciendo .FormFlattening en PdfStamper no era suficiente ... terminé usando un PdfReader con una matriz de bytes de contenido de archivos que solía sellar/aplanar los datos para obtener la matriz de bytes de eso para poner en un nuevo PdfReader. A continuación es cómo lo hice. funciona bien ahora

private void AppendPdfFile(FileDTO file, PdfContentByte cb, iTextSharp.text.Document printDocument, PdfWriter iwriter) 
    { 
    var reader = new PdfReader(file.FileContents); 

    if (reader.AcroForm != null) 
     reader = new PdfReader(FlattenPdfFormToBytes(reader,file.FileID)); 

    AppendFilePages(reader, printDocument, iwriter, cb); 
    } 

    private byte[] FlattenPdfFormToBytes(PdfReader reader, Guid fileID) 
    { 
    var memStream = new MemoryStream(); 
    var stamper = new PdfStamper(reader, memStream) {FormFlattening = true}; 
    stamper.Close(); 
    return memStream.ToArray(); 
    } 
+0

Gracias esto me ayudó con un problema. – Tigran

8

Al crear los archivos que se fusionen, he cambiado este ajuste: pdfStamper.FormFlattening = true;

Funciona bien.

3

creo que este problema es el mismo con éste: AcroForm values missing after flattening

Sobre la base de la respuesta, esto debe hacer el truco:

pdfStamper.FormFlattening = true; 
pdfStamper.AcroFields.GenerateAppearances = true; 
+0

Este simple cambio de agregar 'pdfStamper.AcroFields.GenerateAppearances = true;' hizo que el mío también funcionara. Mucho más fácil que la otra solución de matriz de bytes. – FirstDivision

Cuestiones relacionadas