pdfbox 2.0.2(https://github.com/apache/pdfbox/tree/2.0.2)ユーザーの初心者として、すべてのストロークライン(たとえば、テーブルの列と行の境界線)を取得したいと思います。ページ(PDPage)の次のクラスを作成しました。 package org.apache.pdfbox.rendering;pdfbox 2.0.2> PageDrawer.processPageメソッドを呼び出すと例外が発生する
import java.awt.geom.GeneralPath;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import org.apache.commons.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.rendering.PageDrawer;
import org.apache.pdfbox.rendering.PageDrawerParameters;
public class LineCatcher {
private PageDrawer pageDrawer;
private PDDocument document;
private PDFRenderer pdfRenderer;
private PDPage page;
public LineCatcher(URI pdfSrcURI) throws IllegalArgumentException,
MalformedURLException, IOException {
this.document = PDDocument.load(IOUtils.toByteArray(pdfSrcURI));
this.pdfRenderer = new PDFRenderer(this.document);
}
public GeneralPath getLinePath(int pageIndex) throws IOException {
this.page = this.document.getPage(pageIndex);
PageDrawerParameters parameters = new PageDrawerParameters (this.pdfRenderer, this.page);
this.pageDrawer = new PageDrawer(parameters);
this.pageDrawer.processPage(this.page); //catches exception here
return this.pageDrawer.getLinePath();
}
}
私の理解によると、ページの行のパスを取得するためには、ページが最初に処理しなければならないので、私は、私は「ここにキャッチ例外」とマークされた行、のメソッドprocessPageと呼ばれます。予期せず上記の行にNullPointer Excpetions intを捕まえました。例外情報は次のとおりです。
java.lang.NullPointerException
at org.apache.pdfbox.rendering.PageDrawer.fillPath(PageDrawer.java:599)
at org.apache.pdfbox.contentstream.operator.graphics.FillNonZeroRule.process(FillNonZeroRule.java:36)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:815)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:472)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:446)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:149)
at org.apache.pdfbox.rendering.LineCatcher.getLinePath(LineCatcher.java:33)
at org.apache.pdfbox.rendering.TestLineCatcher.testGetLinePath(TestLineCatcher.java:21)
ロジックのアドバイスやコードのデバッグに役立つ人はいますか?事前に感謝します
間違っています... getLinePath()は、ページの処理中に現在の行のパスを取得します。各塗りつぶし/ストローク後に空にリセットされます。あなたの考えではなく、ページのすべての行を含むパスです。私は何か良いものを考え出すことができるかどうかを見ます。ストローク演算子をキャッチします。 –