在我的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文件,并根据用户数据在文档中添加一些值。 ...
您必须像这样加载它:
经过数小时的调查和@Simon Martinelli和@Tilman Hausherr的大力支持,我有两个问题要解决: