【问题标题】:ABCpdf converting html anchors to jump to another page in the same PDFABCpdf 转换 html 锚点以跳转到同一 PDF 中的另一个页面
【发布时间】:2011-01-09 16:00:27
【问题描述】:

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

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

【问题讨论】:

  • 仅供参考,我很幸运能直接从 ABCpdf 的制造商那里获得支持。试过了吗?
  • 刚刚给他们发了一封邮件,谢谢你的建议。
  • WebSuperGoo 支持非常好,是最好的支持之一,Bryan 非常赞同这个建议。

标签: c# asp.net pdf abcpdf


【解决方案1】:

在最新的 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 团队为我提供了一些示例代码,这就是它的基础 - 非常感谢他们!

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这行得通!另请注意,如果您在 head 标签中使用 ,它将搞砸您的锚点,因此您需要使用绝对 url 引用所有内容
    • 它也适用于我。我还必须设置 document.HtmlOptions.AddLinks = true;并运行 document.HtmlOptions.LinkPages();展平文档后。
    【解决方案3】:

    不管怎样,我通过AddImageHtml 得到的关于锚定书签的结果不一致。实现此目的最可靠的方法是通过AddBookMark 方法,但这将涉及更多的工作,因为您需要手动重建PDF 内容,并且以这种方式支持的HTML 是有限的。有关此方法的更多信息,请访问:

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      相关资源
      最近更新 更多