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

使用XSL-FO/Antenna House Formatter 6.6如何确保图片始终适配页面?

竖长图片适配页面的解决办法
  • 预计算动态缩放比例
    既然你已经知道图片的像素尺寸、页面上下边距,还有标题的高度,直接计算出图片能使用的最大可用页面空间:

    • 页面可用宽度 = 页面总宽度 - 左右边距
    • 页面可用高度 = 页面总高度 - 上下边距 - 标题文本的高度
      接着算出两个缩放比例:宽度方向的适配比例(可用宽度/图片像素宽)、高度方向的适配比例(可用高度/图片像素高),取其中更小的那个作为最终缩放因子,把这个因子赋值给图片的scale属性,同时保留keep-with-previous="always"。这样不管是横图还是竖图,都会按最严格的限制缩放,不会超出页面范围。
      示例XSL代码:
    <!-- 假设从XML或外部数据获取图片尺寸、标题高度 -->
    <xsl:variable name="img-pixel-w" select="document('image-meta.xml')//image[@id=$img-id]/width"/>
    <xsl:variable name="img-pixel-h" select="document('image-meta.xml')//image[@id=$img-id]/height"/>
    <xsl:variable name="title-height" select="12mm"/> <!-- 实际标题高度可通过计算或预设 -->
    <!-- 以A4页面为例,总宽210mm,总高297mm,上下边距25mm,左右边距20mm -->
    <xsl:variable name="page-available-w" select="210 - 20 - 20"/>
    <xsl:variable name="page-available-h" select="297 - 25 - 25 - $title-height"/>
    
    <xsl:variable name="scale-w" select="$page-available-w div $img-pixel-w"/>
    <xsl:variable name="scale-h" select="$page-available-h div $img-pixel-h"/>
    <xsl:variable name="final-scale" select="if ($scale-w &lt; $scale-h) then $scale-w else $scale-h"/>
    
    <external-graphic src="{$img-src}" scale="{$final-scale}" keep-with-previous="always"/>
    
  • 结合scale-to-fit与高度限制
    不用手动算比例的话,可以给图片同时设置width="100%"和动态计算的剩余高度,再开启scale-to-fit="both",让格式化程序自动选择最优缩放方向。核心是要把图片的高度限制在标题下方的剩余页面空间里,示例代码:

    <xsl:variable name="remaining-page-h" select="297 - 25 - 25 - $title-height"/> <!-- A4示例剩余高度 -->
    <external-graphic src="{$img-src}" 
                     width="100%" 
                     height="{$remaining-page-h}mm" 
                     scale-to-fit="both" 
                     keep-with-previous="always"/>
    
  • 极端情况兜底:取消强制同行
    如果遇到标题过长,导致剩余页面空间极小的情况,可以先判断缩放后的图片高度是否超过剩余空间,要是超出就自动取消keep-with-previous,让图片单独分页:

    <xsl:variable name="scaled-h" select="$img-pixel-h * $final-scale"/>
    <external-graphic src="{$img-src}" 
                     scale="{$final-scale}" 
                     keep-with-previous="{if ($scaled-h &lt;= $page-available-h) then 'always' else 'auto'}"/>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:07:36