xpdf: Permission Error

PDF文書によっては、xpdf の pdftotext で以下のようなエラーが出る

Permission Error: Copying of text from this document is not allowed.

PDF文書のセキュリティの一つとして「内容のコピーと抽出」という項目が許可しないになっていると、テキスト抽出できないようだ。

https://uchiuchiyama.hatenadiary.org/entry/20060509/1147184615

上記のリンクに対応策がある。xpdf-4.02 でも同じ対応ができるようだ。が、ソースからコンパイルするのをそのままインストールするのはしたくないので、portsから修正することにする。

対応策の中身は、要するに pdftotext.cc の以下のブロックをコメントアウトする。

  // check for copy permission
//  if (!doc->okToCopy()) {
//    error(errNotAllowed, -1,
//        "Copying of text from this document is not allowed.");
//    exitCode = 3;
//    goto err2;
//  }

久しぶりに ports をいじるので忘れてしまっていたが、ソースの一部を修正する場合、

# make BATCH=yes extract patch

*1、work ディレクトリ以下のソースを修正し、

# make BATCH=yes install

でインストールする必要がある。

xpdfの場合、japanese/xpdf は graphics/xpdf に依存していることに注意して、まずは graphics/xpdf をインストールするために必要なものをインストールする。

# cd /usr/ports/graphics/xpdf
# make BATCH=yes

で、buildするために必要なものが全てインストールされる。この場合はcmakeなど。ここで、graphics/xpdf でいったん make clean する。

pkg でインストールされた xpdf を、

# pkg delete -y xpdf-4.02,1

で、削除した後、

# cd /usr/ports/japanese/xpdf
# make BATCH=yes extract patch
# cd /usr/ports/graphics/xpdf
# make BATCH=yes extract patch

で、graphics/xpdf の work 以下のソースを修正し、

# cd /usr/ports/japanese/xpdf
# make BATCH=yes install

で、エラーが出ない修正版をインストールできた。

ports の使い方は man 7 ports https://www.freebsd.org/cgi/man.cgi?ports(7) を確認すること。

正直お行儀が悪いとは思うが、お行儀を良くしすぎると仕事にならないので、これで対応する。

*1:make BATCH=yes patch で十分だが、何をしてるのか忘れないために extract patch としている。