界面
主要用于发票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文件合并内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论