Java iText:在CellEvent期间设置单元格高度
我正在使用iText创建带有表的PDF。表格标题有90度旋转的文本,我正在使用CellEvent(下面的代码)添加这些文本。这非常有效,除非表格跨越多个页面,否则旋转的单元格标题文本会从页面顶部流出 我试过设置单元格。设置固定高度(100),但似乎对单元格没有影响。我也尝试过,但我无法让单元格显示带有文本的结果图像Java iText:在CellEvent期间设置单元格高度,java,itext,cell,Java,Itext,Cell,我正在使用iText创建带有表的PDF。表格标题有90度旋转的文本,我正在使用CellEvent(下面的代码)添加这些文本。这非常有效,除非表格跨越多个页面,否则旋转的单元格标题文本会从页面顶部流出 我试过设置单元格。设置固定高度(100),但似乎对单元格没有影响。我也尝试过,但我无法让单元格显示带有文本的结果图像 @Override public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] ca
@Override
public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) {
PdfContentByte canvas = canvases[PdfPTable.TEXTCANVAS];
try {
canvas.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA_BOLD, BaseFont.WINANSI, false), this.fontSize);
} catch (DocumentException | IOException e) {
e.printStackTrace();
}
if (this.alignment == PdfPCell.ALIGN_CENTER) {
this.left = ((position.getRight() - position.getLeft()) / 2 );
}
else if (this.alignment == PdfPCell.ALIGN_MIDDLE) {
this.top = ((position.getTop() - position.getBottom()) / 2 );
}
canvas.showTextAligned(this.alignment, this.text, position.getLeft() + this.left, position.getTop() - this.top, this.rotation);
}
下面是单元格头溢出的情况。在本例中,应显示月份和年份(2016年3月)
我希望根据实际使用的标题文本将单元格设置为任意高度。关于如何解决这个问题有什么想法吗?在绘制单元格后,会触发单元格事件。您可能已经怀疑iText将带有位置的矩形
对象传递给单元格布局
方法。传递了PdfPCell
对象,但该对象仅用于只读目的。由于位置是固定的,因此不能在其上使用设置固定高度()
看着屏幕截图,我感到困惑:为什么要使用单元格事件添加旋转90度的内容?解决问题的方法是使用setRotation()
方法:
PdfPCell cell = new PdfPCell(new Phrase("May 16, 2016"));
cell.setRotation(90);
现在,内容将被旋转,单元格的大小将适应内容。请看一个例子:
public void createPdf(String dest)抛出IOException、DocumentException{
文档=新文档();
getInstance(文档,新文件输出流(dest));
document.open();
PdfPTable=新的PdfPTable(8);
对于(int i=0;i<8;i++){
PDFP电池=
新的PdfPCell(新短语(String.format(“May%s,2016”,i+15));
细胞旋转(90);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
表2.addCell(cell);
}
对于(int i=0;i<16;i++){
表1.addCell(“hi”);
}
文件。添加(表);
document.close();
}
结果如下所示:
请注意,“水平”和“垂直”这两个概念将旋转为。如果要使旋转的内容水平居中,则必须使内容的垂直对齐居中,并旋转对齐的内容。这非常适用于90度增量的旋转,我接受这个答案。我用CellEvent处理它是因为需要任何角度的文本,但我想我会看看90 dgree旋转是否适用于所有要求。谢谢
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(8);
for (int i = 0; i < 8; i++) {
PdfPCell cell =
new PdfPCell(new Phrase(String.format("May %s, 2016", i + 15)));
cell.setRotation(90);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
table.addCell(cell);
}
for(int i = 0; i < 16; i++){
table.addCell("hi");
}
document.add(table);
document.close();
}