itext使用rtf格式生成word,使用image为页眉
程序员文章站
2022-07-04 08:34:35
...
起因:
在生成word文档时,一般都要求生成固定的页眉。页眉,即可以是文字也可以图片。对于程序员来说,图片可以简化开发的复杂度,对于用户来说可以丰富页眉的样式。于是我尝试使用itext生成rtf格式来获得包含图片页眉的word文档。
尝试1:
直接使用document.add(Image),可以看到图片在文本内,就算使用Image.setAbsolutePosition(),图片的位置仍然没有变化。
尝试2:
使用new HeaderFooter(Phrase,false)。貌似可以达到预期效果,但是你一看代码,就知道这是以代码的复杂性为代价的,而且会额外的多处两个回车符。
尝试3:
使用 com.lowagie.text.rtf.headerfooter.RtfHeaderFooter。终于达到预期效果了。
package org.study.itext.rtf; import java.awt.Color; import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowagie.text.Font; import com.lowagie.text.HeaderFooter; import com.lowagie.text.Image; import com.lowagie.text.PageSize; import com.lowagie.text.Paragraph; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.rtf.RtfWriter2; import com.lowagie.text.rtf.headerfooter.RtfHeaderFooter; /** * @blog http://reymont.iteye.com/ * @author reymont.li * @version create time:2011-7-21 下午04:02:59 */ public class RtfWithImageHeader { public static void main(String[] args) { test1(); test2(); test3(); } public static void test1(){ Document document1 = new Document(PageSize.A4, 36, 36, 100, 36); try { RtfWriter2.getInstance( document1, new FileOutputStream("resource/RtfWithImageHeader1.doc")); Image headerImage = Image.getInstance("resource/reymont.png"); BaseFont bfChinese = BaseFont.createFont("resource/STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); document1.open(); document1.add(headerImage); Font topFont = new Font(bfChinese, 24, Font.NORMAL, Color.RED); Paragraph para = new Paragraph("这是个将图片作为Word页眉的例子!",topFont); document1.add(para); } catch (Exception e) { e.printStackTrace(); } document1.close(); } public static void test2(){ Document document2 = new Document(PageSize.A4, 36, 36, 100, 36); try { RtfWriter2 writer = RtfWriter2.getInstance( document2, new FileOutputStream("resource/RtfWithImageHeader2.doc")); BaseFont bfChinese = BaseFont.createFont("resource/STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); document2.open(); Font topFont1 = new Font(bfChinese, 10, Font.NORMAL, Color.BLUE); Paragraph headerPara1 = new Paragraph("@blog http://reymont.iteye.com/", topFont1); Paragraph headerPara2 = new Paragraph("@author reymont.li", topFont1); Paragraph headerPara3 = new Paragraph("@MSN reymont.li@hotmail.com", topFont1); Paragraph headerPara = new Paragraph(); headerPara.add(headerPara1); headerPara.add(headerPara2); headerPara.add(headerPara3); HeaderFooter header = new HeaderFooter(headerPara, false); writer.setHeader(header); document2.add(header); Font topFont2 = new Font(bfChinese, 24, Font.NORMAL, Color.RED); Paragraph para = new Paragraph("这是个将图片作为Word页眉的例子!",topFont2); document2.add(para); } catch (Exception e) { e.printStackTrace(); } document2.close(); } public static void test3(){ Document document3 = new Document(PageSize.A4, 36, 36, 100, 36); try { RtfWriter2 writer = RtfWriter2.getInstance( document3, new FileOutputStream("resource/RtfWithImageHeader3.doc")); document3.open(); Image headerImage = Image.getInstance("resource/reymont.png"); RtfHeaderFooter header = new RtfHeaderFooter(headerImage); writer.setHeader(header); BaseFont bfChinese = BaseFont.createFont("resource/STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); Font topFont = new Font(bfChinese, 24, Font.NORMAL, Color.RED); Paragraph para = new Paragraph("这是个将图片作为Word页眉的例子!",topFont); document3.add(para); } catch (Exception e) { e.printStackTrace(); } document3.close(); } }
相关资源:
- itext-2.0.8.jar
- STSONG.TTF在C:\WINDOWS\Fonts中