使用 C# 调整 PDF 页面尺寸

在文档处理过程中,调整 PDF 页面尺寸是一个常见需求,例如将 A4 文档适配到 A3 纸张打印、为移动端优化显示尺寸,或统一不同来源 PDF 的页面规格。本文将介绍如何使用免费的 Free Spire.PDF for .NET 库,通过 C# 代码灵活设置或修改 PDF 页面尺寸。


一、安装免费 .NET 库

推荐使用 NuGet 进行安装(最便捷的方式):

  • Visual Studio 图形界面操作:
    右键单击项目 → 选择“管理 NuGet 程序包” → 搜索“Free Spire.PDF” → 点击安装。

  • 或使用 NuGet 命令行:

Install-Package FreeSpire.PDF

注意:Free Spire.PDF for .NET 版本对文档有 10 页的限制,适用于页数较少的小型文档处理。


二、设置/修改 PDF 页面尺寸

本文采用 “新建文档 + 模板绘制” 的方式调整页面尺寸。该方法通过 PdfTextLayout 的 OnePage 布局模式,自动将原页面内容缩放并完整适配到新尺寸页面,避免直接修改尺寸造成内容裁剪或布局错乱。

PDF 页面尺寸的基本单位是 点(Point),常用换算关系如下:

  • 1 英寸 = 72 点
  • A4(210mm × 297mm)≈ 595.28 点 × 841.89 点
  • A3(297mm × 420mm)≈ 841.89 点 × 1190.55 点

Free Spire.PDF 提供了 PdfUnitConvertor 工具类,可便捷地完成英寸、毫米与点之间的单位换算。

场景1:调整为标准预设尺寸(如 A1)

适用于将 PDF 批量转换为标准纸张尺寸(如 A1、A3、Letter 等)。直接使用库内置的 PdfPageSize 枚举,无需手动计算尺寸。

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace ChangePageSizeToStandardPaperSize
{
    class Program
    {
        static void Main(string[] args)
        {            
            // 1. 加载原始 PDF
            PdfDocument originPdf = new PdfDocument();
            originPdf.LoadFromFile("Sample.pdf");

            // 2. 创建新 PDF 文档
            PdfDocument newPdf = new PdfDocument();

            // 3. 遍历每一页,重新绘制到 A1 尺寸页面
            foreach(PdfPageBase page in originPdf.Pages)
            { 
                // 添加一个 A1 尺寸的新页面(无边距)
                PdfPageBase newPage = newPdf.Pages.Add(PdfPageSize.A1, new PdfMargins(0));
                
                // 设置布局为单页适配,确保内容完整缩放至新页面
                PdfTextLayout layout = new PdfTextLayout();
                layout.Layout = PdfLayoutType.OnePage;
                
                // 将原页面创建为模板并绘制到新页面
                PdfTemplate template = page.CreateTemplate();
                template.Draw(newPage, new PointF(0, 0), layout);
            }

            // 4. 保存结果
            newPdf.SaveToFile("PresetSize.pdf");
            
            // 5. 释放资源
            originPdf.Close();
            newPdf.Close();
        }
    }
}

关键点说明:

  • PdfPageSize.A1:直接调用预设尺寸,支持 A0–A4、Letter、Legal 等常见规格。
  • PdfLayoutType.OnePage:确保原页面内容整体缩放并完整放入新页面。
  • PdfTemplate:将原页面作为可重用的绘图模板,实现内容迁移。

场景2:调整为自定义尺寸

适用于需要非标准尺寸的场景(例如 6.5×8.5 英寸)。利用 PdfUnitConvertor 自动完成单位换算,避免手动计算误差。

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace ChangePageSizeToCustomPaperSize
{
    class Program
    {
        static void Main(string[] args)
        {
            PdfDocument originPdf = new PdfDocument();
            originPdf.LoadFromFile("Sample.pdf");

            PdfDocument newPdf = new PdfDocument();

            // 单位换算:英寸 → 点
            PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
            float width  = unitCvtr.ConvertUnits(6.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);
            float height = unitCvtr.ConvertUnits(8.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);
            SizeF customSize = new SizeF(width, height);

            foreach (PdfPageBase page in originPdf.Pages)
            {
                // 添加自定义尺寸的页面
                PdfPageBase newPage = newPdf.Pages.Add(customSize, new PdfMargins(0));
                
                PdfTextLayout layout = new PdfTextLayout();
                layout.Layout = PdfLayoutType.OnePage;
                
                PdfTemplate template = page.CreateTemplate();
                template.Draw(newPage, new PointF(0, 0), layout);
            }

            newPdf.SaveToFile("CustomSize.pdf");
            
            originPdf.Close();
            newPdf.Close();
        }
    }
}

关键点说明:

  • PdfUnitConvertor:支持英寸、毫米、点、厘米等单位之间的灵活换算。
  • ConvertUnits 方法:传入数值、原单位与目标单位,自动返回换算结果。
  • SizeF:用于定义任意宽度与高度,满足非标准尺寸需求。

三、注意事项

  1. 单位统一:确保尺寸的宽高使用相同单位(通常为点),避免因单位不一致导致页面偏差。
  2. 内容缩放:PdfLayoutType.OnePage 会自动将原内容缩放到新页面内。如需保持原始比例或自定义缩放,可结合 ScaleTransform 方法进一步控制。
  3. 格式兼容性:库生成的 PDF 兼容主流阅读器(Adobe Acrobat、Chrome、Edge 等)。若原 PDF 包含表单、注释等复杂元素,调整尺寸后建议验证其完整性。
  4. 资源释放:操作完成后调用 Close() 方法释放 PdfDocument 对象,避免文件被占用导致后续操作失败。

该方案完全基于代码实现,无需依赖外部工具,适合集成到 .NET 文档处理系统中,在中小规模 PDF 尺寸调整场景中具有较好的实用性与稳定性。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容