Itext:在pdf中设置外部超链接的缩放级别

时间:2015-04-14 06:57:59

标签: 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);,但它无效。

1 个答案:

答案 0 :(得分:2)

请不要手动手动创建PDF对象 ,而无需咨询ISO-32000-1。

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

ISO-32000-1 Table 200

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

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

ISO-32000-1 Table 151

换句话说,目的地必须是PdfArrayPdfName.FIT还不够!

(所有屏幕截图均取自Adobe在其网站上提供的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]"));