2014-10-31 51 views
-1

我通过ItextSharp库阅读pdf文档。 但这些文件是捷克语使用变音符号(řěššč等) 我怎样才能读这个字符?任何想法?或者,是否有一些解决方案将这些字符替换为正常的r e z s c? 这是我的方法中的代码。谢谢ItextSharp - 拨号字符

PdfReader reader = new PdfReader("M:/ShareDirs_KSP/RDM_Debtors/DMS_PROD/" + src); 

    // we can inspect the syntax of the imported page 
    String text = new String(); 
    for (int page = 1; page <= 1; page++) { 

     text += PdfTextExtractor.getTextFromPage(reader, page); 
    } 

    reader.close(); 
+0

如果PDF创建正确,那么应该正确解析字符。您使用的是哪种版本的iText? PDF中的字体是作为简单字体还是复合字体存储的?如果你不知道区别,请阅读http://stackoverflow.com/questions/26631815/cant-get-czech-characters-while-generating-a-pdf。 – 2014-10-31 09:10:41

+0

我有5.5.2版本。 我不写,但我只是阅读。我可以在哪里设置编码? – 2014-10-31 09:21:27

回答

1

我已经写了一个小的概念验证文件解析文件czech.pdf。这个文件包含几个带有变音符的字符。它创建回答以下问题:Can't get Czech characters while generating a PDF

文本存储在文件中两次:一次使用简单字体,一次使用复合字体。在我的概念(名为ParseCzech)的证明,我分析这个PDF使用UTF-8(UNICODE)编码的文件:

public void parse(String filename) throws IOException { 
    PdfReader reader = new PdfReader(filename); 
    FileOutputStream fos = new FileOutputStream(DEST); 
    for (int page = 1; page <= 1; page++) { 
     fos.write(PdfTextExtractor.getTextFromPage(reader, page).getBytes("UTF-8")); 
    } 
    fos.flush(); 
    fos.close(); 
} 

结果是文件czech.txt

enter image description here

由于您可以从屏幕截图中看到正确提取文本(但要确保您使用的查看器知道文件编码为UTF-8,否则您可能会看到奇怪的字符而不是实际的文本)。

请注意,某些PDF不允许正确提取文本。这在以下视频中进行了解释:

请分享您的PDF,以便StackOverflow上的人员可以检查您是否因为代码中的错误而无法成功提取文本,或者您是否因为PDF不允许您提取文本。

+0

不幸的是,这些文档包含非常秘密的信息(有法院发送)我添加.getbytes(“UTF-8”),但我的文本变量只包含“[B @ 1d14147”:/ – 2014-10-31 10:05:51

+0

如果您是客户,可以共享与NDA签署的付费支持团队的文件。如果您是用户,为什么不使用RUPS查看文档?如果文档包含秘密信息,则文字可能会被故意混淆,在这种情况下,您将无法提取它。如果你想了解我的意思,请观看视频。 – 2014-10-31 10:33:39

+1

*我的文本变量只包含“[B @ 1d14147”* - 看起来您的文本变量是一个字节数组,您尝试按原样或其toString值打印。这显然是行不通的。 – mkl 2014-10-31 20:33:47