C# 如何将一个PDF页面分割为两页或多页

除了将PDF文档拆分为多个PDF以外,有时候我们也需要将一个PDF页面分割为2个或多个页面。这篇文章介绍如何使用C#将一个PDF页面横向和纵向地分割为2页或多页。

本文所使用PDF组件:Spire.PDF for .NET(Version 5.1.4及以上版本)

使用以下代码前,可通过以下两个地址之一下载Spire.Pdf.dll:

1. 官网下载

2. Visual Studio--》工具--》NuGet包管理器--》管理解决方案的NuGet包,在浏览中搜索Spire.PDF for .NET--》直接安装到项目

原PDF页面如下:

横向拆分

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

namespace SplitPDFPage
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载PDF文档
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("Sample.pdf");

            //获取第一页
            PdfPageBase page = pdf.Pages[0];

            //创建一个新的PDF文档
            PdfDocument newPdf = new PdfDocument();

            //移除新建PDF文档的页边距
            newPdf.PageSettings.Margins.All = 0;

            //设置新建PDF文档的页面宽度等于原PDF文档第一页的页面宽度,高度等于原PDF文档第一页的页面高度的一半
            newPdf.PageSettings.Width = page.Size.Width;
            newPdf.PageSettings.Height = page.Size.Height / 2;

            //添加一个新页面到新建PDF文档
            PdfPageBase newPage = newPdf.Pages.Add();

            //页面内容写满之后自动分页
            PdfTextLayout format = new PdfTextLayout();
            format.Break = PdfLayoutBreakType.FitPage;
            format.Layout = PdfLayoutType.Paginate;

            //将原PDF文档的第一页的内容画到新建PDF的页面上
            page.CreateTemplate().Draw(newPage, new PointF(0, 0), format);

            //保存文档
            newPdf.SaveToFile("HorizontallySplit.pdf");

            //关闭
            newPdf.Close();
            pdf.Close();
        }
    }
}

横向拆分为2页效果:

纵向拆分

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

namespace SplitPDFPage
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载PDF文档
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("Sample.pdf");

            //获取第一页
            PdfPageBase page = pdf.Pages[0];

            //创建一个新的PDF文档
            PdfDocument newPdf = new PdfDocument();

            //移除新建PDF文档的页边距
            newPdf.PageSettings.Margins.All = 0;

            //设置新建PDF文档的页面宽度等于原PDF文档第一页的页面宽度的一半,高度等于原PDF文档第一页的页面高度
            newPdf.PageSettings.Width = page.Size.Width / 2;
            newPdf.PageSettings.Height = page.Size.Height;

            //添加一个新页面到新建PDF文档
            PdfPageBase newPage = newPdf.Pages.Add();

            //页面内容写满之后自动分页
            PdfTextLayout format = new PdfTextLayout();
            format.Break = PdfLayoutBreakType.FitPage;
            format.Layout = PdfLayoutType.Paginate;

            //将原PDF文档第一页的内容画到新建PDF文档的页面上
            page.CreateTemplate().Draw(newPage, new PointF(0, 0), format);

            //保存文档
            newPdf.SaveToFile("VerticallySplit.pdf");

            //关闭
            newPdf.Close();
            pdf.Close();         
        }
    }
}

纵向拆分为2页的效果:

以上代码只将PDF页面拆分为了2页,如果需要拆分为多页,例如横向拆分为4页,将新建PDF的页面高度设置为原页面高度的1/4即可。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
以下是一个使用 C# 和 iTextSharp 库实现的简单的 PDF 分割程序。请注意,iTextSharp 库需要通过 NuGet 包管理器安装。 ```csharp using System; using System.IO; using iTextSharp.text; using iTextSharp.text.pdf; namespace PdfSplitter { class Program { static void Main(string[] args) { // 源 PDF 文件路径 string sourcePdfPath = @"C:\example\source.pdf"; // 分割后的 PDF 文件路径 string outputPdfPath = @"C:\example\output.pdf"; // 要分割的页码范围,例如 1-3 表示从第一页到第三页 string pageRange = "1-3"; // 分割 PDF SplitPdf(sourcePdfPath, outputPdfPath, pageRange); Console.WriteLine("PDF 分割完成。"); Console.ReadLine(); } static void SplitPdf(string sourcePdfPath, string outputPdfPath, string pageRange) { using (var sourcePdfStream = new FileStream(sourcePdfPath, FileMode.Open)) { var reader = new PdfReader(sourcePdfStream); // 获取要分割的页码范围 var pageRanges = new[] { pageRange }; var pageSelection = new PdfReaderSelection(pageRanges); var selectedPages = pageSelection.Select(reader); // 创建分割后的 PDF 文件 using (var outputPdfStream = new FileStream(outputPdfPath, FileMode.Create)) { var document = new Document(reader.GetPageSizeWithRotation(1)); var writer = PdfWriter.GetInstance(document, outputPdfStream); writer.SetFullCompression(); document.Open(); var cb = writer.DirectContent; foreach (var page in selectedPages) { document.SetPageSize(reader.GetPageSizeWithRotation(page)); document.NewPage(); var importedPage = writer.GetImportedPage(reader, page); cb.AddTemplate(importedPage, 0, 0); } document.Close(); } } } } } ``` 在上面的代码中,`SplitPdf` 方法接收三个参数:源 PDF 文件路径,分割后的 PDF 文件路径和要分割的页码范围。页码范围应该作为字符串传递,例如 `"1-3"` 表示从第一页到第三页。 在 `SplitPdf` 方法中,我们使用 `PdfReader` 对象读取源 PDF 文件,并使用 `PdfReaderSelection` 类选择要分割页面。然后,我们使用 `PdfWriter` 对象将分割后的页面写入新的 PDF 文件中。 以上代码只是一个简单的示例,实际应用中可能需要处理更多异常情况和边缘情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值