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

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

一、功能:

功能就是要解决的问题

1.PDF合并:批量合并多个PDF文件为一个文件

2.PDF拆分:批量拆分多个PDF文件,按x页/文档的方式拆分,重新命名

3.PDF提取:把一个PDF文件拆解为,一个为x-y页文件,一个为other文件

二、图文展示

1.合并

acbc6023d4ce979a71942dbf0dac7201.png

2.拆分f4a707fa195feeb1f366d264d463ab83.png

3.提取

97186e616c9e7375c7f342ef4ed1a523.png

三、部分代码

1.合并代码

//执行合并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.拆分代码

//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.提取代码

//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.部分函数方法

//提取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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值