C#代碼實(shí)現(xiàn)獲取PDF頁面尺寸,方向和旋轉(zhuǎn)角度
在某些情況下,檢查 PDF 頁面的尺寸、方向和旋轉(zhuǎn)角度是文檔質(zhì)量控制的一部分。例如,在發(fā)布或分發(fā)文檔之前,可能需要驗(yàn)證這些信息,以確保文檔中的所有頁面都能正確顯示。本文將介紹如何在 C# 中獲取 PDF 頁面尺寸、檢測頁面方向以及讀取頁面旋轉(zhuǎn)角度。
環(huán)境準(zhǔn)備
開始之前,需要在 .NET 項(xiàng)目中添加 PDF 處理庫的 DLL 引用??梢酝ㄟ^下載安裝包手動添加,也可以直接使用 NuGet 安裝相關(guān)組件。
PM> Install-Package Spire.PDF
在 C# 中獲取 PDF 頁面尺寸
常見的 PDF 處理庫通常提供頁面寬度和高度屬性,可用于獲取 PDF 頁面的尺寸信息,默認(rèn)單位一般為 point(磅)。如果需要將默認(rèn)單位轉(zhuǎn)換為其他單位(如厘米、毫米或英寸),可以借助單位轉(zhuǎn)換工具類完成。下面是具體步驟:
- 創(chuàng)建
PdfDocument實(shí)例。 - 使用
PdfDocument.LoadFromFile()方法加載 PDF 文件。 - 通過
PdfDocument.Pages[]獲取指定頁面。 - 使用頁面對象的寬度和高度屬性獲取 PDF 頁面的尺寸信息。
- 創(chuàng)建單位轉(zhuǎn)換對象,并通過
ConvertUnits()方法將 point 單位轉(zhuǎn)換為其他計(jì)量單位。 - 將頁面尺寸信息寫入
StringBuilder,最后保存為 TXT 文件。
示例代碼如下:
using System.Text;
using Spire.Pdf;
using Spire.Pdf.Graphics;
namespace 獲取PDF頁面尺寸
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 PdfDocument 對象
PdfDocument pdf = new PdfDocument();
// 從磁盤加載 PDF 文件
pdf.LoadFromFile("SamplePDF.pdf");
// 獲取第一頁
PdfPageBase page = pdf.Pages[0];
// 獲取頁面寬度和高度(單位:point/磅)
float pointWidth = page.Size.Width;
float pointHeight = page.Size.Height;
// 創(chuàng)建 PdfUnitConvertor 對象用于單位轉(zhuǎn)換
PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
// 將單位從 point 轉(zhuǎn)換為 pixel(像素)
float pixelWidth = unitCvtr.ConvertUnits(pointWidth, PdfGraphicsUnit.Point, PdfGraphicsUnit.Pixel);
float pixelHeight = unitCvtr.ConvertUnits(pointHeight, PdfGraphicsUnit.Point, PdfGraphicsUnit.Pixel);
// 將單位從 point 轉(zhuǎn)換為 inch(英寸)
float inchWidth = unitCvtr.ConvertUnits(pointWidth, PdfGraphicsUnit.Point, PdfGraphicsUnit.Inch);
float inchHeight = unitCvtr.ConvertUnits(pointHeight, PdfGraphicsUnit.Point, PdfGraphicsUnit.Inch);
// 將單位從 point 轉(zhuǎn)換為 centimeter(厘米)
float centimeterWidth = unitCvtr.ConvertUnits(pointWidth, PdfGraphicsUnit.Point, PdfGraphicsUnit.Centimeter);
float centimeterHeight = unitCvtr.ConvertUnits(pointHeight, PdfGraphicsUnit.Point, PdfGraphicsUnit.Centimeter);
// 創(chuàng)建 StringBuilder 實(shí)例
StringBuilder content = new StringBuilder();
// 添加頁面尺寸信息
content.AppendLine("文件頁面尺寸(單位:point)為(寬:" + pointWidth + "pt,高:" + pointHeight + "pt)。");
content.AppendLine("文件頁面尺寸(單位:pixel)為(寬:" + pixelWidth + "pixel,高:" + pixelHeight + "pixel)。");
content.AppendLine("文件頁面尺寸(單位:inch)為(寬:" + inchWidth + "inch,高:" + inchHeight + "inch)。");
content.AppendLine("文件頁面尺寸(單位:centimeter)為(寬:" + centimeterWidth + "cm,高:" + centimeterHeight + "cm)。");
// 保存為 TXT 文件
File.WriteAllText("GetPageSize.txt", content.ToString());
}
}
}在 C# 中檢測 PDF 頁面方向
檢測 PDF 頁面方向時,可以通過比較頁面的寬度和高度來判斷。如果頁面寬度大于高度,則頁面方向?yàn)闄M向(Landscape);否則為縱向(Portrait)。具體步驟如下:
- 創(chuàng)建
PdfDocument實(shí)例。 - 使用
PdfDocument.LoadFromFile()方法加載 PDF 文件。 - 通過
PdfDocument.Pages[]獲取指定頁面。 - 使用頁面對象的寬度和高度屬性獲取 PDF 頁面的尺寸信息。
- 比較頁面寬度和高度的值,以判斷頁面方向。
- 使用
Console.WriteLine()方法輸出結(jié)果。
示例代碼如下:
using Spire.Pdf;
namespace 檢測PDF頁面方向
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 PdfDocument 對象
PdfDocument pdf = new PdfDocument();
// 從磁盤加載 PDF 文件
pdf.LoadFromFile("SamplePDF.pdf");
// 獲取第一頁
PdfPageBase page = pdf.Pages[0];
// 獲取頁面寬度和高度
float width = page.Size.Width;
float height = page.Size.Height;
// 比較頁面寬度和高度的值
if (width > height)
{
Console.WriteLine("頁面方向?yàn)闄M向(Landscape)。");
}
else
{
Console.WriteLine("頁面方向?yàn)榭v向(Portrait)。");
}
}
}
}在 C# 中檢測 PDF 頁面旋轉(zhuǎn)角度
PDF 頁面的旋轉(zhuǎn)角度可以通過 PdfPageBase.Rotation 屬性獲取。具體步驟如下:
- 創(chuàng)建
PdfDocument實(shí)例。 - 使用
PdfDocument.LoadFromFile()方法加載 PDF 文件。 - 通過
PdfDocument.Pages[]獲取指定頁面。 - 使用
PdfPageBase.Rotation屬性獲取頁面的旋轉(zhuǎn)角度,并將結(jié)果轉(zhuǎn)換為字符串。 - 使用
Console.WriteLine()方法輸出結(jié)果。
示例代碼如下:
using Spire.Pdf;
namespace 獲取PDF頁面旋轉(zhuǎn)角度
{
class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 PdfDocument 對象
PdfDocument pdf = new PdfDocument();
// 從磁盤加載 PDF 文件
pdf.LoadFromFile("E:\\PythonPDF\\Sample.pdf");
// 獲取第一頁
PdfPageBase page = pdf.Pages[0];
// 獲取當(dāng)前頁面的旋轉(zhuǎn)角度
PdfPageRotateAngle rotationAngle = page.Rotation;
string rotation = rotationAngle.ToString();
// 輸出頁面旋轉(zhuǎn)角度信息
Console.WriteLine("當(dāng)前頁面的旋轉(zhuǎn)角度為:" + rotation);
}
}
}知識擴(kuò)展
在C#中獲取PDF頁面的尺寸、方向和旋轉(zhuǎn)角度,可以使用免費(fèi)開源的 PdfPig 庫,它無需安裝Adobe Reader,跨平臺且易于使用。以下代碼演示了如何讀取PDF文件,提取每個頁面的寬度、高度、計(jì)算方向(橫向/縱向)以及讀取旋轉(zhuǎn)角度。
1. 安裝 PdfPig
在Visual Studio中打開“包管理器控制臺”或使用 .NET CLI:
dotnet add package PdfPig
或
Install-Package PdfPig
2. 代碼示例
using System;
using System.IO;
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
class Program
{
static void Main(string[] args)
{
string filePath = @"C:\test\example.pdf";
GetPdfPageInfo(filePath);
}
static void GetPdfPageInfo(string pdfPath)
{
if (!File.Exists(pdfPath))
{
Console.WriteLine("文件不存在!");
return;
}
using (PdfDocument document = PdfDocument.Open(pdfPath))
{
for (int i = 0; i < document.NumberOfPages; i++)
{
Page page = document.GetPage(i + 1); // 頁碼從1開始
// 獲取頁面尺寸(單位:點(diǎn),1點(diǎn) = 1/72英寸)
double width = page.Width;
double height = page.Height;
// 獲取旋轉(zhuǎn)角度(0, 90, 180, 270)
int rotation = page.Rotation.Value; // Rotation 是可空類型,一般為90度的整數(shù)倍
// 計(jì)算方向(基于原始寬高,未考慮旋轉(zhuǎn))
string orientation = (width > height) ? "橫向 (Landscape)" : "縱向 (Portrait)";
// 輸出信息
Console.WriteLine($"--- 第 {i + 1} 頁 ---");
Console.WriteLine($"原始尺寸: {width} x {height} 點(diǎn) (約 {width/72:F2} x {height/72:F2} 英寸)");
Console.WriteLine($"方向: {orientation}");
Console.WriteLine($"旋轉(zhuǎn)角度: {rotation} 度");
Console.WriteLine();
// 如果需要考慮旋轉(zhuǎn)后的實(shí)際顯示方向,可以結(jié)合旋轉(zhuǎn)角度判斷
bool isRotated = (rotation % 180 != 0);
string effectiveOrientation = (isRotated ? (height > width ? "橫向" : "縱向") : orientation);
Console.WriteLine($"考慮旋轉(zhuǎn)后的實(shí)際顯示方向: {effectiveOrientation}\n");
}
}
}
}3. 輸出示例
--- 第 1 頁 ---
原始尺寸: 595.0 x 842.0 點(diǎn) (約 8.26 x 11.69 英寸)
方向: 縱向 (Portrait)
旋轉(zhuǎn)角度: 0 度
--- 第 2 頁 ---
原始尺寸: 842.0 x 595.0 點(diǎn) (約 11.69 x 8.26 英寸)
方向: 橫向 (Landscape)
旋轉(zhuǎn)角度: 0 度
--- 第 3 頁 ---
原始尺寸: 595.0 x 842.0 點(diǎn) (約 8.26 x 11.69 英寸)
方向: 縱向 (Portrait)
旋轉(zhuǎn)角度: 90 度
考慮旋轉(zhuǎn)后的實(shí)際顯示方向: 橫向
4. 關(guān)鍵說明
- 尺寸單位:PdfPig 返回的寬度和高度以“點(diǎn)”(Point)為單位(1點(diǎn) = 1/72英寸)。
- 旋轉(zhuǎn)角度:通過
page.Rotation.Value獲取,值為 0、90、180 或 270。Rotation是可空類型,若不存在則默認(rèn) 0。 - 方向判斷:原始方向由寬度 > 高度判定,但旋轉(zhuǎn) 90° 或 270° 后實(shí)際顯示的方向會互換。示例中給出了計(jì)算有效方向的方法。
- 其他頁面框:PDF 除了
/MediaBox還有/CropBox、/TrimBox等,page.Width和page.Height默認(rèn)返回的是/CropBox(如果存在),否則返回/MediaBox。如需獲取特定框,可通過page.GetMediaBox()等方法。
總結(jié)
本文介紹了如何在 C# 中獲取 PDF 頁面的尺寸、方向以及旋轉(zhuǎn)角度。通過讀取頁面的寬度、高度和旋轉(zhuǎn)屬性,開發(fā)者可以快速分析 PDF 頁面布局,并根據(jù)實(shí)際需求進(jìn)行文檔檢查、頁面處理或自動化管理。
此外,文章還演示了如何將頁面尺寸從默認(rèn)的 point(磅)單位轉(zhuǎn)換為像素、英寸和厘米等常用單位,以及如何通過簡單的寬高比較判斷頁面是橫向還是縱向。借助這些方法,可以更方便地完成 PDF 文檔的質(zhì)量檢測與頁面信息提取工作。
以上就是C#代碼實(shí)現(xiàn)獲取PDF頁面尺寸,方向和旋轉(zhuǎn)角度的詳細(xì)內(nèi)容,更多關(guān)于C#獲取PDF頁面信息的資料請關(guān)注腳本之家其它相關(guān)文章!
- C#實(shí)現(xiàn)精準(zhǔn)拆分PDF頁面(單頁/指定頁)的完整代碼
- 通過C#拆分PDF頁面的多場景示例
- C#代碼實(shí)現(xiàn)旋轉(zhuǎn)PDF頁面功能
- C#實(shí)現(xiàn)批量刪除PDF頁面(單頁/多頁)的實(shí)戰(zhàn)技巧
- C#使用Spire.PDF for .NET實(shí)現(xiàn)設(shè)置或修改PDF頁面尺寸
- C#使用Spire.PDF for .NET合并多個PDF文檔和指定頁面的實(shí)現(xiàn)方案
- C#自動化實(shí)現(xiàn)檢測并刪除PDF文件中的空白頁面
- 通過C#實(shí)現(xiàn)獲取PDF頁面大小、方向和旋轉(zhuǎn)角度
- C#實(shí)現(xiàn)PDF頁面合并的示例代碼
相關(guān)文章
unity3d?對接?workerman?實(shí)現(xiàn)聯(lián)機(jī)游戲功能
workerman?是一款開源高性能?PHP?應(yīng)用容器,他除了用于互聯(lián)網(wǎng)、即時通訊、APP?開發(fā)、硬件通訊、智能家居、物聯(lián)網(wǎng)等領(lǐng)域的開發(fā)外,這篇文章主要介紹了unity3d?對接?workerman?實(shí)現(xiàn)聯(lián)機(jī)游戲,需要的朋友可以參考下2022-10-10
C# IP地址與整數(shù)之間轉(zhuǎn)換的具體方法
這篇文章介紹了C# IP地址與整數(shù)之間轉(zhuǎn)換的具體方法,有需要的朋友可以參考一下2013-10-10

