gpt4 book ai didi

pdf - 在 PDF 文档中添加超链接

转载 作者:行者123 更新时间:2023-12-04 23:53:06 24 4
gpt4 key购买 nike

我目前正在扩展我们的自定义 PDF 编写器,以便能够编写指向网站的链接。但是,我遇到了一个问题,因为我无法在任何地方找到如何将链接放入 PDF 中。

这是打印文本的内容:

BT
70 50 TD
/F1 12 Tf
(visit my website!) Tj
ET

我现在需要的是将其包装到一个超链接中,以便用户在单击“访问我的网站!”时被重定向到我的网站。

知道怎么做吗?我不能使用工具 - 我需要知道如何将正确的 PDF 命令写入文件,因为很多文档是使用 C# 动态生成的。目前我正在使用 iTextSharp - 但我找不到任何编写超链接的功能,所以我决定添加这个功能。

最佳答案

以下是规范方面的内容:通过在页面上放置链接注释来创建链接。链接注释由 Rect 键或一组四边形表示。让我们假设您正在处理矩形。为了放置链接,您至少需要这样的字典:

<< /Type /Annot /Subtype /Link /Rect [ x1 y1 x2 y2 ] >>

(x1, y1) 和 (x2, y2) 描述了链接事件区域所在矩形的角。

要使用它,这应该是 PDF 中的一个间接对象,并从您页面的 Annots 数组中引用。

如果您可以创建它,您将在页面上获得一个无处可去的链接。

要让链接转到某个地方,您需要在链接注释中使用/Dest 或/A 条目(但不能同时使用两者)。/Dest 是用于页面级导航的旧工件 - 您不会使用它。相反,使用作为 Action 字典的/A 条目。因此,如果您想导航到 URL http://www.google.com ,你会让你的注释看起来像这样:
<< /Type /Annot /Subtype /Link /Rect [ x1 y1 x2 y2 ]
/A << /Type /Action /S /URI /URI (http://www.google.com) >>
>>

我无法专门帮助您了解如何在 iTextSharp 中执行此操作。我不是特别喜欢他们使用的模型或抽象。我为 Atalasoft 编写了一个 PDF 工具包,我将向您展示我将如何在我自己的工具包中做到这一点。再一次,我不努力隐瞒这是一个商业产品,这是我的谋生手段。我只是想让你看到还有其他可用的选项。
// make a document, add a font, get its metrics
PdfGeneratedDocument doc = new PdfGeneratedDocument();
string fontResource = doc.Resources.Fonts.AddFromFontName("Times New Roman");
PdfFontMetrics mets = doc.Resources.Fonts.Get(fontResource).Metrics;

// make a page, place a line of text
PdfGeneratedPage page = doc.Pages.AddPage(PdfDefaultPages.Letter);
PdfTextLine line = new PdfTextLine(fontResource, 12.0, "Visit my web site.",
new PdfPoint(72, 400));
page.DrawingList.Add(line);

// get the bounds of the text we place, make an annotation
PdfBounds bounds = mets.GetTextBounds(12.0, "Visit my web site.");
bounds = new PdfBounds(72, 400, bounds.Width, bounds.Height);
LinkAnnotation annot = new LinkAnnotation(bounds, new PdfURIAction(new URI("my url")));
page.Annotations.Add(annot);

// save the content
doc.Save("finaldoc.pdf");

唯一“棘手”的是页面上的内容与链接注释之间没有关联 - 但这是因为这是 Acrobat 建模链接的方式。如果您正在修改现有文档,则将从现有文件/流构建 PdfGeneratedDocument,添加注释,然后保存。

关于pdf - 在 PDF 文档中添加超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19492229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com