java - 文本 : set zoom level of external hyper link in pdf

标签 java itext itextpdf

我正在使用以下代码使用 Java 中的 itext 库设置外部超链接

Chunk chunk = new Chunk("Click to Open File");

PdfAction action = new PdfAction("externalfile.pdf");
action.put(PdfName.NEWWINDOW, PdfBoolean.PDFTRUE);
action.put(PdfName.ZOOM, PdfName.FIT);
chunk.setAction(action);

我想设置外部超链接的缩放级别:当我单击超链接时,文件应该打开并且FIT页面。

我尝试使用 action.put(PdfName.ZOOM, PdfName.FIT); 但它不起作用。

最佳答案

永远不要在未咨询 ISO-32000-1 的情况下手动创建 PDF 对象。

您想要创建一个 GoToR 操作。此类操作表示为 PDF 字典,其中可以包含以下键:

ISO-32000-1 Table 200

该表中没有名为 Zoom 的键,因此您的代码是错误的。

您需要 D 键,并且当您想要链接到页面并定义缩放系数时,您需要定义目标:

ISO-32000-1 Table 151

换句话说,目标必须是 PdfArray! PdfName.FIT 还不够!

(所有屏幕截图均取自 Adob​​e 在其网站上提供的 ISO-32000-1 副本。)

更新:

如果您想添加远程页面的链接,也可以按照iText in Action - Second Edition第197-198页的示例进行操作。 :参见LinkActions使用 gotoRemotePage() 的示例方法。

在内部,这个方法看起来像这样:

public static PdfAction gotoRemotePage(String filename, String dest, boolean isName, boolean newWindow) {
    PdfAction action = new PdfAction();
    action.put(PdfName.F, new PdfString(filename));
    action.put(PdfName.S, PdfName.GOTOR);
    if (isName)
        action.put(PdfName.D, new PdfName(dest));
    else
        action.put(PdfName.D, new PdfString(dest, PdfObject.TEXT_UNICODE));
    if (newWindow)
        action.put(PdfName.NEWWINDOW, PdfBoolean.PDFTRUE);
    return action;
}

请注意,这假设您在目标文件中有一个指定的目标。

我认为您宁愿使用带有页码的构造函数:

public PdfAction(String filename, int page) {
    put(PdfName.S, PdfName.GOTOR);
    put(PdfName.F, new PdfString(filename));
    put(PdfName.D, new PdfLiteral("[" + (page - 1) + " /FitH 10000]"));
}

当然,这不使用PdfName.FIT。如果您确实想自己定义目的地,则需要如下所示的行:

put(PdfName.D, new PdfLiteral("[" + (page - 1) + " /Fit]"));

关于java - 文本 : set zoom level of external hyper link in pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29621036/

相关文章:

java - 如何从 itext7 中的现有 PdfDocument 打开 PdfADocument?

java - iTextPdf 中的单元格之间是否可以有空格?

itext - 签署 PDF - 内存消耗

java - 从节点列表中按名称获取节点

java - Spring MVC 使用 GET 请求提交并绑定(bind)对象

java - 使用 iText,在内存中生成一个在磁盘上生成的 PDF

java - 使用 IText 在 PDF 中嵌入非嵌入字体

java - 在 mongodb 集合中找到一些值?

java - 错误无法注册 'com.temp.request.util.aspect.TraceLogger',因为使用该名称找到的类型不是方面

java XMLWorkerHelper - NoSuchMethodError : com. itextpdf.text.pdf.PdfPTable.addCell