Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将超链接添加到PDF文档中_Pdf_Hyperlink_Itextsharp - Fatal编程技术网

将超链接添加到PDF文档中

将超链接添加到PDF文档中,pdf,hyperlink,itextsharp,Pdf,Hyperlink,Itextsharp,我目前正在扩展我们的自定义PDF编写器,以便能够编写指向网站的链接。然而,我有一个问题,因为我在任何地方都找不到如何将链接放入PDF 这就是打印文本的内容: BT 70 50 TD /F1 12 Tf (visit my website!) Tj ET 我现在需要的是将其包装成一个超链接,以便用户在单击“访问我的网站”时重定向到我的网站 你知道怎么做吗?我不能使用工具——我需要知道如何将正确的PDF命令写入文件,因为很多文档都是使用C#动态生成的。目前我正在使用iTextSharp,但是我找不

我目前正在扩展我们的自定义PDF编写器,以便能够编写指向网站的链接。然而,我有一个问题,因为我在任何地方都找不到如何将链接放入PDF

这就是打印文本的内容:

BT
70 50 TD
/F1 12 Tf
(visit my website!) Tj
ET
我现在需要的是将其包装成一个超链接,以便用户在单击“访问我的网站”时重定向到我的网站

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

目前我正在使用iTextSharp,但我找不到任何写超链接的功能

请查看or:

因此,使用iTextSharp添加链接非常简单


如果仍要手动执行此操作,请查看。第12.5.6.5节解释了链接注释,第12.6.4.7节显示了在该链接注释中使用的URI操作。

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

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

唯一“棘手”的是,页面上的内容与链接注释之间不存在关联,但这是因为Acrobat就是这样对链接进行建模的。如果要修改现有文档,则需要从现有文件/流构造PDFGGeneratedDocument,添加注释,然后保存。

我了解您的解决方案,但我无法使用此方法,因为我直接写入PdfContentByte类中的ByteBuffer对象。所以在本例中,我需要知道语法并手动编写。然而,我并不真正理解PDF规范,因为它不包含任何有用的示例。也许你可以帮我做这个?如果你想手工做的话,你应该可以复制@mkl的例子并查看源代码。链接时,您需要记住PDF与HTML不同,因此显示文本和链接之间没有任何关联或绑定,它们只是碰巧具有相同(或类似)的位置。您不需要“开始文本、创建锚定、显示文本、结束锚定、结束文本”。这意味着您(可能)无法使用
PdfContentByte
创建链接,因为这只是图形/文本流,而不是页面级词典。@NeoKenshinX-plinth的回答显示了链接在pdf中的外观。但我认为你一开始就错误地认为链接是页面内容流的一部分。事实并非如此。通常,所有动态或交互式的操作都是使用与内容分离的注释来完成的。正如Chris所说,只需运行我指向您的示例并分析生成的PDF。好的,谢谢您的所有输入。下周我回到办公室后,我会在这个问题上再调查一段时间。下周我会告诉你我的情况:)谢谢你的评论-很抱歉我在度假。我将很快查看您的解决方案:)
<< /Type /Annot /Subtype /Link /Rect [ x1 y1 x2 y2 ] >>
<< /Type /Annot /Subtype /Link /Rect [ x1 y1 x2 y2 ]
   /A << /Type /Action /S /URI /URI (http://www.google.com) >>
>>
// 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");