pdftk を使用して複数の pdf をマージするとうまくいきます。ただし、マージされた各pdfのブックマークを作成する簡単な方法はありますか?
これに関するpdftkドキュメントには何も表示されないため、pdftkでは可能ではないと思います。
マージされたすべてのファイルは 1 ページになるので、後でブックマークを追加できる他のユーティリティがあるかどうか疑問に思っていますか?
または、個々のPDFごとにブックマークを指定しながらマージできる別のLinuxベースのPDFユーティリティ。
pdftk を使用して複数の pdf をマージするとうまくいきます。ただし、マージされた各pdfのブックマークを作成する簡単な方法はありますか?
これに関するpdftkドキュメントには何も表示されないため、pdftkでは可能ではないと思います。
マージされたすべてのファイルは 1 ページになるので、後でブックマークを追加できる他のユーティリティがあるかどうか疑問に思っていますか?
または、個々のPDFごとにブックマークを指定しながらマージできる別のLinuxベースのPDFユーティリティ。
複数の PDF を Ghostscript でマージすることもできます。このルートの大きな利点は、ソリューションを簡単にスクリプト化できることと、実際のプログラミング作業を必要としないことです。
gswin32c.exe ^
-dBATCH -dNOPAUSE ^
-sDEVICE=pdfwrite ^
-sOutputFile=merged.pdf ^
[...more Ghostscript options as needed...] ^
input1.pdf input2.pdf input3.pdf [....]
Ghostscript を使用すると、目次を追加できるpdfmarkステートメントを渡すことができ、結果の PDF に追加されるソース ファイルごとにブックマークを追加できます。例えば:
gswin32c.exe ^
-dBATCH -dNOPAUSE ^
-sDEVICE=pdfwrite ^
-sOutputFile=merged.pdf ^
[...more Ghostscript options as needed...] ^
file-with-pdfmarks-to-generate-a-ToC.ps ^
-f input1.pdf input2.pdf input3.pdf [....]
また
gswin32c.exe ^
-dBATCH -dNOPAUSE ^
-sDEVICE=pdfwrite ^
-sOutputFile=merged.pdf ^
[...more Ghostscript options as needed...] ^
file-with-pdfmarks-to-generate-a-ToC.ps ^
-f input1.pdf ^
input2.pdf ^
input3.pdf [....]
pdfmark トピックの紹介については、Thomas Merz のPDFmark Primerも参照してください。
編集:
の例を挙げたかったのですfile-with-pdfmarks-to-generate-a-ToC.ps
が、どういうわけか忘れてしまいました。ここにあります:
[/Page 1 /View [/XYZ null null null] /Title (File 1) /OUT pdfmark
[/Page 2 /View [/XYZ null null null] /Title (File 2) /OUT pdfmark
[/Page 3 /View [/XYZ null null null] /Title (File 3) /OUT pdfmark
[/Page 4 /View [/XYZ null null null] /Title (File 4) /OUT pdfmark
これにより、最初の 4 つのファイル == 最初の 4 ページの ToC が作成されます (マージされた出力 PDF の成分ファイルがそれぞれ 1 ページであることを保証するため)。
[/XYZ null null null]
部分は、リンクをたどったときに、ページのビューポートとズーム レベルが現在のものから変更されないようにします。([/XYZ 222 111 2]
任意の例が必要な場合は、これを行うと言うことができます。)/Title (some string you want)
は、ToC に含まれるテキストを決定します。また、これらのパラメーターを Ghostscript コマンドラインに直接追加することもできます。
gswin32c.exe ^
-o merged.pdf ^
[...more Ghostscript options as needed...] ^
-c "[/Page 1 /View [/XYZ null null null] /Title (File 1) /OUT pdfmark" ^
-c "[/Page 2 /View [/XYZ null null null] /Title (File 2) /OUT pdfmark" ^
-c "[/Page 3 /View [/XYZ null null null] /Title (File 3) /OUT pdfmark" ^
-c "[/Page 4 /View [/XYZ null null null] /Title (File 4) /OUT pdfmark" ^
-f input1.pdf ^
input2.pdf ^
input3.pdf ^
input4.pdf [....]
編集:
ところで、Ghostscriptを使用して 2 つの PDF ファイルを 1 つにマージする場合、Ghostscriptはブックマークを保持しますが、pdftk.exe は保持しません。私の最初の編集のコマンドによって生成されたものを使用しましょう(同じファイルの2つのコピーを効果的に連結します):
gswin32c ^
-sDEVICE=pdfwrite ^
-o doublemerged.pdf ^
merged.pdf ^
merged.pdf
ファイルdoublemerged.pdf
には 2*4 = 8 個のブックマークがあります。
その理由は、既存のブックマークがリンク ターゲットを絶対ページ番号でアドレス指定していたためです。これを回避するには (マージされたファイルでブックマークが機能するように)、リンク先の名前を指定してリンク ターゲットを指すブックマークを生成する必要があります (これらがマージされるドキュメント全体で一意であることを確認してください)。
(このアプローチは Linux でも機能します。gswin32c の代わりに gs を使用するだけです。)
上記のコマンド ラインは[...more Ghostscript options as needed...]
、その他のオプションのプレース ホルダーとして使用します。
他のオプションを使用しない場合、Ghostscript はさまざまなパラメーターに組み込みのデフォルトを適用します。ただし、これにより、好みに合わない結果が得られる場合があります。Ghostscript は入力に基づいて完全に新しい PDF を生成するため、元のオブジェクトの一部が変更される可能性があります。これは、色空間と画像圧縮レベルに当てはまります。
元の埋め込み画像を変更せずにパラメータを適用する方法は、SuperUser: "Use Ghostscript, but tell it to not reprocess images" で確認できます。
既に述べたようにこれを行うには他の方法があることは知っていますが、pdftk を使用すると、pdftk 関数 dump_data を使用してマージされた pdf にブックマークを追加し、pdf 内の既存の情報の .info ファイルを作成できます。次に、ブックマークごとに次の 4 行を追加することで、ブックマーク情報を .info ファイルに追加できます。
BookmarkBegin
BookmarkTitle: name
BookmarkLevel: level
BookmarkPageNumber: page number
次に、update_info 呼び出しを使用して、マージされた pdf ブックマークを .info ファイルに書き込んだもので更新します。誰かが興味を持っている場合は、オートホットキーでこれを行う簡単な関数をいくつか書きました。http://www.autohotkey.com/board/topic/98985-scripts-to-merge-pdfs-and-add-bookmarks-with-pdftk/を参照してください。
JPdfBookmarksを使用できる PDF ブックマークを追加または編集します。これは、私がしばらくの間使用してきた優れたマルチ OS フリー ソフトウェア ツールであり、優れた結果が得られています。ただし、ブックマークのみを処理するため、ページをマージまたは並べ替えるには別のツールが必要になります. pdftk に加えて、PDF Split and Merge (良いアプリですが、奇妙な UI で、私の経験ではブックマークが台無しになります)、PDF-Shuffler (問題なく動作しているように見えますが、一部のファイルを処理中にフリーズすることがあります)、またはPdfMod (特定のページにPDFを追加する方法を理解することはできませんでしたが、ブックマークの再配置、マージ、および処理を処理する可能性が最も高いです)。
いくつかのリンクを提供できなくて申し訳ありません。初心者のため、システムでは 2 つのハイパーリンクしか追加できません。
https://stackoverflow.com/a/17781138/547578でこの回答を参照してください。Sejdaというものを使いました。できます。ブックマークを完全に組み合わせます。ありがとう@blablatros。
@pipitasの良い答えは、ブックマークの問題を完全に解決するものではなく、UNIXのディスカッションに関連する質問がありますhttps://unix.stackexchange.com/questions/17065/add-and-edit-bookmarks-to-pdf/ 31070、私が提案するところ
それでもこれらのUNIXスクリプトを使い続ける場合は、
pdftk
gs
が受け入れられます。gs
して、それらをpdfmarksとマージしますスクリプトはすでに存在します。PDFをブックマークでPDFTKとマージpdf-merge.py
するからご覧ください。
残念ながら、それを行う簡単な方法はありません。pdftk が直接構築されているライブラリを使用して、iText または iTextSharp を使用する Java または .NET プログラムを作成して、ワンページャーをマージし、ブックマークを作成することができます。iText ルートに行きたい場合は、オンラインまたは iText ブック (iText の作成者によって書かれた) で多くの例を入手できます。
...または、何が機能していないか教えてください。私がお手伝いします。
以下は、pdfmerger ( https://stackoverflow.com/a/30524828/3915004 ) による回答へのコメントを意図したものです。
スクリプトpdfmergerをありがとう!質問が Linux とマークされていることは知っていますが、Mac OS X 用のスクリプトを一般化するには、2 つのことが必要です。
gs
とpdfinfo
(たとえば に含まれていますpoppler
)最初に取得してインストールしbrew
(グーグルで、curl/ruby-magicコマンドを介してインストールされます^^)、次に単純に:
brew install ghostscript
brew install poppler
アドオン: 章のタイトルを含むテキストファイルを読む:
スクリプトを拡張するには。このワークフローは主に、編集者の Web サイトからチャプター ダウンロードとして入手できる書籍に使用します。章名を含むテキストファイルは簡単に生成できます。コードへの次のアドオンは、結合する PDF ごとに 1 行を含むテキストファイル「chapters.txt」を追加で読み取ります。(注、pdfの数に対応する行数のチェックは実装していません。)
次の行を置き換えて、スクリプトを拡張するだけです。
p = subprocess.Popen('ls *pdf', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
c = subprocess.Popen('less chapters.txt', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
pdfdateien = []
kombinationen = []
chapternames = []
for line in c.stdout.readlines():
# c contains all chapter-titles
chapternames.append(line)
for line in p.stdout.readlines():
と
for index, kombination in enumerate(kombinationen):
# dateiname = kombination[0][0:len(kombination[0])-5]
#
# Hier noch dateiname evtl. verwursten
# z. B.
# lesezeichen = dateiname[0:1]+" "+dateiname[6:8]+"/"+dateiname[1:5]
# lesezeichen = dateiname
lesezeichen=chapternames[index][:-1]
anz_seiten = kombination[1][16:len(kombination[1])-1]