我在桌子的单元格中添加图像,但它不适合整个高度。
高度不固定,可以在2行之间更改。
我的图像如何适合我的细胞的整个高度?
以下是我的表格的创建代码:
int nbColumns = 7 + planning.size() *4;
Table table = new Table(nbColumns);
table.setWidthPercent(100);
table.addCell(createCell(""));
table.addCell(createCell("Col1"));
table.addCell(createCell("Col2"));
DateFormat hourFormat = new SimpleDateFormat("HH", Locale.FRENCH);
for(Date hourDate : planning){
table.addCell(new Cell(1,4).setTextAlignment(TextAlignment.CENTER).add(hourFormat.format(hourDate)).setFont(regular).setFontSize(10));
}
table.addCell(createCell("Long"));
table.addCell(createCell("A"));
table.addCell(createCell("B"));
table.addCell(createCell(""));
以下是我为每个单元格添加图像的方法:
String IMG = // my img path
table.addCell(createImageCell(IMG));
public static Cell createImageCell(String path) throws MalformedURLException {
Image img = new Image(ImageDataFactory.create(path));
Cell cell = new Cell().add(img.setMargins(0,0,0,0).setAutoScaleHeight(true).setAutoScale(true)).setPadding(0);
cell.setBorder(null);
return cell;
}
答案 0 :(得分:1)
为了提高知名度,将其作为答案发布。
关于自动缩放:
setAutoScaleHeight()
目前在开发分支的iText7中出现错误(因此该错误将出现在7.0.5和之前的版本中)。它目前设置AUTO_SCALE_WIDTH
(可能是由于复制粘贴疏忽),除非已设置AUTO_SCALE_WIDTH
属性,否则它们将两者都置为false并将AUTO_SCALE
设置为true
修复拼写错误并不会导致预期的行为,因为我们现在已经知道了这个问题,因此我们的积压已添加了它的票证。
双向自动缩放(通过AUTO_SCALE
- 属性)可正常工作,但会均匀缩放,因此只有在单元格高度大于宽度的情况下才会缩放到宽度。
至于暂时解决方案或绕过它的技巧,我没有通用的解决方案:(目前,除了等待修复之外。
我使用相对高度声明进行了快速测试(应该包含在7.0.5中),但是再次均匀地缩放图像。一些试验和错误以及Image.scaleAbsolute()
可以获得理想的结果,但这很难实现自动化。理论上你可以通过编写自己的自定义CellRenderer来挂钩布局过程,将最大单元格的高度提取到行中以与scaleAbsolute()
结合使用,但是你有点想写自动缩放在那一点逻辑自己。
为了传播良好做法,OP也发布了一些关于OP发布代码的评论:
int nbColumns = 7 + planning.size() *4;
Table table = new Table(nbColumns);
不推荐使用构造函数Table(int)(自7.0.2开始),并且可能导致更高版本中的意外行为(这在改进表格布局机制时完成)。传递UnitValue[]
最好,最好使用UnitValue.createPercentArray(float[])
或UnitValue.createPercentArray(float[])
img.setMargins(0,0,0,0).setAutoScaleHeight(true).setAutoScale(true))
<{>} setAutoScale
后setAutoScaleHeight
使后者变得多余。