当前位置: 代码网 > it编程>编程语言>C# > 基于C#实现PDF文件合并工具

基于C#实现PDF文件合并工具

2025年02月14日 C# 我要评论
界面主要用于发票pdf文件的合并。经常出差要报销的很有用。代码using system;using system.collections.generic;using system.componentm

界面

主要用于发票pdf文件的合并。经常出差要报销的很有用。

代码

using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.diagnostics;
using system.drawing;
using system.io;
using system.linq;
using system.text;
using system.threading.tasks;
using system.windows.forms;
using itextsharp.text;
using itextsharp.text.pdf;
//using pdfsharp.pdf;
//using pdfsharp.pdf.io;
 
namespace pdfmergeapp
{
    public partial class form1 : form
    {
        public form1()
        {
            initializecomponent();
            btnopendir.enabled = false;
        }
 
        private list<string> pdflist;
        private string outputpdfdir;
 
        private void bntselectdir_click(object sender, eventargs e)
        {
            folderbrowserdialog folderbrowserdialog = new folderbrowserdialog();
            dialogresult dialogresult = folderbrowserdialog.showdialog();
 
            if (dialogresult == dialogresult.ok)
            {
                string selectedfolderpath = folderbrowserdialog.selectedpath;
                //console.writeline("选择的目录是: " + selectedfolderpath);
                txtfiledir.text = selectedfolderpath;
 
                pdflist = directory.getfiles(selectedfolderpath, "*.pdf").tolist();
 
                if (pdflist != null && pdflist.count > 0)
                {
                    pdflist = pdflist.orderby(t => t).tolist();
                }
 
                addpdflist();
            }
        }
 
        private void addpdflist()
        {
            this.listviewworklogs.items.clear();
            int no = 1;
            foreach (var item in pdflist)
            {
                listviewitem lvitem = new listviewitem();
 
                lvitem.forecolor = color.blue;
                lvitem.text = no.tostring();
                lvitem.stateimageindex = 0;
                lvitem.tag = no - 1;
                lvitem.subitems.add(item);
 
                this.listviewworklogs.items.add(lvitem);
                no++;
            }
        }
 
        /// <summary>
        /// 合并多个pdf文件为一个pdf文件
        /// </summary>
        /// <param name="inputfolderpath"></param>
        /// <param name="outputfolderpath"></param>
        /// <param name="outputpdfname"></param>
        public void mergepdfs(string outputfilepath, params string[] inputfilepaths)
        {
            // 获取输入文件夹中所有的pdf文件  
            //string[] inputfiles = directory.getfiles(inputfolderpath, "*.pdf");
 
            // 创建输出pdf文件路径  
            //string outputpdfpath = path.combine(outputfolderpath, outputpdfname);
 
            // 检查新输出文件是否已存在  
            if (file.exists(outputfilepath))
            {
                // 如果已存在,则删除旧文件并创建新文件  
                file.delete(outputfilepath);
            }
 
            // 创建输出pdf文件  
            using (filestream stream = new filestream(outputfilepath, filemode.create))
            {
                document pdfdoc = new document();
                pdfcopy pdf = new pdfcopy(pdfdoc, stream);
                pdfdoc.open();
 
                foreach (string file in inputfilepaths)
                {
                    // 读取每个pdf文件并将其页面添加到输出pdf中  
                    pdfreader reader = new pdfreader(file);
                    int n = reader.numberofpages;
                    for (int i = 1; i <= n; i++)
                    {
                        pdf.addpage(pdf.getimportedpage(reader, i));
                    }
                    reader.close();
                }
 
                if (pdfdoc != null) pdfdoc.close();
                stream.close();
            }
        }
 
