部品に基づいたPDF文書の分割

部品に基づいたPDF文書の分割

これはXYの問題、最後にコンテキストの詳細)

章のタイトルに基づいてPDFをプログラムで分割する方法はありますか?それは

このPDFから2つのPDFを生成します。 1つは「XY」部分まですべてを含み、2番目は他のすべてを含みます。

ページ番号に基づいてPDFを分割する方法を学ぶしかし、より多くの「意味」を使用できますか?

(簡単に言えば、元の質問は次のとおりです。NSFは、ある文書に参照リストを持ち、別の文書に説明をしたく、LaTeX / pandocを使用して文書を生成しているので、すべての内容を含めたいです。する方が簡単で、リンクは重要ではありません。)

ベストアンサー1

pdftk私はこの種の作業に使用するのが好きです。

Latexを使用して基本文書を作成すると、次のようになります。

\documentclass{report}
\usepackage{blindtext} % For lorem ipsum text
\usepackage{hyperref} % Turns chapters/sections into bookmarks

\begin{document}

\chapter{First Chapter}
\Blindtext[10]

\section{Subsection of chapter 1}
\Blindtext[3]

\chapter{Second Chapter}
\Blindtext[20]

\chapter{Third Chapter}
\Blindtext

\pdfbookmark{Example bookmark}{A}
\Blindtext

\end{document}

を実行すると、pdflatex各章の自動ブックマーク、セクション1.1の詳細なブックマーク、その後の手動ブックマーク、および多くのlorem ipsumフレーズを含む13ページのPDFが生成されます。

これでPDFファイルがあるので、それを使用してpdftkその洞察を得ることができます。資料が多すぎて興味深い部分だけ切りました。

$ pdftk sample.pdf dump_data
InfoBegin
...
NumberOfPages: 13
BookmarkBegin
BookmarkTitle: First Chapter
BookmarkLevel: 1
BookmarkPageNumber: 1
BookmarkBegin
BookmarkTitle: Subsection of chapter 1
BookmarkLevel: 2
BookmarkPageNumber: 3
BookmarkBegin
BookmarkTitle: Second Chapter
BookmarkLevel: 1
BookmarkPageNumber: 5
BookmarkBegin
BookmarkTitle: Third Chapter
BookmarkLevel: 1
BookmarkPageNumber: 11
BookmarkBegin
BookmarkTitle: Example bookmark
BookmarkLevel: 1
BookmarkPageNumber: 12
PageMediaBegin
...

ラベルをクリックすると、ブックマークがBookmarkBeginあることがわかります。それを見ると、BookmarkTitle: X私たちはパート1に達したことがわかりますXBookmarkPageNumber: 各ブックマークには関連するブックマークがあります。これを分割に使用できます。BookmarkLevel分割したいレベル(章、セクション、サブセクション)をフィルタリングするためにも使用できます。


チャプター1とチャプター2に分割したいとしましょう。 4ページ前に分割を追加する必要があるというデータを見ると、次のようになります。

BookmarkTitle: Second Chapter
BookmarkPageNumber: 5

これでページ番号があるので、それをpdftk分割に使用できます。これには実際にcat特定のページでの使用が含まれます。

pdftk sample.pdf cat 1-4 output sample-1.pdf
pdftk sample.pdf cat 5-end output sample-2.pdf

より一般的なアプローチをとり、.pdfというpdfスクリプトで書いてみましょうsample.pdf。各高度なブックマークでPDFを分割してみましょう(該当部分のフィルタリング)。

まず、ブックマークタグをより簡単に解析できる形式に変換し、何かを書くことができるようにします。awk(別名で保存しますparser.awk

#!/bin/awk -f
BEGIN {
    FS=": "
    OFS=";"
}
/^BookmarkBegin/ {
  if (this_level > 1) { # Only handle high-level sections
    next
  }
  if (this_page == "" || this_title == ""){
    next
  }
  if (last_page != "" && last_title != "") {
    print last_title, last_page, this_page-1
  }
  last_title=this_title
  last_page=this_page
  this_title=this_page=this_level=""
}
/^BookmarkTitle:/ {
    this_title=$2
}
/^BookmarkPageNumber:/ {
    this_page=$2
}
/^BookmarkLevel:/ {
    this_level=$2
}
END {
  print last_title, last_page, this_page-1
  print this_title, this_page, "end"
}

ここでは、ヘッダーにaが含まれていないと仮定するため、;これを出力区切り文字として使用します。スクリプトは以下を出力します。

  1. 各部の名称
  2. このセクションのホームページ
  3. このセクションの最後のページです。
$ pdftk sample.pdf dump_data | awk -f parser.awk
First Chapter;1;4
Second Chapter;5;10
Third Chapter;11;11
Example bookmark;12;end

それでは、各行を繰り返して、pdftkbashでこれを呼び出してみましょう。

#!/bin/bash                                                                     
                                                                                
sequence=1                                                                      
                                                                                
pdftk sample.pdf dump_data | awk -f parser.awk | \                              
while IFS=";" \                                                                 
read -r title start end                                                         
do                                                                              
  pdftk sample.pdf cat "$start"-"$end" output sample-$sequence-"$title".pdf      
  sequence=$((sequence+1))                                                      
done                                                                                     

これにより、以下が残ります。

$ ls *.pdf
'sample-1-First Chapter.pdf'
'sample-2-Second Chapter.pdf'
'sample-3-Third Chapter.pdf'
'sample-4-Example bookmark.pdf'
sample.pdf

これに対する1つの制限は、同じページに複数のブックマークがある場合、または非常に少ないブックマークがある場合は少し混乱する可能性があることです。

おすすめ記事