2010-11-09 6 views
20

Gibt es eine Möglichkeit, ein PDF aus Java zu bearbeiten?
Ich habe ein PDF-Dokument, das Platzhalter für Text enthält, die ich mit Java ersetzen muss, aber alle Bibliotheken, die ich sah, erstellt PDF von Grund auf und kleine Bearbeitungsfunktionen.
Gibt es sowieso ich kann ein PDF bearbeiten oder ist das unmöglich?Bearbeiten von PDF-Text mit Java

Antwort

11

Sie können es mit iText tun. Ich habe es mit folgendem Code getestet. Es fügt einen Textblock und einen roten Kreis über jeder Seite einer vorhandenen PDF-Datei hinzu.

/* 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

Dieses Beispiel überlagert die Seite mit Ihrem neuen Text und der Ellipse. Gibt es eine Möglichkeit, den Text an Ort und Stelle zu ändern? Gibt es eine Möglichkeit, nach einem Token zu suchen und es durch meinen Text zu ersetzen, anstatt es zu überlagern? – Vihung

+0

Guter Punkt, ich möchte es auch wissen! – bluish

+0

Fehler ....... Fatales Signal 7 (SIGBUS), Code 2, Fehler addr 0xa290903f in tid 25590 (om.pdfgenerator) –

3

Werfen Sie einen Blick auf iText und this sample code

+0

dieses Beispiel erfordert Felder in der bestehenden PDF Leider. Siehe meine Antwort. – bluish

-1

Sie können mit Itext eingeschränkte Bearbeitung tun, aber PDF ist ein End-Dateiformat, so dass Sie nichts zu komplex machen können. Ich habe einen Artikel geschrieben, der einige der Einschränkungen erklärt: PDF format and style information.