0

PDFファイルから表形式のデータを抽出したいのですが、Itextを使用していますが、dablurデータを検索する方法がわかりません(分割)テーブルコンテンツの検索に関連するアイデアを教えてください.Hereデータは順不同の形式です,そのデータをわかりやすい形式に変換する方法。前もって感謝します。

4

1 に答える 1

0

ページ コンテンツを取得し、MoveTo(x,y) ( tm) およびテキスト ( tj) コマンドをスキャンします。tfまた、単語を太字にするなどのフォント変更 ( ) によって、テキストが分割される場合があります。

        final String NUM = "\\d*\\.?\\d+";
        Pattern tj = Pattern.compile(".*\\((.*)\\) Tj");
        Pattern tm = Pattern.compile("\\d+ \\d+ \\d+ \\d+ ("
            + NUM + ") (" + NUM + ") Tm");
        Pattern tf = Pattern.compile("/(F\\d+) (" + NUM + ") Tf");

        byte[] pageContent = pdfReader.getPageContent(pageno);
        String pc = new String(pageContent, "Cp1252");
        try (BufferedReader pin = new BufferedReader(new StringReader(pc))) {
            for (;;) {
                String cline = pin.readLine();
                if (cline == null) {
                    break;
                }
                Matcher m = tm.matcher(cline);
                if (m.matches()) {

小数部分 (.123) が常に存在するとはDouble.parseDouble(m.group(1))限らないことに注意してください。


これがどのように機能するか

上記の「ページ内容」には、ページを作成する PostScript コマンドの行があります。フォントを選択し、(x, y) に移動し、いくつかの文字を印刷します。

余談ですが、コマンドはいわゆる後置記法100.0 200.0 Tm(move-to x: 100, y: 200) です。最初にパラメータ、次にコマンド。すべてを処理するスタックマシンの場合。したがって、「PostScript」という名前です。

同じ y を持つ 2 つの move-to コマンドを取得した場合は、同じ行にいます。別のフォントが選択されているか、たとえば単語が太字にされているか、表に表示されています。

PDF の分析が興味深いプログラミング作業になることは容易に想像できます。もう羨ましいです。


Java7:

    try (BufferedReader pin = new BufferedReader(new StringReader(pc))) {
        ...
    }

Java 6:

    BufferedReader pin = new BufferedReader(new StringReader(pc));
    try {
        ...
    } finally {
       pin.close();
    }
于 2013-09-02T13:40:37.080 に答える