You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

itextpdf-5.0.6插入PdfPCell的Base64图片无旋转配置却意外偏转90度

问题原因

你遇到的图片自动旋转问题是iText 5.0.6版本的内置适配逻辑导致的,和你是否手动添加旋转代码无关:

  • 该版本通过addElement()方法向PdfPCell插入图片时,默认会根据单元格的可用空间自动调整图片的方向和大小。你当前使用的是4列宽度占满页面的表格,单格可用宽度远小于原始图片4160px的宽度,触发了版本内置的自动旋转90度适配空间的逻辑。

解决方法

修改创建Image对象后的逻辑,显式指定旋转角度和缩放规则,关闭默认自动适配即可,修改后的代码如下:

case (OPTION_TYPE_MEDIA):
    Image img = null;
    try {
        img = Image.getInstance(Base64.decode(val));
    } catch (Exception e) {
        throw new Exception("Problem in decoding image");
    }
    // 新增以下代码修复旋转问题
    // 强制固定旋转角度为0
    img.setRotation(0);
    // 按单元格可用宽度等比例缩放图片,避免触发自动适配逻辑
    // 按A4页面宽度、4列表格计算单格可用宽度,预留20px边距,非A4页面可替换对应页面尺寸
    float cellAvailableWidth = (PageSize.A4.getWidth() * 0.95f)/4 - 20;
    img.scaleToFit(cellAvailableWidth, 10000);

    String mediaName = addInfo.getMediaName();
    String imgName = String.format("File: %s", mediaName);

    Font captionFont = FontFactory.getFont(FontFactory.HELVETICA, 6);
    Paragraph caption = new Paragraph(imgName, captionFont);
    valueCell.addElement(img);
    valueCell.addElement(caption);
    break;

如果上述修改后仍有异常,可以改用直接构造图片单元格的方式,适配逻辑更可控:

// 替换原有valueCell.addElement(img)逻辑
img.setAlignment(Image.ALIGN_RIGHT);
PdfPCell imgInnerCell = new PdfPCell(img, false); // 第二个参数为false即关闭自动旋转适配
imgInnerCell.setBorder(Rectangle.NO_BORDER);
imgInnerCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
valueCell.addElement(imgInnerCell);

内容的提问来源于stack exchange,提问作者Pickeroll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:45:03