8

我正在使用 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();
}

有什么想法可以让锚链接正确呈现,以便单击它会跳转到另一个页面?

4

3 回答 3

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 中的另一个页面。

于 2010-02-01T16:40:51.593 回答
3

对于它的价值,我通过相关的AddImageHtml锚定书签得到了不一致的结果。完成此操作的最可靠方法是通过该AddBookMark方法,但这将涉及更多工作,因为您将手动重建 PDF 内容,并且以这种方式对 HTML 的支持是有限的。有关此方法的更多信息,请访问:

http://www.websupergoo.com/helppdf7net/source/5-abcpdf6/doc/1-methods/addbookmark.htm

也许他们的最新版本 8 解决了这个问题。书签似乎总是解析为绝对位置,而不是您在浏览器中通过传统 HTML 看到的相对位置。

于 2010-01-28T03:34:57.363 回答
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 团队为我提供了一些示例代码,这就是它的基础——感谢他们!

于 2013-07-24T10:27:03.630 回答