最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C#修改PDF頁面大小為標準尺寸或自定義尺寸

 更新時間:2026年07月06日 08:31:18   作者:SunnyDays1011  
最近處理 PDF 文件時遇到一個需求:把已有 PDF 的頁面尺寸統(tǒng)一調整一下,有些文件是系統(tǒng)導出的,有些是掃描件,頁面大小不一致,后面打印或歸檔時不太方便,本文記錄一下用 C# 調整 PDF 頁面大小的做法,需要的朋友可以參考下

引言

最近處理 PDF 文件時遇到一個需求:把已有 PDF 的頁面尺寸統(tǒng)一調整一下。有些文件是系統(tǒng)導出的,有些是掃描件,頁面大小不一致,后面打印或歸檔時不太方便。

這里記錄一下用 C# 調整 PDF 頁面大小的做法。核心思路不是直接改原 PDF 的頁面屬性,而是重新創(chuàng)建一個 PDF,把原來的每一頁作為模板繪制到新頁面上。

這樣處理后,原頁面里的文字、圖片、表格等內容都能保留下來,同時可以把頁面尺寸改成 A4、A3、A1 這類標準尺寸,也可以改成自己指定的寬高。

安裝 Spire.PDF

示例里用到的是 Spire.PDF。如果是 NuGet 包管理器,可以直接安裝:

PM> Install-Package Spire.PDF

也可以用 .NET CLI:

dotnet add package Spire.PDF

代碼中需要引入下面幾個命名空間:

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

基本處理思路

調整頁面大小時,可以按這個流程來做:

先讀取原 PDF,然后創(chuàng)建一個新的 PDF。接著遍歷原 PDF 的每一頁,在新 PDF 里創(chuàng)建目標尺寸的新頁面,再把原頁面生成模板并繪制到新頁面上。

聽起來步驟比較多,但代碼其實不復雜。這里有一個比較重要的設置:

PdfTextLayout layout = new PdfTextLayout();
layout.Layout = PdfLayoutType.OnePage;

這個設置的作用是讓原頁面內容適配到新頁面中。如果不加,在頁面尺寸變化比較明顯時,內容可能不會按照預期縮放。

一、把 PDF 頁面改成標準紙張大小

如果只是想改成 A4、A3、A1、Letter、Legal 這類常見尺寸,可以直接使用 PdfPageSize。

下面的示例是把原 PDF 的頁面統(tǒng)一改成 A1。

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

namespace ResizePdfToStandardSize
{
    class Program
    {
        static void Main(string[] args)
        {
            // 讀取原始 PDF
            PdfDocument sourcePdf = new PdfDocument();
            sourcePdf.LoadFromFile("Sample.pdf");

            // 創(chuàng)建新的 PDF
            PdfDocument outputPdf = new PdfDocument();

            foreach (PdfPageBase sourcePage in sourcePdf.Pages)
            {
                // 新建 A1 頁面,頁邊距設置為 0
                PdfPageBase newPage = outputPdf.Pages.Add(PdfPageSize.A1, new PdfMargins(0));

                // 讓原頁面內容適配到新頁面
                PdfTextLayout layout = new PdfTextLayout();
                layout.Layout = PdfLayoutType.OnePage;

                // 把原頁面做成模板
                PdfTemplate template = sourcePage.CreateTemplate();

                // 繪制到新頁面
                template.Draw(newPage, new PointF(0, 0), layout);
            }

            outputPdf.SaveToFile("ResizeToA1.pdf");

            sourcePdf.Close();
            outputPdf.Close();
        }
    }
}

如果要改成 A4,只需要把這一行:

PdfPageBase newPage = outputPdf.Pages.Add(PdfPageSize.A1, new PdfMargins(0));

改成:

PdfPageBase newPage = outputPdf.Pages.Add(PdfPageSize.A4, new PdfMargins(0));

常用的尺寸可以這樣寫:

PdfPageSize.A4
PdfPageSize.A3
PdfPageSize.Letter
PdfPageSize.Legal

這里的 new PdfMargins(0) 表示不額外加頁邊距。如果想讓內容四周留一點空白,也可以設置成:

new PdfMargins(20)

不過加了頁邊距以后,實際可繪制區(qū)域會變小,頁面內容的縮放效果也會受到影響。

二、把 PDF 頁面改成自定義尺寸

