HTML转WORD WORD转PDF--来源网络

从网上找的代码,先收藏下。

功能:实现HTML转WORD,WORD转PDF

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Word = Microsoft.Office.Interop.Word;

using oWord = Microsoft.Office.Interop.Word;

using System.Reflection;



using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using Microsoft.Office.Core;

using System.Text.RegularExpressions;



namespace WindowsApplication2

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

            object oMissing = System.Reflection.Missing.Value;

            object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */



            //Start Word and create a new document.

            Word._Application oWord;

            Word._Document oDoc;

            oWord = new Word.Application();

            oWord.Visible = true;

            oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,

                ref oMissing, ref oMissing);



            //Insert a paragraph at the beginning of the document.

            Word.Paragraph oPara1;

            oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing);

            oPara1.Range.Text = "Heading 1";

            oPara1.Range.Font.Bold = 1;

            oPara1.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.

            oPara1.Range.InsertParagraphAfter();



            //Insert a paragraph at the end of the document.

            Word.Paragraph oPara2;

            object oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

            oPara2 = oDoc.Content.Paragraphs.Add(ref oRng);

            oPara2.Range.Text = "Heading 2";

            oPara2.Format.SpaceAfter = 6;

            oPara2.Range.InsertParagraphAfter();



            //Insert another paragraph.

            Word.Paragraph oPara3;

            oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

            oPara3 = oDoc.Content.Paragraphs.Add(ref oRng);

            oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:";

            oPara3.Range.Font.Bold = 0;

            oPara3.Format.SpaceAfter = 24;

            oPara3.Range.InsertParagraphAfter();



            //Insert a 3 x 5 table, fill it with data, and make the first row

            //bold and italic.

            Word.Table oTable;

            Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

            oTable = oDoc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing);

            oTable.Range.ParagraphFormat.SpaceAfter = 6;

            int r, c;

            string strText;

            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;



            //Add some text after the table.

            Word.Paragraph oPara4;

            oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

            oPara4 = oDoc.Content.Paragraphs.Add(ref oRng);

            oPara4.Range.InsertParagraphBefore();

            oPara4.Range.Text = "And here's another table:";

            oPara4.Format.SpaceAfter = 24;

            oPara4.Range.InsertParagraphAfter();



            //Insert a 5 x 2 table, fill it with data, and change the column widths.

            wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

            oTable = oDoc.Tables.Add(wrdRng, 5, 2, ref oMissing, ref oMissing);

            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); //Change width of columns 1 & 2

            oTable.Columns[2].Width = oWord.InchesToPoints(3);



            //Keep inserting text. When you get to 7 inches from top of the

            //document, insert a hard page break.

            object oPos;

            double dPos = oWord.InchesToPoints(7);

            oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertParagraphAfter();

            do

            {

                wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

                wrdRng.ParagraphFormat.SpaceAfter = 6;

                wrdRng.InsertAfter("A line of text");

                wrdRng.InsertParagraphAfter();

                oPos = wrdRng.get_Information

                               (Word.WdInformation.wdVerticalPositionRelativeToPage);

            }

            while (dPos >= Convert.ToDouble(oPos));

            object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;

            object oPageBreak = Word.WdBreakType.wdPageBreak;

            wrdRng.Collapse(ref oCollapseEnd);

            wrdRng.InsertBreak(ref oPageBreak);

            wrdRng.Collapse(ref oCollapseEnd);

            wrdRng.InsertAfter("We're now on page 2. Here's my chart:");

            wrdRng.InsertParagraphAfter();



            //Insert a chart.

            Word.InlineShape oShape;

            object oClassType = "MSGraph.Chart.8";

            wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

            oShape = wrdRng.InlineShapes.AddOLEObject(ref oClassType, ref oMissing,

                ref oMissing, ref oMissing, ref oMissing,

                ref oMissing, ref oMissing, ref oMissing);



            //Demonstrate use of late bound oChart and oChartApp objects to

            //manipulate the chart object with MSGraph.

            object oChart;

            object oChartApp;

            oChart = oShape.OLEFormat.Object;

            oChartApp = oChart.GetType().InvokeMember("Application",

                BindingFlags.GetProperty, null, oChart, null);



            //Change the chart type to Line.

            object[] Parameters = new Object[1];

            Parameters[0] = 4; //xlLine = 4

            oChart.GetType().InvokeMember("ChartType", BindingFlags.SetProperty,

                null, oChart, Parameters);



            //Update the chart image and quit MSGraph.

            oChartApp.GetType().InvokeMember("Update",

                BindingFlags.InvokeMethod, null, oChartApp, null);

            oChartApp.GetType().InvokeMember("Quit",

                BindingFlags.InvokeMethod, null, oChartApp, null);

            //... If desired, you can proceed from here using the Microsoft Graph 

            //Object model on the oChart and oChartApp objects to make additional

            //changes to the chart.



            //Set the width of the chart.

            oShape.Width = oWord.InchesToPoints(6.25f);

            oShape.Height = oWord.InchesToPoints(3.57f);



            //Add text after the chart.

            wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

            wrdRng.InsertParagraphAfter();

            wrdRng.InsertAfter("THE END.");



            //Close this form.

            this.Close();

        }



        private void button2_Click(object sender, EventArgs e)

        {



            string s = "";

            if (openFileDialog1.ShowDialog() == DialogResult.OK)

            {

                s = openFileDialog1.FileName;

            }

            else

            {

                return;

            }

            // 在此处放置用户代码以初始化页面

            Word.ApplicationClass word = new Word.ApplicationClass();

            Type wordType = word.GetType();

            Word.Documents docs = word.Documents;

            // 打开文件

            Type docsType = docs.GetType();

            object fileName = s;

            Word.Document doc = (Word.Document)docsType.InvokeMember("Open",

            System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { fileName, false, false });

            // 转换格式,另存为

            Type docType = doc.GetType();

            object saveFileName = "d:\\Reports\\aaa.doc";

            //下面是Microsoft Word 9 Object Library的写法,如果是10,可能写成:

            /*

            docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,

             null, doc, new object[]{saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML});

            */

            ///其它格式:

            ///wdFormatHTML

            ///wdFormatDocument

            ///wdFormatDOSText

            ///wdFormatDOSTextLineBreaks

            ///wdFormatEncodedText

            ///wdFormatRTF

            ///wdFormatTemplate

            ///wdFormatText

            ///wdFormatTextLineBreaks

            ///wdFormatUnicodeText

            docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,

             null, doc, new object[] { saveFileName, Word.WdSaveFormat.wdFormatDocument });



            // 退出 Word

            wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod,

             null, word, null);

        }





        private void WordConvert(string s)

        {

            oWord.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass();

            Type wordType = word.GetType();



            //打开WORD文档

            /*对应脚本中的

             var word = new ActiveXObject("Word.Application");

             var doc    = word.Documents.Open(docfile);

            */

            oWord.Documents docs = word.Documents;

            Type docsType = docs.GetType();

            object objDocName =s;

            oWord.Document doc = (oWord.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { objDocName, true, true });



            //打印输出到指定文件

            //你可以使用 doc.PrintOut();方法,次方法调用中的参数设置较繁琐,建议使用 Type.InvokeMember 来调用时可以不用将PrintOut的参数设置全,只设置4个主要参数

            Type docType = doc.GetType();

            object printFileName = @"c:\aaa.ps";

            docType.InvokeMember("PrintOut", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { false, false, oWord.WdPrintOutRange.wdPrintAllDocument, printFileName });

            //new object[]{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);









            object o1 = "c:\\aaa.ps";

            object o2 = "c:\\aaa.pdf";

            object o3 = "";



            //引用将PS转换成PDF的对象

            //try catch之间对应的是脚本中的 PDF.FileToPDF(psfile,pdffile,"");     //你可以使用 pdfConvert.FileToPDF("c:\\test.ps","c:\\test.pdf","");这样的转换方法,本人只是为了保持与WORD相同的调用方式

            try

            {

                ACRODISTXLib.PdfDistillerClass pdf = new ACRODISTXLib.PdfDistillerClass();

                Type pdfType = pdf.GetType();

                pdfType.InvokeMember("FileToPDF", System.Reflection.BindingFlags.InvokeMethod, null, pdf, new object[] { o1, o2, o3 });

                pdf = null;

            }

            catch { } //读者自己补写错误处理



            //为防止本方法调用多次时发生错误,必须停止acrodist.exe进程

            foreach (System.Diagnostics .Process proc in System.Diagnostics.Process.GetProcesses())

            {

                int begpos;

                int endpos;



                string sProcName = 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;

                }

            }





        }



        private void button3_Click(object sender, EventArgs e)

        {

            if (openFileDialog1.ShowDialog() == DialogResult.OK)

            {

                string s = openFileDialog1.FileName;

                WordConvert(s);

            }

        }



        //getnextcode

        private void button4_Click(object sender, EventArgs e)

        {

            WorkCell myWorkCell = new WorkCell(textBox2.Text,textBox1.Text);

            textBox3.Text = myWorkCell.GetNextCode();

        }





    }



    public class WorkCell

    {

        private string workCellCode;

        private string parentCellCode;

        private string commonCode;

        private char[] code;

        private char[] pCode;

        private char[] standCode;

        private string s;



        public WorkCell( string mycode,string parentcode)

        {

            workCellCode = mycode;

            parentCellCode = parentcode;



            standCode = new char[] { '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();

        }



        public string WorkCellCode

        {

            set

            {

                workCellCode = value;

            }

            get

            {

                return workCellCode;

            }

        }



        public string ParentCellCode

        { 

            set

            {

                workCellCode = value;

            }

            get

            {

                return workCellCode;

            }

        }



        public string GetNextCode()

        {

            string s="";

            if (code.Length > 0)

            {

                int i = 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();

                }

                return commonCode + s;

            }

            else

            {

                return "null";

            }

        }





        //设置code中的下一个代码,从右边起,找到第一个非0字符,将其按标准代码自加1,溢出则进位

        private char GetNextChar(int j)

        {

            int i = -1;

            int flag = 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];

            }



            return code[j];

        }

    }

}

你可能感兴趣的:(html)