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
# 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 としている。