前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分享免费PDF工具(个人C#编程作品,免费使用)

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

作者头像
哆哆Excel
发布2024-04-10 10:40:22
693
发布2024-04-10 10:40:22
举报
文章被收录于专栏:哆哆Excel哆哆Excel

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

一、功能:

功能就是要解决的问题

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

二、图文展示

1.合并

2.拆分

3.提取

三、部分代码

1.合并代码

代码语言:javascript
复制
       //执行合并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
复制
//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
复制
 //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
复制
//提取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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档