Thêm và chỉnh sửa dấu trang thành pdf


22

Bằng cách lấy siêu dữ liệu từ một số tệp pdf có dấu trang pdftk, tôi quan sát định dạng của dấu trang trong siêu dữ liệu pdf. Vì vậy, tôi đoán rằng với pdftk, có thể thêm và chỉnh sửa dấu trang của tệp pdf.

Đây là ba bước mà tôi làm theo:

  1. Trước tiên tôi lấy siêu dữ liệu (bao gồm cả dấu trang nếu có) từ tệp pdf thành tệp văn bản pdftk in.pdf dump_data > in.info.
  2. Tiếp theo tôi thêm một số dấu trang vào tệp văn bản siêu dữ liệu in.info, thay đổi nó từ

    InfoKey: Creator
    InfoValue: PScript5.dll Version 5.2
    InfoKey: Title
    InfoValue: SSReader Print.
    InfoKey: Producer
    InfoValue: Acrobat Distiller 7.0 (Windows)
    InfoKey: Author
    InfoValue: Administrator
    InfoKey: ModDate
    InfoValue: D:20050605073244+08'00'
    InfoKey: CreationDate
    InfoValue: D:20050605073244+08'00'
    PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
    PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
    NumberOfPages: 400
    PageLabelNewIndex: 1
    PageLabelStart: 1
    PageLabelNumStyle: DecimalArabicNumerals
    

    đến

    InfoKey: Creator
    InfoValue: PScript5.dll Version 5.2
    InfoKey: Title
    InfoValue: SSReader Print.
    InfoKey: Producer
    InfoValue: Acrobat Distiller 7.0 (Windows)
    InfoKey: Author
    InfoValue: Administrator
    InfoKey: ModDate
    InfoValue: D:20050605073244+08'00'
    InfoKey: CreationDate
    InfoValue: D:20050605073244+08'00'
    PdfID0: 591a87c91dc76881fdf2ccf3811e72a5
    PdfID1: 6b6ab11de8824e438e4f5eb1d85ec72
    NumberOfPages: 400
    BookmarkBegin
    BookmarkTitle: Front cover
    BookmarkLevel: 1
    BookmarkPageNumber: 1
    BookmarkBegin
    BookmarkTitle: About the Author
    BookmarkLevel: 1
    BookmarkPageNumber: 5
    BookmarkBegin
    BookmarkTitle: Title page
    BookmarkLevel: 1
    BookmarkPageNumber: 6
    BookmarkBegin
    BookmarkTitle: Copyright page
    BookmarkLevel: 1
    BookmarkPageNumber: 7
    BookmarkBegin
    BookmarkTitle: Foreword
    BookmarkLevel: 1
    PageLabelNewIndex: 1
    PageLabelStart: 1
    PageLabelNumStyle: DecimalArabicNumerals
    
  3. Sau đó, tôi cố gắng đưa siêu dữ liệu đã chỉnh sửa trở lại tệp pdf pdftk in.pdf update_info in.info output out.pdf.

Nhưng khi tôi mở tệp pdf mới out.pdftrong evince hoặc adobe reader, không có dấu trang nào trong tệp pdf mới.

Nếu tôi nhận được các siêu dữ liệu từ tập tin pdf mới out.pdfbằng pdftk out.pdf dump_data > out.info, sẽ không có bookmark trong out.info. Có vẻ như các dấu trang không được thêm thành công.

Tôi đã tự hỏi nếu có một số sai lầm? Làm cách nào để thêm và chỉnh sửa dấu trang của tệp pdf, không nhất thiết phải bằng pdftk?


1
Công cụ đồ họa nhỏ này làm việc cho tôi. (PDF Mod 0.9.1) apps.fedoraproject.org/packages/pdfmod
Abhijit

Câu trả lời:


12

Tôi trông giống như từ phiên bản 1.45 (2012-12-06), pdftk không cho phép sửa đổi dấu trang thông qua lệnh update_info:

Bây giờ bạn có thể thêm hoặc thay đổi dấu trang của PDF bằng update_info.

thông qua: http://www.pdflabs.com/docs/pdftk-version-history/


3
Điều này làm việc rất tốt cho tôi. Bạn nên thêm rằng trong tệp đầu vào phía trên các BookmarkBeginthẻ trước khi mỗi mục nhập dấu trang bị thiếu.
danielp

4

jPDFtweak (Java, vì vậy chạy trên Unix / Linux) có thể thay đổi dấu trang, nhưng tôi không biết liệu bạn có thể viết bất cứ điều gì với nó không.

Để viết kịch bản, tôi đoán tùy chọn Unix / Linux gốc duy nhất của bạn sẽ là pdflatex với gói pdfpages. Nhưng đó là một đường cong học tập nếu bạn chưa phải là người dùng LaTeX.

