2008-10-06 40 views
6

Tôi muốn viết một số mã (java) cần có tài liệu PDF và tạo điểm đến được đặt tên từ tất cả dấu trang. Tôi nghĩ rằng iText API là cách dễ nhất để làm điều này, nhưng tôi chưa bao giờ sử dụng API trước đây.Tạo điểm đến cho tất cả dấu trang trong tệp PDF bằng iText API

Bạn sẽ viết loại mã này bằng iText API như thế nào? IText có thể thực hiện phân tích cú pháp cần thiết để thao tác các tệp PDF hiện tại không? Các loại thao tác tôi đang nghĩ đến việc là:

  • Open,
  • Tìm bookmark,
  • Tạo điểm đến,
  • Lưu,
  • Close.

Hoặc có API khác tốt hơn không?

Trả lời

3

Tôi sẽ cảnh báo bạn trước rằng bạn có thể thất vọng với điều này. iText không thực sự có ý định được sử dụng như một trình phân tích cú pháp. Nó thực sự là nhiều hơn cho việc tạo ra hoàn toàn mới tài liệu PDF, nhưng bạn có thể đánh mất nó.

Để bắt đầu, sử dụng iText, bạn sẽ không thể sửa đổi tài liệu PDF hiện có. Tuy nhiên, điều bạn có thể là tạo bản sao với các tính năng bổ sung mà bạn muốn. (Nếu ai đó biết rõ hơn, hãy cho tôi biết, điều này khiến tôi phát điên.)

Điều bạn muốn làm là tạo đối tượng PdfReader từ luồng đầu vào trên tệp nguồn của bạn. Sau đó, tạo đối tượng PdfCopy (chỉ là một PdfWriter mở rộng giúp việc nhận dữ liệu từ một nguồn hiện có thuận tiện hơn) cho điểm đến của bạn.

Theo như tôi có thể biết, các dấu trang không thể lấy được từ iText cả. Có thể cần thư viện khác. Tôi nghĩ rằng jpedal có thể có khả năng trích xuất chúng (nó có thể lấy chúng như một tài liệu XML, mà sau đó bạn có thể phân tích để có được những gì bạn muốn.) Tuy nhiên bạn nhận được chúng, sau đó bạn có thể thêm chúng vào một java.util. Danh sách và đặt danh sách đó làm đường viền trên PDFCopy. Các dấu trang chỉ là HashMaps với một bộ khóa cụ thể. Tôi không chắc chắn tất cả các giá trị là gì, nhưng chúng bao gồm "Tiêu đề", "Hành động" (có vẻ là nơi bạn chỉ định rằng đây là điểm đến được đặt tên, mặc dù tôi không biết giá trị đó sẽ là bao nhiêu) và "URI" (được sử dụng nếu đây là liên kết bên ngoài - tôi nghi ngờ rằng điều này sẽ chỉ định tên của đích được đặt tên mà bạn đang liên kết đến). Một lần nữa, các chi tiết cụ thể rất khó tìm.

Sau đó lặp qua các trang của trình đọc, nhập từng trang vào PdfCopy. this page có thể giúp bạn.

Rất tiếc, tôi không hữu ích cho bạn. Chúc may mắn.

P.S. Nếu bất kỳ ai khác biết về một công cụ tốt hơn hoặc là (L) GPL hoặc BSD được cấp phép, tôi rất muốn nghe về nó.

+0

Cảm ơn, điều đó đã cho tôi đủ để tiếp tục. –

5

Theo dõi: Tôi đã gửi một bản vá cho iText cách đây vài tháng (nó đã được chấp nhận và là một phần của HEAD) để thêm khả năng phân tích cú pháp văn bản vào iText. PdfBox (được đề cập bên dưới) có (có?) Vấn đề với việc đọc các tệp PDF mới hơn sử dụng các luồng xref thay vì định dạng bảng xref cũ hơn.


Một thư viện mà rất giỏi phân tích các file PDF hiện có là PdfBox Nó cũng có thể được sử dụng để sửa đổi một PDF hiện có. FYI - đây là trình phân tích cú pháp văn bản mà Lucene sử dụng.

Tôi cũng sẽ đề cập rằng iText không có khả năng phân tích cú pháp tệp PDF, việc phân tích cú pháp nội dung văn bản trên mỗi trang là không lớn. Nếu bạn đang xem xét việc truy cập các cấu trúc cấp cao hơn của PDF (Từ điển, v.v.) được sử dụng để lưu trữ dấu trang, v.v ... và bạn không ngại bị bẩn một chút khi đọc thông số PDF, bạn có thể hoàn toàn làm những gì bạn đang hỏi về (chúng tôi làm điều đó khá một chút chính mình).

PDF Spec lớn, nhưng có thể đọc được hầu hết, và bạn không phải lo lắng về phần lớn (được hướng đến nội dung trang thực tế và hiển thị) nếu tất cả những gì bạn đang cố gắng làm là trích xuất dấu trang .

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