`
liuhanjun
  • 浏览: 47228 次
  • 性别: Icon_minigender_1
  • 来自: 海口
社区版块
存档分类
最新评论

改造fckeditor以支持word中图片复制粘贴的思考

    博客分类:
  • J2EE
阅读更多

    fckeditor就不用多说了,那是相当的强悍啊,就是貌似加载速度有点慢,一个页面有3个ToolbarSets["Default"]的textarea,就明显觉得好慢啊,虽然做了一定的裁减,把form相关的toolbar去掉了,还是慢,看哪位哥们有什么妙招可记得告诉我。不过我这里想说的不是fckeditor速度的问题,而是不能很好地支持word中图片、公式和绘图的复制粘贴,这个大家也知道,如果含有这些元素,粘贴进fckeditor就自动没了。ewebeditor就做得不错,自动上传word中的图片、公式和绘图这些,转化成img标签,东西是好,可惜要银子的哈,貌似还不便宜,咱做个单子也就几千,买这个授权花掉几千,没得挣咯(声明:本人绝对没有不尊重知识产权的意思,相反,本人极力反对“用软件不花钱”——盗版的社会陋习)。

    以下纯粹探讨性质,本人并不精通js:

1、首先要弄明白fckeditor粘贴了word中的文档后,代码是怎么样的。粗看了一下fckeditor源码,貌似word并非纯文本,所以复制以后进入到剪贴板,要用raw paste粘贴。

    word中的图片:

<v:imagedata o:title="aaa" src = 
  "file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image003.png"></v:imagedata>

 

利用正则找出所有的<v:imagedata>不是难事,但是要自动上传,本人原本准备隐藏一个form用input file来自动赋值,然后submit,但是由于security issue,input file的value是只读的,不可动态赋值,那叫一个郁闷啊,不过想想也是,要是js这事都可以干,那互联网就没人敢用了,太不安全了,重要的文件将很轻松地被不怀好意的程序员轻松获取,那叫一个恐怖啊!看来不采用activex控件是没有可能咯。

    word中的公式:

<v:imagedata o:title="" src = "file:///C:\DOCUME~1\ADMINI~\LOCALS~1\Temp\msohtml1\01\clip_image001.wmz">
</v:imagedata>

 跟图片没啥区别,就是压缩成wmz或者emz了,这对java来说,小菜一碟,用自带的GzipInputStream解压即可。

    word中的绘图:

<v:group> 。。。<v:shapetype.../> <v:shape.../> <v:rect.../> <v:oval.../> <v:line.../>。。。</v:group>

 

2、类似于这样的标签,显然不是w3的标准,需要加入

<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 11">
<meta name=Originator content="Microsoft Word 11">
<link rel=File-List href="aaa.files/filelist.xml">
<link rel=Edit-Time-Data href="aaa.files/editdata.mso">
<link rel=OLE-Object-Data href="aaa.files/oledata.mso">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->

 

类似的头部才行。

3、本着这个思路,先解决在fckeditor中粘贴word不能显示图片、公式等元素的问题。打开fck_paste.html文件,找到并修改

oDoc.write('<html><head><scr' + 'ipt>window.onerror = function() { return true ; };<\/script><\/head><body><\/body><\/html>') ;

 

			//加入IE显示公式和图片所必需的xmlns和style,否则不能显示
			oDoc.write('<html xmlns:v=\'urn:schemas-microsoft-com:vml\'' +  
					' xmlns:o=\'urn:schemas-microsoft-com:office:office\'' +
					' xmlns:w=\'urn:schemas-microsoft-com:office:word\'' +
					' xmlns=\'http:\/\/www.w3.org\/TR\/REC-html40\'>' +
					' <head>' +
					'<!--[if !mso]>' +
					'<style>' +
					'v\\:* {behavior:url(#default#VML);}' +
					'o\\:* {behavior:url(#default#VML);}' +
					'w\\:* {behavior:url(#default#VML);}' +
					'.shape {behavior:url(#default#VML);}' +
					'<\/style>' +
					'<![endif]-->' +
					'<scr' + 'ipt>window.onerror = function() { return true ; };<\/script><\/head><body><\/body><\/html>') ;

 

这样就解决了fckeditor粘贴窗口显示图片、公式、绘图等元素的问题。

 

总结:以上可以解决fckeditor的粘贴显示问题,但是上传到服务器以后,必须解决本地的那些图片、wmz之类的文件要自动上传到服务器,否则也是枉然,而要解决这样的问题,必须依靠第三方控件,目前本人正在测试用vc++写的activex控件,完成这个功能。水平有限,如有谬误之处,还望方家不吝赐教。

分享到:
评论
11 楼 lteb2002 2014-03-04  
今天才发现您的文章,我们对这个问题有共同思路,我们已经实现了,参考地址:
http://test.reremouse.com/wordimg/
10 楼 liuhanjun 2011-12-20  
鉴于有些博友要求提供ocx控件以作参考,现提供链接下载。http://www.0898tj.com/fckeditor/fckeditor.cab
9 楼 liuhanjun 2011-04-09  
zb7503 写道
liuhanjun 写道
zb7503 写道
能不能共享一下代码。想学习一下。谢谢!


代码共享是好主意,只是产权属于公司,被leader知道了,我就变鱿鱼了。


不知道applet能不能读取word中的图片,并进行上传。

沙箱机制的限制,恐怕是不可能的。
8 楼 liuhanjun 2011-04-09  
RobustTm 写道
能不能将步骤讲的清楚些,我把那段代码替换了还是不行,谢谢!

应该不会吧。当然,只修改fck_paste.html仅仅可以显示word中粘贴过来的图片公式等,而不能自动上传,要想自动上传到服务器,需要activex控件。为了方便,上传fck_paste.html,注意:中文注释下面的代码是额外添加的,酌情取舍。
7 楼 zb7503 2011-04-01  
liuhanjun 写道
zb7503 写道
能不能共享一下代码。想学习一下。谢谢!


代码共享是好主意,只是产权属于公司,被leader知道了,我就变鱿鱼了。


不知道applet能不能读取word中的图片,并进行上传。
6 楼 RobustTm 2011-03-31  
能不能将步骤讲的清楚些,我把那段代码替换了还是不行,谢谢!
5 楼 liuhanjun 2011-03-17  
zb7503 写道
能不能共享一下代码。想学习一下。谢谢!


代码共享是好主意,只是产权属于公司,被leader知道了,我就变鱿鱼了。
4 楼 liuhanjun 2011-03-17  
cuixiping 写道
to liuhanjun:

ocx控件的签名证书问题,只要加一段代码就可以了,许多年前我用vb写ocx的时候做过,这个你可以网上查。

谢谢提醒,但是现在的IE8和IE9对安全原来越重视了,不签名的ocx控件,不是加代码就可以蒙混的,今时不同往昔啊。
3 楼 zb7503 2011-02-16  
能不能共享一下代码。想学习一下。谢谢!
2 楼 cuixiping 2011-02-16  
to liuhanjun:

ocx控件的签名证书问题,只要加一段代码就可以了,许多年前我用vb写ocx的时候做过,这个你可以网上查。
1 楼 liuhanjun 2011-02-13  
    过年期间,啥也没干,这两天再捡起fckeditor控件的问题,终于解决了从word复制粘贴自动上传图片、公式、绘图的问题。正如前所说,图片和公式相对好处理,word绘图产生的图片就比较麻烦,因为没有生成本地图片文件,只好用vc++按CF_HTML读取剪切板的内容,这里可以看到绘图生成了图片文件。这里有点迷糊:IE的粘贴和VC的CF_HTML读取竟然不一样,why?算了,懒得管了。去掉乱七八糟的html代码后返回给fckeditor,然后fckeditor再调用vc++控件进行上传,走曲线了,按理说可以由VC完成读取、正则解析、上传、正则替换,最后回传给fckeditor,这样应该好些。没办法,不熟悉ATLRX正则表达式,也不想去下载正则库,以免控件过大,就这样吧。
    ocx控件是做好了,郁闷的是没有签名证书,IE拒绝安装自动下载安装cab,吐血!没办法,做个exe让用户手动下载安装了。但是N不爽啊,一冲动想去wosign买个签名证书,1年的要1388元人民币整,思来想去,囊中羞涩,拉倒了!先留钱买饭吃,以后再说罢。
    有这方面需求和兴趣的XDJM,可以留言一起探讨。好了,睡觉去先~~~

相关推荐

    cryptography-2.4-cp36-cp36m-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Matlab实现基于RF-Adaboost随机森林结合Adaboost集成学习时间序列预测(完整源码和数据)

    1.Matlab实现基于RF-Adaboost随机森林结合Adaboost集成学习时间序列预测。基于RF-Adaboost(随机森林结合Adaboost集成学习)的时间序列预测方法结合了随机森林在处理高维数据和复杂关系方面的优势,以及Adaboost在自适应地提升弱分类器性能方面的特点,从而提高了对时间序列数据的预测准确性。 2.excel数据,方便替换,运行环境matlab2018及以上。 3.程序语言为matlab。 4.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 5.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 6.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+。

    aiohttp-3.7.0b1-cp36-cp36m-manylinux2014_aarch64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    着装分割-基于NCNN+YOLOv8-Seg实现行人着装分割算法-附项目源码+流程教程-优质项目实战.zip

    着装分割_基于NCNN+YOLOv8-Seg实现行人着装分割算法_附项目源码+流程教程_优质项目实战

    ASP.NET某中学学生成绩管理系统的设计(源代码+LW).zip

    本毕业设计所描述的中学学生成绩管理系统是采用ASP.NET作为网络编程框架,SQL Server 2000作为数据库编写的一个B/S模式的系统。系统主要实现了:用户管理、成绩查询、成绩管理和科目管理等功能。本文详细介绍了中学学生成绩管理系统的需求分析、功能设计和系统设计,在系统设计中给出数据库的设计和本系统的总体设计方案,在系统实现中具体介绍了各个功能的所能实现的情况和主要代码,同时附有运行界面图。 关键字:成绩管理;成绩录入;成绩查询;.NET ;B/S;

    aiohttp-3.9.0-cp38-cp38-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    062-微信小程序-股票分时图K线图小程序.zip

    062-微信小程序-股票分时图K线图小程序.zip

    高分项目,基于Unity3D开发实现的二维任务游戏,内含完整源码+资源+unitypackage

    高分项目,基于Unity3D开发实现的二维任务游戏,内含完整源码+资源+unitypackage 首先,二维游戏设计需要注重游戏的简单易懂性。由于二维游戏的画面和操作相对简单,因此游戏设计师需要确保游戏的规则和操作方式能够被玩家轻松理解和掌握。游戏中的目标和任务...

    基于微信小程序的高校餐厅食品留样管理系统(源码)

    基于微信小程序的高校餐厅食品留样管理系统(源码)

    易舟云财务软件:引领财务数字化转型的新篇章.docx

    在数字化浪潮的推动下,财务软件已经成为企业财务管理不可或缺的工具。而易舟云财务软件,作为一款深受用户喜爱的财务管理系统,正引领着财务数字化转型的新篇章。财务软件行业正经历着前所未有的变革。随着《新一代人工智能发展规划》的发布,人工智能技术在财务领域的应用变得越来越深入。易舟云财务软件正是这一趋势的产物,它结合了人工智能技术,实现了自动生成凭证、报表和智能报税等功能,旨在提升企业的财务管理效率和精确性。免费版是永久免费的,提供了账套管理、凭证、期末处理、会计账簿、财务报表、设置等基本功能。这些功能已经能够满足大多数小型企业和个人用户的需求。专业版则需要298元/年起,功能更为强大。除了包含免费版的所有功能外,还增加了资金、发票、工资、固定资产等更高级的功能,适合有更高财务管理需求的用户。填写记账凭证是财务工作的基础。在易舟云财务软件中,用户可以轻松设置日期、凭证字、选择科目、设置金额、上传附件,并保存凭证。软件遵循“有借必有贷,借贷必相等”的原则,确保了财务数据的准确性。期末处理是企业财务管理的关键环节。易舟云财务软件提供了结转与结账、期末检查、数据测算等功能,帮助企业准确计算利润、计提

    aiohttp-3.9.0b1-cp39-cp39-musllinux_1_1_s390x.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Thinkphp全新UI黑白模式微信影视小程序源码 去授权

    去授权Thinkphp全新UI黑白模式微信影视小程序源码,微信影视小程序源码 支持多开。

    小程序-51-面向企事业单位的项目申报小程序--LW-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    小程序-60-微信小程序的驾校预约管理系统--LW-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    aiohttp-3.7.4-cp37-cp37m-manylinux1_i686.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于springboot的驾校管理系统

    开发语言:Java JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.6/5.7(或8.0) 数据库工具:Navicat 开发软件:idea 依赖管理包:Maven 代码+数据库保证完整可用,可提供远程调试并指导运行服务(额外付费)~ 如果对系统的中的某些部分感到不合适可提供修改服务,比如题目、界面、功能等等... 声明: 1.项目已经调试过,完美运行 2.需要远程帮忙部署项目,需要额外付费 3.本项目有演示视频,如果需要观看,请联系我v:19306446185 4.调试过程中可帮忙安装IDEA,eclipse,MySQL,JDK,Tomcat等软件 重点: 需要其他Java源码联系我,更多源码任你选,你想要的源码我都有!

    aiohttp-3.8.1-cp38-cp38-musllinux_1_1_ppc64le.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本117.0.5938.92)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom117.0.5938.92 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver117.0.5938.92 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    树莓派+4B+3D+模型

    树莓派+4B+3D+模型

Global site tag (gtag.js) - Google Analytics