我有一个.pdf文档的多个副本,这些副本由不同的用户评论。我想将所有这些注释合并到一个新的“合并”的pdf文件中。
我在一个名为document的类中编写了此子对象,该类具有“ path”和“ directory”属性。
Public Sub MergeComments(ByVal pdfDocuments As String())
Dim oSavePath As String = Directory & "\" & FileName & "_Merged.pdf"
Dim oPDFdocument As New iText.Kernel.Pdf.PdfDocument(New PdfReader(Path),
New PdfWriter(New IO.FileStream(oSavePath, IO.FileMode.Create)))
For Each oFile As String In pdfDocuments
Dim oSecundairyPDFdocument As New iText.Kernel.Pdf.PdfDocument(New PdfReader(oFile))
Dim oAnnotations As New PDFannotations
For i As Integer = 1 To oSecundairyPDFdocument.GetNumberOfPages
Dim pdfPage As PdfPage = oSecundairyPDFdocument.GetPage(i)
For Each oAnnotation As Annot.PdfAnnotation In pdfPage.GetAnnotations()
oPDFdocument.GetPage(i).AddAnnotation(oAnnotation)
Next
Next
Next
oPDFdocument.Close()
End Sub
这段代码导致我无法解决的异常。
iText.Kernel.PdfException:'Pdf间接对象属于其他PDF文档。将对象复制到当前的pdf文档中。'
执行此任务需要更改什么?还是我完全放弃了我的代码块?
答案 0 :(得分:0)
您需要将基础PDF对象明确复制到目标文档。之后,您将可以轻松地将该对象添加到页面注释列表中。
不是直接添加注释:
int
首先将对象复制到目标文档,使用oPDFdocument.GetPage(i).AddAnnotation(oAnnotation)
方法将其包装到PdfAnnotation
类中,然后照常添加。代码是Java语言,但是您可以轻松地将其转换为VB:
makeAnnotation
答案 1 :(得分:0)
这是一个有效的Java代码,其中的注释使用 copyTo 方法从一个文档复制到另一个文档。
PdfReader reader = new PdfReader(new
RandomAccessSourceFactory().createBestSource(sourceFileName), null);
PdfDocument document = new PdfDocument(reader);
PdfReader toMergeReader = new PdfReader(new RandomAccessSourceFactory().createBestSource(targetFileName), null);
PdfDocument toMergeDocument = new PdfDocument(toMergeReader);
PdfWriter writer = new PdfWriter(targetFileName + "_MergedVersion.pdf");
PdfDocument writeDocument = new PdfDocument(writer);
int pageCount = toMergeDocument.getNumberOfPages();
for (int i = 1; i <= pageCount; i++) {
PdfPage page = document.getPage(i);
writeDocument.addPage(page.copyTo(writeDocument));
PdfPage pdfPage = toMergeDocument.getPage(i);
List<PdfAnnotation> pageAnnots = pdfPage.getAnnotations();
if (pageAnnots != null) {
for (PdfAnnotation pdfAnnotation : pageAnnots) {
PdfObject annotObject = pdfAnnotation.getPdfObject().copyTo(writeDocument);
writeDocument.getPage(i).addAnnotation(PdfAnnotation.makeAnnotation(annotObject));
}
}
}
reader.close();
toMergeReader.close();
toMergeDocument.close();
document.close();
writeDocument.close();
writer.close();