ぼんやりDTP

DTPに関係したりしなかったりするぼんやりとした話をなんとなく。

PDF に GUI 以外で添付ファイルを付ける

PDF に GUI 以外で添付ファイルを付けたい。

AcrobatJavaScript で 付ける

例:現在開いているPDFの1ページめに下記のパス上にある「sample.mp3」、「sample.txt」ファイルを添付する。 添付位置は左上から縦横30ポイントずつ右下、2つ目はさらに15ポイントずつ右下にする。

ファイル名 パス
sample.mp3 /Macintosh HD/Users/hoge/Documents/sample.mp3
sample.txt /Macintosh HD/Users/hoge/Documents/sample.txt
var file_1 = "/Macintosh HD/Users/hoge/Documents/sample.mp3";
var file_2 = "/Macintosh HD/Users/hoge/Documents/sample.txt";

var pageNumber = 0;

var aRect = this.getPageBox("Media", pageNumber);
var height = aRect[1] - aRect[3];
var firstPosition_h = 30;
var firstPosition_v = 30;
var difValue = 15;
var position_h_1 = height - firstPosition_h;
var position_v_1 = firstPosition_v;
var position_h_2 = position_h_1 - difValue;
var position_v_2 = position_v_1 + difValue;

var annot_1 = this.addAnnot({
    page: pageNumber,
    type: "FileAttachment",
    point: [position_v_1,position_h_1],
    author: "",
    contents: "",
    cAttachmentPath: file_1
    });

var annot_2 = this.addAnnot({
    page: pageNumber,
    type: "FileAttachment",
    point: [position_v_2,position_h_2],
    author: "",
    contents: "",
    cAttachmentPath: file_2
    });
  • PDFの座標の原点はページの左下なので、ページの上からY座標の位置を決める場合はページの高さを取得する必要がある。
  • addAnnot の「cAttachmentPath」プロパティーAcrobat XI 以降で使用できる。Acrobat X以下ではJavaScriptだけで注釈の添付ファイルを付けるのは無理な模様。
  • 添付ファイル注釈の主なプロパティー
    • attachIcon:Paperclip, PushPin, Graph, Tag
    • author:作成者
    • contents:説明(のはずだが、試した限りでは何故か設定できなかった)
    • name:名前
    • subject:タイトル
  • 注釈の種類には「音声ファイル」の添付もあるが、現状ではスクリプトで音声ファイルを添付するメソッドやプロパティーは無い模様。 Developing Acrobat Applications Using JavaScript (PDF) によれば、以下のように「sound and file attachment annotations」には録音やファイルと注釈を関連付けるメソッドは無い旨が記載されている。

    All annotations can be constructed in this way, in the case of sound and file attachment annotations, there is no JavaScript method for associating a recording with a sound annotation or a file with a file attachment.

ffmpeg でMP3ファイルをAIFFファイルにするコマンド

テスト用AIFFファイルの作成用。

例)カレントディレクトリのMP3ファイルをAIFFファイルに変換する。

find . *.mp3 -type f -exec ffmpeg -i {} {}.aiff -y \;

参考ページ

  1. Developing Acrobat Applications Using JavaScript (PDF)
  2. JavaScript for Acrobat API Reference (PDF)
  3. Acrobat DC SDK Documentation (attachment)
  4. Acrobat DC SDK Documentation (Annotation types)
  5. Acrobat DC SDK Documentation (Annotation types)
  6. Adobe Acrobat XI + JavaScript例文辞典
  7. Javascript to attach a file into a PDF (JavaScript)
  8. Importing and exporting PDF file attachments with Acrobat JavaScript and Acrobat 9
  9. Fileattachment of annotation (JavaScript)

コマンドラインツールで付ける

例:「in.pdf」の1ページめに「sample.mp3」、「sample.txt」ファイルを添付したPDFを「out.pdf」に出力する。

pdftk

pdftk in.pdf attach_files sample.mp3 sample.txt to_page 1 output out.pdf
  • 最初のページは 1 を、最終ページは end を指定。
  • 添付ファイルはファイル名を連続して並べることで、複数指定が可能。
  • 複数ファイルが同じページに添付された場合、ページ上少しずらして添付される。
  • 複数ページに同時に添付するのはできない模様。

cpdf

cpdf -attach-file sample.mp3 -attach-file sample.txt -to-page 1 in.pdf -o out.pdf
  • -attach-fileを複数用いることで複数ファイルを添付できる。
  • -to-pageは一度だけ指定できる。
  • 複数ファイルが同じページに添付された場合、ページ上同じ位置に重ねて添付される。
  • 複数ページに同時に添付するのはできない模様。

参考ページ

  1. PDFtk Server Manual
  2. Coherent PDF Command Line Tools Community Release
  3. https://www.coherentpdf.com/cpdfmanual/