首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分享免费PDF工具(个人C#编程作品,免费使用)

分享免费PDF工具(个人C#编程作品,免费使用)

作者头像
哆哆Excel
发布于 2024-04-10 02:40:22
发布于 2024-04-10 02:40:22
48170
代码可运行
举报
文章被收录于专栏:哆哆Excel哆哆Excel
运行总次数:0
代码可运行

免费PDF工具v1.0(个人C#编程作品,免费使用)

一、功能:

功能就是要解决的问题

1.PDF合并:批量合并多个PDF文件为一个文件2.PDF拆分:批量拆分多个PDF文件,按x页/文档的方式拆分,重新命名3.PDF提取:把一个PDF文件拆解为,一个为x-y页文件,一个为other文件

二、图文展示

1.合并

2.拆分

3.提取

三、部分代码

1.合并代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       //执行合并Button
        private void button3_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("没设置输出文件");
                return;
            }
            string outputFileName = textBox1.Text;
            // 创建一个新的PDF文档,用于合并
            using (PdfDocument mergedDocument = new PdfDocument())
            {
                // 遍历ListBox中的PDF文件列表
                foreach (string pdfFile in listBox1.Items)
                {
                    // 读取每个PDF文件
                    PdfDocument inputDocument = PdfReader.Open(pdfFile, PdfDocumentOpenMode.Import);

                    // 将每个PDF文档的页面添加到合并后的文档中
                    foreach (PdfPage page in inputDocument.Pages)
                    {
                        mergedDocument.AddPage(page);
                    }

                    // 关闭输入文档
                    inputDocument.Close();
                }
                // 保存合并后的PDF文件到指定目录
                mergedDocument.Save(outputFileName);
            }
            MessageBox.Show("PDF文件合并完成,并已保存到 " + outputFileName);
        }

2.拆分代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//PDF拆分---执行拆分
        private void button8_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBox2.Text))
            {
                return;
            }
            string outputDirectory = textBox2.Text;
            // 确保输出目录存在
            if (!Directory.Exists(outputDirectory))
            {
                Directory.CreateDirectory(outputDirectory);
            }
            
            // 指定每个PDF文件需要拆分的页数
            int pagesPerDocument =(int)numericUpDown1.Value; // 例如,每个文档拆分为5页
            //int pagesPerDocument = 5; // 例如,每个文档拆分为5页

            // 遍历ListBox中的所有PDF文件
            foreach (string pdfFile in listBox2.Items)
            {
                
                // if (!(pdfFile is string filePath)) continue; // 确保ListBox中的所有项都是字符串类型的文件路径

                // 读取PDF文件
                using (PdfDocument document = PdfReader.Open(pdfFile, PdfDocumentOpenMode.Import))
                {
                    int pageCount = document.PageCount;
                    int pagesCopied = 0;

                    // 计算需要拆分的次数
                    int splitsNeeded = (pageCount + pagesPerDocument - 1) / pagesPerDocument;

                    for (int i = 0; i < splitsNeeded; i++)
                    {
                        //MessageBox.Show(pdfFile + "" + i.ToString());
                        int startPage = i * pagesPerDocument + 1;
                        int endPage = Math.Min(startPage + pagesPerDocument - 1, pageCount);
                        // 创建一个新的PDF文档用于保存这些页面
                        using (PdfDocument singlePageDocument = new PdfDocument())
                        {
                            for (int j = startPage; j <= endPage; j++)
                            {
                                PdfPage page = document.Pages[j-1];
                                singlePageDocument.AddPage(page);
                                pagesCopied++;
                            }
                            string outputFilePath = Path.Combine(outputDirectory, $"{Path.GetFileNameWithoutExtension(pdfFile)}_{startPage}-{endPage}.pdf");
                            singlePageDocument.Save(outputFilePath);
                        }
                        //输出进度或状态信息MessageBox.Show($"从 {filePath} 拆分了 {pagesCopied} 页并保存为 {outputFilePath}");
                    }
                }



            }
            MessageBox.Show("所有PDF文件的拆分已完成。");
        }

