我正在从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中可用的文件链接?如果是,那怎么办?
答案 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测试