Java org.apache.pdfbox.util.PDFMergerUtility disable;“保存更改”;对话框生成pdf

Java org.apache.pdfbox.util.PDFMergerUtility disable;“保存更改”;对话框生成pdf,java,pdf,pdfbox,Java,Pdf,Pdfbox,我正在使用ApachePDFBoxPDFMergerUtility合并我的PDF以供下载 我的代码如下(简称): private final PDFMergerUtility合并=新的PDFMergerUtility(); 公共无效合并(OutputStream OutputStream、集合附件){ 试一试{ PDDocument mainDocument=新PDDocument(); mainDocument.getDocumentCatalog().setAcroForm(新的PDAcro

我正在使用ApachePDFBoxPDFMergerUtility合并我的PDF以供下载

我的代码如下(简称):

private final PDFMergerUtility合并=新的PDFMergerUtility();
公共无效合并(OutputStream OutputStream、集合附件){
试一试{
PDDocument mainDocument=新PDDocument();
mainDocument.getDocumentCatalog().setAcroForm(新的PDAcroForm(mainDocument));
用于(捆绑包:附件){
merge.addSource(bundle.getStream());//PDF的输入流。
}
ByteArrayOutputStream ByteArrayOutputStream=新建ByteArrayOutputStream();
合并。设置目的流(byteArrayOutputStream);
合并。合并文件();
InputStream mergedInputStream=新的ByteArrayInputStream(MergeDoutPtStream.toByteArray());
PDDocument mergedDocument=PDDocument.load(mergedInputStream);
mergedDDocument.save(outputStream);
}捕获(COSVisitorException | IOException | BadSecurityHandlerException ex){
}
}
PDF已合并,我可以毫无问题地打开PDF。没有警告或错误

关闭PDF时会出现问题: 每次我关闭PDF时,我的PDF阅读器(Adobe Acrobat Reader)都会问我是否要保存更改。但我没有做任何改变

我知道,这种行为是上述代码的结果,因为我还测试了下载pdf而不将其与其他pdf合并

这种行为从何而来?如果我想保存(不存在的)更改,我可以如何阻止我的PDF阅读器问我


谢谢

为什么要使用
PDAcroForm
?您使用的是什么版本?您可以共享一个示例结果PDF吗?还有一些代码奇怪之处:没有异常处理(请至少输出一些日志),并且从未使用过mainDocument。当Adobe Reader检测到格式错误的PDF时,“保存更改”消息框出现。请尝试使用命令行实用程序进行合并,并告诉它是否工作。如果没有,请将源代码和结果PDF上传到某处。
private final PDFMergerUtility merger = new PDFMergerUtility();

public void merge(OutputStream outputStream, Collection<Bundle> attachments) {
    try {
        PDDocument mainDocument = new PDDocument();
        mainDocument.getDocumentCatalog().setAcroForm(new PDAcroForm(mainDocument));
        for (Bundle bundle : attachments) {
            merger.addSource(bundle.getStream()); //The Input Stream of the PDF.
        }
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        merger.setDestinationStream(byteArrayOutputStream);
        merger.mergeDocuments();
        InputStream mergedInputStream = new ByteArrayInputStream(mergedOutputStream.toByteArray());
        PDDocument mergedDocument = PDDocument.load(mergedInputStream);
        mergedDDocument.save(outputStream);
    } catch (COSVisitorException | IOException | BadSecurityHandlerException ex) {
    }
}