itext : 在 pdf 中设置外部 hyper link 的缩放级别

Itext : set zoom level of external hyper link in pdf

我正在使用以下代码设置 external hyperlink 使用 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);

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

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

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

您想创建一个 GoToR 操作。这样的操作被表示为一个 PDF 字典,它可以包含以下键:

没有键名 Zoom table,因此你的代码是错误的。

您需要 D 键,并且您想要 link 到一个页面并定义缩放系数,您需要定义一个目的地:

也就是说,目的地必须是PdfArrayPdfName.FIT 不够!

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

更新:

如果你想在远程页面添加一个link,你也可以按照iText in Action - Second Edition: see the LinkActions example that uses the gotoRemotePage()方法第197-198页的例子。

在内部,此方法如下所示:

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]"));