2010-11-09 53 views
20

Có cách nào để tôi có thể chỉnh sửa PDF từ Java không?
Tôi có một tài liệu PDF có chứa phần giữ chỗ cho văn bản mà tôi cần được thay thế bằng Java, nhưng tất cả các thư viện mà tôi đã tạo PDF từ đầu và chức năng chỉnh sửa nhỏ.
Tôi có thể chỉnh sửa PDF hay không?Chỉnh sửa văn bản PDF bằng Java

Trả lời

11

Bạn có thể làm điều đó với iText. Tôi đã thử nghiệm nó với mã sau đây. Nó thêm một đoạn văn bản và một vòng tròn màu đỏ trên mỗi trang của một tệp PDF hiện có.

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

Ví dụ này phủ lên trang với văn bản mới của bạn và hình elip. Có cách nào để sửa đổi văn bản tại chỗ không? Có cách nào để tìm kiếm, nói mã thông báo và * thay thế * bằng văn bản của tôi thay vì che phủ nó không? – Vihung

+0

Điểm tốt, tôi cũng muốn biết điều đó! – bluish

+0

lỗi ....... Tín hiệu tử vong 7 (SIGBUS), mã 2, lỗi addr 0xa290903f trong tid 25590 (om.pdfgenerator) –

3

Hãy xem iTextthis sample code

+0

Thật không may ví dụ này đòi hỏi các lĩnh vực trong PDF hiện có. Xem câu trả lời của tôi. – bluish

-1

Bạn có thể làm biên tập hữu hạn iText nhưng PDF là một định dạng tập tin cuối, do đó bạn không thể làm bất cứ điều gì quá phức tạp. Tôi đã viết một bài báo giải thích một số giới hạn: PDF format and style information.

Các vấn đề liên quan