C#实现HTML转WORD及WORD转PDF的方法
本文实例讲述了C#实现HTML转WORD及WORD转PDF的方法。分享给大家供大家参考。具体如下:
功能:实现HTML转WORD,WORD转PDF
具体代码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Text; usingSystem.Windows.Forms; usingWord=Microsoft.Office.Interop.Word; usingoWord=Microsoft.Office.Interop.Word; usingSystem.Reflection; usingSystem.Configuration; usingSystem.Web; usingSystem.Web.Security; usingSystem.Web.UI; usingSystem.Web.UI.WebControls; usingSystem.Web.UI.WebControls.WebParts; usingSystem.Web.UI.HtmlControls; usingMicrosoft.Office.Core; usingSystem.Text.RegularExpressions; namespaceWindowsApplication2 { publicpartialclassForm1:Form { publicForm1() { InitializeComponent(); } privatevoidbutton1_Click(objectsender,EventArgse) { objectoMissing=System.Reflection.Missing.Value; objectoEndOfDoc="\\endofdoc";/*\endofdocisapredefinedbookmark*/ //StartWordandcreateanewdocument. Word._ApplicationoWord; Word._DocumentoDoc; oWord=newWord.Application(); oWord.Visible=true; oDoc=oWord.Documents.Add(refoMissing,refoMissing, refoMissing,refoMissing); //Insertaparagraphatthebeginningofthedocument. Word.ParagraphoPara1; oPara1=oDoc.Content.Paragraphs.Add(refoMissing); oPara1.Range.Text="Heading1"; oPara1.Range.Font.Bold=1; oPara1.Format.SpaceAfter=24;//24ptspacingafterparagraph. oPara1.Range.InsertParagraphAfter(); //Insertaparagraphattheendofthedocument. Word.ParagraphoPara2; objectoRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oPara2=oDoc.Content.Paragraphs.Add(refoRng); oPara2.Range.Text="Heading2"; oPara2.Format.SpaceAfter=6; oPara2.Range.InsertParagraphAfter(); //Insertanotherparagraph. Word.ParagraphoPara3; oRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oPara3=oDoc.Content.Paragraphs.Add(refoRng); oPara3.Range.Text="Thisisasentenceofnormaltext.Nowhereisatable:"; oPara3.Range.Font.Bold=0; oPara3.Format.SpaceAfter=24; oPara3.Range.InsertParagraphAfter(); //Inserta3x5table,fillitwithdata,andmakethefirstrow //boldanditalic. Word.TableoTable; Word.RangewrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oTable=oDoc.Tables.Add(wrdRng,3,5,refoMissing,refoMissing); oTable.Range.ParagraphFormat.SpaceAfter=6; intr,c; stringstrText; for(r=1;r<=3;r++) for(c=1;c<=5;c++) { strText="r"+r+"c"+c; oTable.Cell(r,c).Range.Text=strText; } oTable.Rows[1].Range.Font.Bold=1; oTable.Rows[1].Range.Font.Italic=1; //Addsometextafterthetable. Word.ParagraphoPara4; oRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oPara4=oDoc.Content.Paragraphs.Add(refoRng); oPara4.Range.InsertParagraphBefore(); oPara4.Range.Text="Andhere'sanothertable:"; oPara4.Format.SpaceAfter=24; oPara4.Range.InsertParagraphAfter(); //Inserta5x2table,fillitwithdata,andchangethecolumnwidths. wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oTable=oDoc.Tables.Add(wrdRng,5,2,refoMissing,refoMissing); oTable.Range.ParagraphFormat.SpaceAfter=6; for(r=1;r<=5;r++) for(c=1;c<=2;c++) { strText="r"+r+"c"+c; oTable.Cell(r,c).Range.Text=strText; } oTable.Columns[1].Width=oWord.InchesToPoints(2);//Changewidthofcolumns1&2 oTable.Columns[2].Width=oWord.InchesToPoints(3); //Keepinsertingtext.Whenyougetto7inchesfromtopofthe //document,insertahardpagebreak. objectoPos; doubledPos=oWord.InchesToPoints(7); oDoc.Bookmarks.get_Item(refoEndOfDoc).Range.InsertParagraphAfter(); do { wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; wrdRng.ParagraphFormat.SpaceAfter=6; wrdRng.InsertAfter("Alineoftext"); wrdRng.InsertParagraphAfter(); oPos=wrdRng.get_Information (Word.WdInformation.wdVerticalPositionRelativeToPage); } while(dPos>=Convert.ToDouble(oPos)); objectoCollapseEnd=Word.WdCollapseDirection.wdCollapseEnd; objectoPageBreak=Word.WdBreakType.wdPageBreak; wrdRng.Collapse(refoCollapseEnd); wrdRng.InsertBreak(refoPageBreak); wrdRng.Collapse(refoCollapseEnd); wrdRng.InsertAfter("We'renowonpage2.Here'smychart:"); wrdRng.InsertParagraphAfter(); //Insertachart. Word.InlineShapeoShape; objectoClassType="MSGraph.Chart.8"; wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oShape=wrdRng.InlineShapes.AddOLEObject(refoClassType,refoMissing, refoMissing,refoMissing,refoMissing, refoMissing,refoMissing,refoMissing); //DemonstrateuseoflateboundoChartandoChartAppobjectsto //manipulatethechartobjectwithMSGraph. objectoChart; objectoChartApp; oChart=oShape.OLEFormat.Object; oChartApp=oChart.GetType().InvokeMember("Application", BindingFlags.GetProperty,null,oChart,null); //ChangethecharttypetoLine. object[]Parameters=newObject[1]; Parameters[0]=4;//xlLine=4 oChart.GetType().InvokeMember("ChartType",BindingFlags.SetProperty, null,oChart,Parameters); //UpdatethechartimageandquitMSGraph. oChartApp.GetType().InvokeMember("Update", BindingFlags.InvokeMethod,null,oChartApp,null); oChartApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod,null,oChartApp,null); //...Ifdesired,youcanproceedfromhereusingtheMicrosoftGraph //ObjectmodelontheoChartandoChartAppobjectstomakeadditional //changestothechart. //Setthewidthofthechart. oShape.Width=oWord.InchesToPoints(6.25f); oShape.Height=oWord.InchesToPoints(3.57f); //Addtextafterthechart. wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; wrdRng.InsertParagraphAfter(); wrdRng.InsertAfter("THEEND."); //Closethisform. this.Close(); } privatevoidbutton2_Click(objectsender,EventArgse) { strings=""; if(openFileDialog1.ShowDialog()==DialogResult.OK) { s=openFileDialog1.FileName; } else { return; } //在此处放置用户代码以初始化页面 Word.ApplicationClassword=newWord.ApplicationClass(); TypewordType=word.GetType(); Word.Documentsdocs=word.Documents; //打开文件 TypedocsType=docs.GetType(); objectfileName=s; Word.Documentdoc=(Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod,null,docs,newObject[]{fileName,false,false}); //转换格式,另存为 TypedocType=doc.GetType(); objectsaveFileName="d:\\Reports\\aaa.doc"; //下面是MicrosoftWord9ObjectLibrary的写法,如果是10,可能写成: /* docType.InvokeMember("SaveAs",System.Reflection.BindingFlags.InvokeMethod, null,doc,newobject[]{saveFileName,Word.WdSaveFormat.wdFormatFilteredHTML}); */ ///其它格式: ///wdFormatHTML ///wdFormatDocument ///wdFormatDOSText ///wdFormatDOSTextLineBreaks ///wdFormatEncodedText ///wdFormatRTF ///wdFormatTemplate ///wdFormatText ///wdFormatTextLineBreaks ///wdFormatUnicodeText docType.InvokeMember("SaveAs",System.Reflection.BindingFlags.InvokeMethod, null,doc,newobject[]{saveFileName,Word.WdSaveFormat.wdFormatDocument}); //退出Word wordType.InvokeMember("Quit",System.Reflection.BindingFlags.InvokeMethod, null,word,null); } privatevoidWordConvert(strings) { oWord.ApplicationClassword=newMicrosoft.Office.Interop.Word.ApplicationClass(); TypewordType=word.GetType(); //打开WORD文档 /*对应脚本中的 varword=newActiveXObject("Word.Application"); vardoc=word.Documents.Open(docfile); */ oWord.Documentsdocs=word.Documents; TypedocsType=docs.GetType(); objectobjDocName=s; oWord.Documentdoc=(oWord.Document)docsType.InvokeMember("Open",System.Reflection.BindingFlags.InvokeMethod,null,docs,newObject[]{objDocName,true,true}); //打印输出到指定文件 //你可以使用doc.PrintOut();方法,次方法调用中的参数设置较繁琐,建议使用Type.InvokeMember来调用时可以不用将PrintOut的参数设置全,只设置4个主要参数 TypedocType=doc.GetType(); objectprintFileName=@"c:\aaa.ps"; docType.InvokeMember("PrintOut",System.Reflection.BindingFlags.InvokeMethod,null,doc,newobject[]{false,false,oWord.WdPrintOutRange.wdPrintAllDocument,printFileName}); //newobject[]{false,false,oWord.WdPrintOutRange.wdPrintAllDocument,printFileName} //对应脚本中的word.PrintOut(false,false,0,psfile);的参数 //退出WORD //对应脚本中的word.Quit(); wordType.InvokeMember("Quit",System.Reflection.BindingFlags.InvokeMethod,null,word,null); objecto1="c:\\aaa.ps"; objecto2="c:\\aaa.pdf"; objecto3=""; //引用将PS转换成PDF的对象 //trycatch之间对应的是脚本中的PDF.FileToPDF(psfile,pdffile,"");//你可以使用pdfConvert.FileToPDF("c:\\test.ps","c:\\test.pdf","");这样的转换方法,本人只是为了保持与WORD相同的调用方式 try { ACRODISTXLib.PdfDistillerClasspdf=newACRODISTXLib.PdfDistillerClass(); TypepdfType=pdf.GetType(); pdfType.InvokeMember("FileToPDF",System.Reflection.BindingFlags.InvokeMethod,null,pdf,newobject[]{o1,o2,o3}); pdf=null; } catch{}//读者自己补写错误处理 //为防止本方法调用多次时发生错误,必须停止acrodist.exe进程 foreach(System.Diagnostics.ProcessprocinSystem.Diagnostics.Process.GetProcesses()) { intbegpos; intendpos; stringsProcName=proc.ToString(); begpos=sProcName.IndexOf("(")+1; endpos=sProcName.IndexOf(")"); sProcName=sProcName.Substring(begpos,endpos-begpos); if(sProcName.ToLower().CompareTo("acrodist")==0) { try { proc.Kill();//停止进程 } catch{}//读者自己补写错误处理 break; } } } privatevoidbutton3_Click(objectsender,EventArgse) { if(openFileDialog1.ShowDialog()==DialogResult.OK) { strings=openFileDialog1.FileName; WordConvert(s); } } //getnextcode privatevoidbutton4_Click(objectsender,EventArgse) { WorkCellmyWorkCell=newWorkCell(textBox2.Text,textBox1.Text); textBox3.Text=myWorkCell.GetNextCode(); } } publicclassWorkCell { privatestringworkCellCode; privatestringparentCellCode; privatestringcommonCode; privatechar[]code; privatechar[]pCode; privatechar[]standCode; privatestrings; publicWorkCell(stringmycode,stringparentcode) { workCellCode=mycode; parentCellCode=parentcode; standCode=newchar[]{'1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','W','T','U','V','W','X','Y','Z'}; commonCode=Regex.Replace(parentCellCode,@"0+",""); code=workCellCode.Substring(commonCode.Length).ToCharArray(); } publicstringWorkCellCode { set { workCellCode=value; } get { returnworkCellCode; } } publicstringParentCellCode { set { workCellCode=value; } get { returnworkCellCode; } } publicstringGetNextCode() { strings=""; if(code.Length>0) { inti=0; for(i=code.Length-1;i>=0;i--) { if(code[i]!='0') { GetNextChar(i); break; } } for(i=0;i<code.Length;i++) { s+=code[i].ToString(); } returncommonCode+s; } else { return"null"; } } //设置code中的下一个代码,从右边起,找到第一个非0字符,将其按标准代码自加1,溢出则进位 privatecharGetNextChar(intj) { inti=-1; intflag=0; for(i=0;i<standCode.Length;i++) { if(code[j]==standCode[i]) { flag=1; break; } } //MessageBox.Show(code[j].ToString()+""+standCode[i].ToString()+""+i.ToString()); if(i>=standCode.Length-1||flag==0) { code[j]=standCode[0]; if(j>0) code[j-1]=GetNextChar(j-1); } else { code[j]=standCode[i+1]; } returncode[j]; } } }
希望本文所述对大家的C#程序设计有所帮助。