gpt4 book ai didi

android - iText bytearray 没有提供可行的输出

转载 作者:行者123 更新时间:2023-11-30 02:37:27 26 4
gpt4 key购买 nike

我是新来的,所以请询问您是否需要更多信息。

就目前而言,我有一段代码可以写入 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();
}

如果有人至少能指出我做错了什么的正确方向,我将不胜感激。顺便说一句,我已经用位图工厂尝试了一些事情来尝试让它工作,比如用位图工厂重新打开文件,希望它能出于某种原因修复它。它没有。非常感谢您的宝贵时间。

最佳答案

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

您需要 iTextG 库 (itextg-5.5.3.jar)、scpkix-jdk15on.1.47.0.1.jar 和 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
}
}

好好享受吧

关于android - iText bytearray 没有提供可行的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26261743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com