如何从.jar文件中读取PDF

问题描述 投票:1回答:2

在我的Maven项目中,我有resources文件夹内的PDF文件。我的函数从resources文件夹中读取PDF文件,并根据用户数据在文档中添加一些值。

此项目使用.jar打包为mvn clean install文件,并在我的其他Spring Boot应用程序中用作依赖项。

在我的春季启动项目中,我创建了该类的实例,该类将在PDF上执行一些工作。 PDF文件上的所有作业都完成后,并且PDF文件保存在文件系统上后,它始终为空(所有页面均为空白)。我的印象是mvn clean install对PDF文件有作用。到目前为止,这是我尝试过的:

第一种方式

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
File file= new ClassPathResource("/pdfs/testpdf.pdf").getFile();//Try to get PDF file

PDDocument pdf = PDDocument.load(file);//Load PDF document from the file
List<PDField> fields = forms.getFields();//Get input fields that I want to update in the PDF    
fieldsMap.forEach(throwingConsumerWrapper((field,value) -> changeField(fields,field,value)));//Set input field values

pdf.save(byteArrayOutputStream);//Save value to the byte array

这很好用,但是一旦项目被打包在.jar文件中,那么我会得到一个例外,即new ClassPathResource("/pdfs/testpdf.pdf").getFile();无法找到指定的文件。

这是正常的,因为File类无法访问.jar文件中的任何内容(它只能访问.jar文件本身),这一点很明显。

因此,解决该问题的方法是使用InputStream而不是File。这是我所做的:

第二种方式

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
InputStream inputStream = new ClassPathResource("/pdfs/testpdf.pdf").getInputStream();//Try to get input stream

PDDocument pdf = PDDocument.load(inputStream );//Load PDF document from the input stream
List<PDField> fields = forms.getFields();//Get input fields that I want to update in the PDF    
fieldsMap.forEach(throwingConsumerWrapper((field,value) -> changeField(fields,field,value)));//Set input field values

pdf.save(byteArrayOutputStream);//Save value to the byte array

这次getInputStream()不会引发错误,并且inputStream对象不是null。但是,一旦保存在我的文件系统上的PDF文件为空,则意味着所有页面均为空。

我什至试图复制完整的inputStream并将其逐字节保存到文件中,但是我注意到每个字节都等于0。这是我所做的:]]

第三种方式
InputStream inputStream = new ClassPathResource("/pdfs/test.pdf").getInputStream();
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);

File targetFile = new File(OUTPUT_FOLDER);
OutputStream outStream = new FileOutputStream(targetFile);
outStream.write(buffer);

已复制test.pdf已保存,但在使用Adobe Reader打开时被报告为已损坏。

任何人都知道如何解决此问题?

在我的Maven项目中,我有PDF文件,该文件位于资源文件夹内。我的函数从资源文件夹中读取PDF文件,并根据用户数据在文档中添加一些值。 ...

java maven pdfbox
2个回答
2
投票

您必须像这样加载它:


1
投票

经过数小时的调查和@Simon Martinelli和@Tilman Hausherr的大力支持,我有两个问题要解决:

© www.soinside.com 2019 - 2024. All rights reserved.