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
相关产品推荐
相关产品推荐

