c html转换成word,C#实现HTML转WORD及WORD转PDF的方法

本文实例讲述了C#实现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

{

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];

}

}

}

希望本文所述对大家的C#程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值