iText 7 - 表格单元格中的图像填充全高

时间:2017-10-25 11:32:00

标签: java itext7

我在桌子的单元格中添加图像,但它不适合整个高度。

高度不固定,可以在2行之间更改。

我的图像如何适合我的细胞的整个高度?

这是我的问题: enter image description here

以下是我的表格的创建代码:

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;
        }

1 个答案:

答案 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))
<{>} setAutoScalesetAutoScaleHeight使后者变得多余。

相关问题