JTextPanel对word复制粘贴
来源:互联网 发布:nodejs访问数据库 编辑:程序博客网 时间:2024/04/27 15:13
最近搞开发需要用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复制粘贴
- word不能复制粘贴,提示激活宏
- vba中excel和word复制粘贴
- Word突然不能复制粘贴怎么办?
- 教您一招解决Word不能复制粘贴问题
- 复制粘贴只对IE有用
- MFC对数据的复制及粘贴;
- word复制粘贴的时候出现中括号
- 解决从vs2010复制汉字粘贴到word乱码问题
- Word表格复制粘贴后变蓝色背景的解决方法
- visual studio2010复制粘贴源代码到Word时乱码问题
- word复制粘贴后编号自动加一
- 安装MathType后Word不能复制粘贴怎么办?
- word中遇到复制粘贴无法使用的解决方法
- 解决安装MathType后Word不能复制粘贴问题
- 复制粘贴
- 复制粘贴
- 复制粘贴
- Aspx实现在线用户管理
- 程序调试能力和推荐书籍
- C# 中的委托和事件
- 有关在matlab中对信号采样及频谱的一些解释;复数的频谱,高分辨率谱,高密度谱的一些理解
- 维度层次理解
- JTextPanel对word复制粘贴
- linux安装jdk
- linux 创建进程
- v$session的blocking_session字段
- Node.js学习笔记-STDIO Module
- 缓冲区刷新
- SQL Server like escape的使用方法
- VMware虚拟机轻松体验Ubuntu 11
- android 实现home键效果