基于C#實(shí)現(xiàn)PDF按頁(yè)分割文件和分頁(yè)合并
背景
最近遇到一個(gè)文件上傳限制大小問(wèn)題,
因?yàn)橛心男﹑df文件可能有300多頁(yè),大小已經(jīng)有100MB,
但是有些文件上傳限制大小在10MB以內(nèi),
因?yàn)楸酒恼聦⒑?jiǎn)單講講如何將大文件通過(guò)分頁(yè)分割和合并。
效果
下面就是通過(guò)pdf插件進(jìn)行按頁(yè)進(jìn)行文件分割輸出

單頁(yè)分割
插件命名空間
using iTextSharp.text; using iTextSharp.text.pdf;
目標(biāo)分割pdf文件、創(chuàng)建輸出文件所在的文件夾、iTextSharp插件操作pdf分割
// 目標(biāo)分割pdf文件
string inputFilePath = @"你自己的pdf文件物理路徑.pdf";
// 創(chuàng)建輸出文件所在文件夾
string outputFolder = "NewFile";
string rootPath = System.IO.Directory.GetCurrentDirectory();
string folderAll = Path.Combine(rootPath, outputFolder);
if (!Directory.Exists(folderAll))
{
Directory.CreateDirectory(folderAll);
}
// 操作pdf分割
using (PdfReader reader = new PdfReader(inputFilePath))
{
for (int i = 1; i <= reader.NumberOfPages; i++)
{
string newFilePath = Path.Combine(outputFolder, $"page_{i}.pdf");
using (Document document = new Document())
using (PdfCopy copy = new PdfCopy(document, new FileStream(newFilePath, FileMode.Create)))
{
document.Open();
copy.AddPage(copy.GetImportedPage(reader, i));
document.Close();
}
}
}
Console.WriteLine("PDF 分割完成!");
文件合并
// 目標(biāo)合并pdf文件
string[] sourceFiles = new string[] {
@"你的pdf文件1.pdf",
@"你的pdf文件2.pdf"
};
// 創(chuàng)建輸出文件所在文件夾
string outputFolder = "NewFile";
string rootPath = System.IO.Directory.GetCurrentDirectory();
string folderAll = Path.Combine(rootPath, outputFolder);
if (!Directory.Exists(folderAll))
{
Directory.CreateDirectory(folderAll);
}
using (Document document = new Document())
{
PdfCopy copy = new PdfCopy(document, new FileStream($"{outputFolder}\\page_1_20_Add_21_40.pdf", FileMode.Create));
document.Open();
foreach (string file in sourceFiles)
{
using (PdfReader reader = new PdfReader(file))
{
for (int i = 1; i <= reader.NumberOfPages; i++)
{
copy.AddPage(copy.GetImportedPage(reader, i));
}
}
}
document.Close();
copy.Close();
}
多頁(yè)分割
根據(jù)分頁(yè)范圍進(jìn)行分割文件,比如:1-10頁(yè)分割一個(gè)文件,即10頁(yè)分割一個(gè)文件

