0

PDFファイルを読み取るためにiTextプログラムがPDFBoxプログラムに置き換えられました。

            public static void main(String[] args) {  

                // TODO Auto-generated method stub 
                PDDocument     pd;  
                BufferedWriter wr;  

                try {  
                    File input = new File("C:\\test\\ExtractTextFromThis.pdf");    // The PDF file from where you would like to extract  
                    File output = new File("C:\\test\\OutPut.txt");    // The text file where you are going to store the extracted data  

//ドキュメントを読み込みます。

                    pd = PDDocument.load(input);  // load document
                    pd.setAllSecurityToBeRemoved(true);  

//言語をチェックしようとしています

                        System.out.println(pd.getDocumentCatalog().getLanguage());
                        PDFTextStripper stripper = new PDFTextStripper("UTF-8");  // Initializing PDFTextStripper Object with UTF-8 encoding.

       //          PDFTextStripperByArea stripper = new PDFTextStripperByArea("UTF-16");
                    // Please provide example for this. In attached document,I want to extract text from rectangle. There are 30 boxes.

                    wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output)));  
                    stripper.writeText(pd, wr);
                    System.out.println(stripper.getText(pd));  
                    String text = stripper.getText(pd);  
                    char[] cArr = text.toCharArray();  

// Here is the problem. It's not printing characters of Kannada language within its UTF Range. 
//printing chracters -- their integer value --  their Hexadecimal value  
                    for (int i = 1; i < 130; i++) {  
                        System.out.println(cArr[i] + "\t" + (int) cArr[i] + "\t" + Integer.toHexString(cArr[i]));  
                    }  

                    if (pd != null) {  
                        pd.close();  
                    }  

                    wr.close();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
4

1 に答える 1

1

iTextの欠点と思われるのは、実際には、ページコンテンツを抽出するためのアルゴリズムの誤解です。

コンテンツストリーム内の文字列は実際にはUnicodeでエンコードされていると想定しています。それらはそうである必要はありません、そしてしばしば特に非ASCII文字はそうではありません。翻訳情報(もしあれば!)はフォント辞書に含まれています。

さらに、すべてのテキスト文字列がコンテンツストリームに直接含まれていると想定します。これは真実である必要はありません。コンテンツストリームは他のオブジェクトを参照でき、そのオブジェクトにはコードで見つからないテキストが含まれている可能性があります。

また、ページのコンテンツエントリが単一の間接ストリームであると想定します。実際には、それらの配列にすることもできます。

パーサーパッケージでiTextのテキスト解析クラスを使用するように切り替えることをお勧めします。これは、これらすべてのことやその他のことを考慮に入れています。

于 2012-11-01T00:39:55.847 に答える