如何查询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 添加到 TextFragment
(BaseParagraph
而不是 StructureElement
) 而无需 先保存文档?
这是一个简单的结果演示,您可以看到在保存文档之前,link 被添加到文档的左下角而不是文本矩形:
更新:
如果我用一些任意值指定 TextFragment
的 Position
值,然后 link 会准确地添加到文本中,但我不知道 [=14= 是什么] 元素的值,因为它是使用 Table
.
动态构建的
使用 TextFragment
和 TextSegment
确实有效并添加了 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");
我正在创建一个简单的 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 添加到 TextFragment
(BaseParagraph
而不是 StructureElement
) 而无需 先保存文档?
这是一个简单的结果演示,您可以看到在保存文档之前,link 被添加到文档的左下角而不是文本矩形:
更新:
如果我用一些任意值指定 TextFragment
的 Position
值,然后 link 会准确地添加到文本中,但我不知道 [=14= 是什么] 元素的值,因为它是使用 Table
.
使用 TextFragment
和 TextSegment
确实有效并添加了 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");