0

zipファイルを.zipとして取得していますInputStream。次に、その中の各ファイルを分離しています。次に、内部で画像に変換するために使用byte arrayするpdfboxApace pdf box 1.6.0に同じものを渡しています。

ただし、をに渡すとbyte arrayPDFDocumentReader次の例外が発生します-

SEVERE: expected='endstream' actual='' org.apache.pdfbox.io.PushBackInputStream@44c2beb9
java.io.IOException: expected='endstream' actual='' org.apache.pdfbox.io.PushBackInputStream@44c2beb9
at org.apache.pdfbox.pdfparser.BaseParser.parseCOSStream(BaseParser.java:439)
at org.apache.pdfbox.pdfparser.PDFParser.parseObject(PDFParser.java:530)
at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:172)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:862)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:829)
at org.dopdf.document.read.pdf.PDFDocumentReader.init(PDFDocumentReader.java:98)

zip から各ファイルを取得するには、次のコードを使用します -

    ZipInputStream zis = new ZipInputStream(aZipFile); // aZipFile is byte array
    ZipEntry entry;
    ArrayList<String> nameOfIgnoredFiles = new ArrayList<String>();
    byte data[] = null;
    while ((entry = zis.getNextEntry()) != null) {
        if (entry.getName().endsWith(".pdf")) {
            int dataSize = (int)entry.getSize();
            data = new byte[dataSize];
            zis.read(data);
            // i use data and pass it to the pdf box.
        } else {
            nameOfIgnoredFiles.add(entry.getName());
        }

上記dataでフェッチしたバイト配列は、以下のように渡されます-

PDFDocumentReader document = new PDFDocumentReader(data); // here i get the error

私は何を間違っていますか?解決策を提案できますか?データバイト配列のフェッチが問題だと思います。どのようにそれを行うのが最善の方法ですか?

4

1 に答える 1

2

zis.read(data)バッファがいっぱいになると想定しています。API ドキュメントを確認してください。それが保証されるわけではありません。また、サイズが int に収まり、アイテム自体がメモリに収まると想定しています。これらの仮定はどれも有効ではありません。

エントリInputStreampdfboxAPI に渡すことができますか?

于 2012-06-12T22:07:59.677 に答える