3.提取代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 //pdf提取---执行提取
        private void button11_Click(object sender, EventArgs e)
        {
            int x = (int)numericUpDown2.Value;
            int y= (int)numericUpDown3.Value;
            string inputFilePath = textBox3.Text;
            string outputDirectory = textBox4.Text;
            // 确保输出目录存在
            if (!Directory.Exists(outputDirectory))
            {
                Directory.CreateDirectory(outputDirectory);
            }
            string outputFilePath1 = Path.Combine(outputDirectory, $"{Path.GetFileNameWithoutExtension(inputFilePath)}_{x}-{y}.pdf");
            string outputFilePath2 = Path.Combine(outputDirectory, $"{Path.GetFileNameWithoutExtension(inputFilePath)}_other.pdf");
            ExtractPages(inputFilePath, x, y, outputFilePath1);
            SaveRemainingPages(inputFilePath, x, y, outputFilePath2);
            MessageBox.Show("完成", "提示");
        }

4.部分函数方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//提取PDF文件中x-y页面(存为一个新的文件)
        public static void ExtractPages(string inputFilePath, int startPage, int endPage, string outputFilePath)
        {
            // 打开PDF文件
            using (PdfDocument document = PdfReader.Open(inputFilePath, PdfDocumentOpenMode.Import))
            {
                // 检查指定的页码是否有效
                if (startPage < 1 || endPage > document.PageCount)
                {
                    throw new ArgumentException("指定的页码范围超出了PDF文档的范围。");
                }

                // 创建一个新的PDF文档用于存放提取的页面
                PdfDocument newDocument = new PdfDocument();

                // 将指定范围内的页面添加到新的PDF文档中
                for (int i = startPage - 1; i <= endPage - 1; i++)
                {
                    PdfPage originalPage = document.Pages[i];
                    newDocument.AddPage(originalPage);
                }

                // 保存新的PDF文档到指定的输出文件路径
                newDocument.Save(outputFilePath);
            }
        }
        //提取PDF文件中x-y页面(余下部分存为另一个新的文件)
        public static void SaveRemainingPages(string inputFilePath, int x, int y, string outputFilePath)
        {
            // 打开PDF文件
            using (PdfDocument document = PdfReader.Open(inputFilePath, PdfDocumentOpenMode.Import))
            {
                // 创建一个新的PDF文档用于存放剩余的页面
                PdfDocument newDocument = new PdfDocument();

                // 遍历文档中的所有页面
                for (int i = 0; i < document.PageCount; i++)
                {
                    // 如果页面不在提取的范围内,则添加到新的PDF文档中
                    if (i < x - 1 || i > y - 1)
                    {
                        PdfPage originalPage = document.Pages[i];
                        newDocument.AddPage(originalPage);
                    }
                }

                // 保存新的PDF文档到指定的输出文件路径
                newDocument.Save(outputFilePath);
            }
        }

四、下载链接

关注,回复文字: PDF

