1.怎么用java导出word文档
java导出word大致有6种解决方案:1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。
使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。
该方案只能在windows平台实现,是其局限性。2:Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。
他的excel处理很强大,对于word还局限于读取,目前只能实现一些简单文件的操作,不能设置样式。3:Java2word是一个在java程序中调用 MS Office Word 文档的组件(类库)。
该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。 这些服务包括: 打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。
填充数据到表格中读取表格数据 ,1.1版增强的功能: 指定文本样式,指定表格样式。如此,则可动态排版word文档。
是一种不错的解决方案。4:iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。
通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。功能强大。
5:JSP输出样式,该方案实现简单,但是处理样式有点缺陷,简单的导出可以使用。6:用XML做就很简单了。
Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。
2.如何能让Java生成复杂Word文档
客户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈。
POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个20多页,嵌套很多表格和图像的word文档靠POI来写代码输出,对程序员来说比去山西挖煤还惨,况且文档格式还经常变化。
iText操作Excel还行。对于复杂的大量的word也是噩梦。
直接通过JSP输出样式基本不达标,而且要打印出来就更是惨不忍睹。
Word从2003开始支持XML格式,用XML还做就很简单了。
大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。
看看实际效果
首先用office【版本要2003以上,以下的不支持xml格式】编辑文档的样式,图中红线的部分就是我要输出的部分:
将编辑好的文档另存为XML
3.java怎么实现将word文档转换为pdf文件
WORD转换到PDF
WORD转换到PDF的步骤就相对简单了,我们只需要安装一款虚拟打印机软件“Virtual Pdf Printer”即可,它可以将你编辑好的WORD文档直接输出为PDF文件格式。(下载地址:
安装后在WORD中点击“打开”→“打印”,在“打印机名称”中会看到多了一个“Virtual Printer”选项,选中它,点击确定后(未注册版本有10秒的等待时间),弹出“保存PDF文件”对话框,先选择文件的保存路径,再点击“生成设置”按钮,弹出“系统设置”面板(如图3),对输出后的PDF文件进行加密和字体等设置,点击两次确定,当前的WORD文档就被转换成PDF格式的文件了
4.用java文件对话框实现文件另存为
我觉得用一个文件复制的类就可以实现备份,我大概写了一个,基本功能可以实现,但是总觉得好怪你可以给JTextField t1 一个初始路径,那样,如果每次都是备份同一个文件直接点保存选路径就可以,如果想备份其他文件再选其他文件就可以了import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.Calendar;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;public class BakTo extends JFrame implements ActionListener { JLabel l1 = new JLabel("原始文件"); JTextField t1 = new JTextField(40); JButton b1 = new JButton("选择"); JLabel l2 = new JLabel("保存目录"); JTextField t2 = new JTextField(40); JButton b2 = new JButton("保存"); JFileChooser j1 = new JFileChooser(); JFileChooser j2 = new JFileChooser(); static File fileFlag = new File(""); public BakTo() { setBounds(200, 200, 600, 140); setLayout(new FlowLayout()); add(l1); add(t1); add(b1); add(l2); add(t2); add(b2); b1.addActionListener(this); b2.addActionListener(this); setResizable(false); setVisible(true); validate(); } public void actionPerformed(ActionEvent e) { try { if (e.getSource() == b1) { int n = j1.showOpenDialog(null); String filename = j1.getSelectedFile().toString(); if (n == JFileChooser.APPROVE_OPTION) { t1.setText(filename); fileFlag = new File(filename); } } else if (e.getSource() == b2) { j2.setCurrentDirectory(fileFlag);// 设置打开对话框的默认路径 j2.setSelectedFile(fileFlag);// 设置选中原来的文件 int n = j2.showSaveDialog(null); String filename2 = j2.getSelectedFile().toString(); if(filename2.indexOf(".")!=-1){ filename2=filename2.substring(0,filename2.indexOf(".")); } // 以下两句是获得原文件的扩展名 int flag = t1.getText().lastIndexOf("."); String kuozhan = t1.getText().substring(flag); String date = getDate();// 取得当前日期 if (n == JFileChooser.APPROVE_OPTION) { t2.setText(filename2 +date+ kuozhan);// 把日期和扩展名添加到原来文件的后面 } int b; char[] t = new char[25]; // 这里我改用了文件流 FileInputStream input = new FileInputStream(t1.getText()); FileOutputStream output = new FileOutputStream(filename2+date + kuozhan);// 把扩展名添加到原来文件的后面 int in = input.read(); while (in != -1) { output.write(in); in = input.read(); } input.close(); output.close(); } } catch (Exception x) { System.out.println(x); } } public String getDate() { Calendar rightNow = Calendar.getInstance(); System.out.println(rightNow.toString()); int year = rightNow.YEAR; int date = rightNow.DATE; int month = rightNow.MONTH + 1; String d = year + "年" + month + "月" + date + "日"; return d; } public static void main(String args[]) { BakTo c1 = new BakTo(); }}。
5.java生成word文档的问题
Jacob解决Word文档的读写问题收藏Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。
使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。Jacob下载的地址为:.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.Variant;public class WordOperate { public static void main(String args[]) { ActiveXComponent wordApp = new ActiveXComponent("Word.Application"); // 启动word // Set the visible property as required. Dispatch.put(wordApp, "Visible", new Variant(true));// //设置word可见 Dispatch docs = wordApp.getProperty("Documents").toDispatch(); // String inFile = "d:\\test.doc"; // Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, // new Object[] { inFile, new Variant(false), new Variant(false)},//参数3,false:可写,true:只读 // new int[1]).toDispatch();//打开文档 Dispatch document = Dispatch.call(docs, "Add").toDispatch();// create new document String userName = wordApp.getPropertyAsString("Username");// 显示用户信息 System.out.println("用户名:" + userName); // 文档对齐,字体设置//////////////////////// Dispatch selection = Dispatch.get(wordApp, "Selection").toDispatch(); Dispatch align = Dispatch.get(selection, "ParagraphFormat") .toDispatch(); // 行列格式化需要的对象 Dispatch font = Dispatch.get(selection, "Font").toDispatch(); // 字型格式化需要的对象 // 标题处理//////////////////////// Dispatch.put(align, "Alignment", "1"); // 1:置中 2:靠右 3:靠左 Dispatch.put(font, "Bold", "1"); // 字型租体 Dispatch.put(font, "Color", "1,0,0,0"); // 字型颜色红色 Dispatch.call(selection, "TypeText", "Word文档处理"); // 写入标题内容 Dispatch.call(selection, "TypeParagraph"); // 空一行段落 Dispatch.put(align, "Alignment", "3"); // 1:置中 2:靠右 3:靠左 Dispatch.put(selection, "Text", " "); Dispatch.call(selection, "MoveDown"); // 光标标往下一行 //表格处理//////////////////////// Dispatch tables = Dispatch.get(document, "Tables").toDispatch(); Dispatch range = Dispatch.get(selection, "Range").toDispatch(); Dispatch table1 = Dispatch.call(tables, "Add", range, new Variant(3), new Variant(2), new Variant(1)).toDispatch(); // 设置行数,列数,表格外框宽度 // 所有表格 Variant tableAmount = Dispatch.get(tables, "count"); System.out.println(tableAmount); // 要填充的表格 Dispatch t1 = Dispatch.call(tables, "Item", new Variant(1)) .toDispatch(); Dispatch t1_row = Dispatch.get(t1, "rows").toDispatch();// 所有行 int t1_rowNum = Dispatch.get(t1_row, "count").getInt(); Dispatch.call(Dispatch.get(t1, "columns").toDispatch(), "AutoFit");// 自动调整 int t1_colNum = Dispatch.get(Dispatch.get(t1, "columns").toDispatch(), "count").getInt(); System.out.println(t1_rowNum + " " + t1_colNum); for (int i = 1; i <= t1_rownum;="" i++)="" {="" for="" (int="" j="1;" j="">=><= t1_colnum;="" j++)="" {="" dispatch="" cell="Dispatch.call(t1," "cell",="" new="" variant(i),="" new="" variant(j)).todispatch();//="" 行,列="" dispatch.call(cell,="" "select");="" dispatch.put(selection,="" "text",="" "cell"="" +="" i="" +="" j);="" 写入word的内容="" dispatch.put(font,="" "bold",="" "0");="" 字型租体(1:租体="" 0:取消租体)="" dispatch.put(font,="" "color",="" "1,1,1,0");="" 字型颜色="" dispatch.put(font,="" "italic",="" "1");="" 斜体="" 1:斜体="" 0:取消斜体="" dispatch.put(font,="" "underline",="" "1");="" 下划线="" dispatch="" range="Dispatch.get(cell," "range").todispatch();="" string="" cellcontent="Dispatch.get(Range," "text").tostring();="" system.out.println((cellcontent.substring(0,="" cellcontent="" .length()="" -="" 1)).trim());="" }="" dispatch.call(selection,="" "movedown");="" 光标往下一行(才不会输入盖过上一输入位置)="" }="" 合并单元格////////////////////////="" dispatch.put(selection,="" "text",="" "="">=>
转载请注明出处51数据库 » java导出word文件另存为
流年似水31283788