iText PDF拉伸角色

时间:2013-06-05 06:44:11

标签: pdf itext

我正在使用iText PDF 2.1.7创建PDF。任何人都有一个想法,如果使用iText PDF扩展单个字符的高度(一个结束的大括号,ASCII 125)?

Stretched closing curly brace

拉伸花括号的高度取决于前一个单元格高度的高度。 (原谅我的样本图像,上部花括号应该比下部花括号高。

如果无法拉伸单个字符的高度,您可以建议使用iText PDF库的任何其他解决方法吗?

非常感谢。


Curly brace

我现在正在使用iText版本5.4.0。

我在缩放图像高度时遇到问题。此外,虽然我复制了Cell的位置,但Image处于错误的位置。大括号的底部部分不会显示。

你知道缩放图像的方式和我如何定位它有什么问题吗?感谢。

public void cellLayout(PdfPCell cell, Rectangle position,
    PdfContentByte[] canvases) {
    try {

        BaseFont bf = BaseFont.createFont(
            CreatePDFCurlyBrace.DEFAULT_ENGLISH_FONT_TTF, BaseFont.IDENTITY_H,
            BaseFont.EMBEDDED);
        String curlyBrace = "}";
        float width = bf.getWidthPoint(curlyBrace, 12);
        float height = bf.getAscentPoint(curlyBrace, 12)
            - bf.getDescentPoint(curlyBrace, 12);

        PdfTemplate template = this.cb.createTemplate(width, height);
        template.beginText();
        template.setFontAndSize(bf, 12);
                    template.setTextMatrix(0, bf.getDescentPoint(curlyBrace, 12));
        template.showText(curlyBrace);
        template.endText();

        // Scale the image so that its height corresponds 
        //   with the height of the cell
        Image img = Image.getInstance(template);
        img.scaleToFit(1000f, position.getHeight());
        img.setAbsolutePosition(position.getRight(), position.getBottom());
                    cb.addImage(img);

    } catch (Exception e) {
        throw new ExceptionConverter(e);
    }
}

1 个答案:

答案 0 :(得分:0)

如果左边的部分是一个单元格,而右边的部分是一个单元格,并且花括号是单元格之间的“边界”,我会为左边或右边的单元格定义一个单元格事件。 / p>

我会创建一个简单的PdfTemplate,我会添加一个大括号。我将PdfTemplate的维度基于花括号的度量信息(ascender - descender =实际高度)。我不在乎字体大小;我们只需要一个带有大括号字形的PdfTemplate对象。

我会将PdfTemplate包装在Image对象中。别担心:这不会将“矢量”模板变成“光栅”图像。 Image对象只是让操作模板更容易。

我会在单元格事件中实现cellLayout()方法,并缩放图像以使其高度与单元格的高度相对应(不会丢失分辨率:您使用的是PdfTemplate,您正在添加矢量数据,而不是光栅图像),并将图像添加到正确的位置(使用cellLayout()参数传递给position方法。)

不言而喻,我不会使用iText 2.1.7(一个4岁的版本!)来执行此任务,因为几年前我修复了导致PdfPTable的错误一百万次失去一排。为了避免这个错误,我不会欺骗我的客户使用被认为过时的iText版本:http://lowagie.com/itext2