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

如何缩放图片适配PDF页面:消除白边并控制页面尺寸

解决方案:让图片转PDF的页面尺寸接近标准纸张且无白边

核心思路

  • 当选择标准纸张尺寸时,先计算图片与目标纸张的适配缩放因子,确保图片能完整放进纸张的同时,最大化利用纸张空间
  • 缩放图片后,将PDF页面尺寸直接设为缩放后的图片尺寸,消除白边的同时,让页面尺寸尽可能接近目标标准纸张

修改后的CreateDoc方法代码

private void CreateDoc(string srcFilename, string folder, PageSize pageSize)
{
    string dstFilename = System.IO.Path.Combine(folder, System.IO.Path.GetFileNameWithoutExtension(srcFilename) + ".pdf");

    using PdfWriter writer = new(dstFilename);
    using PdfDocument pdfDocument = new(writer);

    iText.IO.Image.ImageData imageData = iText.IO.Image.ImageDataFactory.Create(srcFilename);
    iText.Layout.Element.Image image = new(imageData);

    iText.Kernel.Geom.Rectangle? targetPageRect = null;
    float scaleFactor = 1f;

    if (pageSize == PageSize.ImageSize)
    {
        // 保持原逻辑:页面尺寸与图片一致
        targetPageRect = new(0, 0, (float)image.GetImageWidth(), (float)image.GetImageHeight());
    }
    else
    {
        targetPageRect = pageSize.PdfSize();
        if (targetPageRect == null)
            throw new Exception("Page size not supported!");

        // 计算缩放因子:取宽、高比例中的较小值,确保图片完整适配目标纸张
        float widthRatio = targetPageRect.GetWidth() / image.GetImageWidth();
        float heightRatio = targetPageRect.GetHeight() / image.GetImageHeight();
        scaleFactor = Math.Min(widthRatio, heightRatio);

        // 计算缩放后的图片尺寸,作为最终页面尺寸
        float scaledWidth = image.GetImageWidth() * scaleFactor;
        float scaledHeight = image.GetImageHeight() * scaleFactor;
        targetPageRect = new iText.Kernel.Geom.Rectangle(0, 0, scaledWidth, scaledHeight);

        // 应用缩放因子到图片
        image.ScaleAbsolute(scaledWidth, scaledHeight);
    }

    if (targetPageRect == null)
        throw new Exception("Page not created!");

    // 使用缩放后的图片尺寸创建文档
    iText.Layout.Document document = new(pdfDocument, new iText.Kernel.Geom.PageSize(targetPageRect));

    // 图片位置居中(因页面尺寸与图片一致,实际偏移量为0,保留逻辑兼容)
    float offX = (targetPageRect.GetWidth() - image.GetImageScaledWidth()) / 2;
    float offY = (targetPageRect.GetHeight() - image.GetImageScaledHeight()) / 2;
    image.SetFixedPosition(offX, offY);

    document.SetMargins(0, 0, 0, 0);
    document.Add(image);
}

关键修改说明

  1. 缩放因子计算:通过对比图片与目标纸张的宽、高比例,取最小值作为缩放因子,保证图片缩放后不会超出纸张边界,同时是能适配的最大比例。
  2. 页面尺寸调整:将PDF页面尺寸设为缩放后的图片尺寸,彻底消除白边,且这个尺寸是最接近目标标准纸张的可能值。
  3. 图片缩放方式:改用ScaleAbsolute直接设置缩放后的宽高,比ScaleToFit更直观,避免潜在的尺寸计算偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:40:09