如何查询Base Paragraph元素位置?为了在不保存文件的情况下添加 Link 注释

How to query the Base Paragraph element position? in order to add Link Annotation without saving the file

我正在创建一个简单的 PDF 文件,其中包含一些文本和附加到该文本的 hyperlink:

Document pdfDocument = new Document();
Page pdfPage = pdfDocument.Pages.Add();
TextFragment textFragment = new TextFragment("My Text");

Table table = new Table();            
Row row = table.Rows.Add();
Cell cell = row.Cells.Add();
        
cell.Paragraphs.Add(textFragment);            

pdfPage.Paragraphs.Add(table);    

LinkAnnotation link = new LinkAnnotation(pdfPage, textFragment.Rectangle);  //[Before Save]textFragment.Rectangle: 0,0,35.56,10
link.Action = new GoToURIAction("Link1 before save");
pdfPage.Annotations.Add(link);           

pdfDocument.Save(dataDir + "SimplePDFWithLink.pdf");

问题是 link 注释被分配给屏幕底部的保存前矩形 [0,0,33.56,10],textFragment 被添加到一个不同的矩形(我不能在这里设置 Position 属性 因为我不知道它,它是相对于单元格的 table)。

为了解决这个问题,我尝试保存页面,然后才使用 TextFragmentAbsorber

搜索 textFragment
pdfDocument.Save(dataDir + "SimplePDFWithLink.pdf");

//[After Save]textFragment.Rectangle: 0,0,90,770

TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber();
pdfPage.Accept(textFragmentAbsorber);

foreach (TextFragment absorbedTextFragment in textFragmentAbsorber.TextFragments)
{
    link = new LinkAnnotation(pdfPage, absorbedTextFragment.Rectangle);
    link.Action = new GoToURIAction("Link 2 after save");
    pdfPage.Annotations.Add(link);
}

pdfDocument.Save(dataDir + "SimplePDFWithLink.pdf");

我的问题:

是否可以将简单的 link 添加到 TextFragmentBaseParagraph 而不是 StructureElement 而无需 先保存文档?

这是一个简单的结果演示,您可以看到在保存文档之前,link 被添加到文档的左下角而不是文本矩形:

更新: 如果我用一些任意值指定 TextFragmentPosition 值,然后 link 会准确地添加到文本中,但我不知道 [=14= 是什么] 元素的值,因为它是使用 Table.

动态构建的

使用 TextFragmentTextSegment 确实有效并添加了 link 而没有 pre-saving 文件:

TextFragment textFragment = new TextFragment("My Text");
TextSegment textSegment = new TextSegment("Link to File");
textSegment.Hyperlink = new Aspose.Pdf.WebHyperlink("www.google.com");
textFragment.Segments.Add(textSegment);

值得一提的是,它在 link 到用户 file-system 上的文件时效果很好,例如:

textSegment.Hyperlink = new Aspose.Pdf.WebHyperlink("Files\foo.png");