pdfboxを使用してPDF内のテーブルからデータを抽出するにはどうすればよいですか?PDFBox:テーブルからのデータの抽出
このプロセスでは、PDContentStreamクラスとPageStripperクラスを使用して、テキストとコンテンツのインデックスを見つけることができます。テーブル内の行のインデックスを見つける必要があります。
私は、テキストの開始インデックスを抽出するための次のことを試してみました:
public class Tables {
public static void main(String args[]) throws IOException{
BufferedWriter wr;
File input = new File("test.pdf");
File output = new File("SampleText.txt");
PDDocument pd=new PDDocument();
pd=PDDocument.load(input);
// PDFTextStripper pds=new PDFTextStripper();
// String text=pds.getText(pd);
PDFTextStripper stripper = new PDFTextStripper()
{
@Override
protected void startPage(PDPage page) throws IOException
{
startOfLine = true;
super.startPage(page);
}
@Override
protected void writeLineSeparator() throws IOException
{
startOfLine = true;
super.writeLineSeparator();
}
@Override
protected void writeString(String text, List<TextPosition> textPositions) throws IOException
{
if (startOfLine)
{
TextPosition firstProsition = textPositions.get(0);
writeString(String.format("[%s]", firstProsition.getYDirAdj()));
startOfLine = false;
}
super.writeString(text, textPositions);
}
boolean startOfLine = true;
};
wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output)));
stripper.writeText(pd, wr);
if (pd != null) {
pd.close();
}
// I use close() to flush the stream.
wr.close();
}
}
あなたの2番目のオプションに行くと、私は既に私が付いたコードに示されているように、テキストの座標を見つけました。テーブルの行の座標を抽出することは、私が必要とするものです。 – Maalini
もしあなたがグラフィックライン(とテキストの行ではない)を意味するならば、私はあなたがpdfをイメージに変換してイメージピクセルをピクセル単位でtravesringすることによってそうしなければならないと思います。 tabulaには、指定されたイメージ内で見つかった各線分の座標を返すメソッドがあります。 – ANKIT
プロジェクトには同じフォーマットのpdfsがありますか?サンプルファイルをアップロードすることができれば、より良いアイデアが得られます。 – ANKIT