问题描述
文档是通过读取模版用代码赋值后生成的新word,怎么将新生成的几个word合并成一个,然后存为PDF格式呢
解决方案
解决方案二:
我以前做过类似的项目但是我们做的是将word转成一个个pdf然后合并pdf的不知道你需要吗?需要的话我帮你找找源码
解决方案三:
引用1楼u012394290的回复:
我以前做过类似的项目但是我们做的是将word转成一个个pdf然后合并pdf的不知道你需要吗?需要的话我帮你找找源码
这个应该是更好的思路。如果不是代码实现的话,都是使用AdobeAcrobatX进行word和pdf互相转换,并实现pdf合并的。代码实现,可能也可以使用AdobeAcrobatX提供的库。
解决方案四:
解决方案五:
引用2楼zhi_ai_yaya的回复:
Quote: 引用1楼u012394290的回复:
我以前做过类似的项目但是我们做的是将word转成一个个pdf然后合并pdf的不知道你需要吗?需要的话我帮你找找源码这个应该是更好的思路。如果不是代码实现的话,都是使用AdobeAcrobatX进行word和pdf互相转换,并实现pdf合并的。代码实现,可能也可以使用AdobeAcrobatX提供的库。
谢谢夸奖嘿嘿
解决方案六:
如果是企业项目,可以使用三方组件aspose.total(支持word、excel、ppt、pdf...操作及相互转换)
解决方案七:
合并文档很简单,例如(随手写的,可能有语法错误,看懂意思就好):privatestaticvoidStart(FileInfo[]Files){varapp=newword.Application();vardoc=app.Documents.Add();forea(vardinfiles){app.Selection.InsertFile(d.FullName);app.Selection.InsertBreak(word.WdBreakType.wdPageBreak);};doc.SaveAs2(FileName:Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"合并结果.docx"));doc.Close();app.Quit();}
输出pdf,这也是上述doc的固有的SaveAs功能中的一项。这里就不给你写了。如果要进行比较专业的Office二次开发(而不是极其简单的个别操作),希望你好好研习Office的官方的组件和对象的使用方法,先不去纠结什么“第三方”组件。
解决方案八:
forea-->foreach这种程序成文自明。它依次插入一个文件,然后插入换页。Office的对象和方法,很简单、很“傻瓜”。其实越是这种非常“草根”的官方api越是多年成熟的标志。
解决方案九:
这种东西也很容易编写。你只要在Word菜单上“录制宏”,然后操作,人家Office就给你自动编写出来宏代码来了。然后你可以精炼一下,把VBA代码手工翻译为c#代码。就是上面这样的代码。
解决方案十:
把多个Word文档合并到一个Word文档示例//选择合并文档的保存位置开始合并Word文档privateWord.ApplicationG_wa;//定义Word应用程序privateobjectG_missing=//定义G_missing字段并添加引用System.Reflection.Missing.Value;privateOpenFileDialogG_OpenFileDialog;//定义打开文件对话框privateSaveFileDialogG_SaveFileDialog;//定义保存文件对话框privateList<string>G_Str_Files=newList<string>();//定义字符串集合privatevoidbtn_split_Click(objectsender,EventArgse){btn_Merge.Enabled=false;//停用合并按钮ThreadPool.QueueUserWorkItem(//开始线程池(pp)=>//使用lambda表达式{G_wa=newMicrosoft.Office.Interop.Word.Application();//创建应用程序对象Word.DocumentP_MainDocument=//新建合并文档对象G_wa.Documents.Add(refG_missing,refG_missing,refG_missing,refG_missing);foreach(stringP_StrinG_Str_Files)//遍历文档的集合{objectP_strs=P_Str;//创建object对象Word.DocumentP_Document=G_wa.Documents.Open(//打开Word文档refP_strs,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refo);Word.RangeP_Range_temp=//得到文档全部范围P_Document.Range(refG_missing,refG_missing);P_Range_temp.Select();//选择文档全部范围P_Range_temp.Copy();//复制文档全部范围Word.RangeP_Range_temp2=//得到文档的范围P_MainDocument.Range(refG_missing,refG_missing);objectP_end=Word.WdCollapseDirection.wdCollapseEnd;//创建object对象P_Range_temp2.Collapse(refP_end);//折叠文档范围P_Range_temp2.Select();//选择档的最后位置P_Range_temp2.Paste();//粘贴文档内容((Word._Document)P_Document).Close(refG_missing,refG_missing,//关闭文档refG_missing);}objectP_SavePath=G_SaveFileDialog.FileName;//创建object对象P_MainDocument.SaveAs(//保存合并后的文档refP_SavePath,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing,refG_missing);//CodeGo.net/((Word._Application)G_wa.Application).Quit(//退出应用程序refG_missing,refG_missing,refG_missing);this.Invoke(//调用窗体线程(MethodInvoker)(()=>//使用lambda表达式{Clipboard.Clear();//清空剪切板MessageBox.Show(//提示已经创建Word"成功合并Word文档!","提示!");btn_Merge.Enabled=true;//启用合并按钮}));});}//创建文件对话框对象privatevoidtxt_select_Click(objectsender,EventArgse){G_OpenFileDialog=newOpenFileDialog();G_OpenFileDialog.Filter=//筛选文件"*.doc|*.doc";DialogResultP_DialogResult=//打开文件对话框G_OpenFileDialog.ShowDialog();if(P_DialogResult==DialogResult.OK)//确认已经选择文件{lb_FileCollection.Items.Add(G_OpenFileDialog.FileName);G_Str_Files.Add(G_OpenFileDialog.FileName);btn_Save.Enabled=true;txt_path.Text=//显示将要打开的文件G_OpenFileDialog.FileName;}}//创建保存文件对话框对象privatevoidbtn_Save_Click(objectsender,EventArgse){G_SaveFileDialog=newSaveFileDialog();G_SaveFileDialog.Filter="*.doc|*.doc";DialogResultP_DialogResult=//打开保存文件对话框G_SaveFileDialog.ShowDialog();if(P_DialogResult==DialogResult.OK)//判断是否保存文件{btn_Merge.Enabled=true;//启用合并按钮txt_SavePath.Text=//显示保存文件路径G_SaveFileDialog.FileName;}}
解决方案十一:
比较简单的方法://Loadtwodocuments//LoadDocument1andDocument2DocumentDocOne=newDocument();DocOne.LoadFromFile(@"E:WorkDocumentwelcome.docx",FileFormat.Docx);DocumentDocTwo=newDocument();DocTwo.LoadFromFile(@"E:WorkDocumentNewZealand.docx",FileFormat.Docx);//Mergeforeach(SectionsecinDocTwo.Sections){DocOne.Sections.Add(sec.Clone());}//SaveandLaunchDocOne.SaveToFile("Merge.docx",FileFormat.Docx);详细参考:
解决方案十二:
引用6楼sp1234的回复:
合并文档很简单,例如(随手写的,可能有语法错误,看懂意思就好):privatestaticvoidStart(FileInfo[]Files){varapp=newword.Application();vardoc=app.Documents.Add();forea(vardinfiles){app.Selection.InsertFile(d.FullName);app.Selection.InsertBreak(word.WdBreakType.wdPageBreak);};doc.SaveAs2(FileName:Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"合并结果.docx"));doc.Close();app.Quit();}输出pdf,这也是上述doc的固有的SaveAs功能中的一项。这里就不给你写了。如果要进行比较专业的Office二次开发(而不是极其简单的个别操作),希望你好好研习Office的官方的组件和对象的使用方法,先不去纠结什么“第三方”组件。
大神说的方法挺对的