转载自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
结果: