gpt4 book ai didi

java - PDFBOX 1.8.10。从 load() 方法生成 PDDocument 时出错

转载 作者:行者123 更新时间:2023-12-01 10:35:05 27 4
gpt4 key购买 nike

我使用的是 PDFBOX 1.8.10。

如果我将 PDF 文件加载到字节数组中,它就可以工作 -

File file = new File(args[0]);
FileInputStream fis = new FileInputStream(file); //Normal PDF File
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum); //no doubt here is 0
}
} catch (IOException ex) {
ex.printStackTrace();
}
byte[] bytes = bos.toByteArray();
CheckIsPDF(bytes);
pdf = PDDocument.load(new ByteArrayInputStream(bytes)); //**No exception here**

但是如果相同的文件存储在数据库中并且如果我尝试通过上面的代码读取它,我会得到以下异常 -“java.io.IOException:错误:文件结束,预期行”

这是从数据库读取并填充 PDF 的代码-

List<byte[]> forms; //this gets populated from database. The data stored in DB is HEX.
for(byte[] file : forms){
try{
int var=file.length;

pdDocument = PDDocument.load(new ByteArrayInputStream(file)); //**Exception**

fieldLists = PDFFormUtils.printFields( pdDocument );

}
catch(Exception e){
e.printStackTrace();
}
}

最佳答案

正如评论中所讨论的,问题的原因是 blob 的内容不是 PDF。 Blob 内容是:

43 3a 5c 4d 42 43 50 4f 53 5c 52 65 6e 74 2e 70 64 66

pdf 以“%PDF”开头,因此以十六进制表示为

25 50 44 46

您提到的十六进制序列转换为

C:\MBCPOS\Rent.pdf

这意味着有人将文件名而不是文件内容保存到 blob 中。

关于java - PDFBOX 1.8.10。从 load() 方法生成 PDDocument 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34805134/

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