PDFページ内の段落やテキストブロックを構成する矩形を取得したい。pdfパラグラフまたはテキストブロックの位置
私はiTextSharpとDataLogicsを見てきました。
私ができることは、個々の言葉を見つけることです。しかし、単語が同じテキストブロックにあるかどうかを知る必要があります。
私はC#を使用しています。誰にもアイデアはありますか?
PDFページ内の段落やテキストブロックを構成する矩形を取得したい。pdfパラグラフまたはテキストブロックの位置
私はiTextSharpとDataLogicsを見てきました。
私ができることは、個々の言葉を見つけることです。しかし、単語が同じテキストブロックにあるかどうかを知る必要があります。
私はC#を使用しています。誰にもアイデアはありますか?
これはJavaで書かれていますが、pdfからコンテンツを取得し、そのコンテンツ内のインデックスから値を取得することを扱っています。
私はよく分かりませんが、C#で同様のことを達成できるかもしれません。コンテンツを取得して印刷します。
//create a new reader from the source file
PdfReader reader = new PdfReader(fileName);
//create the file array
RandomAccessFileOrArray raf = new RandomAccessFileOrArray(fileName);
//get the content of the pdf reader (which is the source file)
byte bContent [] = reader.getPageContent(1,raf);
ByteArrayOutputStream bs = new ByteArrayOutputStream();
bs.write(bContent);
//create a string of the contents of the page in order to get the data needed
String contentOf1099 = bs.toString();
if(debug)
{
System.err.println("contentOf1099 = "+contentOf1099);
}
//get the value based off an index
String value = contentOf1099.substring(contentOf1099.indexOf((",contentOf1099.indexOf("155 664 Td"))+1,contentOf1099.indexOf("(",contentOf1099.indexOf("155 664 Td "))+12);
構造化されたPDFがない限り、これは存在しません。 PDFは場所にdrawStringコマンドのセットです。段落記号やスペースマーカーはありません。あなたはテキストの位置からこれを解決する必要があります。
ページ上の各単語のすべての座標を抽出し、それらをまとめてグループ化してみます。
まず、行にグループ化することです。これを行うには、すべての単語をすべての順序単語でループし、y0がもう一方のy1よりも小さいものをグループ化し、y1がもう一方のy0よりも大きいものをグループ化します。これらは行です。
次に、行を段落にグループ化する必要があります。行の先頭のx位置は、他方のページ幅の1/25以内でなければなりません。そして、線のy座標間の距離は、線の高さより小さくなければなりません。これらは段落です。
birdlips、その最後の行は本当に私にトラブルを与えています。あなたは私のためにそれを壊すことができますか? – Dave
確かに、私がやっていることは、「次の12文字を155 664 Tdのインデックスで入手してください」ということです。 PDF上のすべてには、ソートの定義されたアドレスを持つ「場所」があります。 pdfの内容を印刷すると、矩形内にあるものを特定することができます。 – northpole