iText7在新的pdf文档上合并pdf注释

时间:2019-02-07 09:14:10

标签: itext itext7

我有一个.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文档中。'

执行此任务需要更改什么?还是我完全放弃了我的代码块?

2 个答案:

答案 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();