// 目標(biāo)分割pdf文件
string inputFilePath = @"你自己的pdf文件物理路徑.pdf";
// 創(chuàng)建輸出文件所在文件夾
string outputFolder = "NewFile";
string rootPath = System.IO.Directory.GetCurrentDirectory();
string folderAll = Path.Combine(rootPath, outputFolder);
if (!Directory.Exists(folderAll))
{
Directory.CreateDirectory(folderAll);
}
// 操作pdf分割
using (PdfReader reader = new PdfReader(inputFilePath))
{
int startPage = 1;
int pageSize = 0;
int totalPage = 0;
int unitSize = 20;
int remainder = 0;
totalPage = reader.NumberOfPages;
pageSize = totalPage / unitSize;
remainder = totalPage % unitSize;
// 足夠20的分割文件
int currentIndex = 0;
for (int index = 0; index < pageSize; index++)
{
currentIndex = (index + 1);
using (Document document = new Document())
{
int sv = (startPage + index * unitSize);
int ev = ((index + 1) * unitSize);
string newFilePath = Path.Combine(outputFolder, $"page_{sv}_{ev}.pdf");
PdfCopy copy = new PdfCopy(document, new FileStream(newFilePath, FileMode.Create));
document.Open();
for (int i = sv; i <= ev; i++)
{
copy.AddPage(copy.GetImportedPage(reader, i));
}
document.Close();
copy.Close();
}
}
// 不足20頁(yè)的文件
using (Document document = new Document())
{
int sv = (startPage + pageSize * unitSize);
int ev = (pageSize * unitSize + remainder);
string newFilePath = Path.Combine(outputFolder, $"page_size_{sv}_{ev}.pdf");
PdfCopy copy = new PdfCopy(document, new FileStream(newFilePath, FileMode.Create));
document.Open();
for (int i = sv; i <= ev; i++)
{
copy.AddPage(copy.GetImportedPage(reader, i));
}
document.Close();
copy.Close();
}
}
}
插件說(shuō)明
iTextSharp 是一個(gè)開(kāi)源的 PDF 處理庫(kù),用于在 C# 程序中創(chuàng)建、編輯和處理 PDF 文件。它提供了豐富的功能和 API,使開(kāi)發(fā)者能夠進(jìn)行各種 PDF 文件操作,包括創(chuàng)建 PDF、添加文本、插入圖片、設(shè)置頁(yè)面布局等功能。iTextSharp 庫(kù)基于 iText 庫(kù)的 C# 版本,是在 C# 平臺(tái)上操作 PDF 文件的常用工具之一。
以下是 iTextSharp 的一些基本功能:
1、創(chuàng)建 PDF 文件
使用 iTextSharp 可以在 C# 中輕松地創(chuàng)建新的 PDF 文件,可以通過(guò)代碼指定文檔結(jié)構(gòu)、頁(yè)面布局、文本樣式等。
2、編輯 PDF 文件內(nèi)容
可以向已有的 PDF 文件中添加文本、圖片、表格等內(nèi)容,也可以修改現(xiàn)有內(nèi)容,實(shí)現(xiàn)文檔內(nèi)容的動(dòng)態(tài)更新。
3、處理 PDF 文件
iTextSharp 提供了豐富的 API,可以處理 PDF 文件中的文本、表格、圖形等元素,實(shí)現(xiàn)對(duì) PDF 內(nèi)容的精確控制和調(diào)整。
4、設(shè)置頁(yè)面屬性
可以通過(guò) iTextSharp 設(shè)置頁(yè)面尺寸、方向、邊距等屬性,定制化生成的 PDF 文檔格式。
4、添加水印和加密
可以在 PDF 文件中添加水印、數(shù)字簽名,也可以通過(guò) iTextSharp 對(duì) PDF 文件進(jìn)行加密保護(hù),確保 PDF 文件的安全性。
5、PDF 文件合并和拆分
iTextSharp 提供了合并多個(gè) PDF 文件和拆分單個(gè) PDF 文件的功能,方便進(jìn)行文檔的整合和拆分操作。
總的來(lái)說(shuō),iTextSharp 是一個(gè)功能強(qiáng)大且靈活的 PDF 處理庫(kù),可用于各種 PDF 文件的生成和處理需求。
通過(guò)使用 iTextSharp,開(kāi)發(fā)者可以在 C# 程序中快速、高效地操作和處理 PDF 文件。
到此這篇關(guān)于基于C#實(shí)現(xiàn)PDF按頁(yè)分割文件和分頁(yè)合并的文章就介紹到這了,更多相關(guān)C# PDF分割與合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#高效反射調(diào)用方法類(lèi)實(shí)例詳解
在本篇文章中小編給大家分享的是關(guān)于C#高效反射調(diào)用方法類(lèi)的相關(guān)實(shí)例內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2019-07-07
在Form_Load里面調(diào)用Focus無(wú)效的解決方法
在調(diào)用Form_Load的時(shí)候,F(xiàn)orm其實(shí)還沒(méi)有進(jìn)入展示階段,自然Focus()調(diào)用也就沒(méi)效果了。2013-02-02
C#基于HttpWebRequest實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求的方法分析
這篇文章主要介紹了C#基于HttpWebRequest實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求的方法,結(jié)合實(shí)例形式分析了C#使用HttpWebRequest類(lèi)與System.IO類(lèi)實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-02-02
C# wpf簡(jiǎn)單顏色板的實(shí)現(xiàn)
wpf本身沒(méi)有提供顏色板之類(lèi)的控件,有些業(yè)務(wù)使用場(chǎng)景需要使用顏色板之類(lèi)的控件,本文就簡(jiǎn)單實(shí)現(xiàn),感興趣的可以了解一下2021-10-10
C#實(shí)現(xiàn)將HTML文檔和HTML字符串轉(zhuǎn)換為圖片
在.NET開(kāi)發(fā)中,將HTML內(nèi)容轉(zhuǎn)換為圖片的需求廣泛存在于報(bào)告生成,郵件內(nèi)容存檔,網(wǎng)頁(yè)快照等場(chǎng)景,下面我們就來(lái)看看HTML文檔和字符串轉(zhuǎn)圖片兩種場(chǎng)景的轉(zhuǎn)換方案吧2025-06-06
基于WebClient實(shí)現(xiàn)Http協(xié)議的Post與Get對(duì)網(wǎng)站進(jìn)行模擬登陸和瀏覽實(shí)例
這篇文章主要介紹了基于WebClient實(shí)現(xiàn)Http協(xié)議的Post與Get對(duì)網(wǎng)站進(jìn)行模擬登陸和瀏覽的方法,以實(shí)例形式詳細(xì)分析了WebClient模擬POST與GET登陸與瀏覽的過(guò)程,對(duì)于C#項(xiàng)目開(kāi)發(fā)來(lái)說(shuō)具有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11