如果目標尺寸不是標準紙張,比如要做票據、標簽、電子書頁面,或者要適配某個固定打印模板,就需要自定義寬高。

Spire.PDF 里頁面尺寸的單位是 point。
1 inch = 72 points。

如果你的尺寸是英寸、毫米或厘米,可以先轉換成 point,再創(chuàng)建頁面。

下面示例把頁面尺寸改成 6.5 × 8.5 英寸。

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

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

            PdfDocument outputPdf = new PdfDocument();

            // 單位轉換
            PdfUnitConvertor convertor = new PdfUnitConvertor();

            float width = convertor.ConvertUnits(6.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);
            float height = convertor.ConvertUnits(8.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);

            SizeF pageSize = new SizeF(width, height);

            foreach (PdfPageBase sourcePage in sourcePdf.Pages)
            {
                PdfPageBase newPage = outputPdf.Pages.Add(pageSize, new PdfMargins(0));

                PdfTextLayout layout = new PdfTextLayout();
                layout.Layout = PdfLayoutType.OnePage;

                PdfTemplate template = sourcePage.CreateTemplate();
                template.Draw(newPage, new PointF(0, 0), layout);
            }

            outputPdf.SaveToFile("ResizeToCustomSize.pdf");

            sourcePdf.Close();
            outputPdf.Close();
        }
    }
}

這個寫法適合尺寸來自業(yè)務需求的場景。比如設計稿給的是英寸,或者打印規(guī)格里寫的是固定寬高,都可以先轉換成 point 再處理。

三、如果尺寸單位是毫米

打印類需求里,毫米會更常見。比如想設置成 210mm × 297mm,可以這樣寫:

PdfUnitConvertor convertor = new PdfUnitConvertor();

float width = convertor.ConvertUnits(210f, PdfGraphicsUnit.Millimeter, PdfGraphicsUnit.Point);
float height = convertor.ConvertUnits(297f, PdfGraphicsUnit.Millimeter, PdfGraphicsUnit.Point);

SizeF pageSize = new SizeF(width, height);

然后創(chuàng)建頁面時直接使用這個 pageSize

PdfPageBase newPage = outputPdf.Pages.Add(pageSize, new PdfMargins(0));

這種方式比手動計算 point 更穩(wěn)一些,也不容易寫錯單位。

四、為什么要用模板重新繪制

一開始我也以為改頁面大小應該就是修改頁面屬性。但 PDF 里的內容位置、頁面尺寸、坐標系統(tǒng)是關聯在一起的。直接改頁面尺寸,不一定能讓原來的內容自動適配。

所以更穩(wěn)的做法是:

PdfTemplate template = sourcePage.CreateTemplate();
template.Draw(newPage, new PointF(0, 0), layout);

也就是把原頁面當成一個整體模板,再畫到目標尺寸的新頁面上。

配合:

layout.Layout = PdfLayoutType.OnePage;

可以讓內容盡量縮放到新頁面范圍內。

不過也要注意,如果原頁面和目標頁面比例差距太大,最終效果可能會出現比較大的留白,或者內容看起來被壓縮。比如把橫向頁面強行轉成豎向 A4,就需要人工檢查一下效果。

五、標準尺寸和自定義尺寸怎么選

如果只是為了打印、歸檔、統(tǒng)一頁面規(guī)格,優(yōu)先用標準尺寸就行:

outputPdf.Pages.Add(PdfPageSize.A4, new PdfMargins(0));

如果是業(yè)務里有明確尺寸要求,比如標簽、票據、證書、書籍頁面,那就用自定義尺寸:

outputPdf.Pages.Add(pageSize, new PdfMargins(0));

實際項目里,我更建議把目標尺寸做成配置項。這樣后面要從 A4 改成 A3,或者從英寸改成毫米,不需要改太多代碼。

六、封裝成一個簡單方法

如果項目里會多次用到,可以把邏輯簡單封裝一下。

轉成標準尺寸

