使用Apache Velocity模板时PDF中Logo无法适配指定尺寸容器的问询
解决Apache Velocity生成PDF时Logo超出容器尺寸的问题
你的代码里用了绝对定位的<fo:block>,这会让元素脱离容器的常规布局流,导致overflow属性无法生效,再加上没对Logo本身的尺寸做限制,才会出现超出指定52mm×18mm容器的情况。下面是几种可行的解决方法:
按比例缩放Logo至容器尺寸
假设$liveArea.render("logo_live_area")输出的是Logo的资源路径,直接用<fo:external-graphic>包裹并设置缩放规则,既能保证Logo完整显示,又不会超出容器:#macro(logoLiveAreaSection) <fo:block-container width="52mm" height="18mm"> <fo:block> <fo:external-graphic src="$liveArea.render('logo_live_area')" width="100%" height="100%" scaling="uniform" content-width="scale-to-fit" content-height="scale-to-fit"/> </fo:block> </fo:block-container> #end其中
scaling="uniform"会严格保持Logo的宽高比,scale-to-fit会自动将Logo缩放到刚好不超出容器的最大尺寸。修复绝对定位场景下的overflow生效问题
如果必须保留绝对定位的布局,需要给内部的绝对定位块设置和容器一致的宽高,再让Logo自适应这个块的尺寸,同时容器的overflow="hidden"就能正常截断超出部分:#macro(logoLiveAreaSection) <fo:block-container width="52mm" height="18mm" position="relative" overflow="hidden"> <fo:block position="absolute" top="0" left="0" width="100%" height="100%"> <fo:external-graphic src="$liveArea.render('logo_live_area')" width="100%" height="100%" scaling="uniform"/> </fo:block> </fo:block-container> #end注意:这种方法如果Logo宽高比和容器差异大,会被截断,优先推荐第一种缩放方案。
预处理Logo尺寸
如果上述方法仍有问题,可以提前将Logo的物理尺寸调整为不超过52mm×18mm,或者调整其宽高比尽量接近容器的52:18(约2.89:1),减少渲染时的缩放比例,避免渲染引擎出现异常。
内容的提问来源于stack exchange,提问作者Riya
相关产品推荐
相关产品推荐