        /// <summary>
        /// 合并多个pdf文件为一个pdf文件
        /// </summary>
        /// <param name="inputfolderpath"></param>
        /// <param name="outputfolderpath"></param>
        /// <param name="outputpdfname"></param>
        public void mergepdfs(string inputfolderpath, string outputfolderpath, string outputpdfname)
        {
            // 获取输入文件夹中所有的pdf文件  
            string[] inputfiles = directory.getfiles(inputfolderpath, "*.pdf");
 
            // 创建输出pdf文件路径  
            string outputpdfpath = path.combine(outputfolderpath, outputpdfname);
 
            outputpdfpath.createdirectorybypath();
 
            // 创建输出pdf文件  
            using (filestream stream = new filestream(outputpdfpath, filemode.create))
            {
                document pdfdoc = new document();
                pdfcopy pdf = new pdfcopy(pdfdoc, stream);
                pdfdoc.open();
 
                foreach (string file in inputfiles)
                {
                    // 读取每个pdf文件并将其页面添加到输出pdf中  
                    pdfreader reader = new pdfreader(file);
                    int n = reader.numberofpages;
                    for (int i = 1; i <= n; i++)
                    {
                        pdf.addpage(pdf.getimportedpage(reader, i));
                    }
                    reader.close();
                }
 
                if (pdfdoc != null) pdfdoc.close();
                stream.close();
            }
 
            string newoutputpdfpath = path.combine(outputfolderpath, "allpdf_merged.pdf");
            //string newoutputpdfpath = path.combine(outputfolderpath, outputpdfname);
 
            // 检查新输出文件是否已存在  
            if (file.exists(newoutputpdfpath))
            {
                // 如果已存在,则删除旧文件并创建新文件  
                file.delete(newoutputpdfpath);
            }
 
            // 重命名输出pdf文件  
            file.move(outputpdfpath, newoutputpdfpath);
        }
 
        /// <summary>
        /// 合并多个pdf文件为一个pdf文件
        /// </summary>
        /// <param name="inputfolderpath"></param>
        /// <param name="outputfolderpath"></param>
        /// <param name="outputpdfname"></param>
        public bool mergepdfs(string outputfolderpath, string outputpdfname)
        {
            var isok = false;
            try
            {
                // 获取输入文件夹中所有的pdf文件  
                //string[] inputfiles = directory.getfiles(inputfolderpath, "*.pdf");
 
                // 创建输出pdf文件路径  
                string outputpdfpath = path.combine(outputfolderpath, outputpdfname);
 
                outputpdfpath.createdirectorybypath();
 
                // 创建输出pdf文件  
                using (filestream stream = new filestream(outputpdfpath, filemode.create))
                {
                    document pdfdoc = new document();
                    pdfcopy pdf = new pdfcopy(pdfdoc, stream);
                    pdfdoc.open();
 
                    foreach (string file in pdflist)
                    {
                        // 读取每个pdf文件并将其页面添加到输出pdf中  
                        pdfreader reader = new pdfreader(file);
                        int n = reader.numberofpages;
                        for (int i = 1; i <= n; i++)
                        {
                            pdf.addpage(pdf.getimportedpage(reader, i));
                        }
                        reader.close();
                    }
 
                    if (pdfdoc != null) pdfdoc.close();
                    stream.close();
                }
 
                string newoutputpdfpath = path.combine(outputfolderpath, "allpdf_merged.pdf");
                //string newoutputpdfpath = path.combine(outputfolderpath, outputpdfname);
 
                // 检查新输出文件是否已存在  
                if (file.exists(newoutputpdfpath))
                {
                    // 如果已存在,则删除旧文件并创建新文件  
                    file.delete(newoutputpdfpath);
                }
 
                // 重命名输出pdf文件  
                file.move(outputpdfpath, newoutputpdfpath);
                isok = true;
            }
            catch (exception ex)
            {
                messagebox.show("合并异常:" + ex.message);
            }
            return isok;
        }
 
