CKEditor输出成Word文件(包含图片上传)

时间:2024-04-02 08:53:24

转载自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

 

CKEditor输出成Word文件(包含图片上传)
 

安装后我计算机是Windows 8 位置会大概在..

 

CKEditor输出成Word文件(包含图片上传)
 

再来去下载一个方便的工具HtmlToOpenXML

 

CKEditor输出成Word文件(包含图片上传)
 

接下来,就可以开始写程序…

 

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"

 

CKEditor输出成Word文件(包含图片上传)
 

需要引入一个library . WindowsBase

 

CKEditor输出成Word文件(包含图片上传)
 

结果:

 

CKEditor输出成Word文件(包含图片上传)
 
CKEditor输出成Word文件(包含图片上传)