错误:标头不包含版本信息
我正在尝试动态创建一些 pdf 页面并使用 PDFBox PDFMergerUtility 合并它们。基本上我已经设置了要合并的文档,现在我想在顶部添加一个带有一些动态文本和图像的封面页。
PDFMergerUtility ut = new PDFMergerUtility();
// Creating PDF document object
PDDocument document = new PDDocument();
PDPage blankPage = new PDPage();
// Adding the blank page to the document
document.addPage(blankPage);
// Start a new content stream which will "hold" the to be created content
PDPageContentStream contentStream = new PDPageContentStream(document, blankPage);
// Define a text content stream using the selected font, moving the cursor and
// drawing the text "Hello World"
contentStream.beginText();
// Setting the font to the Content stream
contentStream.setFont(PDType1Font.TIMES_ROMAN, 12);
// Setting the position for the line
contentStream.newLineAtOffset(25, 500);
String text = "This is the sample document and we are adding content to it.";
// Adding text in the form of string
contentStream.showText(text);
contentStream.endText();
// Make sure that the content stream is closed:
contentStream.close();
ut.addSource(document.getPage(0).getContents());
// Save the merged pdf to outputstream
ByteArrayOutputStream destStream = new ByteArrayOutputStream();
ut.setDestinationStream(destStream);
ut.mergeDocuments(MemoryUsageSetting.setupTempFileOnly());
但我收到以下错误:
java.io.IOException: Error: Header doesn't contain versioninfo
at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:175)
at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:154)
at org.apache.pdfbox.Loader.loadPDF(Loader.java:456)
at org.apache.pdfbox.Loader.loadPDF(Loader.java:377)
at org.apache.pdfbox.multipdf.PDFMergerUtility.legacyMergeDocuments(PDFMergerUtility.java:457)
at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:355)
at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:339)
at com.iof.services.AuditDocumentService.mergeAttachments(AuditDocumentService.java:210)
at com.iof.services.AuditDocumentService.downloadAuditDocument(AuditDocumentService.java:118)
at com.iof.services.AuditDocumentService.lambda$0(AuditDocumentService.java:95)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at com.iof.services.AuditDocumentService.downloadAuditDocument(AuditDocumentService.java:85)
at com.iof.schedulers.AuditDocumentScheduler.downloadAuditDocument(AuditDocumentScheduler.java:17)
at jdk.internal.reflect.GeneratedMethodAccessor73.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
有人可以帮助我解决我做错的事情吗?
I'm trying to create some pdf pages on the fly and merging them using PDFBox PDFMergerUtility. Basically I've set of documents to be merged and now I want to add a cover page at the top with some dynamic text and image.
PDFMergerUtility ut = new PDFMergerUtility();
// Creating PDF document object
PDDocument document = new PDDocument();
PDPage blankPage = new PDPage();
// Adding the blank page to the document
document.addPage(blankPage);
// Start a new content stream which will "hold" the to be created content
PDPageContentStream contentStream = new PDPageContentStream(document, blankPage);
// Define a text content stream using the selected font, moving the cursor and
// drawing the text "Hello World"
contentStream.beginText();
// Setting the font to the Content stream
contentStream.setFont(PDType1Font.TIMES_ROMAN, 12);
// Setting the position for the line
contentStream.newLineAtOffset(25, 500);
String text = "This is the sample document and we are adding content to it.";
// Adding text in the form of string
contentStream.showText(text);
contentStream.endText();
// Make sure that the content stream is closed:
contentStream.close();
ut.addSource(document.getPage(0).getContents());
// Save the merged pdf to outputstream
ByteArrayOutputStream destStream = new ByteArrayOutputStream();
ut.setDestinationStream(destStream);
ut.mergeDocuments(MemoryUsageSetting.setupTempFileOnly());
But I'm getting following error:
java.io.IOException: Error: Header doesn't contain versioninfo
at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:175)
at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:154)
at org.apache.pdfbox.Loader.loadPDF(Loader.java:456)
at org.apache.pdfbox.Loader.loadPDF(Loader.java:377)
at org.apache.pdfbox.multipdf.PDFMergerUtility.legacyMergeDocuments(PDFMergerUtility.java:457)
at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:355)
at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:339)
at com.iof.services.AuditDocumentService.mergeAttachments(AuditDocumentService.java:210)
at com.iof.services.AuditDocumentService.downloadAuditDocument(AuditDocumentService.java:118)
at com.iof.services.AuditDocumentService.lambda$0(AuditDocumentService.java:95)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at com.iof.services.AuditDocumentService.downloadAuditDocument(AuditDocumentService.java:85)
at com.iof.schedulers.AuditDocumentScheduler.downloadAuditDocument(AuditDocumentScheduler.java:17)
at jdk.internal.reflect.GeneratedMethodAccessor73.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Can someone help me with what I'm doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这
是错误的,
PDFMergerUtility
期望 PDF 文档作为源,但PDPage.getContents()
仅返回某些页面的内容流。相反,将
document
保存到某个ByteArrayOutputStream
中,并将该流的内容作为源添加到ut
中。You do
This is wrong,
PDFMergerUtility
expects PDF documents as sources butPDPage.getContents()
only returns the content stream of some page.Instead save
document
to someByteArrayOutputStream
and add the contents of that stream as source tout
.