记得分享给你的朋友,大家一起免费使用

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哆哆Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
7 条评论
热度
最新
PDF
PDF
回复回复点赞举报
PDF
PDF
回复回复点赞举报
PDF
PDF
回复回复点赞举报
PDF
PDF
回复回复点赞举报
PDF
PDF
回复回复点赞举报
PDF
PDF
回复回复点赞举报
PDF
PDF
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
边缘计算+AI算力网络:如何构建低延迟、高并发的实时推理系统?
在数字化转型的浪潮中,人工智能技术与边缘计算的融合正在创造一场计算范式的革命。传统的云计算模式虽然提供了强大的计算能力,但面临着网络延迟高、带宽不足、响应速度慢等挑战,特别是在需要实时响应的场景中。随着物联网设备的激增和AI应用的普及,边缘计算逐渐成为解决这些挑战的关键技术路径。 边缘计算将计算资源和数据处理能力下沉到网络边缘,靠近数据源和用户,从而减少数据传输延迟,提高系统响应速度。而AI算力网络则通过分布式计算和优化的算法,进一步提升边缘设备的推理性能。这种结合为构建低延迟、高并发的实时推理系统提供了新的可能。
大熊计算机
2025/07/19
2280
边缘计算+AI算力网络:如何构建低延迟、高并发的实时推理系统?
Apache Flink实战(一) - 简介
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。 Flink设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。
JavaEdge
2019/04/26
2.4K0
Apache Flink实战(一) - 简介
掌握大数据时代的心跳:实时数据处理的崛起
在大数据时代,我们每天都在生成海量的数据——从社交媒体上的点赞到物联网设备上传的传感器数据,数据无处不在。然而,仅仅存储这些数据已经无法满足现代业务的需求,“实时数据处理” 已经从一项可选技术跃升为业务成功的关键所在。如何让数据在其生成的瞬间就能被分析、处理并驱动决策,这是我们今天要探讨的重点。
Echo_Wish
2025/03/11
2880
掌握大数据时代的心跳:实时数据处理的崛起
​从 Spark Streaming 到 Apache Flink:bilibili 实时平台的架构与实践
摘要:本文由 bilibili 大数据实时平台负责人郑志升分享,基于对 bilibili 实时计算的痛点分析,详细介绍了 bilibili Saber 实时计算平台架构与实践。本次分享主要围绕以下四个方面:
Spark学习技巧
2020/02/26
1.6K0
​从 Spark Streaming 到 Apache Flink:bilibili 实时平台的架构与实践
Apache Flink vs Apache Spark:数据处理的详细比较
深入比较 Apache Flink和 Apache Spark,探索它们在数据处理方面的差异和优势,以帮助您确定最适合的数据处理框架。
大数据杂货铺
2023/09/14
6.9K0
Apache Flink vs Apache Spark:数据处理的详细比较
最新消息!Cloudera 全球发行版正式集成 Apache Flink
摘要:近期 Cloudera Hadoop 大神 Arun 在 Twitter 上宣布 Cloudera Data Platform 正式集成了 Flink 作为其流计算产品,Apache Flink PMC Chair Stephan 也回应:“此举意义重大。”这意味着所有 CDH 发行版覆盖的全球企业用户都将能够使用 Flink 进行流数据处理。
Fayson
2020/02/10
1.4K0
最新消息!Cloudera 全球发行版正式集成 Apache Flink
独家 | 一文读懂Apache Flink技术
本文来自9月1日在成都举行的Apache Flink China Meetup,分享来自于云邪。
数据派THU
2018/12/04
1K0
独家 | 一文读懂Apache Flink技术
数据流介绍
了解数据流是什么,它如何实现实时洞察和决策,以及其在金融、物联网和电子商务等行业的应用。
云云众生s
2025/02/06
3140
Apache Flink快速入门-什么是Apache Flink
在数字化时代,企业每天都在面对持续不断增长的数据需要处理,这些数据可能来自IOT、移动或 Web 应用程序生成的采集温度、流量、定位、跟踪、监管、日志文件、网上购物数据、游戏玩家活动、社交网站信息或者是金融交易等。能够及时地处理并分析这些流数据对企业来说至关重要。传统的批处理拥有巨大吞吐量的优势,但是随之而来的是极其高延迟的缺陷。随着大数据系统的不断发展,传统的批处理已然无法全部满足对 时效性 要求愈加严苛的业务需求。为了适应逐渐变得实时的年代,大数据系统架构也由简单的批处理转向批流混合的Lambda架构,最后可能会逐渐演变成只有流计算的高精准高时效的Kappa架构。
jack.yang
2025/04/05
2330
Apache Flink快速入门-什么是Apache Flink
Apache Hudi在Hopsworks机器学习的应用
Hopsworks特征存储库统一了在线和批处理应用程序的特征访问而屏蔽了双数据库系统的复杂性。我们构建了一个可靠且高性能的服务,以将特征物化到在线特征存储库,不仅仅保证低延迟访问,而且还保证在服务时间可以访问最新鲜的特征值。
ApacheHudi
2021/07/05
1K0
Apache Hudi在Hopsworks机器学习的应用
2024年最新Flink教程,从基础到就业,大家一起学习--基础篇
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。
小白的大数据之旅
2024/11/20
4270
2024年最新Flink教程,从基础到就业,大家一起学习--基础篇
中间件系列:3 flink安装和测试
官方定义: Apache Flink 是一个在数据流上进行有状态计算的分布式处理引擎和框架。
李福春
2025/07/01
2320
中间件系列:3 flink安装和测试
浅谈一下实时数据仓库
实时数据仓库,简称实时数仓,是一种用于集成、存储和分析大规模结构化数据与非结构化数据的数据管理系统,强调数据的易用性、可分析性和可管理性。它主要面向实时数据流,能够实时地接收、处理和存储数据,并提供实时的数据分析结果。
闫同学
2023/12/05
1.7K0
为什么我们在规模化实时数据中使用Apache Kafka
了解网络安全供应商 SecurityScorecard 如何利用数据流来增强其业务能力。
云云众生s
2024/07/15
2070
Flink学习笔记(1) -- Flink入门介绍
  Flink是一个分布式大数据计算引擎,可对有限流和无限流进行有状态的计算,支持Java API和Scala API、高吞吐量低延迟、支持事件处理和无序处理、支持一次且仅一次的容错担保、支持自动反压机制、兼容Hadoop、Storm、HDFS和YARN。
