CKEditor输出成Word文件(包含图片上传)
转载自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
结果:
CKEditor输出成Word文件(包含图片上传)相关推荐
- PHP+CKEditor 3配置详细说明(包括图片上传)
首先,我们要在页面中加入CKEditor的js文件: <head> ... <script type="text/javascript&qu ...
- Swift中文件和图片上传处理
前言:基于Alamofire4.5网络框架开发的Swift项目中上传文件和图片代码参考. 上传文件 extension HttpRequestService {typealias UploadDone ...
- 链接ftp,把文件或图片上传到ftp指定的文件夹中
/******************************************************************** * * * Filename : .java * Auth ...
- Asp.Net Core文件或图片上传
管理后台上传的图片或文件可能也需要在 Api 项目能够访问,考虑到文件的统一管理,后台的文件默认 是上传到 Api 项目里的. Web 项目里的配置文件 appsetting.json 中的 ApiS ...
- CKEditor的使用,并实现图片上传
ckeditor是一款富文本编辑器,类似于论坛帖子下边的回复输入框. 1.先要下载相应js文件,点我下载.根据自己的需求选择插件的丰富程度,下载后解压得到一个文件夹,放到webRoot目录下. 2.在 ...
- HTTP Content-Type (MIME) el-upload文件、图片上传 | 文件改名 | 大文件 | 文件下载
MIME 为数据格式标签:最初 MIME 是用于电子邮件系统的,后来 HTTP 也采用了这一方案. 在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息. Conten ...
- java 存储png文件_vue图片上传及java存储图片(亲测可用)
1.前言 在使用elementui的upload组件时,我一直无法做到上传的图片和其他数据一起提交.单纯的上传文件,java的存储图片的方式也有局限性. 我知道的后端保存图片有两种方式:一种是直接存储 ...
- js文件、图片上传(原生方法和jquery的ajax两种都有)
<!DOCTYPE html> <html> <head> <title>test</title> </head> <bo ...
- Java实现七牛云文件或图片上传下载
写在前面 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:人工智能学习网站 文章目录 写在前面 一.准备工作 1.1.为什么选择七牛云? 1.2.七牛云注册 二.ja ...
- python autoit上传文件_结合python+selenium使用AutoIt V3实现文件、图片上传
1.下载.安装AutoIt V3 下载官网:https://www.autoitscript.com/site/autoit/downloads/ 2.AutoIt V3组件介绍 AutoIt Win ...
最新文章
- 17个Python骚操作,你都Ok吗?
- Spring踩坑记录
- git常见操作--忽略文件以及常用命令【转】
- 从技术面试官的角度来谈谈简历和面试
- 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
- 淘宝flink和storm书籍调研
- 【学习笔记】【C语言】结构体
- Unix基本系统数据类型和stat结构体
- try...catch()
- html5页面主题,HTML5页面开发笔记
- Mybatis-puls打印sql语句
- linux内核那些事之E820
- 让CentOS 5.3支持ntfs分区
- Linux 命令(86)—— head 命令
- 开发机器学习应用程序的步骤
- 如何在Mac电脑中设置投屏?Mac投屏,Mac电脑无线投屏教程
- html留言页面设计,html的留言板制作(js)
- 杰理之ifi_camera跑sfc的启动时间【篇】
- Mac没有右Control的解决办法
- 互联网业务实战(一)--今日头条文章发布实现