C#使用Spire.PDF for .NET實(shí)現(xiàn)設(shè)置或修改PDF頁(yè)面尺寸
在文檔處理場(chǎng)景中,調(diào)整 PDF 頁(yè)面尺寸是常見(jiàn)需求,例如將 A4 尺寸的 PDF 適配 A3 打印紙張、為移動(dòng)端顯示自定義窄版頁(yè)面,或統(tǒng)一多來(lái)源 PDF 的頁(yè)面規(guī)格。本文將介紹如何使用免費(fèi)庫(kù) Free Spire.PDF for .NET 通過(guò) C# 代碼設(shè)置或修改 PDF 頁(yè)面尺寸。
一、安裝免費(fèi) .NET 庫(kù)
通過(guò) NuGet 包管理器安裝(最便捷方式):
- 打開(kāi)Visual Studio → 右鍵項(xiàng)目 → 管理NuGet程序包 → 搜索“Free Spire.PDF” → 安裝。
- 或通過(guò)NuGet命令行安裝:
Install-Package FreeSpire.PDF
注:Free Spire.PDF for .NET 有10頁(yè)的頁(yè)數(shù)限制,僅適用于小型文檔。
二、C# 如何調(diào)整 PDF 頁(yè)面尺寸
本文采用 “創(chuàng)建新 PDF 文檔 + 原頁(yè)面模板繪制” 的方式調(diào)整尺寸,核心優(yōu)勢(shì)是通過(guò) PdfTextLayout的 OnePage 布局自動(dòng)適配內(nèi)容到新頁(yè)面,避免直接修改尺寸導(dǎo)致的內(nèi)容裁剪或錯(cuò)位。
PDF 頁(yè)面尺寸的核心單位為“點(diǎn)(Point)”,常見(jiàn)尺寸換算關(guān)系:
- 1英寸 = 72點(diǎn);
- A4(210mm×297mm)= 595.28點(diǎn) × 841.89點(diǎn);
- A3(297mm×420mm)= 841.89點(diǎn) × 1190.55點(diǎn)。
Free Spire.PDF 類(lèi)庫(kù)提供 PdfUnitConvertor 工具類(lèi)可便捷完成英寸、毫米與點(diǎn)的換算。
場(chǎng)景 1:將現(xiàn)有 PDF 修改為標(biāo)準(zhǔn)預(yù)設(shè)頁(yè)面尺寸(A1)
適用于將 PDF 批量調(diào)整為行業(yè)標(biāo)準(zhǔn)尺寸(如 A1、A3、Letter 等),通過(guò) Free Spire.PDF 預(yù)設(shè)的PdfPageSize 枚舉直接指定尺寸,無(wú)需手動(dòng)換算單位。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace ChangePageSizeToStandardPaperSize
{
class Program
{
static void Main(string[] args)
{
// 1. 創(chuàng)建PdfDocument實(shí)例并加載原始PDF
PdfDocument originPdf = new PdfDocument();
originPdf.LoadFromFile("Sample.pdf"); // 替換為你的PDF文件路徑
// 2. 創(chuàng)建新的PDF文檔用于存儲(chǔ)調(diào)整尺寸后的內(nèi)容
PdfDocument newPdf = new PdfDocument();
// 3. 遍歷原始PDF的所有頁(yè)面,逐頁(yè)調(diào)整尺寸
foreach(PdfPageBase page in originPdf.Pages)
{
// 3.1 新增A1尺寸的頁(yè)面(設(shè)置邊距為0)
PdfPageBase newPage = newPdf.Pages.Add(PdfPageSize.A1, new PdfMargins(0));
// 3.2 設(shè)置文本布局為“單頁(yè)適配”,確保內(nèi)容完整縮放至新頁(yè)面
PdfTextLayout layout = new PdfTextLayout();
layout.Layout = PdfLayoutType.OnePage;
// 3.3 基于原頁(yè)面創(chuàng)建模板,將內(nèi)容繪制到新尺寸頁(yè)面
PdfTemplate template = page.CreateTemplate();
template.Draw(newPage, new PointF(0, 0), layout);
}
// 4. 保存調(diào)整后的PDF文件
newPdf.SaveToFile("預(yù)設(shè)尺寸.pdf");
// 5. 釋放資源
originPdf.Close();
newPdf.Close();
}
}
}
代碼說(shuō)明:
PdfDocument:分別實(shí)例化 “原始 PDF” 和 “新 PDF”,避免直接修改原文件導(dǎo)致數(shù)據(jù)丟失;PdfPageSize.A1:內(nèi)置標(biāo)準(zhǔn)尺寸枚舉,支持 A0-A4、Letter、Legal 等常用尺寸,無(wú)需手動(dòng)換算;PdfTextLayout:設(shè)置Layout = PdfLayoutType.OnePage是核心,可讓原頁(yè)面內(nèi)容自動(dòng)縮放并完整適配新頁(yè)面尺寸;PdfTemplate:將原頁(yè)面內(nèi)容封裝為模板,再繪制到新尺寸頁(yè)面,是實(shí)現(xiàn) “內(nèi)容適配尺寸” 的關(guān)鍵載體。
場(chǎng)景2:將現(xiàn)有 PDF 修改為自定義頁(yè)面尺寸
適用于非標(biāo)準(zhǔn)尺寸需求(如 6.5×8.5 英寸),通過(guò) PdfUnitConvertor 完成英寸到點(diǎn)的自動(dòng)換算,避免手動(dòng)計(jì)算誤差。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace ChangePageSizeToCustomPaperSize
{
class Program
{
static void Main(string[] args)
{
// 1. 加載原始PDF文檔
PdfDocument originPdf = new PdfDocument();
originPdf.LoadFromFile("Sample.pdf"); // 替換為你的PDF文件路徑
// 2. 創(chuàng)建新PDF文檔存儲(chǔ)調(diào)整后的內(nèi)容
PdfDocument newPdf = new PdfDocument();
// 3. 初始化單位轉(zhuǎn)換器,實(shí)現(xiàn)英寸→點(diǎn)的自動(dòng)換算
PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
// 3.1 換算自定義尺寸:6.5英寸(寬)、8.5英寸(高)→ 點(diǎn)(Point)
float width = unitCvtr.ConvertUnits(6.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);
float height = unitCvtr.ConvertUnits(8.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);
// 3.2 封裝為SizeF對(duì)象,作為新頁(yè)面的自定義尺寸
SizeF customSize = new SizeF(width, height);
// 4. 遍歷原始PDF頁(yè)面,逐頁(yè)繪制到自定義尺寸頁(yè)面
foreach (PdfPageBase page in originPdf.Pages)
{
// 4.1 新增自定義尺寸的頁(yè)面(邊距設(shè)為0)
PdfPageBase newPage = newPdf.Pages.Add(customSize, new PdfMargins(0));
// 4.2 設(shè)置單頁(yè)適配布局,保證內(nèi)容完整縮放
PdfTextLayout layout = new PdfTextLayout();
layout.Layout = PdfLayoutType.OnePage;
// 4.3 創(chuàng)建原頁(yè)面模板并繪制到新頁(yè)面
PdfTemplate template = page.CreateTemplate();
template.Draw(newPage, new PointF(0, 0), layout);
}
// 5. 保存自定義尺寸的PDF文件
newPdf.SaveToFile("自定義尺寸.pdf");
// 6. 釋放資源
originPdf.Close();
newPdf.Close();
}
}
}
代碼說(shuō)明:
PdfUnitConvertor:內(nèi)置單位轉(zhuǎn)換工具,支持 Inch(英寸)、Millimeter(毫米)、Point(點(diǎn))、Centimeter(厘米)等單位互轉(zhuǎn);ConvertUnits方法:參數(shù)依次為 “數(shù)值、原單位、目標(biāo)單位”,無(wú)需手動(dòng)計(jì)算 “1 英寸 = 72 點(diǎn)” 的換算關(guān)系,降低出錯(cuò)概率;SizeF:封裝自定義寬高,作為Pages.Add方法的尺寸參數(shù),適配任意非標(biāo)準(zhǔn)頁(yè)面尺寸需求。
三、注意事項(xiàng)
- 單位一致性:修改尺寸時(shí)需確保寬高單位統(tǒng)一(均為點(diǎn)),避免因單位換算錯(cuò)誤導(dǎo)致尺寸偏差。
- 內(nèi)容適配:
PdfLayoutType.OnePage會(huì)自動(dòng)縮放內(nèi)容適配新尺寸,若需保持內(nèi)容原比例,無(wú)需額外調(diào)整;若需手動(dòng)控制縮放比例,可結(jié)合ScaleTransform方法補(bǔ)充調(diào)整。 - 兼容性:該類(lèi)庫(kù)生成的 PDF 兼容主流閱讀器(Adobe Acrobat、Chrome、Edge等),但復(fù)雜PDF(含表單/批注)修改后需驗(yàn)證格式完整性。
- 資源釋放:使用
Close()方法釋放PdfDocument資源,避免因文件占用導(dǎo)致保存失敗。
該方案無(wú)需依賴(lài)外部工具,純代碼實(shí)現(xiàn) PDF 頁(yè)面尺寸調(diào)整,適合 .NET 開(kāi)發(fā)者集成到文檔處理系統(tǒng)中,在中小規(guī)模 PDF 尺寸調(diào)整場(chǎng)景中具備較高的實(shí)用性和穩(wěn)定性。
到此這篇關(guān)于C#使用Spire.PDF for .NET實(shí)現(xiàn)設(shè)置或修改PDF頁(yè)面尺寸的文章就介紹到這了,更多相關(guān)C#設(shè)置或修改PDF頁(yè)面尺寸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解C#設(shè)置Excel數(shù)據(jù)自適應(yīng)行高、列寬的2種情況
這篇文章主要介紹了C#設(shè)置Excel數(shù)據(jù)自適應(yīng)行高、列寬的2種情況,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Unity的IPostBuildPlayerScriptDLLs實(shí)用案例深入解析
這篇文章主要為大家介紹了Unity的IPostBuildPlayerScriptDLLs實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
C#?MemoryStream中ToArray和GetBuffer的區(qū)別小小結(jié)
MemoryStream?中的?GetBuffer()?和?ToArray()?是兩個(gè)用于獲取流數(shù)據(jù)的方法,核心區(qū)別在于數(shù)據(jù)范圍、內(nèi)存占用和安全性,本文就來(lái)介紹一下兩者的區(qū)別,感興趣的額可以了解一下2025-07-07
C#利用WebClient實(shí)現(xiàn)兩種方式下載文件
本篇文章主要介紹了C#利用WebClient 兩種方式下載文件,詳細(xì)的介紹了兩種方式,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-02-02

