如何在iText(Java)中垂直剪切文本锚点

时间:2014-06-20 14:54:54

标签: java itext

我已阅读Can I tell iText how to clip text to fit in a cellhttp://osdir.com/ml/java.lib.itext.general/2005-01/msg00112.html,我仍然对如何做我想要的事情感到困惑。我想剪辑文本,但仍然有锚参考工作。将锚放在模板中是不行的(根据第二个链接)。这是我正在使用的代码(我理解为什么它不起作用,而不是做什么):

public static void drawTextClipped(PdfContentByte canvas, Rectangle rect, float clipHeight, Phrase p, int horizontalAlignment)
{
    PdfTemplate tmp = canvas.createTemplate(rect.getWidth(), clipHeight);
    drawColumnText(tmp, new Rectangle(0, clipHeight - rect.getHeight(), rect.getWidth(), clipHeight), p, horizontalAlignment, false);
    canvas.addTemplate(tmp, rect.getLeft(), rect.getTop() - clipHeight);
}

public static float drawColumnText(PdfContentByte parent, Rectangle rect, Phrase p, int horizontalAlignment, boolean simulate)
{
    try
    {
        ColumnText ct = new ColumnText(parent);
        ct.setLeading(0, 1);
        ct.setSimpleColumn(rect);
        ct.setText(p);
        ct.setAlignment(horizontalAlignment);
        ct.go(simulate);
        return ct.getYLine();
    }
    catch (DocumentException de)
    {
        throw new ExceptionConverter(de);
    }
}

请记住,这显示正确,但当短语p是锚时,它是不可点击的。谢谢!

1 个答案:

答案 0 :(得分:0)

PdfTemplate类可用于创建 Form XObjects 。这些是可重复使用的PDF内容流。

链接永远不是内容流的一部分。链接是在页面级别定义的注释。您永远不能在Form XObject的级别定义链接。对于PDF专家的观点,认为您的代码可以正常工作是一个逻辑错误。

要使您的矩形可以点击,您需要添加方法addLinkAnnotation()。您需要将PdfWriterRectangle参数传递给此方法,并执行以下操作:

PdfAnnotation annotation = PdfAnnotation.createLink(
    writer, rect, PdfAnnotation.HIGHLIGHT_INVERT, new PdfAction("http://itextpdf.com"));
writer.addAnnotation(annotation);

这将使矩形可以点击。