【C#】pdf按页分割文件,以及分页合并,效果还不错,你值得拥有

news2024/11/19 16:27:14

欢迎来到《小5讲堂》
这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 背景
  • 效果
  • 单页分割
  • 文件合并
  • 多页分割
  • 插件说明
  • 相关文章

背景

最近遇到一个文件上传限制大小问题,
因为有哪些pdf文件可能有300多页,大小已经有100MB,
但是有些文件上传限制大小在10MB以内,
因为本篇文章将简单讲讲如何将大文件通过分页分割和合并。

效果

下面就是通过pdf插件进行按页进行文件分割输出
在这里插入图片描述

单页分割

插件命名空间

using iTextSharp.text;
using iTextSharp.text.pdf;

目标分割pdf文件、创建输出文件所在的文件夹、iTextSharp插件操作pdf分割

// 目标分割pdf文件
string inputFilePath = @"你自己的pdf文件物理路径.pdf";

// 创建输出文件所在文件夹
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 分割完成!");

文件合并

// 目标合并pdf文件
string[] sourceFiles = new string[] {
    @"你的pdf文件1.pdf",
    @"你的pdf文件2.pdf"
};

// 创建输出文件所在文件夹
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();
}

多页分割

根据分页范围进行分割文件,比如:1-10页分割一个文件,即10页分割一个文件
在这里插入图片描述

    // 目标分割pdf文件
    string inputFilePath = @"你自己的pdf文件物理路径.pdf";

    // 创建输出文件所在文件夹
    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页的文件
        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();
        }
    }
}

插件说明

iTextSharp 是一个开源的 PDF 处理库,用于在 C# 程序中创建、编辑和处理 PDF 文件。它提供了丰富的功能和 API,使开发者能够进行各种 PDF 文件操作,包括创建 PDF、添加文本、插入图片、设置页面布局等功能。iTextSharp 库基于 iText 库的 C# 版本,是在 C# 平台上操作 PDF 文件的常用工具之一。
以下是 iTextSharp 的一些基本功能:
1、创建 PDF 文件
使用 iTextSharp 可以在 C# 中轻松地创建新的 PDF 文件,可以通过代码指定文档结构、页面布局、文本样式等。

2、编辑 PDF 文件内容
可以向已有的 PDF 文件中添加文本、图片、表格等内容,也可以修改现有内容,实现文档内容的动态更新。

3、处理 PDF 文件
iTextSharp 提供了丰富的 API,可以处理 PDF 文件中的文本、表格、图形等元素,实现对 PDF 内容的精确控制和调整。

4、设置页面属性
可以通过 iTextSharp 设置页面尺寸、方向、边距等属性,定制化生成的 PDF 文档格式。

4、添加水印和加密
可以在 PDF 文件中添加水印、数字签名,也可以通过 iTextSharp 对 PDF 文件进行加密保护,确保 PDF 文件的安全性。

5、PDF 文件合并和拆分
iTextSharp 提供了合并多个 PDF 文件和拆分单个 PDF 文件的功能,方便进行文档的整合和拆分操作。

总的来说,iTextSharp 是一个功能强大且灵活的 PDF 处理库,可用于各种 PDF 文件的生成和处理需求。
通过使用 iTextSharp,开发者可以在 C# 程序中快速、高效地操作和处理 PDF 文件。

相关文章

【C#】pdf按页分割文件,以及分页合并,效果还不错,你值得拥有

【C#】未能加载文件或程序集“CefSharp.Core.Runtime.dll”或它的某一个依赖项。找不到指定的模块。

【C#】.net core 6.0 在program时间格式统一json格式化,并列举program默认写法和简化写法

【C#】.net core 6.0 ApiController,API控制器方法,API接口以实体类作为接收参数应该注意的点

【C#】 SortedDictionary,查找字典中是否存在给定的关键字

【C#】.net core 6.0 MVC返回JsonResult显示API接口返回值不可被JSON反序列化

【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇

【C#】约瑟夫原理举例2个代码实现

