我正在使用iText PDF 2.1.7创建PDF。任何人都有一个想法,如果使用iText PDF扩展单个字符的高度(一个结束的大括号,ASCII 125)?
拉伸花括号的高度取决于前一个单元格高度的高度。 (原谅我的样本图像,上部花括号应该比下部花括号高。
如果无法拉伸单个字符的高度,您可以建议使用iText PDF库的任何其他解决方法吗?
非常感谢。
我现在正在使用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);
}
}
答案 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