Estoy usando iTextSharp para combinar un número de archivos pdf en un único archivo.

Estoy utilizando el método descrito en iTextSharp oficial tutoriales, específicamente aquí, que combina los archivos de página por página a través de PdfWriter y PdfImportedPage.

Resulta que algunos de los archivos que necesito para combinar llenado de los Formularios PDF y el uso de este método de fusión de datos del formulario se pierde.

Yo he visto varios ejemplos del uso de PdfStamper llenar los formularios y aplánalas.

Lo que no puedo encontrar, es una manera de aplanar ya llenó el Formulario en PDF y esperemos que combinar con el resto de los archivos sin guardar los cambios aplanado versión primera.

Gracias

la trama… usted puede tener un problema que hay…
esto puede ayudar a alguien, como yo estaba teniendo un problema en donde la libertad de texto no estaba siendo allanada, en el que iTextSharp tiene un ambiente separado para esto: stamper.FreeTextFlattening = true;

OriginalEl autor andryuha | 2009-12-21

4 Comentarios

  1. 10

    Cuando la creación de los archivos para ser fusionados, he cambiado esta configuración:
    pdfStamper.FormFlattening = true;

    De Las Grandes Obras.

    OriginalEl autor Feliciano Montoya

  2. 8

    Sólo la configuración .FormFlattening en PdfStamper no era suficiente…terminé con un PdfReader con matriz de bytes del contenido de los archivos que he utilizado para estampar/acoplar los datos para obtener la matriz de bytes de que poner en un nuevo PdfReader. A continuación es cómo lo hice yo. funciona muy 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();
      }
    Gracias esto me ayudó con un problema similar.

    OriginalEl autor andryuha

  3. 5

    Creo que este problema es el mismo con este: AcroForm valores después de la falta de aplanamiento

    Basadas en la respuesta, este debe hacer el truco:

    pdfStamper.FormFlattening = true;
    pdfStamper.AcroFields.GenerateAppearances = true;
    Este simple cambio de la adición de pdfStamper.AcroFields.GenerateAppearances = true; tengo la mía de trabajo así. Mucho más fácil que el otro byte de la matriz solución.

    OriginalEl autor Yusup

  4. 0

    Esta es la misma respuesta que la aceptación de uno, pero sin ningún tipo de variables sin usar:

    private byte[] GetUnEditablePdf(byte[] fileContents)
    {
        byte[] newFileContents = null;
    
        var reader = new PdfReader(fileContents);
    
        if (reader.AcroForm != null)
            newFileContents = FlattenPdfFormToBytes(reader);
    
        else newFileContents = fileContents;
    
        return newFileContents;
    }
    
    private byte[] FlattenPdfFormToBytes(PdfReader reader)
    {
        var memStream = new MemoryStream();
        var stamper = new PdfStamper(reader, memStream) { FormFlattening = true };
        stamper.Close();
        return memStream.ToArray();
    }

    OriginalEl autor Gauravsa

Dejar respuesta

Please enter your comment!
Please enter your name here