【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推

【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32Cube系列教程11:STM32 AES加解密模块性能测试

文章目录 本次测试环境本次测试所使用的系统时钟为48MHz本次测试主要测试对大量数据进行加解密所需的时间&#xff0c;本次为不严谨测试&#xff0c;忽略了程序调用耗时&#xff0c;结果仅供参考。 AES算法与数据加解密加密与解密对称加解密AES算法AES-ECBAES-CBC 填充算法PKCS…

ITIL简介重要组成部分

ITIL简介&重要组成部分 ITIL&#xff08;Information Technology Infrastructure Library&#xff09;是一个IT服务管理的最佳实践框架&#xff0c;通过服务战略、服务设计、服务过渡、服务运营和持续服务改进五个核心模块&#xff0c;帮助组织优化IT服务流程&#xff0c;…

嘴尚绝卤味:健康美味,引领卤味新风尚

在快节奏的现代生活中&#xff0c;人们对于美食的追求从未停歇。卤味作为中国传统美食的代表之一&#xff0c;以其独特的口感和丰富的营养&#xff0c;深受广大消费者的喜爱。而在众多卤味品牌中&#xff0c;嘴尚绝卤味凭借其健康、美味的特色&#xff0c;成为了市场上的佼佼者…

Pytorch解决 多元回归 问题的算法

Pytorch解决 多元回归 问题的算法 回归是一种基本的统计建模技术&#xff0c;用于建立因变量与一个或多个自变量之间的关系。 我们将使用 PyTorch&#xff08;一种流行的深度学习框架&#xff09;来开发和训练线性回归模型。 二元回归的简单示例 训练数据集&#xff08;可获取&…

分离式光电液位传感器有哪些特点?

分离式光电液位传感器是一种先进的液位检测技术&#xff0c;在科学技术的不断推进下得到了广泛应用。相比传统的液位传感器&#xff0c;分离式光电液位传感器具有许多独特的特点。 传感器采用了先进的光学技术&#xff0c;将传感器装在需要检测液位的位置&#xff0c;并采用了…

非GIS专业,真的不适合WebGIS开发吗?

到底是哪些人在新中地特训营学GIS开发&#xff1f; 很多同学对GIS开发的认知还停留在GIS专业的学生才能学GIS开发&#xff0c;然而&#xff0c;在新中地教育&#xff0c;非GIS专业的学生几乎占一半。 除了GIS专业&#xff0c;还有测绘、遥感等跟GIS差别不大的专业学生选择来学…

面试官:你讲下接口防重放如何处理?

前言 我们的API接口都是提供给第三方服务/客户端调用&#xff0c;所有请求地址以及请求参数都是暴露给用户的。 我们每次请求一个HTTP请求&#xff0c;用户都可以通过F12,或者抓包工具fd看到请求的URL链接&#xff0c;然后copy出来。这样是非常不安全的&#xff0c;有人可能会…

鸿蒙轻内核A核源码分析系列二 数据结构-位图操作

在进一步分析之前&#xff0c;本文我们先来熟悉下OpenHarmony鸿蒙轻内核提供的位操作模块&#xff0c;在互斥锁等模块对位操作有使用。位操作是指对二进制数的bit位进行操作。程序可以设置某一变量为状态字&#xff0c;状态字中的每一bit位&#xff08;标志位&#xff09;可以具…

Kubernetes——HPA自动伸缩机制

目录 前言 一、概念 1.定义 2.核心概念 3.工作原理 4.HPA的配置关键参数 5.关键组件 5.1HPA控制器&#xff08;HPA Controller&#xff09; 5.2Metrics Server 5.3自定义指标适配器&#xff08;Custom Metrics Adapter&#xff09; 5.4Deployment/ReplicaSet 5.5Po…

文件二维码能快速生成吗?多种类型文件生成二维码的方法

