pdftkなどのツールを使用してPDFファイルのページを再配置するときにブックマークを保持する方法


12

pdftkpdfファイルのページをブックマーク/アウトラインで再配置するために使用していますが、その後、出力ファイルは元のブックマークを失いました。

私のコマンドはpdftk in.pdf cat 1-22 43 23-42 44-end output out.pdfです。

ページの再配置中にブックマークを保持する方法を知りたいのですが?

回答:


9

これが実用的なソリューションです。ただし、ニーズに合わせて調整する必要があります。

私の例では、PDFの最初のページを削除してから、正しい場所を指すようにブックマークを更新する必要がありました。

  1. in.pdfからページ1を削除します。

    pdftk A=in.pdf cat A2-end output temp.pdf
    
  2. in.pdfからin.infoファイルを作成します。

    pdftk in.pdf dump_data > in.info
    
  3. 私はページを削除するので、in.infoを修正する必要があります。

    したがって、ブックマークを正しいページに導くには、BookmarkPageNumberを1つ減らす必要があります。

    PHPコード:

    $file = "in.info";
    $data = file_get_contents($file);
    
    foreach (explode("\n", $data) as $row) {
        $tmp = explode(": ", $row);
    
        if ($tmp[0] == "BookmarkPageNumber") {
            if ($tmp[1] != "1") $tmp[1]--;
            echo $tmp[0].": ".$tmp[1]."\n";
        } else {
            echo $row."\n";
        }
    }
    
  4. 最終的なout.pdfを作成します。

    pdftk temp.pdf update_info in2.info output out.pdf
    

pdftk 2.01を使用して、debianでの動作テスト済み


1
私のためにも働いた。たぶん、スクリプトの実行方法に関するヒントを追加するか(方法はわかりません...)、Pythonスクリプトを追加できます#!/usr/bin/python output = open('res.info','w') with open('temp.info','r') as f: for line in f: if line.startswith("BookmarkPageNumber"): output.write( "BookmarkPageNumber: "+ str(int(line.split()[1])+1)+"\n") else: output.write(line)
。– Vser

6

あなたがする必要がありpdftk in.pdf dump_data > in.info、それからupdate_info生成するときにパラメータを追加しますout.pdf。からの引用man pdftk

update_info <info data filename | - | PROMPT>

単一のPDFの情報ディクショナリに保存されているメタデータを変更して、入力データファイルに一致させます。入力データファイルは、dump_dataからの出力と同じ構文を使用します。非ASCII文字は、XML数値エンティティとしてエンコードする必要があります。PDFのXMPストリームに保存されているメタデータがある場合、これは変更しません。例えば:

             pdftk in.pdf update_info in.info output out.pdf

  update_info_utf8 <info data filename | - | PROMPT>

入力がUTF-8としてエンコードされることを除いて、update_infoと同じです。


ありがとう!このファイル「in.info」を取得するにはどうすればよいですか?
ティム

@Tim:編集。私はそれが今明確であることを望みます。もちろん、仕事のdump_data_utf8ために使用する必要がありますupdate_info_utf8
フィロマス

3
ありがとう!それでも動作しません。私のコマンドは3つのステップで構成されています:pdftk in.pdf dump_data > in.infopdftk in.pdf cat 1-22 43 23-42 44-end output out.pdfおよびpdftk out.pdf update_info in.info output out1.pdfにはまだブックマークがありませんout1.pdf。`
ティム

@Timこれが実際に機能しないことを確認できます。万が一これに対する解決策を見つけましたか?
グルタニメート

1
私の大雑把なGoogleトロールは、ブックマークがまったく処理されないことを示唆しています。
フォンブランド

5

マニュアルページを注意して読んで、それはupdate_infoどんな形式のデータでもdump_data生成すると言います。おそらく、ページのシャッフルに従って調整する必要があります。鳴らないことは不可能、しかし自動そうではありません。

PDFtkサイトは上記のみヒットおよび/作成結果として、ブックマークの編集を提供します。GoogleがPDFのブックマークと再編成の問題について知っているのは、上記の操作と、彼らが提供する驚異の叙情的な説明と、このスレッドのヒットです;-)。

だからできないようです。コメントはいくつかの可能性を示唆していますが、試してもうまくいきませんでした。


1

「pdfmod」は、既存のPDFから1つまたはモードのページを削除できるシンプルなグラフィカルツールです。数回クリックするだけです。また、pdfのコンテンツ情報とクロスリンクを保持します。

「pdftk」は正常に機能し、長期間使用していましたが、pdfから1つまたは2つのページを削除した後にコンテンツを失うことがありました。「pdftk」と「pdfmod」でテストされているこれらのpdfファイルは、openofficeから作成されます。

https://apps.fedoraproject.org/packages/pdfmod


pdfmodpdftkメタデータを保存することよりも優れているようです。exiftool出力のdiffはpdfmod、メタデータを保持することを示していpdftkますが、dump_data_utf8&を使用しても、すべてを保持するわけではありませんupdate_info_utf8
user1338062
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.