2010-11-09 24 views
20

¿Hay alguna manera de editar un PDF desde Java?
Tengo un documento PDF que contiene marcadores de posición para el texto que necesito reemplazar con Java, pero todas las bibliotecas que vi crearon PDF desde cero y pequeñas funciones de edición.
¿De todos modos puedo editar un PDF o es imposible?Edición de texto en PDF con Java

Respuesta

11

Puede hacerlo con iText. Lo probé con el siguiente código. Agrega un trozo de texto y un círculo rojo sobre cada página de un PDF existente.

/* requires itextpdf-5.1.2.jar or similar */ 
import java.io.*; 
import com.itextpdf.text.DocumentException; 
import com.itextpdf.text.pdf.*; 

public class AddContentToPDF { 

    public static void main(String[] args) throws IOException, DocumentException { 

     /* example inspired from "iText in action" (2006), chapter 2 */ 

     PdfReader reader = new PdfReader("C:/temp/Bubi.pdf"); // input PDF 
     PdfStamper stamper = new PdfStamper(reader, 
      new FileOutputStream("C:/temp/Bubi_modified.pdf")); // output PDF 
     BaseFont bf = BaseFont.createFont(
       BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); // set font 

     //loop on pages (1-based) 
     for (int i=1; i<=reader.getNumberOfPages(); i++){ 

      // get object for writing over the existing content; 
      // you can also use getUnderContent for writing in the bottom layer 
      PdfContentByte over = stamper.getOverContent(i); 

      // write text 
      over.beginText(); 
      over.setFontAndSize(bf, 10); // set font and size 
      over.setTextMatrix(107, 740); // set x,y position (0,0 is at the bottom left) 
      over.showText("I can write at page " + i); // set text 
      over.endText(); 

      // draw a red circle 
      over.setRGBColorStroke(0xFF, 0x00, 0x00); 
      over.setLineWidth(5f); 
      over.ellipse(250, 450, 350, 550); 
      over.stroke(); 
     } 

     stamper.close(); 

    } 
} 
+3

Este ejemplo se superpone a la página con su nuevo texto y la elipse. ¿Hay alguna manera de modificar el texto en su lugar? ¿Hay alguna manera de buscar, digamos un token, y * reemplazar * con mi texto en lugar de superponerlo? – Vihung

+0

Buen punto, ¡me gustaría saberlo también! – bluish

+0

error ....... Señal fatal 7 (SIGBUS), código 2, código de error 0xa290903f en tid 25590 (om.pdfgenerator) –

3

Tome un vistazo a iText y this sample code

+0

Desafortunadamente este ejemplo requiere campos en el PDF existente. Ver mi respuesta – bluish

-1

Puede hacer la edición limitada con itext pero PDF es un formato de archivo final por lo que no se puede hacer nada demasiado complejo. Escribí un artículo explicando algunas de las limitaciones: PDF format and style information.