Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在尝试分析二进制数据。。。而它';在我的情况下,它主要是pdf格式的_Java_Parsing_Apache Tika - Fatal编程技术网

Java 正在尝试分析二进制数据。。。而它';在我的情况下,它主要是pdf格式的

Java 正在尝试分析二进制数据。。。而它';在我的情况下,它主要是pdf格式的,java,parsing,apache-tika,Java,Parsing,Apache Tika,这个代码有什么问题。。。我正在尝试解析pdf文件并从中提取文本。。。但是对于一些pdf,我能够提取文本。。。对一些人来说,这是一个错误 Invalid dictionary, found: '' but expected: '/' org.apache.tika.exception.TikaException: Unexpected RuntimeException from org.apache.tika.parser.pdf.PDFParser@67fb878 而且我在一些pdf的md变量

这个代码有什么问题。。。我正在尝试解析pdf文件并从中提取文本。。。但是对于一些pdf,我能够提取文本。。。对一些人来说,这是一个错误

Invalid dictionary, found: '' but expected: '/'
org.apache.tika.exception.TikaException: Unexpected RuntimeException from org.apache.tika.parser.pdf.PDFParser@67fb878
而且我在一些pdf的md变量中没有得到任何元数据值。。。但对一些人来说,我明白了。。。 这是我的代码。。!! ByteArray有什么问题吗

    private BinaryParser binaryParser;
    binaryParser.parse(page.getBinaryData());


    public void parse(byte[] data) {
            InputStream is = null;
            try {
                is = new ByteArrayInputStream(data);
                text = null;
                Metadata md = new Metadata();
                metaData = new HashMap<String, String>();
                text = tika.parseToString(is, md).trim();
                processMetaData(md);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                IOUtils.closeQuietly(is);
            }
        }

private void processMetaData(Metadata md){
        if ((getMetaData() == null) || (!getMetaData().isEmpty())) {
            setMetaData(new HashMap<String, String>());
        }
        for (String name : md.names()){
            getMetaData().put(name.toLowerCase(), md.get(name));
        }
    }
私有二进制解析器BinaryParser;
parse(page.getBinaryData());
公共void解析(字节[]数据){
InputStream=null;
试一试{
is=新的ByteArrayInputStream(数据);
text=null;
Metadata md=新元数据();
元数据=新的HashMap();
text=tika.parsetString(is,md.trim();
过程元数据(md);
}捕获(例外e){
e、 printStackTrace();
}最后{
IOUtils.安静地关闭(is);
}
}
私有void processMetaData(元数据md){
如果((getMetaData()==null)| |(!getMetaData().isEmpty())){
setMetaData(新的HashMap());
}
for(字符串名称:md.names()){
getMetaData().put(name.toLowerCase(),md.get(name));
}
}

提卡并不完美。它会在许多PDF文件上出现问题(除非去年有很多变化)。确保您使用的是Tika的更新版本。当我使用Tika时,它的版本是0.8(9个月前)。这个版本有一个bug,导致PDF解析特别有问题。我通过使用ApacheTika包装的PDFBox避开了这个问题。在这篇文章的末尾有我的一些代码包装PDFBox,以防你决定尝试这条路线

如果没有其他问题,直接使用PDFBox将使您能够更好地控制参数。其中一个参数是处理“串珠”文本。例如,有专栏的报纸是串珠状的,而信件则不是。PDFBox可以尝试保持书写的流畅性,但它并不总是做得很好。如果您不是从非串珠PDF中提取文本,则可能需要禁用此功能

你可能还想试试这个程序。再次确保您拥有最新版本。使用所有PDF到文本转换器,性能会随着版本的变化而快速变化

import org.apache.pdfbox.util.PDFTextStripper;

PDFTextStripper stripper = new PDFTextStripper;

public static String pdfbox(InputStream is, Writer writer) throws IOException, ConversionException {
        Boolean force = true;

        PDDocument document = null;
        try {
            document = PDDocument.load(is, force); // force extraction

            stripper.setForceParsing(force); // continue when errors are encountered.
            stripper.setSortByPosition(false); // text may not be in visual order.
            stripper.setShouldSeparateByBeads(true); // beads are columns, attempt to handle them.

            stripper.writeText(document, writer);
        }
        finally {
            try {
                if (document != null) {
                    document.close();
                }
            }
            catch (Exception e) {
                throw new ConversionException(e);
            }
        }
    }

我添加了一个tika标签-你需要有tika经验的人,这是大多数java人从未听说过的,更不用说使用了。@Ed Staub,这对我来说真的很糟糕…!!:(不熟悉tika,但似乎PDF有问题(截断、损坏?)tika使用的PDFBox库本身不支持您正在使用的PDF文件格式。请检查支持的格式。@David,我不这么认为……因为我用相同的tika解析了所有这些PDF。但这次我用了其他方法。因此开始出现错误……我认为ByteArray有问题。!!tika ar的较新版本我有了很大的进步。