Javaを使用してpdfをtxtに変換しようとしています。Apache PDFBox を試してみましたが、何らかの奇妙な理由で、ドキュメント全体が変換されません。このため、Runtime.getRuntime().exec() 呼び出しを実行して pdftotext を使用することにしました。問題は、私の端末では pdftotext が問題なく動作する一方で、exec() 呼び出しでエラー コード 1 (場合によっては 99) が返されることです。呼び出しは次のとおりです。
pdftotext "/home/www-data/CANEFS_TEST/Hello/ciao.pdf" "/tmp/ciao.pdf.txt"
これがコードです
private static File callPDF2Text(File input,File output){
assert input.exists();
assert Utils.getExtension(input).equalsIgnoreCase("pdf");
assert Utils.getExtension(output).equalsIgnoreCase("txt") : output.getAbsoluteFile().toString();
Process p=null;
try {
System.out.println(String.format(
PDF2TXT_COMMAND,
input.getAbsolutePath(),
output.getAbsolutePath()));
p=Runtime.getRuntime().exec(String.format(
PDF2TXT_COMMAND,
input.getAbsolutePath(),
output.getAbsolutePath()));
p.waitFor();
if (p.exitValue()!=0){
throw new RuntimeException("exit value for pdftotext is "+p.exitValue());
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return output;
}
PDF2TXT_COMMAND 文字列の定義は次のとおりです。
public static final String PDFTXT_COMMAND="pdftotext \"%s\" \"%s\"";
通常、この種のエラーは権限の設定が原因であることを知っています。したがって、Hello フォルダーに対する ls -l コマンドの出力は次のとおりです。
ls -l /home/www-data/CANEFS_TEST/Hello/
total 136
-rwxrwxr-- 1 www-data www-data 136041 mar 27 16:31 ciao.pdf
また、プロセスを作成するユーザーは koldar であり、グループ www-data 自体に属していることにも注意してください。お時間をいただき、ありがとうございました。