itext PDF链接在Microsoft Edge中不起作用

时间:2018-11-15 15:02:08

标签: c# pdf hyperlink itext microsoft-edge

我正在从pdf文档中添加到文件的链接(使用itext创建) 这样:

Chunk chunk = new Chunk(fileName, font);
chunk.SetAnchor("./relative/path/to/file"); 

如果我在Google Chrome或Adobe Reader中打开文档,则链接非常有用。 但是,如果我在Microsoft Edge中打开PDF,那是行不通的。

是否甚至可以使用itext在pdf内创建一个在Microsoft Edge中可用的文件链接?如果是,那怎么办?

1 个答案:

答案 0 :(得分:2)

  

是否甚至可以使用itext在pdf内创建可在Microsoft Edge中运行的文件链接?

     

如果是,那么如何?

进行了一些测试,看来Edge不支持PDF文档中的相对链接。

尽管有完整的URI,但它确实支持绝对链接,例如

chunk = new Chunk("Only ASCII chars in target. Full path.");
chunk.SetAnchor("file:///C:/Repo/GitHub/testarea/itext5/target/test-outputs/annotate/Attachments/1.png");
doc.Add(new Paragraph(chunk));

与其他PDF查看器(在这种情况下为Adobe Reader,Chrome,请参阅your previous question)相比,它不支持特殊字符(如西里尔字母)的URL编码:

chunk = new Chunk("Cyrillic chars in target. URL-encoded. Full path. NOT WORKING");
chunk.SetAnchor("file:///C:/Repo/GitHub/testarea/itext5/target/test-outputs/annotate/" + WebUtility.UrlEncode("Вложения") + "/1.png");
doc.Add(new Paragraph(chunk));

但是它确实支持UTF-8编码中的特殊字符。由于UTF-8 PdfString编码是PDF-2.0的功能,而iText 5不支持PDF-2.0,因此必须在此处作弊以注入UTF-8编码的字符串:

chunk = new Chunk("Cyrillic chars in target. Action manipulated. Full path.");
chunk.SetAnchor("XXX");
action = (PdfAction)chunk.Attributes[Chunk.ACTION];
action.Put(PdfName.URI, new PdfString(new UTF8Encoding().GetBytes("file:///C:/Repo/GitHub/testarea/itext5/target/test-outputs/annotate/Вложения/1.png")));
doc.Add(new Paragraph(chunk));

经过Edge 41.16299.666.0测试

相关问题