Перекрестная ссылка в PDF не работает в Microsoft Edge - PullRequest
0 голосов
/ 15 ноября 2018

Я добавляю ссылку на файл из PDF-документа (созданного с помощью itext) следующим образом:

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

Ссылка отлично работает, если я открываю документ в Google Chrome или Adobe Reader.Но это не сработает, если я открою свой PDF в Microsoft Edge.

Возможно ли даже создать ссылку на файл внутри pdf с itext, которая будет работать в Microsoft Edge?Если да, то как?

1 Ответ

0 голосов
/ 19 ноября 2018

Можно ли даже создать ссылку на файл внутри pdf с itext, которая будет работать в 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, ср. ваш предыдущий вопрос в этом контексте) не поддерживает кодировку 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));

Проверено с краем 41.16299.666.0

...