        private void btnmergepdf_click(object sender, eventargs e)
        {
            if (pdflist != null && pdflist.count > 0)
            {
                var outputfilepath = txtfiledir.text + "\\mergepdf_" + datetime.now.tostring("yyyymmddhhmmss") + ".pdf";
                //mergepdfs(outputfilepath, pdflist.toarray());
 
                var outputpdfname = "mergepdf_" + datetime.now.tostring("yyyymmddhhmmss") + ".pdf";
                var outputpdfnameall = txtfiledir.text + "\\mergepdf\\" + outputpdfname;
                outputpdfdir = txtfiledir.text + "\\mergepdf";
                //mergepdfs(txtfiledir.text, txtfiledir.text+ "\\mergepdf", outputpdfname);
                var isok = mergepdfs(outputpdfdir, outputpdfname);
                if (isok)
                {
                    lblresult.text = "合并完成。输出文件目录:" + outputpdfnameall;
                    btnopendir.enabled = true;
                    messagebox.show("合并完成");
                }                
            }
            else
            {
                messagebox.show("你没有要合并的pdf文件");
            }
        }
 
        private void btnopendir_click(object sender, eventargs e)
        {
            if (!string.isnullorempty(outputpdfdir))
            {
                opendirectory(outputpdfdir);
            }
            else
            {
                messagebox.show("合并文件没有生成");
            }
        }
 
        static void opendirectory(string path)
        {
            processstartinfo startinfo = new processstartinfo
            {
                arguments = path,
                filename = "explorer.exe"
            };
 
            process.start(startinfo);
        }
 
        private void listviewworklogs_itemcheck(object sender, itemcheckeventargs e)
        {
            var listviewitem = sender as listviewitem;
            var index = listviewitem.tag;
            var a = 0;
        }
 
        private int selectindex;
        private int newindex;
        //private string selectfilename;
 
        private void listviewworklogs_selectedindexchanged(object sender, eventargs e)
        {
            if (listviewworklogs.selecteditems.count > 0)
            {
                var listviewitem = listviewworklogs.selecteditems[0];
                selectindex = (int)listviewitem.tag;
                newindex = selectindex;
            }
        }
 
        
        private void btnmoveup_click(object sender, eventargs e)
        {
            if (pdflist != null && pdflist.count > 0)
            {
                newindex--;
                if (newindex >= 0 && newindex < pdflist.count)
                {
                    var selectfilename = pdflist[selectindex];
                    pdflist[selectindex] = pdflist[newindex];
                    pdflist[newindex] = selectfilename;
                    selectindex = newindex;
 
                    addpdflist();
                }
                else
                {
                    newindex = 0;
                }
            }
        }
 
        private void btnmovedown_click(object sender, eventargs e)
        {
            if (pdflist != null && pdflist.count > 0)
            {
                newindex++;
                if (newindex < pdflist.count)
                {
                    var selectfilename = pdflist[selectindex];
                    pdflist[selectindex] = pdflist[newindex];
                    pdflist[newindex] = selectfilename;
                    selectindex = newindex;
 
                    addpdflist();
                }
                else
                {
                    newindex = pdflist.count - 1;
                }
            }
        }
    }
}

