2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > itext操作word 设置页眉页脚 html转word

itext操作word 设置页眉页脚 html转word

时间:2022-02-28 12:49:30

相关推荐

itext操作word 设置页眉页脚 html转word

这两天学习了itext操作word生成可用的docx文档,以下是我翻阅网上资料最后的结果及相关记录,如下:

我的maven项目导入必要的itext依赖

<dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version></dependency><dependency><groupId>com.lowagie</groupId><artifactId>itext-rtf</artifactId><version>2.1.7</version></dependency>

创建 Document 设置了纸张 A4,设置了页边距 (90.0F, 90.0F, 72.0F, 72.0F)

设置了页眉,标题、内容、图片、页脚

tring path = "D:/WORKBENCH/word/test_"+System.currentTimeMillis()+".docx"; String logUrl = "D:/WORKBENCH/word/img/logo.png";Document document = new Document(PageSize.A4, 90.0F, 90.0F, 72.0F, 72.0F);RtfWriter2.getInstance(document,new FileOutputStream(new File(path)));document.open();//设置页眉,(左上角加了个logo)Image headerImage = Image.getInstance(logUrl);float width = headerImage.getWidth() * (15.0F / headerImage.getHeight());headerImage.scaleAbsolute(width,15.0F);headerImage.setAbsolutePosition(0,0);headerImage.setBorder(10);RtfHeaderFooter headerFooter = new RtfHeaderFooter(headerImage);headerFooter.setAlignment(headerFooter.ALIGN_LEFT);document.setHeader(headerFooter);//设置标题String title = "这是标题";Paragraph p = new Paragraph(title+"\n",new RtfFont("黑 体", 16.0F, Font.BOLD, Color.BLACK));p.setAlignment(Element.ALIGN_CENTER);document.add(p);//设置内容String content = "国内经济逐步恢复,市场需求扩大,加之春节临近,猪肉、鲜菜、鲜果价格可能出现季节性上涨,会一定程度加大价格上涨压力。" ;p = new Paragraph("\n"+content,contentFont);p.setAlignment(Element.ALIGN_LEFT);//设置段落缩进p.setIndentationLeft(30F);p.setIndentationRight(30F);//设置首行缩进p.setFirstLineIndent(20F);//段前断后间距//p.setSpacingAfter(10f);//p.setSpacingBefore(5F);//设置行间距p.setLeading(20F);document.add(p);//设置图片try {Image image = Image.getInstance("D:\\WORKBENCH\\word\\img\\123.png");image.setAlignment(Element.ALIGN_CENTER);// 设置图片对齐方式image.scaleAbsolute(200.0F, 200.0F);//设定显示尺寸//image.setAbsolutePosition(0, 0);//image.scalePercent(50);// 表示显示的大小为原尺寸的50%//image.scalePercent(25, 12);// 图像高宽的显示比例//image.setRotation(30);// 图像旋转一定角度document.add(image);} catch (Exception e) {e.printStackTrace();}//设置页脚String footerTxt = "特别说明:不代表任何立场。";Phrase phrase=new Phrase(footerTxt,new RtfFont("黑 体", 7F, Font.NORMAL, Color.BLACK));HeaderFooter footer = new HeaderFooter(phrase,false);footer.setAlignment(Rectangle.ALIGN_CENTER);document.setFooter(footer);document.close();

本次没有涉及到表格类型的生成,我也只匆匆看了几眼,网上针对这类的设置方法很多,后面有机会在补上。

以上是通用类型,我这边实际应用中,主要是通过html的文本内容转word文件,所以入参上调至为html文本输入。在通过 HTMLWorker.parseToList 解析元素,然后设置样式后再设置入Document中,当然也可以按自己的方法直接解析html文本后得到各项元素后再逐一设置,但是我图省事直接用HTMLWorker解析了,如你发现更好的方式,可以在评论区留言。

设置html内容入document中 如下:

String htmlContent = "<p>北国风光,千里冰封,万里雪飘。望长城内外,惟余莽莽;大河上下,顿失滔滔。山舞银蛇,原驰蜡象,欲与天公试比高。</p><p><img src=\"https://xxxxxxx/1.png\" alt=\"\" data-href=\"\" style=\"width: 100px;\"/></p><p>惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。一代天骄,成吉思汗,只识弯弓射大雕。俱往矣,数风流人物,还看今朝。</p>";StyleSheet ss = new StyleSheet();ArrayList htmlList = HTMLWorker.parseToList(new StringReader(htmlContent),ss);for (int i = 0; i < htmlList.size(); i++) {Element element = (Element) htmlList.get(i);ArrayList list = element.getChunks();if(list!=null &&list.size()>0){for (int i1 = 0; i1 < list.size(); i1++) {JSONObject object = JSON.parseObject(JSON.toJSONString(list.get(i1)));if(object.get("image")!=null){JSONObject object1 = object.getJSONObject("image");String url = object1.getString("url");image = Image.getInstance(url);image.setAlignment(Element.ALIGN_CENTER);// 设置图片对齐方式image.scaleAbsolute(200.0F, 200.0F);//设定显示尺寸if(list.size()==1){//换行显示document.add(image);}else{//不换行显示Paragraph content = new Paragraph();content.add(image);document.add(content);}}else{String text1 = object.getString("content");Paragraph paragraph2 = new Paragraph(text1,new RtfFont("黑 体", 10F, Font.NORMAL, Color.BLACK));//设置文字内容和字体及大小paragraph2.setAlignment(Element.ALIGN_LEFT);//设置对齐方式paragraph2.setFirstLineIndent(20F);//设置首行缩进paragraph2.setLeading(20);//设置行距document.add(paragraph2);}}}}

3月10日 更新

使用过程中发现生成的word文档在macOS系统打开无法查看页眉插入的图片,可能是兼容性问题,未找到完美的解决办法,只能不在页眉添加图片,改为在内容左上角添加图片,暂时解决logo不显示的问题。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。