私はこれで髪に手を入れています。
JavaでPDFファイルを1行ずつ読み込んで、後で内容を処理したいので、Apache PDFBoxを使用しています。ただし、次の問題があります。別の Java プログラム (メイン メソッド内) で以下のコードを使用しましたが、そこでは正常に動作します。しかし、Tomcat サーバー アプレットで Quartz スケジューラと組み合わせて使用すると、問題が発生し、その理由がわかりません。作業中の別のテスト プログラムから以下の行をコピーして自分のより大きなプロジェクトに貼り付けたので、まったく同じコードになることに注意してください。しかし、私のより大きなプロジェクトでは、ブレークポイントを設定した String x1 = .. 行までプログラムが実行されます。ステップオーバーしようとすると、エラー、コンソール出力などは表示されず、catch 句を最後に直接ジャンプします。catch 句にブレークポイントを設定したところ、
これは私のコードです:
PDFTextStripper stripper;
PDDocument doc = null;
try{
doc = PDDocument.load("00026614_F_21Jan2013-18Feb2013.pdf");
stripper = new PDFTextStripper();
String x1= stripper.getText(doc); //SOMETHING GOES WRONG HERE
//break up the file content returned as a string into individual lines
List<String> ans= Arrays.asList(x1.split("\r\n"));//THIS IS NEVER REACHED
}
catch(Exception e){
e.printStackTrace(); //THIS IS NEVER REACHED EITHER
}
finally{
if(doc!=null) //IT GOES FROM STRING X1 STRAIGHT TO HERE.
doc.close();
}
私が得る唯一の出力は、プログラムの他の部分のために初期化する必要があったLOG4Jからのものであり、出力の最後の数行は
34212 [DefaultQuartzScheduler_Worker-1] DEBUG org.apache.pdfbox.util.PDFStreamEngine - processing substream token: PDFOperator{Tm}
34212 [DefaultQuartzScheduler_Worker-1] DEBUG org.apache.pdfbox.util.PDFStreamEngine - processing substream token: COSName{ttf0}
34212 [DefaultQuartzScheduler_Worker-1] DEBUG org.apache.pdfbox.util.PDFStreamEngine - processing substream token: COSInt{10}
34212 [DefaultQuartzScheduler_Worker-1] DEBUG org.apache.pdfbox.util.PDFStreamEngine - processing substream token: PDFOperator{Tf}
今、私を悩ませているのは、その呼び出しで何が問題になっているのかをどうやって把握できるのでしょうか? 私が言ったように、コードを別のJavaプログラムに入れれば問題なく動作します..しかし、エラー出力を取得したり、例外をキャッチしたりすることはできません(例外をキャッチしようとしていますが、IOExceptionを与える必要があります。それも試しました)。
これをどうするか知っている方がいらっしゃることを願っています。敬具