ui代码

 
namespace pdfmergeapp
{
    partial class form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private system.componentmodel.icontainer components = null;
 
        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.dispose();
            }
            base.dispose(disposing);
        }
 
        #region windows 窗体设计器生成的代码
 
        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void initializecomponent()
        {
            this.label1 = new system.windows.forms.label();
            this.txtfiledir = new system.windows.forms.textbox();
            this.button1 = new system.windows.forms.button();
            this.bntselectdir = new system.windows.forms.button();
            this.btnmergepdf = new system.windows.forms.button();
            this.groupbox1 = new system.windows.forms.groupbox();
            this.listviewworklogs = new system.windows.forms.listview();
            this.columnheader1 = ((system.windows.forms.columnheader)(new system.windows.forms.columnheader()));
            this.columnheader2 = ((system.windows.forms.columnheader)(new system.windows.forms.columnheader()));
            this.groupbox2 = new system.windows.forms.groupbox();
            this.lblresult = new system.windows.forms.label();
            this.btnopendir = new system.windows.forms.button();
            this.btnmoveup = new system.windows.forms.button();
            this.btnmovedown = new system.windows.forms.button();
            this.groupbox1.suspendlayout();
            this.groupbox2.suspendlayout();
            this.suspendlayout();
            // 
            // label1
            // 
            this.label1.autosize = true;
            this.label1.location = new system.drawing.point(12, 9);
            this.label1.name = "label1";
            this.label1.size = new system.drawing.size(75, 15);
            this.label1.tabindex = 0;
            this.label1.text = "选择目录:";
            // 
            // txtfiledir
            // 
            this.txtfiledir.location = new system.drawing.point(90, 6);
            this.txtfiledir.name = "txtfiledir";
            this.txtfiledir.readonly = true;
            this.txtfiledir.size = new system.drawing.size(491, 25);
            this.txtfiledir.tabindex = 1;
            // 
            // button1
            // 
            this.button1.location = new system.drawing.point(120, 141);
            this.button1.name = "button1";
            this.button1.size = new system.drawing.size(8, 8);
            this.button1.tabindex = 2;
            this.button1.text = "button1";
            this.button1.usevisualstylebackcolor = true;
            // 
            // bntselectdir
            // 
            this.bntselectdir.location = new system.drawing.point(600, 6);
            this.bntselectdir.name = "bntselectdir";
            this.bntselectdir.size = new system.drawing.size(118, 35);
            this.bntselectdir.tabindex = 3;
            this.bntselectdir.text = "选择目录";
            this.bntselectdir.usevisualstylebackcolor = true;
            this.bntselectdir.click += new system.eventhandler(this.bntselectdir_click);
            // 
            // btnmergepdf
            // 
            this.btnmergepdf.location = new system.drawing.point(724, 7);
            this.btnmergepdf.name = "btnmergepdf";
            this.btnmergepdf.size = new system.drawing.size(94, 32);
            this.btnmergepdf.tabindex = 3;
            this.btnmergepdf.text = "合并pdf";
            this.btnmergepdf.usevisualstylebackcolor = true;
            this.btnmergepdf.click += new system.eventhandler(this.btnmergepdf_click);
            // 
            // groupbox1
            // 
            this.groupbox1.controls.add(this.listviewworklogs);
            this.groupbox1.location = new system.drawing.point(15, 49);
            this.groupbox1.name = "groupbox1";
            this.groupbox1.size = new system.drawing.size(764, 589);
            this.groupbox1.tabindex = 4;
            this.groupbox1.tabstop = false;
            this.groupbox1.text = "文件列表";
            // 
            // listviewworklogs
            // 
            this.listviewworklogs.backcolor = system.drawing.systemcolors.inactivecaption;
            this.listviewworklogs.columns.addrange(new system.windows.forms.columnheader[] {
            this.columnheader1,
            this.columnheader2});
            this.listviewworklogs.dock = system.windows.forms.dockstyle.fill;
            this.listviewworklogs.fullrowselect = true;
            this.listviewworklogs.gridlines = true;
            this.listviewworklogs.headerstyle = system.windows.forms.columnheaderstyle.nonclickable;
            this.listviewworklogs.hideselection = false;
            this.listviewworklogs.imemode = system.windows.forms.imemode.nocontrol;
            this.listviewworklogs.labelwrap = false;
            this.listviewworklogs.location = new system.drawing.point(3, 21);
            this.listviewworklogs.multiselect = false;
            this.listviewworklogs.name = "listviewworklogs";
            this.listviewworklogs.size = new system.drawing.size(758, 565);
            this.listviewworklogs.tabindex = 2;
            this.listviewworklogs.usecompatiblestateimagebehavior = false;
            this.listviewworklogs.view = system.windows.forms.view.details;
            this.listviewworklogs.itemcheck += new system.windows.forms.itemcheckeventhandler(this.listviewworklogs_itemcheck);
            this.listviewworklogs.selectedindexchanged += new system.eventhandler(this.listviewworklogs_selectedindexchanged);
            // 
            // columnheader1
            // 
            this.columnheader1.text = "序号";
            this.columnheader1.width = 50;
            // 
            // columnheader2
            // 
            this.columnheader2.text = "文件名";
            this.columnheader2.width = 580;
            // 
            // groupbox2
            // 
            this.groupbox2.controls.add(this.lblresult);
            this.groupbox2.controls.add(this.btnopendir);
            this.groupbox2.location = new system.drawing.point(15, 644);
            this.groupbox2.name = "groupbox2";
            this.groupbox2.size = new system.drawing.size(809, 68);
            this.groupbox2.tabindex = 5;
            this.groupbox2.tabstop = false;
            this.groupbox2.text = "合并结果";
            // 
            // lblresult
            // 
            this.lblresult.autosize = true;
            this.lblresult.location = new system.drawing.point(17, 34);
            this.lblresult.name = "lblresult";
            this.lblresult.size = new system.drawing.size(55, 15);
            this.lblresult.tabindex = 0;
            this.lblresult.text = "label2";
            // 
            // btnopendir
            // 
            this.btnopendir.location = new system.drawing.point(709, 24);
            this.btnopendir.name = "btnopendir";
            this.btnopendir.size = new system.drawing.size(94, 32);
            this.btnopendir.tabindex = 3;
            this.btnopendir.text = "查看文件";
            this.btnopendir.usevisualstylebackcolor = true;
            this.btnopendir.click += new system.eventhandler(this.btnopendir_click);
            // 
            // btnmoveup
            // 
            this.btnmoveup.location = new system.drawing.point(785, 141);
            this.btnmoveup.name = "btnmoveup";
            this.btnmoveup.size = new system.drawing.size(33, 42);
            this.btnmoveup.tabindex = 6;
            this.btnmoveup.text = "上移";
            this.btnmoveup.usevisualstylebackcolor = true;
            this.btnmoveup.click += new system.eventhandler(this.btnmoveup_click);
            // 
            // btnmovedown
            // 
            this.btnmovedown.location = new system.drawing.point(785, 224);
            this.btnmovedown.name = "btnmovedown";
            this.btnmovedown.size = new system.drawing.size(33, 42);
            this.btnmovedown.tabindex = 6;
            this.btnmovedown.text = "下移";
            this.btnmovedown.usevisualstylebackcolor = true;
            this.btnmovedown.click += new system.eventhandler(this.btnmovedown_click);
            // 
            // form1
            // 
            this.autoscaledimensions = new system.drawing.sizef(8f, 15f);
            this.autoscalemode = system.windows.forms.autoscalemode.font;
            this.clientsize = new system.drawing.size(836, 724);
            this.controls.add(this.btnmovedown);
            this.controls.add(this.btnmoveup);
            this.controls.add(this.groupbox2);
            this.controls.add(this.groupbox1);
            this.controls.add(this.btnmergepdf);
            this.controls.add(this.bntselectdir);
            this.controls.add(this.button1);
            this.controls.add(this.txtfiledir);
            this.controls.add(this.label1);
            this.name = "form1";
            this.text = "pdf文件合并";
            this.groupbox1.resumelayout(false);
            this.groupbox2.resumelayout(false);
            this.groupbox2.performlayout();
            this.resumelayout(false);
            this.performlayout();
 
        }
 
        #endregion
 
        private system.windows.forms.label label1;
        private system.windows.forms.textbox txtfiledir;
        private system.windows.forms.button button1;
        private system.windows.forms.button bntselectdir;
        private system.windows.forms.button btnmergepdf;
        private system.windows.forms.groupbox groupbox1;
        private system.windows.forms.listview listviewworklogs;
        private system.windows.forms.columnheader columnheader1;
        private system.windows.forms.columnheader columnheader2;
        private system.windows.forms.groupbox groupbox2;
        private system.windows.forms.label lblresult;
        private system.windows.forms.button btnopendir;
        private system.windows.forms.button btnmoveup;
        private system.windows.forms.button btnmovedown;
    }
}

到此这篇关于基于c#实现pdf文件合并工具的文章就介绍到这了,更多相关c# pdf文件合并内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com