转载自http://www.it165.net/pro/html/201306/6055.html
先下载CKEditor
我们修改 /Scripts/ckeditor/config.js
让图片上传能够正常..
01./*
02.Copyright
(c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
03.For
licensing, see LICENSE.html or http://ckeditor.com/license
04.*/
05.
06.CKEDITOR.editorConfig
= function( config )
07.{
08.config.filebrowserImageUploadUrl
= "/fileupload.aspx";
09.};
其中我们让档案上传的处理路径指到跟执行目录下 fileupload.aspx
之后我们来撰写关于 fileupload.aspx 的部分..
fileupload.apsx 关于 .aspx 得部分只需要留下第一行其它都要删除
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="fileupload.aspx.cs" Inherits="SimpleConvetCKEditorHTMLToOpenXML.fileupload" %>
fileuploas.aspx.cs 的部分:
01.using System;
02.using System.IO;
03.using System.Web;
04.
05.namespace SimpleConvetCKEditorHTMLToOpenXML
06.{
07.public partial class fileupload
: System.Web.UI.Page
08.{
09.protected void Page_Load(object sender,
EventArgs e)
10.{
11.
12.HttpPostedFile
uploads = Context.Request.Files["upload"];
13.string ckediotfuncnum
= Context.Request["CKEditorFuncNum"];
14.var
t = Guid.NewGuid().ToString("N");
15.
16.//如果暂存数据夹不在就建立
17.if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory
+ "uploaded\\"))
18.{
19.Directory.GetCreationTime(AppDomain.CurrentDomain.BaseDirectory
+ "uploaded\\");
20.}
21.
22.//判断图片是否为.png
or .jpg
23.//当然这方法并非很好
24.//建议作法依然要打打开图片做检查会比较安全
25.if (Path.GetExtension(uploads.FileName).ToLower()
== ".jpg" ||
Path.GetExtension(uploads.FileName).ToLower() == ".png")
26.{
27.string url
= "/uploaded/" +
t + Path.GetExtension(uploads.FileName);
28.File.WriteAllBytes(AppDomain.CurrentDomain.BaseDirectory
+ "uploaded\\" +
t + Path.GetExtension(uploads.FileName), StreamToBytes(uploads.InputStream));
29.Response.Write("<script>window.parent.CKEDITOR.tools.callFunction(" +
ckediotfuncnum + ",\"" +
url + "\");</script>");
30.
31.}
32.else
33.{
34.Response.Write("<script>alert('上传格式错误');</script>");
35.Response.Write("<script>window.parent.CKEDITOR.tools.callFunction(" +
ckediotfuncnum + ");</script>");
36.}
37.}
38.
39.///
<summary>
40.///
将Stream 转成 Byte[]
41.///
</summary>
42.///
<param name="stream"></param>
43.///
<returns></returns>
44.private byte[]
StreamToBytes(Stream stream)
45.{
46.stream.Position
= 0;
47.var
buffer = new byte[stream.Length];
48.for (int totalBytesCopied
= 0; totalBytesCopied < stream.Length; )
49.totalBytesCopied
+= stream.Read(buffer, totalBytesCopied, Convert.ToInt32(stream.Length) - totalBytesCopied);
50.return buffer;
51.}
52.
53.
54.}
55.}
再来我们看一下关于 转成Word 檔的部分..
首先,你得先去下载必须的library .
Open XML SDK 2.0 for Microsoft Office
安装后我计算机是Windows 8 位置会大概在..
再来去下载一个方便的工具HtmlToOpenXML
接下来,就可以开始写程序…
01.using System;
02.using System.IO;
03.using DocumentFormat.OpenXml;
04.using DocumentFormat.OpenXml.Packaging;
05.using DocumentFormat.OpenXml.Wordprocessing;
06.using NotesFor.HtmlToOpenXml;
07.
08.namespace SimpleConvetCKEditorHTMLToOpenXML
09.{
10.public partial class demo
: System.Web.UI.Page
11.{
12.protected void Page_Load(object sender,
EventArgs e)
13.{
14.
15.}
16.
17.protected void btnConvertToWord_Click(object sender,
EventArgs e)
18.{
19.var
fileName = Guid.NewGuid().ToString("N")
+ ".docx";
20.var
filePathName = AppDomain.CurrentDomain.BaseDirectory + "words\\" +fileName;
21.var
html = CKEditorControl1.Text;
22.
23.using (MemoryStream
generatedDocument = new MemoryStream())
24.{
25.using (WordprocessingDocument
package = WordprocessingDocument.Create(generatedDocument, WordprocessingDocumentType.Document))
26.{
27.MainDocumentPart
mainPart = package.MainDocumentPart;
28.if (mainPart
== null)
29.{
30.mainPart
= package.AddMainDocumentPart();
31.new Document(new Body()).Save(mainPart);
32.}
33.
34.HtmlConverter
converter = new HtmlConverter(mainPart);
35.Body
body = mainPart.Document.Body;
36.//如果有插入图片,这一行很重要
37.converter.BaseImageUrl
= new Uri("http://localhost:16777");
38.var
paragraphs = converter.Parse(html);
39.for (int i
= 0; i < paragraphs.Count; i++)
40.{
41.body.Append(paragraphs[i]);
42.}
43.
44.mainPart.Document.Save();
45.}
46.
47.File.WriteAllBytes(filePathName,
generatedDocument.ToArray());
48.ltlMessage.Text
= "已输出至" + "words\\" +
fileName;
49.}
50.
51.}
52.}
53.}
如果,有遇到
"The type 'System.IO.Packaging.Package' is defined in an assembly that is not referenced. You must add a reference to assembly 'WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
需要引入一个library . WindowsBase
结果: