更新 PDF 中的链接
Contents
[
Hide
]
更新 PDF 文件中的链接
如在 PDF 文件中添加超链接中所述,LinkAnnotation 类可以在 PDF 文件中添加链接。还有一个类似的类用于从 PDF 文件内部获取现有链接。如果需要更新现有链接,请使用此方法。要更新现有链接:
-
加载一个 PDF 文件。
-
转到 PDF 文件中的特定页面。
-
使用 GoToAction 对象的 Destination 属性指定链接目标。
-
目标页面是使用 XYZExplicitDestination 构造函数指定的。
将链接目标设置为同一文档中的页面
以下代码片段向您展示了如何更新 PDF 文件中的链接,并将其目标设置为文档的第二页。
public static void SetLinkTargetToAPageInTheSameDocument() {
// 加载 PDF 文件
Document document = new Document(_dataDir + "UpdateLinks.pdf");
Page page = document.getPages().get_Item(1);
// 从文档的第一页获取第一个链接注释
LinkAnnotation linkAnnot = (LinkAnnotation)page.getAnnotations().get_Item(1);
// 修改链接:更改链接目标
GoToAction goToAction = (GoToAction)linkAnnot.getAction();
// 指定链接对象的目标
// 表示显示页面与坐标 (left, top) 定位在窗口左上角的显式目标,
// 并且页面内容按缩放因子放大。
// 第一个参数是目标页码。
// 第二个是左坐标
// 第三个是顶部坐标
// 第四个参数是在显示相应页面时的缩放因子。使用 2 表示页面将以 200% 缩放显示
goToAction.setDestination(new XYZExplicitDestination(1, 1, 2, 2 ));
// 保存带有更新链接的文档
document.save(_dataDir + "PDFLINK_Modified_UpdateLinks_out.pdf");
}
设置链接目标为网页地址
要更新超链接以指向网页地址,需实例化 GoToURIAction 对象,并将其传递给 LinkAnnotation 的 Action 属性。以下代码片段展示了如何在 PDF 文件中更新链接并将其目标设置为网页地址。
public static void SetLinkDestinationToWebAddress() {
// 加载 PDF 文件
Document document = new Document(_dataDir + "UpdateLinks.pdf");
Page page = document.getPages().get_Item(1);
// 从文档的第一页获取第一个链接注释
LinkAnnotation linkAnnot = (LinkAnnotation)page.getAnnotations().get_Item(1);
// 修改链接:更改链接动作并将目标设置为网页地址
linkAnnot.setAction(new GoToURIAction("www.aspose.com"));
// 保存带有更新链接的文档
document.save(_dataDir + "PDFLINK_Modified_UpdateLinks_out.pdf");
}
将链接目标设置为另一个 PDF 文件
以下代码片段展示了如何在 PDF 文件中更新链接并将其目标设置为另一个 PDF 文件。
public static void SetLinkTargetToAnotherPDFFile() {
// 加载 PDF 文件
Document document = new Document(_dataDir + "UpdateLinks.pdf");
Page page = document.getPages().get_Item(1);
LinkAnnotation linkAnnot = (LinkAnnotation)page.getAnnotations().get_Item(1);
GoToRemoteAction goToR = (GoToRemoteAction)linkAnnot.getAction();
// 下一行更新目标,不更新文件
goToR.setDestination(new XYZExplicitDestination(2, 0, 0, 1.5));
// 下一行更新文件
goToR.setFile (new FileSpecification(_dataDir + "input.pdf"));
// 保存带有更新链接的文档
document.save(_dataDir + "PDFLINK_Modified_UpdateLinks_out.pdf");
}
更新 LinkAnnotation 文本颜色
链接注释不包含文本。 相反,文本被放置在标注下的页面内容中。因此,要更改文本的颜色,请替换页面文本的颜色,而不是尝试更改标注的颜色。以下代码片段显示了如何更新PDF文件中链接标注的颜色。
public static void UpdateLinkAnnotationTextColor () {
// 加载PDF文件
Document document = new Document(_dataDir + "UpdateLinks.pdf");
Page page = document.getPages().get_Item(1);
for (Annotation annotation : page.getAnnotations())
{
if (annotation.getAnnotationType() == AnnotationType.Link)
{
// 搜索标注下的文本
TextFragmentAbsorber ta = new TextFragmentAbsorber();
Rectangle rect = annotation.getRect();
rect.setLLX(rect.getLLX()-10);
rect.setLLY(rect.getLLY()-10);
rect.setURX(rect.getURX()+ 10);
rect.setURY(rect.getURY()+ 10);
ta.setTextSearchOptions(new TextSearchOptions(rect));
ta.visit(page);
// 更改文本颜色。
for (TextFragment tf : ta.getTextFragments())
{
tf.getTextState().setForegroundColor(Color.getRed());
}
}
}
// 保存更新了链接的文档
document.save(_dataDir + "UpdateLinkTextColor_out.pdf");
}