最近搞开发需要用JTextPane来做文件的复制粘贴,找了很多资料都没有提到图文混合的情况下如何来进行。于是上网查找了很多资料,找到的资料很少做的也都很肤浅。不能对word文档进行粘贴操作。没办法只有自己分析java代码了。费了很长时间终于实现了,下面是粘贴代码(这里需要指出的是我这里的JTextPane内容的格式是使用HTML来编码展现的):

     //判断是否有选中的文字如果有则删除if (editorPane.getSelectedText() != null) {int start = editorPane.getSelectionStart();int length = editorPane.getSelectedText().length();try {editorPane.getDocument().remove(start, length);} catch (BadLocationException e) {logger.error(e);}}//获取系统粘贴缓存Clipboard clb = Toolkit.getDefaultToolkit().getSystemClipboard();Transferable contents = clb.getContents(null);//取出所有内容DataFlavor[] data=contents.getTransferDataFlavors();

下面是个循环再循环中判断哪些是需要的数据,例如word中复制的数据。这里使用到了Jsoup来解析,因为复制过来的word数据是HTML格式的。

for(int i=0;i<data.length;i++){
 DataFlavor dataFlavor=data[i];
 //取出数据的元信息判断有用的数据if(dataFlavor.getHumanPresentableName().equals("text/html")&&dataFlavor.getRepresentationClass().getName().equals("java.lang.String")||dataFlavor.getHumanPresentableName().equals("Plain Text")&&dataFlavor.getRepresentationClass().getName().equals("java.io.InputStream")){if(dataFlavor!=null){try {Object obj = null;
             //从数据源信息中拿到word数据try {obj = dataFlavor.getReaderForText(contents);} catch (Exception e1) {logger.error(e1);}//判断数据类型是否对应if(obj instanceof StringReader){
                 //强制转换后读取成字符串StringReader reader=(StringReader) obj;StringBuffer buffer=new StringBuffer();int c;while((c=reader.read())!=-1){buffer.append((char)c);}
             //因为读取出来的数据是整片的html文档,我们只需要body中的数据。这里使用Jsoup来进行解析
org.jsoup.nodes.Document docx = Jsoup.parse(buffer.toString());
                 //获取body标签中的数据org.jsoup.nodes.Element element = docx.body();String str = "";try {org.jsoup.nodes.Element p;// 判断body中是否存在<p>标签if (element.child(0).tagName().equals("p")) {p = element.child(0);// 如果存在则使用<p>标签内的内容
                       // 判断body中是否存在<div>标签
 }else if(element.child(0).tagName().equals("div")){p = element.child(0);// 如果存在则使用<div>标签内的内容
} else {p = element;// 如果不存在则使用<body>中的内容}str=p.html();} catch (Exception e) {str = "";continue;}

                 //获取光标当前位置int pos=editorPane.getCaretPosition();
                   //将内容插入到光标后try {HTMLEditorKit kit = (HTMLEditorKit) editorPane.getEditorKit();HTMLDocument doc = (HTMLDocument) editorPane.getDocument();doc.insertBeforeStart(doc.getCharacterElement(pos), str);} catch (BadLocationException e) {logger.error(e);}}}}catch (IOException e) {logger.error(e);}}}else{
            //这里用于处理非文字的对象if (contents != null && contents.getTransferDataFlavors().length == 1) {// 判断是否是图片if (contents.isDataFlavorSupported(DataFlavor.imageFlavor)) {// sendImage(Screenshot.getClipboard());BufferedImage image = Screenshot.getClipboard();WriteToImage(image);// 判断是否是文件} else if (contents.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {try {List files = (List) contents.getTransferData(DataFlavor.javaFileListFlavor);Iterator iterator = files.iterator();while (iterator.hasNext()) {File file = (File) iterator.next();String path = file.getAbsolutePath().toUpperCase();// 判断文件是否是图片if (path.endsWith(".GIF") || path.endsWith(".JPG")|| path.endsWith(".PNG")) {HTMLEditorKit kit = (HTMLEditorKit) editorPane.getEditorKit();HTMLDocument doc = (HTMLDocument) editorPane.getDocument();// 粘贴图片的位置// imageMap.put(editorPane.getCaretPosition(),// file.getAbsolutePath());kit.insertHTML(doc, editorPane.getCaretPosition(),"<img id='" + file.hashCode()+ "' src='file:///"+ file.getAbsolutePath() + "' />",0, 0, HTML.Tag.IMG);/*StringReader in=new StringReader("<img id='" + file.hashCode() + "' src='file:///"+ file.getAbsolutePath() + "' />");kit.read(in, doc, editorPane.getCaretPosition());*/}}} catch (UnsupportedFlavorException e) {logger.error(e);} catch (IOException e) {logger.error(e);} catch (BadLocationException e) {logger.error(e);}}}}

复制操作的代码比较简单这里就不多说了,直接代码:
//判断是否有选取的复制内容
if(editorPane.getSelectedText()!=null){HTMLEditorKit kit = (HTMLEditorKit) editorPane.getEditorKit();HTMLDocument doc = (HTMLDocument) editorPane.getDocument();
         //获取开始坐标int start = editorPane.getSelectionStart();
            //获取长度int length = editorPane.getSelectedText().length();
          //获取序列化的HTML内容StringWriter buf = new StringWriter();try {kit.write(buf, doc, start, length);} catch (IOException e) {logger.error(e);} catch (BadLocationException e) {logger.error(e);}if(buf!=null){str=buf.toString();}
           //将内容放到系统剪切板Clipboard clipboard = editorPane.getToolkit().getSystemClipboard();Transferable tText = new StringSelection(str);clipboard.setContents(tText, null);}

如果对java界面方面有兴趣的朋友欢迎加入4601398QQ群。

JTextPanel对word复制粘贴相关推荐

  1. 从英文版VC到word复制粘贴的乱码问题

    我用的是英文版windows,英文版VC6.0,从VC中复制代码到WORD中,出现乱码. VC源代码如下: 复制到WORD中如下: 这个问题应该是因为系统默认代码页的问题,英文版WINDOWS中默认输 ...

  2. 富文本编辑器从word复制粘贴图片

    1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前端为Jsp(前端都一样,后台如果语言不通得自己做 Base6 ...

  3. 解决wangEditor从word复制粘贴图片,带有页眉页脚的问题

    话不多说,直接贴代码. rtf数据能提取到页眉页脚图片的原因: 提取 Word 文档中包含的所有图像数据,包括页眉和页脚中的图像数据.这是因为 RTF(Rich Text Format)是一种标记语言 ...

  4. 计算机word复制粘贴键,小编教你电脑Word工具无法复制粘贴

    最近,有不少的网友反映自己的Word无法复制粘贴,是不定时出现的,Word无法复制粘贴这种错误我们经常都会遇到,下面就让小编给大家说一下Word不能够复制粘贴的解决方案.希望能够帮助到有需要的用户们. ...

  5. Word复制粘贴两端不整齐

    这是由于复制粘贴的文字中出现了换行符^p,只需要将^p替换为无内容,既不需要空格也不需要其他字母.

  6. 富文本编辑器tinymce支持从word复制粘贴保留格式和图片的插件powerpaste

    公司做的项目需要用到粘贴Word功能.就是将word内容一键粘贴到网页编辑器(在线富文本编辑器)中.Chrome+IE默认支持粘贴剪切板中的图片,但是我要粘贴的文章存在word里面,图片多达数十张,我 ...

  7. vba中excel和word复制粘贴

    先上代码: Application.ScreenUpdating = False '关闭屏幕刷新'         Dim oprate_times As Integer         Worksh ...

  8. 解决Office Word复制粘贴时自动加空格的问题

    在Office 2013.2016中,对选中的句子进行剪切.粘贴操作,发现每次操作后会在句子后面自动加一个空格,不符合日常习惯,可以在选项中进行如下设置: 选项-->高级-->使用智能剪切 ...

  9. word复制粘贴后编号自动加一

    写大论文时,文献使用了word的编号功能,如果在已经弄好的文献中间添加一条的话,之前搞不定 现在有一个方法: 1.先把文献弄个备份B 2.把要添加的文献在备份B中修改好 3.选中,具体如下 [1] Y ...

最新文章

  1. 解决:缺少aclocal、autoconf、automake
  2. 解决Qt graphis-view框架中,上层图元接收hover事件导致底层图元接收不到的问题
  3. Redis简介与安装
  4. JPA学习笔记---JPA理解---第一个JPA程序
  5. android CTS test
  6. css中如何设置字体
  7. DevOps使用教程 华为云(5)迭代计划 进度管理
  8. 利用LFW对人脸识别模型进行精度评测
  9. OPPOA83_OPPOA83T_官方线刷包_救砖包_解账户锁
  10. 输出素数并统计个数--C语言
  11. 实验——贝叶斯决策论预测贷款是否违约
  12. YY0709标准解读
  13. Android 代码设置来电铃声
  14. 计算机组装与维护作者杨云江,计算机组装与维护实用技术
  15. Mac锁屏 设置快捷键
  16. 永葆年轻的小虫子 大众甲壳虫1.2T
  17. 火狐浏览器打开发现是2345的网站-----解决方法
  18. 闪耀暖暖的3D建模真好吗?
  19. codeforces B. Boboniu Plays Chess
  20. 【ARM Coresight 介绍 3 - ARM Cortex-M DWT】

热门文章

  1. html样式错位,如何DIV+CSS网页错位_DIV+CSS_网页错位_CSS教程_课课家
  2. linux文件目录挂载与解挂
  3. uni-app页面下方空白解决方案
  4. 2018年06月16日广州珠海长隆海洋世界之旅
  5. ossim监控mysql_OSSIM中配置网络资产监控
  6. 抑郁症:抑郁症带来的危害 这几个特征希望你一个都没有
  7. Flutter 中的 Image 组件 如何加载网络图片和本地图片
  8. 记一次解决mysql进程数居高不下的问题
  9. 自己缴纳社保和通过单位缴纳有什么区别?
  10. 河北大学适合计算机考研吗,河北大学考研难吗?一般要什么水平才可以进入?...