static void ResizeToStandardSize(string inputPath, string outputPath, SizeF targetSize)
{
    PdfDocument sourcePdf = new PdfDocument();
    sourcePdf.LoadFromFile(inputPath);

    PdfDocument outputPdf = new PdfDocument();

    foreach (PdfPageBase sourcePage in sourcePdf.Pages)
    {
        PdfPageBase newPage = outputPdf.Pages.Add(targetSize, new PdfMargins(0));

        PdfTextLayout layout = new PdfTextLayout();
        layout.Layout = PdfLayoutType.OnePage;

        PdfTemplate template = sourcePage.CreateTemplate();
        template.Draw(newPage, new PointF(0, 0), layout);
    }

    outputPdf.SaveToFile(outputPath);

    sourcePdf.Close();
    outputPdf.Close();
}

調用時可以這樣寫:

ResizeToStandardSize("Sample.pdf", "Output.pdf", PdfPageSize.A4);

如果是自定義尺寸,也可以先轉換單位:

PdfUnitConvertor convertor = new PdfUnitConvertor();

float width = convertor.ConvertUnits(6.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);
float height = convertor.ConvertUnits(8.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);

SizeF customSize = new SizeF(width, height);

ResizeToStandardSize("Sample.pdf", "Output.pdf", customSize);

七、幾個容易忽略的點

1. 不建議直接覆蓋原文件

頁面尺寸調整后,最好輸出成一個新的 PDF。確認效果沒問題后,再決定是否替換原文件。

Sample.pdf
ResizeToA4.pdf

這樣出問題也能回退。

2. 頁邊距會影響內容大小

示例中用了 0 頁邊距:

new PdfMargins(0)

如果設置了頁邊距,內容區(qū)域會變小,縮放后的內容也會跟著變小。這個在打印場景里尤其要注意。

3. 批量轉換時要注意文件命名

如果批量處理多個 PDF,不要所有輸出都叫 Output.pdf??梢栽谖募锛由铣叽缁驎r間:

report_A4.pdf
report_A3.pdf
report_custom.pdf

4. 頁面比例不一致時要人工檢查

程序可以完成頁面縮放,但不一定能保證視覺效果一定完美。尤其是下面幾種情況:

  • 橫向頁面轉豎向頁面;
  • 大圖紙縮小成 A4;
  • 掃描件頁面邊緣有大量空白;
  • 原 PDF 每頁尺寸本身不一致。

這類文件建議轉換后抽查幾頁。

八、完整代碼參考

最后放一個稍微整理過的完整版本,標準尺寸和自定義尺寸都可以用。

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

namespace ResizePdfPage
{
    class Program
    {
        static void Main(string[] args)
        {
            // 示例一:轉為 A4
            ResizePdf("Sample.pdf", "ResizeToA4.pdf", PdfPageSize.A4);

            // 示例二:轉為自定義尺寸,單位為英寸
            PdfUnitConvertor convertor = new PdfUnitConvertor();

            float width = convertor.ConvertUnits(6.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);
            float height = convertor.ConvertUnits(8.5f, PdfGraphicsUnit.Inch, PdfGraphicsUnit.Point);

            SizeF customSize = new SizeF(width, height);

            ResizePdf("Sample.pdf", "ResizeToCustomSize.pdf", customSize);
        }

        static void ResizePdf(string inputPath, string outputPath, SizeF pageSize)
        {
            PdfDocument sourcePdf = new PdfDocument();
            sourcePdf.LoadFromFile(inputPath);

            PdfDocument outputPdf = new PdfDocument();

            foreach (PdfPageBase sourcePage in sourcePdf.Pages)
            {
                PdfPageBase newPage = outputPdf.Pages.Add(pageSize, new PdfMargins(0));

                PdfTextLayout layout = new PdfTextLayout();
                layout.Layout = PdfLayoutType.OnePage;

                PdfTemplate template = sourcePage.CreateTemplate();
                template.Draw(newPage, new PointF(0, 0), layout);
            }

            outputPdf.SaveToFile(outputPath);

            sourcePdf.Close();
            outputPdf.Close();
        }
    }
}

結尾

整體看下來,調整 PDF 頁面尺寸主要就是兩件事:

第一,確定目標頁面大小,是用 A4、A3 這類標準尺寸,還是用自定義寬高。
第二,把原 PDF 頁面作為模板繪制到新頁面上,并設置單頁適配。

如果只是統(tǒng)一打印尺寸,用 PdfPageSize.A4 這類標準尺寸就夠了。
如果是特殊業(yè)務頁面,可以先用 PdfUnitConvertor 把英寸或毫米轉換成 point,再創(chuàng)建對應尺寸的頁面。

