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

Android端生成PDF时如何将图片居中并自适应调整页面大小

问题根因

  • 居中失效:iText的坐标原点为页面左下角,你之前直接将页面中心坐标作为图片的位置参数,实际是把图片的左下角放在了页面中心,自然无法实现居中效果,需要额外减去图片自身缩放后宽高的一半。
  • 图片超出页面:缺少图片尺寸适配逻辑,超过页面大小的图片没有自动缩小,所以会溢出边界。

修正后代码

public void createPdf(String dest, int pageNum, int pageHeight, int pageWidth) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    // 元数据全局设置一次即可,无需放到循环中重复执行
    document.addAuthor("PDF Reader Osdifa's User");
    document.addCreator("PDF Reader Osdifa");
    document.setPageCount(pageNum);
    
    // 页面边距,可根据需求调整,避免图片贴边
    float margin = 10f;

    for (Uri image : allSelectedImages) {
        Image img = Image.getInstance(image.getPath());
        Rectangle pageSize = new Rectangle(pageHeight, pageWidth);
        document.setPageSize(pageSize);
        document.newPage();
        
        // 计算页面可绘制区域的宽高(扣除边距)
        float availableWidth = pageSize.getWidth() - 2 * margin;
        float availableHeight = pageSize.getHeight() - 2 * margin;
        
        // 分别计算图片、可绘制区域的宽高比
        float imgRatio = img.getWidth() / img.getHeight();
        float pageRatio = availableWidth / availableHeight;
        
        // 按比例计算缩放后的图片尺寸,保证不会超出页面范围
        float scaledWidth, scaledHeight;
        if (imgRatio > pageRatio) {
            // 图片宽高比大于页面,按宽度适配
            scaledWidth = availableWidth;
            scaledHeight = scaledWidth / imgRatio;
        } else {
            // 图片宽高比小于等于页面,按高度适配
            scaledHeight = availableHeight;
            scaledWidth = scaledHeight * imgRatio;
        }
        // 应用缩放设置
        img.scaleAbsolute(scaledWidth, scaledHeight);
        
        // 计算居中坐标,原点在页面左下角
        float x = (pageSize.getWidth() - scaledWidth) / 2;
        float y = (pageSize.getHeight() - scaledHeight) / 2;
        img.setAbsolutePosition(x, y);
        
        document.add(img);
    }
    document.close();
}

上述代码同时处理了居中显示和尺寸适配两个需求,无论图片尺寸大于还是小于页面,都会自动缩放后居中展示,你可以根据实际需要调整margin参数修改边距大小。

内容的提问来源于stack exchange,提问作者Syed Irfan Hussaini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:24:04