挽风
2021/04/13
9850
Flink学习笔记(1) -- Flink入门介绍
AI智能体的开发
AI智能体的开发技术方案是一个复杂且多层面的决策过程,它需要根据智能体的具体功能、性能要求、部署环境、可扩展性以及团队的技术栈来综合考量。以下是一个全面且分层的AI智能体开发技术方案,涵盖了从数据到部署的各个环节。
数字孪生开发者
2025/06/16
3000
AI智能体的开发
Flink 极简教程: 架构及原理 Apache Flink® — Stateful Computations over Data Streams
Apache Flink 是一个分布式流计算引擎,用于在无边界和有边界数据流上进行有状态的计算。
一个会写诗的程序员
2022/01/04
3.6K0
Flink 极简教程: 架构及原理 Apache Flink® — Stateful Computations over Data Streams
挑战 Spark 和 Flink?大数据技术栈的突围和战争|盘点
十年的轮回,正如大数据的发展一般,它既是一个轮回的结束,也是崭新的起点。大数据在过去的二十年中蓬勃发展,从无到有,崛起为最具爆炸性的技术领域之一,逐渐演变成为每个企业不可或缺的基础设施。然而,在这个时刻,我们不禁要问:当前的大数据架构是否已经趋于完美?2023 年,伴随着人工智能的跃变式爆发,数据平台将如何演进,以适应未来的数据使用场景?
深度学习与Python
2024/01/17
8410
挑战 Spark 和 Flink?大数据技术栈的突围和战争|盘点
用 Apache NiFi、Kafka和 Flink SQL 做股票智能分析
本文是关于如何在实时分析中使用云原生应用程序对股票数据进行连续 SQL 操作的教程。
吴云涛
2021/11/15
4.1K0
用 Apache NiFi、Kafka和 Flink SQL 做股票智能分析
人工智能驱动的事件处理:制胜实时的关键
事件处理能力使从业务数据中获取有价值的见解的能力民主化,而不仅仅局限于那些拥有深厚的 IT 和分析技能的人。
云云众生s
2024/05/30
2390
推荐阅读
相关推荐
边缘计算+AI算力网络:如何构建低延迟、高并发的实时推理系统?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验