我正在使用ABCpdf动态生成PDF,其中包含可链接到同一PDF中其他页面的目录。问题是HTML中锚标记的路径变为临时文件的绝对路径。
例如,ABCpdf将呈现链接的href:
<a href="#elementId">Link</a>
在PDF中: file:/// C:/Users/Aaron/AppData/Local/Temp/ABCpdf/pdfCMMYPSF.htm#elementId
这就是我生成PDF的方式:
Doc pdf = new Doc();
pdf.HtmlOptions.AddLinks = true;
pdf.Rect.Rectangle = new System.Drawing.Rectangle(20, 80, 572, 702);
int id = pdf.AddImageHtml(pdfHTML, true, pdf.HtmlOptions.BrowserWidth, true);
while (pdf.Chainable(id))
{
pdf.Page = pdf.AddPage();
id = pdf.AddImageToChain(id);
}
pdf.HtmlOptions.LinkPages();
for (int i = 0; i < pdf.PageCount; i++)
{
pdf.PageNumber = i;
pdf.Flatten();
}
任何想法如何让锚链接正确渲染以便点击它会跳转到另一页?
答案 0 :(得分:6)
Websupergoo回到我身边,我能够从他们提供的示例项目中调试我的问题。我的问题的解决方案很简单,我会在这里发布答案,以防其他人遇到同样的问题:
我的HTML设置如下:
<a href="#elementId">Link to another page</a>
<div id="elementId">A div that's on another page</div>
我只需将其更改为:
<a href="#elementId">Link to another page</a>
<div><a name="elementId">A div that's on another page</a></div>
您需要使用具有指定名称的锚标记,以便ABCpdf使链接跳转到同一PDF中的另一个页面。
答案 1 :(得分:3)
对于它的价值,我通过AddImageHtml
关于锚定书签的结果不一致。实现这一目标的最可靠方法是通过AddBookMark
方法,但这将涉及更多的工作,因为您正在努力手动重建PDF内容,并且HTML支持以这种方式受到限制。有关此方法的更多信息,请访问:
http://www.websupergoo.com/helppdf7net/source/5-abcpdf6/doc/1-methods/addbookmark.htm
也许他们的最新版本8解决了这个问题。书签似乎总是通过传统HTML在您的浏览器中看到绝对位置而不是相对位置。
答案 2 :(得分:2)
在最新的ABCpdf版本(9)中为我工作的另一种方法是为文档中的每个页面添加一个书签:
For i = 1 to pdf.PageCount
pdf.PageNumber = i
pdf.AddBookmark("Page " & i, True)
Next
然后,您想要插入链接,您可以引用书签 - 在这种情况下,我们通过循环遍历我们创建的每个书签来创建目录:
For Each bm As Bookmark In pdf.Bookmark
toc &= "<Font annots='goto:" + bm.Page.PageNumber.ToString() + "'>" & bm.Title & "</Font><br>"
Next
pdf.AddHtml(toc)
Websupergoo团队为我提供了一些示例代码,这就是基于它的原因 - 感谢他们!