2012-02-17 20 views
7

tôi có thể chèn một hình ảnh bên trong một tài liệu pdf hiện có, nhưng vấn đề là,Làm thế nào để định vị chính xác hình ảnh bên trong trang PDF hiện có bằng cách sử dụng PDFBox?

  1. Những hình ảnh được đặt ở dưới cùng của trang, và
  2. Trang trở thành màu trắng với nội dung mới được bổ sung hiển thị trên đó.

Tôi đang sử dụng mã sau đây.

List<PDPage> pages = pdDoc.getDocumentCatalog().getAllPages(); 

if(pages.size()>0){ 

PDJpeg img = new PDJpeg(pdDoc, in); 
PDPageContentStream stream = new PDPageContentStream(pdDoc, pages.get(0)); 
stream.drawImage(img, 60, 60); 
stream.close(); 
} 

Tôi muốn hình ảnh trên trang đầu tiên.

Trả lời

8

PDFBox là thư viện cấp thấp để làm việc với tệp PDF. Bạn chịu trách nhiệm về các tính năng cấp cao hơn. Vì vậy, trong ví dụ này, bạn đang đặt hình ảnh của mình tại (60, 60) bắt đầu từ góc dưới bên trái của tài liệu của bạn. Đó là những gì stream.drawImage(img, 60, 60); làm.

Nếu bạn muốn di chuyển hình ảnh của mình ở nơi khác, bạn phải tính toán và cung cấp vị trí mong muốn (có thể từ kích thước thu được với page.findCropBox() hoặc nhập vị trí của bạn theo cách thủ công).

Đối với văn bản, các phần tử tài liệu PDF được định vị hoàn toàn. Không có khả năng cấp thấp cho văn bản đang chảy lại, nổi hoặc tương tự. Nếu bạn viết văn bản ở phía trên hình ảnh của mình, nó sẽ là sẽ là được viết ở đầu hình ảnh của bạn.

Cuối cùng, để trang của bạn trở thành màu trắng - bạn đang tạo luồng nội dung mới và do đó ghi đè lên luồng nội dung gốc cho trang của bạn. Bạn phải là gắn thêm vào luồng đã có sẵn.

Dòng có liên quan là:

PDPageContentStream stream = new PDPageContentStream(pdDoc, pages.get(0)); 

gì bạn cần làm là gọi nó là như thế này:

PDPageContentStream stream = new PDPageContentStream(pdDoc, pages.get(0), true, true); 

Các true đầu tiên là liệu append nội dung, và trận chung kết true (không quan trọng ở đây) là liệu để nén luồng.

Hãy xem AddImageToPDF mẫu có sẵn từ PDFBox sources.

1

Hãy thử điều này

doc = PDDocument.load(inputFileName); 
PDXObjectImage ximage = null; 
ximage = new PDJpeg(doc, new FileInputStream(image) 
PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get(0); 
PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, true); 
contentStream.drawImage(ximage, 425, 675); 
contentStream.close(); 

này in các hình ảnh trong trang đầu tiên. Nếu bạn muốn in trong tất cả các trang chỉ cần đặt trên một vòng lặp for với một điều kiện của số lượng trang như giới hạn. Điều này làm việc tốt cho tôi!

0

link cung cấp cho bạn chi tiết về Lớp inImageLocations. PrintImageLocations này sẽ cung cấp cho bạn tọa độ x và y của hình ảnh.

Cách sử dụng: java org.apache.pdfbox.examples.util.PrintImageLocations input-pdf

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