Pdf 需要使用合并文档替代本地或远程转到/目的地

Pdf 需要使用合并文档替代本地或远程转到/目的地,pdf,itext,Pdf,Itext,背景 我有一个java程序,可以分析数据并使用itext 5创建pdf报告 我最近不得不在文档的开头添加一个主要问题的摘要,这样用户就不必阅读100多页来发现问题。只有在连续查看数据时才会发现问题 我通过创建3个pdf文档,然后合并它们,一个开始/标题pdf、问题摘要pdf和正文或分析pdf,解决了这个问题。(基本上是在我想插入摘要的地方拆分原始文档) 我使用PdfReader和PdfCopy来组合文档。我可以保留章节书签 问题 当我遇到重大问题时,我将其添加到“摘要”文档中。我想在摘要中添加一

背景

我有一个java程序,可以分析数据并使用itext 5创建pdf报告

我最近不得不在文档的开头添加一个主要问题的摘要,这样用户就不必阅读100多页来发现问题。只有在连续查看数据时才会发现问题

我通过创建3个pdf文档,然后合并它们,一个开始/标题pdf、问题摘要pdf和正文或分析pdf,解决了这个问题。(基本上是在我想插入摘要的地方拆分原始文档)

我使用PdfReader和PdfCopy来组合文档。我可以保留章节书签

问题

当我遇到重大问题时,我将其添加到“摘要”文档中。我想在摘要中添加一个链接,指向正文中的问题

我尝试使用Chunk.setLocalDestination和setLocalGoto,但意识到了为什么这不起作用,所以我尝试使用setLocalDestination和setRemoteGoto(带或不带'file://'),但也不起作用。(另外,我在RemoteGoto中使用了最终的pdf文档名,而不是临时的pdf文档名。)

我不想使用书签,因为这似乎是错误的,看起来也不正确

我希望有人能提出另一种方法或建议

总而言之,在我当前的代码中,创建一个带有setLocalDestination的块,该块进入“body”文档。同时,我创建了一个setRemoteGoto,并将其放入摘要文档中。我希望当他们被合并时,链接会起作用,但是当点击链接时,你会进入合并文档的第一页

谢谢

PS我有两本关于行动的书

澄清3/5/2014

我所说的“书签”实际上是章节类实体,它们在创建3个文档时被插入其中

保存3个文档后,使用PdfReader打开每个文档,并使用PdfCopy将它们放入新的最终文档中

我从章节中获取数据,在用户使用的Pdf阅读器(例如Acrobat reader)左侧创建“书签”

int thisPdfPages = reader.getNumberOfPages();
reader.consolidateNamedDestinations();
java.util.List<HashMap<String, Object>> bookmarks = SimpleBookmark.getBookmark(reader);
if (bookmarks != null) {
    if (pageOffset != 0) {
        if (debug3) auditLogger.log("Shifting pages by " + pageOffset );
        SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null);
    }
    masterBookmarks.addAll(bookmarks);
}
for (int i = 0; i < thisPdfPages;) {
    page = copy.getImportedPage(reader, ++i);
    stamp = copy.createPageStamp(page);
    // add page numbers
    ColumnText.showTextAligned(stamp.getUnderContent(), Element.ALIGN_CENTER, new Phrase(String.format("page %d of %d", start + i, totalPages)), 297.5f, 28, 0);
    stamp.alterContents();
    copy.addPage(page);
}
PRAcroForm form = reader.getAcroForm();
if (form != null) {
    copy.copyAcroForm(reader);
}
如果我使用setLocalGoto,当您单击最终文档中的链接时,将转到第一页


如果我使用setRemoteGoto,则会出现一个对话框,请求访问某个文档的权限,但该文档无法打开,并尝试对文件名进行多种排列。

如果书签正常工作,则会显示有关显式目标的信息。如果你有明确的目的地,你可以在链接注释中使用它们,不是吗?如果没有,你必须澄清,因为现在你说“它不工作”很难理解。谢谢你的回答,布鲁诺。我认为我用词有误。我有的是章节。当我最初进行合并/连接时,目录仅适用于第一个文档。如果目录是单独文档的一部分,则不能“合并”它们是正常的。这是PDF固有的特性。您应该为完整(合并)文档制定TOC,而不是单独的文档。如果这还不能回答你的问题,请澄清,因为你的问题仍然不清楚。有些事情严重错误。我花了一个小时编辑了原始问题,澄清了我在做什么以及问题是什么。我确信我保存了编辑,但现在我看不到它????我会进一步检查,请不要回复,直到我张贴更多的数据。我上面的评论只是开始,但后来我意识到我无法格式化评论或添加代码。@BrunoLowagie(@Bruno Lowagie)我对我的问题做了进一步的澄清。我不是在制作目录,但我正在尝试在一个文档中创建链接,以锚定在另一个文档中,并希望当两个文档合并时,链接将起作用。
//NOTE section is part of the 'body' document
//NOTE summaryPhrase is a part of the 'summary' document
String linkName = "summaryPf_" + networkid ;
//create Link target
section.add(new Chunk("CHANGE TO EMPTY STRING WHEN WORKING").setLocalDestination( linkName ));
//create Link
Chunk linkChunk = new Chunk( "[Link]  " );
Font linkFont = new Font( regularFont );
linkFont.setColor(BaseColor.BLUE);
linkFont.setStyle( Font.UNDERLINE );
linkChunk.setFont( linkFont );
boolean useLocal = true;
// both local and remote goto's fail
if (useLocal) {
    linkChunk.setLocalGoto( linkName);
} else {
    // all permutations of setting filename fail, 
    // but it does bring up a permissions dialog when the link is clicked.
    //String remotePdfName = "file://./" + pdfReportName ;
    //String remotePdfName = "file://" + pdfReportName ;
    //String remotePdfName = "file:" + pdfReportName ;
    String remotePdfName = pdfReportName ;
    linkChunk.setRemoteGoto( remotePdfName, linkName);
}
// add link to summary document
summaryPhrase.add( linkChunk );
summaryPhrase.add( String.format("There were %d devices with ping failures", summaryCount));
summaryPhrase.add( Chunk.NEWLINE );
}