用户登录
用户注册

分享至

java解析word图片 java 解析word

  • 作者: 看热闹不嫌事大的
  • 来源: 51数据库
  • 2020-04-14

java解析word图片

java中怎么将word文档怎么生成图片

public class CreateWordDemo { public void createDocContext(String file) throws DocumentException,IOException { // 设置纸张大小 Document document = new Document(PageSize.A4); // 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中 RtfWriter2.getInstance(document, new FileOutputStream(file)); document.open(); // 设置中文字体 BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED); // 标题字体风格 Font titleFont = new Font(bfChinese, 12,Font.BOLD); // 正文字体风格 Font contextFont = new Font(bfChinese, 10,Font.NORMAL); Paragraph title = new Paragraph("标题"); // 设置标题格式对齐方式 title.setAlignment(Element.ALIGN_CENTER); title.setFont(titleFont); document.add(title); String contextString ="iText是一个能够快速产生PDF文件的java类库。

" + " \n"// 换行 +"iText的java类对于那些要产生包含文本," + "表格,图形的只读文档是很有用的。

它的类库尤其与java Servlet有很好的给合。

" +"使用iText与PDF能够使你正确的控制Servlet的输出。

"; Paragraph context = new Paragraph(contextString); // 正文格式左对齐 context.setAlignment(Element.ALIGN_LEFT); context.setFont(contextFont); // 离上一段落(标题)空的行数 context.setSpacingBefore(5); // 设置第一行空的列数 context.setFirstLineIndent(20); document.add(context); // 利用类FontFactory结合Font和Color可以设置各种各样字体样式 Paragraph underline = new Paragraph("下划线的实现",FontFactory.getFont( FontFactory.HELVETICA_BOLDOBLIQUE, 18,Font.UNDERLINE, new Color(0, 0,255))); document.add(underline); // 设置 Table 表格 Table aTable = new Table(3); int width[] = { 25, 25, 50 }; aTable.setWidths(width);// 设置每列所占比例 aTable.setWidth(90); // 占页面宽度90% aTable.setAlignment(Element.ALIGN_CENTER);// 居中显示 aTable.setAlignment(Element.ALIGN_MIDDLE);// 纵向居中显示 aTable.setAutoFillEmptyCells(true); // 自动填满 aTable.setBorderWidth(1); // 边框宽度 aTable.setBorderColor(new Color(0, 125, 255)); // 边框颜色 aTable.setPadding(2);// 衬距,看效果就知道什么意思了 aTable.setSpacing(3);// 即单元格之间的间距 aTable.setBorder(2);// 边框 // 设置表头 Cell haderCell = new Cell("表格表头"); haderCell.setHeader(true); haderCell.setColspan(3); aTable.addCell(haderCell); aTable.endHeaders(); Font fontChinese = new Font(bfChinese, 12, Font.NORMAL,Color.GREEN); Cell cell = new Cell(new Phrase("这是一个测试的 3*3 Table 数据",fontChinese)); cell.setVerticalAlignment(Element.ALIGN_TOP); cell.setBorderColor(new Color(255, 0,0)); cell.setRowspan(2); aTable.addCell(cell); aTable.addCell(new Cell("#1")); aTable.addCell(new Cell("#2")); aTable.addCell(new Cell("#3")); aTable.addCell(new Cell("#4")); Cell cell3 = new Cell(new Phrase("一行三列数据",fontChinese)); cell3.setColspan(3); cell3.setVerticalAlignment(Element.ALIGN_CENTER); aTable.addCell(cell3); document.add(aTable); document.add(new Paragraph("\n")); // 添加图片 Image.getInstance即可以放路径又可以放二进制字节流 Image img = Image.getInstance("d:\\img01800.jpg"); img.setAbsolutePosition(0,0); img.setAlignment(Image.RIGHT);// 设置图片显示位置 img.scaleAbsolute(60, 60);// 直接设定显示尺寸 // img.scalePercent(50);//表示显示的大小为原尺寸的50% // img.scalePercent(25,12);//图像高宽的显示比例 // img.setRotation(30);//图像旋转一定角度 document.add(img); document.close(); } public static void main(String[] args) { CreateWordDemo word = new CreateWordDemo(); String file ="d:/demo1.doc"; try { word.createDocContext(file); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

java解析word文档有哪些方法

java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。

经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。

rtf格式文件表面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。

----- 实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。

----- 实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。

1、采用字节的形式读取rtf模板内容2、将可变的内容字符串转为rtf编码3、替换原文中的可变部分,形成新的rtf文档主要程序如下:public String bin2hex(String bin) {char[] digital = "0123456789ABCDEF".toCharArray();StringBuffer sb = new StringBuffer("");byte[] bs = bin.getBytes();int bit;for (int i = 0; i > 4;sb.append("\\'");sb.append(digital[bit]);bit = bs[i] & 0x0f;sb.append(digital[bit]);}return sb.toString(); }public String readByteRtf(InputStream ins, String path){ String sourcecontent =""; try{ ins = newFileInputStream(path); byte[] b= new byte[1024];if (ins == null) {System.out.println("源模板文件不存在");}int bytesRead = 0;while (true) {bytesRead = ins.read(b, 0, 1024); // return final read bytescountsif(bytesRead == -1) {// end of InputStreamSystem.out.println("读取模板文件结束");break;}sourcecontent += new String(b, 0, bytesRead); // convert to stringusing bytes} }catch(Exception e){ e.printStackTrace(); } return sourcecontent ;}以上为核心代码,剩余部分就是替换,从新组装java中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。

源代码部分详见附件。

运行源代码前提:c盘创建YQ目录,将附件中"模板.rtf"复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ目录下生成文件名如:21时15分19秒_cheney_记录.rtf的文件。

package com;import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;public class OperatorRTF {public String strToRtf(String content){char[] digital = "0123456789ABCDEF".toCharArray();StringBuffer sb = new StringBuffer("");byte[] bs = content.getBytes();int bit;for (int i = 0; i > 4;sb.append("\\'");sb.append(digital[bit]);bit = bs[i] & 0x0f;sb.append(digital[bit]);}return sb.toString();}public String replaceRTF(String content,String replacecontent,intflag){String rc = strToRtf(replacecontent);String target = "";if(flag==0){target = content.replace("$timetop$",rc);}if(flag==1){target = content.replace("$info$",rc);}if(flag==2){target = content.replace("$idea$",rc);}if(flag==3){target = content.replace("$advice$",rc);}if(flag==4){target = content.replace("$infosend$",rc);}return target;}public String getSavePath() {String path = "C:\\YQ";File fDirecotry = new File(path);if (!fDirecotry.exists()) {fDirecotry.mkdirs();}return path;}public String ToSBC(String input){char[] c =input.toCharArray();for (int i =0; i < c.length; i++){if (c[i] == 32){c[i] = (char) 12288;continue;}if (c[i] < 127){c[i] = (char) (c[i] + 65248);}}return newString(c);}public void rgModel(String username, String content) {// TODO Auto-generated method stubDate current=new Date();SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-ddHH:mm:ss");String targetname = sdf.format(current).substring(11,13) + "时";targetname += sdf.format(current).substring(14,16) + "分";targetname += sdf.format(current).substring(17,19) + "秒";targetname += "_" + username +"_记录.rtf";String strpath = getSavePath();String sourname = strpath+"\\"+"模板.rtf";String sourcecontent = "";InputStream ins = null;try{ins = new FileInputStream(sourname);byte[] b = new byte[1024];if (ins == null) {System.out.println("源模板文件不存在");}int bytesRead = 0;while (true) {bytesRead = ins.read(b, 0, 1024); // return final read bytescountsif(bytesRead == -1) {// end of InputStreamSystem.out.println("读取模板文件结束");break;}sourcecontent += new Strin...

JAVA编辑WORD文件插入图片

以前做过其他office的没做过微软的,不过大同小异这个你就需要在java中获取到word的某种对象,方法有很多,但是要看你用什么方式调用的office了,如果是某个牌子的中间件,那就用那个中间件的二次开发文档里面应该就有提到这些方法,如果是第三方的jar包,应该也不麻烦,通过jar包中的方法,可能要有一个word的实例创建的过程吧,然后获取到range或者textrange等这些对象(应该是这俩对象……)通过这对象然后找到插入图片的方法,然后传入位置参数(可能是两个数用逗号隔开)

JAVA编程解析?

pulic class EmployeeTest 定义类{pulic static void main(Sting[] ags){Employee[] staff=new Employee[3];创建数组staff[0]=new Employee("zhangsan",75000,1987,12,15);添加员工资料进数组staff[1]=new Employee("lisi",50000,1989,10,1);staff[2]=new Employee("wangwu",40000,1990,3,15); fo(Employee e:staff){注:不要丢掉大括号 e.aiseSalay(5); } fo(Employee e:staff){注:不要丢掉大括号 intln("name"+ tName()+",salay="+ tSalay()+",hieDay="+ tHieDay()); }}***定义员工类*class Employee{***定义构造方法*@paam n员工姓名参数*@paam s员工工资参数*@paam yea出生年份*@paam month出生月份*@paam day出生日期*pulic Employee(Sting n,doule s,int yea,int month,int day){name=n;姓名赋值salay=s;工资赋值GegoianCalenda Calenda=new GegoianCalenda(yea,month-1,day);创建日历对象(注:这里原先你在赋值时,没有定义对象名称)hieDay= tTime();取得日历对象中的日期}***获取姓名函数*@etun Sting 返回姓名*pulic Sting getName(){etun name;}***获取工资函数*@etun doule 返回工资*pulic doule getSalay(){etun salay;}***获取生日*@etun Date 返回生日日期对象*pulic Date getHieDay(){etun hieDay;}***设置工资增长幅度*@paam yPecent工资增加百分比*pulic void aiseSalay(doule yPecent){doule aise=salay*yPecent100;salay+=aise;}pivate Sting name;内部私有变量姓名pivate doule salay;内部私有变量工资pivate Date hieDay;内部私有变量出生日期}

Java 解析Word文档简历

) object), Attributes attributes) throws SAXException { /结束解析&quot.List; import java.util,所以对性能和内存的要求比较高,尤其是遇到很大的 XML 文件的时候。

可以很容易的添加和修改树中的元素。

然而由于使用 DOM 解析器的时候需要处理整个 XML 文档.util.Stack; import org;/ 压栈 isRootElement = !isRootElement; } else { Object object = stack.peek().sax; private boolean keyElementBegin = false, dict); stack.push(dict).xml;) @Override public void startElement(String uri。

由于它的遍历能力,DOM 解析器常用于 XML 文档需要频繁的改变的服务中;(); private boolean valueElementBegin = false; private Object root; @SuppressWarnings("unchecked&quot.Attributes; import org.sax; } @SuppressWarnings("unchecked&quot。

而这个对象可能是一个空白字符解析起来异常麻烦!DOM 采用建立树形结构的方式访问 XML 文档;** * .core; import java.util; } @SuppressWarnings("unchecked"(); if (object instanceof ArrayList) ((ArrayList&lt.out.xml, String localName.add(dict)。

但用 SAX 解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。

DOM [树型结构] SAX [事件驱动型]于是采用SAX解析!网上有人写过.SAXException; import org; private String key; Stack&lt.plist配置文件的解析器 * * @author afly * */ public class PlistHandler extends DefaultHandler { private boolean isRootElement = false.equals(qName)) { isRootElement = true; } if ("Object&gt.DefaultHandler; /.out;.equals(qName)) { if (isRootElement) { stack.push(new HashMap),而 SAX 采用的事件模型, Object> dict = new HashMap) root, Object> getMapResult() { return (HashMap); } @Override public void endDocument() throws SAXException { System.xml, Object>());/String, Object> import java.println(&quot,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到; else if (object instanceof HashMap) ((HashMap&lt.LinkedList; import java.util;) public List&lt.Map; stack = new Stack) root;开始解析" } } if ("key".equals(qName)) { keyElementBegin = true; } if ("true".equals(qName)) { HashMap parent = (HashMap) stack.peek(); parent.put(key, true); } if ("false".equals(qName)) { HashMap parent = (HashMap) stack.peek(); parent.put(key, false); } if ("array".equals(qName)) { if (isRootElement) { ArrayList obj = new ArrayList(); stack.push(obj); isRootElement = !isRootElement; } else { HashMap parent = (HashMap) stack.peek(); ArrayList obj = new ArrayList(); stack.push(obj); parent.put(key, obj); } } if ("string".equals(qName)) { valueElementBegin = true; } } /* * 字符串解析(non-Javadoc) * * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int) */ @SuppressWarnings("unchecked") @Override public void characters(char[] ch, int start, int length) throws SAXException { System.out.println("characters:"); if (length > 0) { if (keyElementBegin) { key = new String(ch, start, length); System.out.println("key:" + key); } if (valueElementBegin) { if (HashMap.class.equals(stack.peek().getClass())) { HashMap parent = (HashMap) stack.peek(); String value = new String(ch, start, length); parent.put(key, value); } else if (ArrayList.class.equals(stack.peek().getClass())) { ArrayList parent = (ArrayList) stack.peek(); String value = new String(ch, start, length); parent.add(value); } System.out.println("value:" + new String(ch, start, length)); } } } @Override public void endElement(String uri, String localName, String qName) throws ...

word里插入图片问题我在word文档中插入了一张图片,但是不能

word中出现的向下的箭头,其实叫软回车符,也叫手动换行符,而我们平常在word中所见的是硬回车,一个转弯的箭头。

软回车的符号是“^l ”,硬回车的符号是“^p”。

可以通过查找和替换命令来消除。

操作步骤:1、开始---->查找,如图所示;2、弹出和替换对话框,在查找内容中输入“^l ”,替换内容为空,点击全部替换就会将软回车全部替换掉,如图所示。

转载请注明出处51数据库 » java解析word图片

软件
前端设计
程序设计
Java相关