Thêm TOC vào PDF từ XML / JSON / tệp?


2

Tôi hiện có tệp PDF mà không có bất kỳ ToC nào (ví dụ: trong Preview của Mac.app, tôi không thể thấy ToC trong thanh bên).

Nhưng tôi có TOC ở định dạng XML, nơi có một tiêu đề và một pagenumber nơi phần đó bắt đầu.

Có cách nào để tôi có thể thêm TOC đó vào tệp PDF của mình theo cách hàng loạt không?

Vì tôi có TOC trong XML, về cơ bản tôi có thể phân tích nó theo bất kỳ cách nào có thể, vì vậy nếu có một dòng lệnh để thêm một mục TOC vào PDF, tôi cũng có thể làm điều đó.

Có ý kiến ​​gì không?


Trình chỉnh sửa PDF của bạn - Adobe Acrobat Pro là gì? Windows hay Linux hay Mac?
harrymc

Câu trả lời:


2

Nó khá đơn giản để thêm dấu trang vào PDF bằng cách sử dụng Bản thảo . Cú pháp là:

gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf pdfmarks

Trong đó pdfmark là một tệp văn bản có nội dung như:

[/Title (Title Page) /Page 1 /OUT pdfmark
[/Title (Table of Contents) /Page 3 /OUT pdfmark
...

Đối với các mức lồng nhau, sử dụng thuộc tính / Count. Ví dụ:

[/Count 3 /Title (Chapter 1) /Page 1 /OUT pdfmark
[/Count -2 /Title (Section 1.1) /Page 2 /OUT pdfmark
[/Title (Section 1.1.1) /Page 3 /OUT pdfmark
[/Title (Section 1.1.2) /Page 4 /OUT pdfmark
[/Count -1 /Title (Section 1.2) /Page 5 /OUT pdfmark
[/Title (Section 1.2.1) /Page 6 /OUT pdfmark
[/Title (Section 1.3) /Page 7 /OUT pdfmark

Đối số / Count đưa ra số lượng dấu trang phụ ngay lập tức. Dấu hiệu của đối số đặt hiển thị mặc định (âm cho đóng, dương cho mở).

Nếu các dấu trang không đủ dưới dạng Mục lục, sẽ tồn tại các ứng dụng tạo Mục lục từ dấu trang. Tôi đã không sử dụng bất kỳ như vậy, nhưng googling bật lên ví dụ: Mapsoft TOCBuilder, một plugin Adobe Acrobat thương mại có bản dùng thử.

Nguồn:
Dấu trang PDF với Ghostscript
Cách tạo dấu trang qua ghostscript / pdfwrite / pdfmark


Điều đó hoạt động hoàn hảo trong Ubuntu! Cảm ơn rất nhiều: D Mặc dù phải mất một thời gian trên 1200 trang (chạy Ubuntu trong máy ảo). Nhưng vẫn dễ dàng hơn nhiều so với việc thêm thủ công 130 dấu trang :-D
Trolley

0

Nếu bạn chỉ có một tệp, đây là cách bạn có thể làm như vậy bằng cách sử dụng pdfTeX. Nó có thể hơi phức tạp nhưng tôi biết TeX (và không biết các công cụ khác) và nó thực hiện mẹo khi tôi cần.

Đây là một tệp mẫu sẽ sao chép toàn bộ nội dung của bạn input.pdf và thêm Mục lục chứa liên kết đến một số số trang.

% Set page size... this is A4, change to whatever you need
\pdfpagewidth=210mm
\pdfpageheight=297mm

% TeX always adds unwanted 1in left and top margins, this counteracts them.
\advance\hoffset by -1in
\advance\voffset by -1in

% This macro inserts a verbatim copy of one page from the source into the output.
\def\copypage#1{%
  \pdfximage page #1 {input.pdf}%
  \shipout\vbox{\pdfrefximage\pdflastximage}}

% Determine the total number of pages
\pdfximage{input.pdf}
\newcount\total
\total=\pdflastximagepages

% Define an iterator to copy the whole file
\def\copy{%
  \copypage{\the\pageno} % Copy the page given by current page number
  \advance\pageno by 1 % Increase page number by one
  \ifnum\pageno > \total
    \let\copy\relax % After the last page has been copied, stop
  \fi
  \copy} % This repeats the cycle until \copy is redefined to \relax at the very end

\copy % Run the cycle

% Here you add your outline
\pdfoutline goto page 1 {/Fit} count 2 {Chapter}
  \pdfoutline goto page 1 {/Fit} count -3 {Section}
    \pdfoutline goto page 1 {/Fit} {Item}
    \pdfoutline goto page 2 {/Fit} {Item}
    \pdfoutline goto page 3 {/Fit} {Item}
  \pdfoutline goto page 4 {/Fit} count 1 {Section}
    \pdfoutline goto page 4 {/Fit} count -2 {Subection}
      \pdfoutline goto page 1 {/Fit} {Item}
      \pdfoutline goto page 5 {/Fit} {Item}

\end

Cách sử dụng \pdfoutline chỉ huy:

  • Luôn cung cấp số trang, ngay cả đối với các tiêu đề phần có thể không được sử dụng trực tiếp
  • Thay thế "Chương", "Mục", v.v. bằng các tiêu đề bạn muốn
  • Cung cấp số đếm cho các mục có chứa các mục con (lưu ý rằng không có lệnh "đóng" để TeX cần biết trước số đếm)
  • CHỈNH SỬA cảm ơn harrymc: Làm cho số đếm âm thành nếu bạn muốn một mục có các mục con được đóng theo mặc định, để nó dương nếu bạn muốn nó mở

Sau khi chuẩn bị tệp đầu vào này, hãy lưu nó dưới dạng, giả sử, output.texvà xử lý nó bằng cách sử dụng pdftex. Voilà, sản phẩm này output.pdf với ToC mới sáng bóng của bạn.


Tôi có thể thêm tiêu đề vào ToC bằng lệnh pdfoutline không?
Trolley

Và tôi dường như không thể tìm ra cách cài đặt và chạy PDFTex trên cả Windows và Mac? Giúp đánh giá cao! :-)
Trolley

@Elias Xin lỗi, tôi quên đề cập. Các tiêu đề được hiển thị trong bảng của bạn là mục cuối cùng giữa {...} trong mỗi \pdfoutline hàng. Tôi chỉ chọn "Chương", "Mục" vv tùy ý cho ví dụ của mình để minh họa ý nghĩa của các mục tương ứng. Cũng thế, pdftex là một phần của bất kỳ cài đặt TeX nào, ví dụ, MikTeX cho Windows. Nhưng nếu bạn chưa bao giờ làm việc với TeX tôi chắc chắn sẽ có giải pháp tốt hơn cho bạn.
The Vee

Tôi chưa từng sử dụng TeX trước đây, vì vậy tôi đã hy vọng sẽ có một cách đơn giản hơn. Tôi đã thử làm điều đó với các dấu trang trong Acrobat Pro, nhưng có khoảng 130 dấu trang, vì vậy sẽ mất rất nhiều thời gian.
Trolley
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.