iText bytearray没有提供可行的输出

时间:2014-10-08 16:22:45

标签: android bytearray itext

我在这里很新,所以请问您是否需要更多信息。

目前我已经写了一段写入SD卡的代码。它写了.jpegs,它给了他们所有可变的kb大小,就像你期望从一个充满图像的pdf一样。但是,当我在平板电脑上选择它们时,它无法打开照片,而当我在计算机上打开它时,它也不允许这样做,所以很明显我错过了一定程度的腐败。

我还测试了image.length,这似乎也在输出许多不同的字节大小方面起作用。

    try {
    InputStream is = this.getAssets().open("iText-40.pdf");
    PdfReader reader = new PdfReader(is);
    for (int i = 0; i < reader.getXrefSize(); i++) {
        PdfObject pdfobj = reader.getPdfObject(i);
        if (pdfobj != null && pdfobj.isStream()) {
            PdfStream stream = (PdfStream) pdfobj;
            PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE);
            if (pdfsubtype != null
                    && pdfsubtype.toString().equals(
                            PdfName.IMAGE.toString())) {
                byte[] image = PdfReader
                        .getStreamBytesRaw((PRStream) stream);
                FileOutputStream out = new FileOutputStream(new File(file.getParentFile(), i + ".jpeg"));
                Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
                System.out.println(image.length);

                out.write(image);
                out.flush();
                out.close();

            }
        }
    }

} catch (IOException e2) {
    System.out.println(e2);
    e2.printStackTrace();
}

如果有人能指出我正确的方向,至少我做错了什么,我会很高兴。顺便说一句,我已尝试使用位图工厂尝试使其工作,例如使用位图工厂重新打开文件,希望由于某种原因它可能会修复它。它没有。非常感谢您的时间。

1 个答案:

答案 0 :(得分:1)

我最终找到了如何用不同的方法做iText需要做的事情:

您需要iTextG库(itextg-5.5.3.jar),scpkix-jdk15on.1.47.0.1.jar&amp; scprov-jdk15on-1.47.0.2.jar

在里面想要从中调用它:

public static final String RESULT = "/storage/sdcard0/dirAtExtStorage/Img%s.%s";

public void extractImages(String filename)
    throws IOException, DocumentException {

    PdfReader reader = new PdfReader(filename);
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);
    MyImageRenderListener listener = new MyImageRenderListener(RESULT);
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        parser.processContent(i, listener);
    }
}

在MyImageRendererListener.java中:

public class MyImageRenderListener implements RenderListener{

private String path;

public MyImageRenderListener(String path) {
    this.path = path;

  }



@Override
public void beginTextBlock() {
    // TODO Auto-generated method stub

}

@Override
public void endTextBlock() {
    // TODO Auto-generated method stub

}

public void renderImage(ImageRenderInfo renderInfo) {
    try {
        System.out.print("renderImage");
        String filename;
        FileOutputStream os;
        PdfImageObject image = renderInfo.getImage();
        if (image == null) return;
        filename = String.format(path, renderInfo.getRef().getNumber(), image.getFileType());
        os = new FileOutputStream(filename);
        os.write(image.getImageAsBytes());
        os.flush();
        os.close();
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

@Override
public void renderText(TextRenderInfo arg0) {
    // TODO Auto-generated method stub
  }
  }

享受家伙