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 類庫(kù)提供 PdfUnitConvertor 工具類可便捷完成英寸、毫米與點(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)整。 - 兼容性:該類庫(kù)生成的 PDF 兼容主流閱讀器(Adobe Acrobat、Chrome、Edge等),但復(fù)雜PDF(含表單/批注)修改后需驗(yàn)證格式完整性。
- 資源釋放:使用
Close()方法釋放PdfDocument資源,避免因文件占用導(dǎo)致保存失敗。
該方案無(wú)需依賴外部工具,純代碼實(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#結(jié)合AForge實(shí)現(xiàn)攝像頭錄像
最近由于興趣學(xué)習(xí)了下在C#上使用AForge錄制攝像頭視頻并壓縮編碼??傮w上來(lái)說(shuō)這個(gè)第三方.net視覺(jué)開(kāi)發(fā)庫(kù)還是比較穩(wěn)定的2017-09-09
基于C#后臺(tái)調(diào)用跨域MVC服務(wù)及帶Cookie驗(yàn)證的實(shí)現(xiàn)
本篇文章介紹了,基于C#后臺(tái)調(diào)用跨域MVC服務(wù)及帶Cookie驗(yàn)證的實(shí)現(xiàn)。需要的朋友參考下2013-04-04
C# WinForm實(shí)現(xiàn)自動(dòng)更新程序的方法詳解
這一篇就著重寫(xiě)一下客戶端的代碼,客戶端主要實(shí)現(xiàn)的有:?jiǎn)?dòng)后檢測(cè)本地的xml文件,然后發(fā)送到服務(wù)器獲取需要更新的文件以及版本列表,感興趣的小伙伴可以了解一下2022-10-10
Unity報(bào)錯(cuò)InvalidOperationException: out of sync的解決
今天在做個(gè)東西,發(fā)現(xiàn)報(bào)錯(cuò),特此來(lái)記錄一下,本文介紹了Unity報(bào)錯(cuò)InvalidOperationException: out of sync的解決,感興趣的可以了解一下2021-05-05
C#游戲開(kāi)發(fā)之實(shí)現(xiàn)俄羅斯方塊游戲
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)經(jīng)典俄羅斯方塊游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01
Winform開(kāi)發(fā)中使用下拉列表展示字典數(shù)據(jù)的幾種方式
這篇文章介紹了Winform開(kāi)發(fā)中使用下拉列表展示字典數(shù)據(jù)的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
結(jié)構(gòu)體和聯(lián)合體的區(qū)別及說(shuō)明
文章主要介紹了C語(yǔ)言中的結(jié)構(gòu)體和聯(lián)合體,結(jié)構(gòu)體是一種自定義的復(fù)合數(shù)據(jù)類型,可以包含多個(gè)成員,每個(gè)成員可以是不同的數(shù)據(jù)類型,聯(lián)合體是一種特殊的數(shù)據(jù)結(jié)構(gòu),可以在內(nèi)存中共享同一段存儲(chǔ)空間來(lái)存儲(chǔ)不同類型的數(shù)據(jù)2025-01-01

