我在D盘下有两个PDF文件 都是中文的  分别是aa.pdf和bb.pdf
读取代码如下FileInfo file = new FileInfo("d:\\aa.pdf");
PDDocument doc = PDDocument.load(file.FullName);
PDFTextStripper pdfStripper = new PDFTextStripper();        
string text = pdfStripper.getText(doc);
奇怪的是我读取aa.pdf能正常读取  
而读取bb.pdf的时候却是乱码用过pdf box的朋友 能帮忙看下是什么问题吗

解决方案 »

  1.   

    可能是aa.pdf和bb.pdf两个的文件的编码格式不一样。
    如果是的话  如何判断这两个文件的编码格式  读的时候用不同的方法去读呢?
      

  2.   

    需要判断文件流的前三个字节来判断编码。   
      或者使用   
      StreamReader   sr   =   new   StreamReader("filepath",true/*detectEncodingFromByteOrderMarks*/);
      

  3.   

    PDF为了识别所有的字符,给每一个文字都赋予一个唯一的编码,叫CID。 然后又提供了不同的字体编码与CID的Map文件和CID和Unicode的Map文件。参照Resources\cmap\00_readme.pdf文件,就可以知道这些文件是什么。 一般的PDF文件中文字转换方法应该是从PDF文件解析出来字体名称和文字编码后,从对应的CMap文件中找到该文字编码对应的CID。然后再根据CID从CID和Unicode的Map文件找到对应的Unicode。 PDFBox不能正常转换中文的原因就在于,CMapParser Class没有解析begincidrange(不同的字体编码与CID对照表)一节, 也没有参照CID和Unicode Map文件进行转换,这是一个Bug。 
      

  4.   

    确保PDF支持的字体在你本地都有安装支持就不会有这个问题
    我也用了pdfbox,没有出现乱码情况
      

  5.   

    LS的能留下联系方式吗 我给你发一个PDF文件 你看能正常读取吗
      

  6.   

    麻烦问一下我将pdfbox里边
    IKVM.GNU.Classpath.dll
    PDFBox-0.7.3.dll
    FontBox-0.1.0-dev.dll
    IKVM.Runtime.dll
    四个文件都引用了,运行代码如下:
    PDDocument doc = PDDocument.load("201011.pdf");
    PDFTextStripper stripper = new PDFTextStripper();
    string txt = stripper.getText(doc);
    Console.WriteLine(txt);
    我希望读出pdf当中文本
    请问一下,我运行时
    这句话显示错误string txt = stripper.getText(doc);
    错误内容是Unknown colorspace array type:COSName{DeviceCMYK},是一个IOException 。
    怎么解决啊