现在将文件做成二维码是一种很常用形式&#xff0c;通过二维码来存储多个文件&#xff0c;在手机上扫码查看内容&#xff0c;对于文件的安全性和用户体验都有很好的提升。用户无需下载文件&#xff0c;扫码就可以快速在线阅读或者下载文件内容&#xff0c;有利于文件的快速分享…

2024年智能制造行业CRM研究(附需求清单、市场格局、选型建议)

在国家大力鼓励智能制造行业与数字化转型这个大背景下&#xff0c;我们选择了2024年智能制造行业数字化的几个关键趋势做深入解读&#xff0c;并对智能制造行业核心的数字化系统CRM进行了全面评估与排名。本文不仅提供了详尽的需求清单&#xff0c;帮助企业明确自身对CRM系统的…

不定时更新 解决无法访问GitHub github.com 打不开 访问加速

1 修改hosts Windows 10为例,‪文件C:\Windows\System32\drivers\etc\hosts 管理员打开记事本来修改 文件-打开-“C:\Windows\System32\drivers\etc\hosts” 20.205.243.168 api.github.com 185.199.108.154 github.githubassets.com 185.199.108.133 raw.githubusercontent.…

1.ei论文会被scopus检索吗文被其检索吗?

ei论文会被scopus检索吗 scopus数据库能检索的专业范围是比较广泛的&#xff0c;涵盖了医学&#xff0c;地球环境科学&#xff0c;化学&#xff0c;数学&#xff0c;工程学&#xff0c;物理&#xff0c;生物科学等领域&#xff0c;也收录了很多会议论文&#xff0c;那么ei论文…

JwtAccessConverterJwtTokenStorejdbc建表结构

文章目录 JWT实现MacTestMacSigner Rsa生成jks证书需要先安装opensslkeytool生成jks (Java Key Store) 文件测试密钥 JwtTokenStoreInMemoryTokenStore&RedisTokenStore&JdbcTokenStore&JwtTokenStore图解JwtTokenStore详解 jdbc实现表结构说明1oauth_client_detai…

Win10系统自带输入法英文变大的问题

现在习惯使用Windows自带的五笔输入法了&#xff0c;但一直以来总会遇到输入时突然英文字母变大了&#xff0c;相隔空间也变大了的情况。 &#xff41;&#xff53;&#xff44;&#xff46;&#xff47;&#xff48;&#xff4b;&#xff4c; asdfghkl 后来知道这是输入法变…

如何在Linux虚拟机服务器上配置和部署Java项目?

在Linux虚拟机上配置和部署Java项目&#xff0c;通常涉及以下步骤&#xff1a; 1. 准备Linux虚拟机 选择合适的Linux发行版 &#xff1a;根据项目需求和个人熟悉程度&#xff0c;选择如Ubuntu LTS、CentOS Stream或Debian等发行版。 安装虚拟机软件 &#xff1a;在宿主机&#…

css图片适配,不随屏幕的大小变化

.carimg {width: 100%;height: 100%;max-width: 100%;max-height: 100%;object-fit: cover; } <img class"carimg" :src"item.imageUrl" alt"" /> 效果&#xff1a; 全屏时 屏幕变小时

985找工作都这么难了吗

经历如下 也不知道自己适合干啥 好想找份实习入门啊

无人机RTMP推流EasyDSS直播平台推流成功,不显示直播按钮是什么原因?

互联网视频云平台/视频点播直播/视频推拉流EasyDSS支持HTTP、HLS、RTMP等播出协议&#xff0c;并且兼容多终端&#xff0c;如Windows、Android、iOS、Mac等。为了便于用户集成与二次开发&#xff0c;我们也提供了API接口供用户调用和集成。在无人机场景上&#xff0c;可以通过E…

Allegro铺铜以及分割操作

Allegro铺铜以及分割操作 一、铺铜全局设置 点击Shape–>Global Dynamic Shape Parameters&#xff0c;在Shape fill中选择Smooth&#xff0c;其他不用管&#xff0c;这个是在铺铜的时候自动避让不同网络&#xff0c;在Void controls中一般填写如下参数&#xff0c;即避让…