實際使用時,建議重點檢查輸出頁面的比例、留白和內容縮放效果,尤其是原 PDF 頁面尺寸不統(tǒng)一的情況。

以上就是使用C#修改PDF頁面大小為標準尺寸或自定義尺寸的詳細內容,更多關于C#修改PDF頁面大小的資料請關注腳本之家其它相關文章!

相關文章

  • C#正則表達式大全

    C#正則表達式大全

    本文詳細講解了C#正則表達式的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • Unity實現單機游戲每日簽到系統(tǒng)

    Unity實現單機游戲每日簽到系統(tǒng)

    這篇文章主要為大家詳細介紹了Unity實現單機游戲每日簽到系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C#計算字符串相似性的方法

    C#計算字符串相似性的方法

    這篇文章主要介紹了C#計算字符串相似性的方法,實例分析了C#計算字符串相似性的原理與算法實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#實現rar壓縮與解壓縮文件的方法

    C#實現rar壓縮與解壓縮文件的方法

    這篇文章主要介紹了C#實現rar壓縮與解壓縮文件的方法,實例分析了C#利用winrar程序實現文件的壓縮與解壓縮的相關技巧,需要的朋友可以參考下
    2015-06-06
  • 使用C#與SQL Server數據庫進行交互的詳細流程

    使用C#與SQL Server數據庫進行交互的詳細流程

    本文詳細介紹了如何使用Visual Studio創(chuàng)建Windows窗體應用程序連接本地SQL Server數據庫,并實現數據插入、查詢和刪除等功能,通過步驟說明和代碼示例,展示了如何使用DataGridView控件和按鈕控件與數據庫進行交互,文章還總結了易錯點,需要的朋友可以參考下
    2025-11-11
  • 在C#中靈活調整Excel表格列的位置的方法步驟

    在C#中靈活調整Excel表格列的位置的方法步驟

    在數據處理與報表生成的日常開發(fā)中,我們經常需要調整Excel工作表的列順序,以匹配下游系統(tǒng)的字段要求、優(yōu)化數據展示結構或統(tǒng)一多份報表的列布局,本文將介紹如何使用 .NET 平臺下的免費Excel處理庫,通過C#代碼實現Excel列位置的調整與重排,需要的朋友可以參考下
    2026-07-07
  • C#獲取指定目錄最后寫入時間的方法

    C#獲取指定目錄最后寫入時間的方法

    這篇文章主要介紹了C#獲取指定目錄最后寫入時間的方法,涉及C#中LastWriteTime屬性的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#逐行分元素讀取記事本數據并寫入數據庫的方法

    C#逐行分元素讀取記事本數據并寫入數據庫的方法

    這篇文章主要介紹了C#逐行分元素讀取記事本數據并寫入數據庫的方法,通過StreamReader類里的ReadLine()方法實現逐行讀取的功能,是非常實用的技巧,需要的朋友可以參考下
    2014-12-12
  • C#基于基姆拉爾森算法計算指定日期是星期幾的方法

    C#基于基姆拉爾森算法計算指定日期是星期幾的方法

    這篇文章主要介紹了C#基于基姆拉爾森算法計算指定日期是星期幾的方法,實例分析了基姆拉爾森算法的原理與使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • c#使用Unity粒子實現炮塔發(fā)射系統(tǒng)

    c#使用Unity粒子實現炮塔發(fā)射系統(tǒng)

    Unity自帶粒子發(fā)射器、動畫器、渲染器各兩種,利用Unity的粒子系統(tǒng)制作一個炮塔發(fā)射系統(tǒng),了解粒子系統(tǒng),必須先了解每一個屬性都代表了什么,之后才能根據這些原理來調整出自己滿意的效果
    2022-04-04

最新評論

资阳市| 太康县| 星座| 汉中市| 宝山区| 渝中区| 闸北区| 云梦县| 报价| 清水河县| 平阳县| 峡江县| 永平县| 大姚县| 贵阳市| 贵州省| 揭阳市| 当雄县| 定结县| 芦山县| 遂平县| 鄱阳县| 行唐县| 福泉市| 临高县| 秭归县| 抚宁县| 平罗县| 亚东县| 宜城市| 库尔勒市| 山丹县| 岚皋县| 汤阴县| 湘潭市| 武定县| 清流县| 临洮县| 珠海市| 长治县| 浏阳市|