2010-11-09 15 views
20

Esiste un modo per modificare un PDF da Java?
Ho un documento PDF che contiene segnaposto per il testo che ho bisogno di essere sostituito usando Java, ma tutte le librerie che ho visto hanno creato PDF da zero e piccole funzionalità di modifica.
Esiste comunque la possibilità di modificare un PDF o è impossibile?Modifica del testo PDF utilizzando Java

risposta

11

È possibile farlo con iText. L'ho provato con il seguente codice. Aggiunge una porzione di testo e un cerchio rosso su ogni pagina di un PDF esistente.

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

Questo esempio si sovrappone alla pagina con il nuovo testo e l'ellisse. C'è un modo per modificare il testo in atto? C'è un modo per cercare, diciamo un token, e * sostituirlo * con il mio testo piuttosto che sovrapporlo? – Vihung

+0

Buon punto, mi piacerebbe saperlo anche io! – bluish

+0

errore ....... Segnale fatale 7 (SIGBUS), codice 2, errore addr 0xa290903f in tid 25590 (om.pdfgenerator) –

3

Date un'occhiata a iText e this sample code

+0

Purtroppo questo esempio richiede campi nel PDF esistente. Vedi la mia risposta. – bluish

-1

Si può fare l'editing limitata con iText ma PDF è un formato di file fine così non si può fare qualcosa di troppo complesso. Ho scritto un articolo che spiega alcuni dei limiti: PDF format and style information.