該頁面可以包含自動翻譯的文字。
在 C# 和 VB.NET 中分割 PDF 文檔
Docotic.Pdf 庫 允許您將 PDF 文件分成一組較小的文件。您可以提取單一頁面或頁面範圍。您也可以根據特定條件拆分 PDF 文件。
Docotic.Pdf 附帶付費許可證,但它也是在某些情況下免費。在 下載 C# .NET PDF 函式庫 頁面取得該庫和免費的限時許可證金鑰。
9.5.17615-dev 14,813 已通過 NuGet 總下載量 4,924,084PDF 分割基礎知識
PdfDocument.CopyPages 方法可讓您從 PdfDocument 物件複製頁面。這是用於分割 PDF文件的主要 Docotic.Pdf API。
將 PDF 拆分為單獨的頁面
以下 C# 程式碼將每個 PDF 頁面儲存到單獨的檔案中:
using var pdf = new PdfDocument("source.pdf");
for (int i = 0; i < pdf.PageCount; ++i)
{
using PdfDocument copy = pdf.CopyPages(i, 1);
copy.RemoveUnusedResources();
copy.Save(i + ".pdf");
}
PdfDocument.RemoveUnusedResources 方法有助於減少輸出檔。當複製的頁面引用未使用的字體、圖像、圖案時,它非常有用。在 優化輸出檔 部分中了解有關 PDF 壓縮的更多資訊。
拆分為頁面組
CopyPages 方法支援複製任何頁面範圍。此程式碼片段顯 示如何擷取第三頁和第一頁:
using var pdf = new PdfDocument(@"source.pdf");
using PdfDocument copy = pdf.CopyPages(new int[] { 2, 0 });
copy.RemoveUnusedResources();
copy.Save("result.pdf");
頁面索引的順序很重要。它定義了結果文檔中的頁面順序。
嘗試來自 GitHub 的 複製頁面 程式碼範例。
按條件拆分 PDF
您可以根據內容拆分文檔。如果您事先不知道要提取哪些頁面,這會很有幫助。例如,提取包含特定文字的頁面:
string textToFind = ".NET Standard";
using (var pdf = new PdfDocument("C# in depth.pdf"))
{
var pageIndexes = new List<int>();
for (int i = 0; i < pdf.Pages.Count; i++)
{
string pageText = pdf.Pages[i].GetText();
if (pageText.Contains(textToFind, StringComparison.CurrentCultureIgnoreCase))
pageIndexes.Add(i);
}
if (pageIndexes.Count > 0)
{
using var copy = pdf.CopyPages(pageIndexes.ToArray());
copy.RemoveUnusedResources();
copy.Save(textToFind + ".pdf");
}
}
您可以在 使用 C# 和 VB.NET 從 PDF 中提取文本 文章中閱讀更多關於文字擷取的資訊。
進階 PDF 分割
提取頁面
CopyPages
方法不會更改關聯的 PdfDocument
物件。還有
PdfDocument.ExtractPages 方法。它們允許您從文件
中刪除提取的頁面:
using var pdf = new PdfDocument(@"source.pdf");
using PdfDocument copy = pdf.ExtractPages(0, 3);
copy.Save("extracted.pdf");
pdf.Save("original.pdf");
您可以嘗試 GitHub 中對應的 提取頁面 程式碼範例。
刪除頁面並重新排序
CopyPages
和 ExtractPages
方法產生一個包含選取頁面的新文件。另一種方法是從目前文件中刪除頁面:
using var pdf = new PdfDocument(@"source.pdf");
pdf.RemovePages(0, 3);
pdf.Save("remaining.pdf")
您也可以在刪除後對頁面重新排序。查看這些部分中的程式碼範例:
最佳化輸出文件
早些時候,我使用 RemoveUnusedResources 方法來優化產生的檔案。 Docotic.Pdf 提供了更多 PDF壓縮選項。例如,您可以刪除結構資訊或壓縮影像。請閱 讀 使用 C# 和 VB.NET 壓縮 PDF 文檔 文章以獲取更多資訊。您也可以嘗試GitHub 中的 在.NET中壓縮PDF文檔 程式碼範例。
PDF 分割有時用於使頁面文件小於某個限制。在這種情況下,您可以測量結果大小並在必要時壓縮檔案。範例程式碼:
using var pdf = new PdfDocument("source.pdf");
using PdfDocument copy = pdf.CopyPages(0, 1);
copy.RemoveUnusedResources();
using var ms = new MemoryStream();
copy.Save(ms);
byte limit = 1024 * 1024;
if (ms.Length > limit)
{
compress(copy);
copy.Save("result.pdf");
}
請注意,可能無法將 PDF 檔案壓縮到低於特定限制。結果取決於文件內容和限制值。
擷取頁面內容
拆分時也可以更改頁面內容。例如,您可以先縮放提取的頁面,然後再將其用於 PDF 拼版。嘗試來自 GitHub 的相關 從頁面建立 XObject 範例專案。
或者您可以刪除或替換提取的頁面上的某些內容。查看 複製文字、路徑和圖像 程式碼範例,該範例展示如何複製 PDF 頁面物件。
將 PDF 拆分為圖像
Docotic.Pdf 還允許您將 PDF 文件拆分為頁面圖像。請閱讀 在 C# 和 VB.NET 中將 PDF 轉換為圖像 文章以了解更多詳細資訊。
拆分為平行線程
您可能想要並行化大型文件的 PDF 分割。 PdfDocument 類別不是線
程安全的。但可以在每個線程中使用單獨的 PdfDocument
物件:
string fileName = "source.pdf";
using var temp = new PdfDocument(fileName);
int pageCount = temp.PageCount;
Parallel.For(0, pageCount, i =>
{
using var pdf = new PdfDocument(fileName);
using var copy = pdf.CopyPages(i, 1);
copy.RemoveUnusedResources();
copy.Save($"split_{i}.pdf");
});
請注意,單線程程式碼通常更快。多執行緒解決方案涉及與解析額外的 PdfDocument 物件相關的開銷。使用單執行緒版本,除非測試證明並 行程式碼更快。