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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iText7在新的pdf文档上合并pdf注释相关的知识,希望对你有一定的参考价值。

我有一份由不同用户评论的.pdf文档的多个副本。我想将所有这些评论合并到一个新的pdf“merged”中。

我在一个名为document的类中编写了这个sub,其属性为“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文档。

为了执行此任务,我需要更改什么?或者我完全关闭我的代码块?

答案

您需要将基础PDF对象显式复制到目标文档。之后,您可以轻松地将该对象添加到页面注释列表中。

而不是直接添加注释:

oPDFdocument.GetPage(i).AddAnnotation(oAnnotation)

首先将对象复制到目标文档,使用PdfAnnotation方法将其包装到makeAnnotation类中,然后照常添加它。代码是Java,但您可以轻松地将其转换为VB:

PdfObject annotObject = oAnnotation.getPdfObject().copyTo(pdfDocument);
pdfDocument.getPage(i).addAnnotation(PdfAnnotation.makeAnnotation(annotObject));

以上是关于iText7在新的pdf文档上合并pdf注释的主要内容,如果未能解决你的问题,请参考以下文章

iText7:合并两个pdf时文件指针出错

如何使用 C# 合并包含所有者密码的 PDF 文档

Java IText7 PDF 签名问题 - 文档自签名后已被更改或损坏

使用 itext 7 在 PDF 中添加新页面

iText 7:此 pdf 文档可能无法正确显示 Firefox

iText7 将 HTML 转换为 PDF“System.NullReferenceException”。