Как обратиться к внутреннему документу в CTHyperLink, используя Apache Poi? - PullRequest
0 голосов
/ 15 июня 2019

Я хочу включить ссылку на внутренний встроенный документ, поэтому, нажав на нее, вы откроете документ.

Если я устанавливаю цель для внешнего источника (например, веб-URL), он работает нормально:

String linkId = xdoc.getPackagePart().addExternalRelationship("http://www.website.hu", XWPFRelation.HYPERLINK.getRelation()).getId();
CTHyperlink cLink = myParagraph.getCTP().addNewHyperlink();   
cLink.setId(linkId);

И все, отлично работает. Я только что создал внешнюю связь с целевым URL и типом связи и передал ее гиперссылке.

Теперь я хочу выполнить то же поведение, но на этот раз гиперссылка должна указывать на внутренний документ, который находится в docx под путем word/embeddings/test.docx

//embedded part is the packagepart for the document
String linkId = xdoc.getPackagePart().addRelationship(embeddedPart.getPartName(), TargetMode.INTERNAL, XWPFRelation.DOCUMENT.getRelation()).getId();
CTHyperlink cLink = myParagraph.getCTP().addNewHyperlink();   
cLink.setId(linkId);

И вот здесь наступает тупик: нажатие на ссылку (всплывающее окно показывает правильный путь внутри docx) автоматически меняет путь на внешний и указывает на мою файловую систему. Поэтому, если мой рабочий каталог находится в c:\myfile, ссылка на мой внутренний файл внутри docx 'word/embeddings/test.docx' будет изменена на c:/myfile/word/embeddings/test.docx, что, на мой взгляд, является неправильным поведением.

Я пытался передать разные аргументы в addRelationShip (), например, TargetMode.EXTERNAL, WPFRelation.HyperLink..etc, но результаты те же, и из-за отсутствия документации это просто проб и ошибок.

Так как мне ссылаться на внутренний документ с помощью гиперссылок?

...