首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新pdf文档上的iText7合并pdf注释

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

Stack Overflow用户
提问于 2019-02-07 09:14:10
回答 2查看 902关注 0票数 0

我有多个由不同用户注释的.pdf文档副本。我想把所有这些评论合并成一个新的pdf“合并”。

我在一个名为document的类中编写了这个子类,它具有属性"path“和”目录“。

代码语言:javascript
复制
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文档中。”

为了执行这个任务,我需要改变什么?还是我完全放弃了我的代码块?

EN

回答 2

Stack Overflow用户

发布于 2019-02-09 13:41:12

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

而不是直接添加注释:

代码语言:javascript
复制
oPDFdocument.GetPage(i).AddAnnotation(oAnnotation)

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

代码语言:javascript
复制
PdfObject annotObject = oAnnotation.getPdfObject().copyTo(pdfDocument);
pdfDocument.getPage(i).addAnnotation(PdfAnnotation.makeAnnotation(annotObject));
票数 0
EN

Stack Overflow用户

发布于 2019-07-24 21:30:18

下面是一个工作的Java代码,它使用copyTo方法将注释从一个文档复制到另一个文档。

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54569850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档