EDIT: Trên thực tế có thể có thể với ghostscript: Xem tại đây hoặc tại đây hoặc tại đây


4

Nếu bạn vẫn gắn bó với các tập lệnh unix đó, thì

  1. trích xuất dữ liệu đánh dấu từ pdftk
  2. viết thêm một tập lệnh để chuyển đổi dữ liệu dấu trang bị đổ sang định dạng pdfmark, lệnh ghostscript gsđược chấp nhận.
  3. sử dụng gstập lệnh để hợp nhất chúng lại với nhau

Hãy xem http://blog.tremily.us/posts/PDF_bookmark_with_Ghostscript/ tập lệnh pdf-merge.pythực hiện chính xác những gì bạn (hoặc tôi) muốn.

pdf-merge.py --output=merged.pdf input1.pdf input2.pdf

Một số cải tiến nhỏ có thể được thực hiện trong kịch bản của anh ấy

  1. xử lý unicode
  2. tập tin đánh dấu đầu ra, vì vậy mọi người cũng có thể điều chỉnh nó

Dù sao, nó nên làm việc


Một upvote! Cảm ơn! Tôi đang mong chờ kịch bản của bạn!
Tim

Có vẻ như liên kết không hoạt động. Bạn có thể sửa nó không?
Cá giám sát

4

pdftk chắc chắn là công cụ phù hợp (với cú pháp đúng):

BookmarkBegin
BookmarkTitle: Chapter 1
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Paragraph 1.1
BookmarkLevel: 2
BookmarkPageNumber: 1

2

Caleb,

Theo tôi hiểu, các dấu trang theo thông số PDF không thể được đưa vào thông qua một công cụ chẩn đoán như thế nào pdftk. Cập nhật siêu dữ liệu để tham khảo các chương và neo đích không tồn tại chắc chắn sẽ không hoạt động, thậm chí nó có thể làm cho tệp PDF của bạn không nhất quán hoặc không thể mở được.

Tôi đã kết thúc việc sử dụng các thư viện java + iText để thực hiện những gì bạn đề xuất theo hướng dẫn này , nhưng chúng tôi đang xử lý hàng trăm pdf mỗi ngày, vì vậy nó cần được tự động hóa. Nếu bạn đang làm một lần, Adobe Acrobat sẽ có thể làm điều này.


2

Để tóm tắt tất cả các câu trả lời tốt này:

dự án bmconverter trên GitHub có thể chuyển đổi các định dạng dấu trang PDF khác nhau. Nó có thể chuyển đổi đầu ra pdftk sang định dạng jpdftweak, mặc dù nếu bạn sẽ sử dụng jpdftweak thì bạn không cần phải chuyển đổi đầu ra pdftk sang csv, vì bạn có thể thực hiện tất cả công việc từ bên trong jpdftweak.

Thật không may, pdfmark không được dự án hỗ trợ, nhưng may mắn thay, ai đó đã đăng tập lệnh trong các vấn đề bmconverter có thể chuyển đổi đầu ra pdftk thành pdfmark. Vì vậy, tùy chọn lô ghostscript là một tùy chọn


2

pdftkđịnh dạng dấu trang là một chút tẻ nhạt để viết. Thay vào đó tôi tạo ra kịch bản của riêng tôi sử dụng bash, sed, pdftkpython3. Hãy xem thử tại repo này: https://github.com/SiddharthPant/booky

Vì vậy, bây giờ tôi có thể tạo một tệp văn bản ( bkmrks.txt) như thế này chỉ mất 5 phút để viết ngay cả đối với bản pdf 1000 trang.

{
  Title1, 1
  Title2, 2
  {
    Subtitle1, 3
    Subtitle2, 4
    {
      SubSubtitle1, 5
      ...
    }
  }
}

và sau đó sử dụng kịch bản của tôi

./booky.sh pdf_file.pdf bkmrks.txt

điều này tự động tạo ra một pdf ( pdf_file_new.pdf) có dấu trang của tôi trong đó.


1

Chỉ cần thêm BookmarkBegintrước mỗi mục đánh dấu, như trong

BookmarkBegin
BookmarkTitle: Front cover
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
    ⋮

0

Chuyển hướng mà bạn đã sử dụng trong bước 1 sẽ khiến update_info không hoạt động chính xác. Bạn cần chỉ định tệp đầu ra cho pdftk thay thế:

pdftk in.pdf dump_data output in.info

Xem câu trả lời này từ câu hỏi tương tự: /programming//a/30308964/3158933

Các tệp mà tôi đã tạo bằng chuyển hướng có kích thước tệp lớn hơn một chút và khiến pdftk đưa ra thông báo "Cảnh báo: trường hợp không mong muốn 1 trong LoadDataFile (); tiếp tục" khi chạy lệnh update_info.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.