精华内容
下载资源
问答
  • java生成rtf文档,跟word文档差不多
  • 核心java类 博文链接:https://3ge.iteye.com/blog/1883818
  • java实现 写RTF文件

    2011-07-26 16:39:44
    java实现 写RTF文件java实现 写RTF文件java实现 写RTF文件
  • NULL 博文链接:https://hnhhshun-126-com.iteye.com/blog/713411
  • JAVA解析RTF 文件

    千次阅读 2016-09-14 17:35:38
    rtf文件 也称富文本格式(Rich Text Format, 一般简称为RTF),意为多文本格式是由微软公司开发的跨平台文档格式。大多数的文字处理软件都能读取和保存RTF文档。rtf是一种非常流行的文件结构,很多文字编辑器都...

    rtf文件
    也称富文本格式(Rich Text Format, 一般简称为RTF),意为多文本格式是由微软公司开发的跨平台文档格式。大多数的文字处理软件都能读取和保存RTF文档。rtf是一种非常流行的文件结构,很多文字编辑器都支持它,vb等开发工具甚至还提供了richtxtbox的控件。
    通过java进行读取操作时,需要注意的是项目和文件的编码格式问题,本次测试的项目环境编码为UTF-8, 而RTF 读取的字节数组的编码为 ISO-8859-1 ,输出字符串使用的编码格式为 GBK。

      首先通过Word 等文本编辑软件进行编辑 RTF 文档
      ![这里写图片描述](https://img-blog.csdn.net/20160914174615971)
    

    通过代码解析RTF 文件并打印结果

     /**
     * Project: optdata
     * Package: rtf
     * FileName: SelfTest.java
     */
    package rtf;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    import javax.swing.text.BadLocationException;
    import javax.swing.text.DefaultStyledDocument;
    import javax.swing.text.rtf.RTFEditorKit;
    
    /**
     * @description 读取 RTF 文件内容
     * @author LingeringNight  
     *
     */
    public class SelfTest {
    
        /**
         * @description  构造函数
         */
        public SelfTest() {
        }
    
    
        /**
         * @description 从rtf文件中读取内容,使用java 内置函数对rtf 进行解析
         * @param filePath
         * @return
         */
        public static String getTextFromRtf(String filePath) {
            String result = null;
            File file = new File(filePath);
            try {
                DefaultStyledDocument styledDoc = new DefaultStyledDocument();
                // 创建文件输入流
                InputStream streamReader = new FileInputStream(file);
                new RTFEditorKit().read(streamReader, styledDoc, 0);
                //以 ISO-8859-1的编码形式获取字节byte[], 并以 GBK 的编码形式生成字符串
                result = new String(styledDoc.getText(0, styledDoc.getLength()).getBytes("ISO8859-1"),"GBK");
            } catch (IOException e) {
                e.printStackTrace();
            } catch (BadLocationException e) {
                e.printStackTrace();
            }
            return result;
        }
    
    
        public static void main(String[] args) throws IOException {
            String result = getTextFromRtf("D:\\temp\\china.rtf");
            System.out.println(result);
        }
    }
    

    输出结果:
    这里写图片描述

    展开全文
  • Java生成PDF文件(Itext篇)

    千次阅读 2018-08-15 18:14:24
    在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好的解决了B/S系统的...

    在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题。

    iText简介

    iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。

    一、关于Itext的安装

    IText的安装非常方便,在http://itextpdf.com/ 网站上下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。本次示例所使用的jar包有三个。

    下载地址:https://pan.baidu.com/s/1VO4J74BK5m7eRLf73KN-4Q

    二、项目搭建。

    本示例使用SSM架构,具体项目搭建流程请访问博客查看:https://blog.csdn.net/Soulmate_Min

    三、构建代码

    首先,将下载好的jar包导入项目,将jar包Build Path。

    1.写测试类:本示例创建class名为GetReportController

    2.添加两张图片,一张为LOGO,一张为水印图片。作为备用。

    3.测试类代码展示:

           代码如下:

    package com.gcx.test.controller;
    
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.http.HttpServletRequest;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import com.gcx.test.util.NewCreditReportUtil;
    
    @Controller
    @RequestMapping("/CreditReporterController")
    
    public class GetReportController {
    	
    	@RequestMapping("/getreport")
    	@ResponseBody
    	public String getreport(String corpname,HttpServletRequest request) throws Exception{
    		//报告准备工作
    		
    		//生成的PDF报告编号
    		String reportNo = "GCX-2"+System.currentTimeMillis();
    		//PDF文件名称
    		String pdfFileName = reportNo + ".pdf";
    		//水印图片地址
    		String watermarkFilePath = request.getSession().getServletContext().getRealPath("/images/watermark.png");
    		//公司LOGO地址
    		String reportLogoFilePath = request.getSession().getServletContext().getRealPath("/images/credit_report_logo.png");
    		
    		//定义一个Map,将生成的PDF需要的参数填入Map, Map将作为参数传到PDF模板中。
    		Map<String, Object> NewCorpReportMap=new  HashMap<>();
    		NewCorpReportMap.put("reportLogoFilePath", reportLogoFilePath);
    		NewCorpReportMap.put("reportNo", reportNo);
    		NewCorpReportMap.put("watermarkFilePath", watermarkFilePath);
    		NewCorpReportMap.put("corpname", corpname);
    		
    		//调取PDF工具类中的方法,将Map参数传入。
    		NewCreditReportUtil.generateDeepthCreditReport(NewCorpReportMap);
    		String s1 = "C://Users//sungm//Desktop//Test" + pdfFileName;
    		//给文件加水印
    		NewCreditReportUtil.addPdfMark("C:/Users/sungm/Desktop/Test/GCX-creditreport-template.pdf", s1, NewCorpReportMap.get("watermarkFilePath").toString());
    		return reportNo;
    	}
    }
    

    4.生成PDF所需工具类展示:

    /**
     * 用iText生成PDF文档需要5个步骤:
     * 
     * ①建立com.lowagie.text.Document对象的实例。
     * Document document = new Document(); 
     * 
     * ②建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
     * PDFWriter.getInstance(document, new FileOutputStream("Helloworld.PDF")); 
     * 
     * ③打开文档。
     * document.open(); 
     * 
     * ④向文档中添加内容。
     * document.add(new Paragraph("Hello World")); 
     * 
     * ⑤关闭文档。
     * document.close(); 
     *
     */

    添加水印方法:

    paragraph格式:

    居中无边框的cell:

    不居中无边框的cell:

    居中有边框的cell:

    居中有边框的cell:

    对doc文件添加页眉页脚方法:

    设置字体:

    插入图片:

    首页--固定格式布局:本示例固定的格式,具体样式可以根据需求自己修改

    非空判断:

     

    完整工具类代码(包含以上所有示例):

    package com.gcx.test.util;
    
    import java.awt.Color;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Map;
    
    import com.lowagie.text.Document;
    import com.lowagie.text.DocumentException;
    import com.lowagie.text.Font;
    import com.lowagie.text.HeaderFooter;
    import com.lowagie.text.Image;
    import com.lowagie.text.Paragraph;
    import com.lowagie.text.Phrase;
    import com.lowagie.text.Rectangle;
    import com.lowagie.text.pdf.BaseFont;
    import com.lowagie.text.pdf.PdfContentByte;
    import com.lowagie.text.pdf.PdfPCell;
    import com.lowagie.text.pdf.PdfPTable;
    import com.lowagie.text.pdf.PdfReader;
    import com.lowagie.text.pdf.PdfStamper;
    import com.lowagie.text.pdf.PdfWriter;
    
    /**
     * 用iText生成PDF文档需要5个步骤:
     * 
     * ①建立com.lowagie.text.Document对象的实例。
     * Document document = new Document(); 
     * 
     * ②建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
     * PDFWriter.getInstance(document, new FileOutputStream("Helloworld.PDF")); 
     * 
     * ③打开文档。
     * document.open(); 
     * 
     * ④向文档中添加内容。
     * document.add(new Paragraph("Hello World")); 
     * 
     * ⑤关闭文档。
     * document.close(); 
     *
     */
    public class NewCreditReportUtil {
    	//定义静态变量,用于生成水印文件名称
    	private final static String RESULT_FILE = "C:/Users/sungm/Desktop/Test/GCX-creditreport-template.pdf";
    	
    	public static boolean generateDeepthCreditReport(Map<String, Object> NewCorpReportMap)
    			throws MalformedURLException, IOException, DocumentException {
    		
    		//①建立com.lowagie.text.Document对象的实例。
    		Document doc = new Document();
    		doc.setMargins(20, 20, 30, 30);
    		String fontPath = "C:/Users/sungm/Desktop/Test";
    		
    		//②建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
    		PdfWriter.getInstance(doc, new FileOutputStream(RESULT_FILE));
    		
    		// 设置中文字体
    		BaseFont fontChinese = BaseFont.createFont(fontPath + "/simfang.ttf", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
    		Font chinese = new Font(fontChinese, 10, Font.NORMAL);
    		
    		// 添加页眉页脚
    		String headertitle = "*****报告" + "         " + "*******";
    		addheaderandfooter(doc, chinese, headertitle);
    		
    		//③打开文档。
    		doc.open();
    		
    		// 18.0F是字体大小,0表示字体倾斜度, font.setStyle(1); 0:无变化1:加粗;2:斜体...
    		// font.setFamily("微软雅黑"); // 设置字体
    		Font myfont  = setfont(fontPath + "/msyh.ttf", 13.0F, 0, Color.BLACK, 0);// 基本字体
    		//Font myfont1 = setfont(fontPath + "/msyh.ttf", 36.0F, 0, Color.BLACK, 1);// 标头字体(一级字体)
    		//Font myfont2 = setfont(fontPath + "/msyh.ttf", 27.0F, 0, Color.BLACK, 1);// 标头字体(二级字体)
    		Font myfont3 = setfont(fontPath + "/msyh.ttf", 18.0F, 0, Color.BLACK, 1);// 标头字体(三级字体)
    		//Font myfont4 = setfont(fontPath + "/msyh.ttf", 13.0F, 0, Color.BLACK, 1);// 标头字体(四级字体)
    		//Font myfont5 = setfont(fontPath + "/msyh.ttf", 12.0F, 0, Color.BLACK, 0);// 标头字体(五级字体)
    		
    		// 初始化pdf基本功能性文本
    		Image image = null;
    		PdfPTable table;
    		PdfPCell cell = null;
    		Paragraph paragraph = null;
    		
    		// 准备工作结束,进行文档内容填充:
    		// 添加公司logo图片
    		table = new PdfPTable(1);
    		String picpath = NewCorpReportMap.get("reportLogoFilePath").toString();
    		addpicture(table, image, picpath, cell, doc);
    		
    		// 添加报告信息
    		firstpage(cell, table, paragraph, NewCorpReportMap.get("corpname").toString(), "企业信用报告",
    				NewCorpReportMap.get("reportNo").toString(), myfont, myfont3, doc);
    		
    		// 第二页 (固定死页面)
    		doc.newPage();
    		doc.add(new Paragraph("       ", myfont));
    		paragraph = new Paragraph("报告说明", myfont3);
    		paragraph.setAlignment(1);
    		doc.add(paragraph);
    		doc.add(new Paragraph("       ", myfont));
    
    		geshi1(new Paragraph("1. 内容1",myfont), doc);
    		geshi1(new Paragraph("2. 内容2", myfont), doc);
    		geshi1(new Paragraph("3. 内容3", myfont), doc);
    		geshi1(new Paragraph("4. 内容4", myfont), doc);
    
    		// 第三页 报告摘要,每页空2行留给页眉
    		doc.newPage();
    		doc.add(new Paragraph("       ", myfont));
    		doc.add(new Paragraph("       ", myfont));
    
    		doc.close();
    		return false;
    	}
    
    	/**
    	 * 给pdf文件添加水印
    	 * 
    	 * @param InPdfFile
    	 *            要加水印的原pdf文件路径
    	 * @param outPdfFile
    	 *            加了水印后要输出的路径
    	 * @param object
    	 *            水印图片路径
    	 * @param pageSize
    	 *            原pdf文件的总页数(该方法是我当初将数据导入excel中然后再转换成pdf所以我这里的值是用excel的行数计算出来的,
    	 *            如果不是我这种可以 直接用reader.getNumberOfPages()获取pdf的总页数)
    	 * @throws Exception
    	 */
    	public static void addPdfMark(String InPdfFile, String outPdfFile, String readpicturepath) throws Exception {
    		PdfReader reader = new PdfReader(InPdfFile);
    		int pageSize = reader.getNumberOfPages();
    		PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(outPdfFile));
    		Image img = Image.getInstance(readpicturepath);// 插入水印
    		img.setAbsolutePosition(0, 0);
    		for (int i = 1; i <= pageSize; i++) {
    			PdfContentByte under = stamp.getUnderContent(i);
    			under.addImage(img);
    		}
    		stamp.close();// 关闭
    		File tempfile = new File(InPdfFile);
    		if (tempfile.exists()) {
    			tempfile.delete();
    		}
    	}
    
    	// paragraph的格式
    	public static void geshi1(Paragraph paragraph, Document doc) throws DocumentException {// 段落的格式
    		paragraph.setIndentationLeft(30);
    		paragraph.setIndentationRight(30);
    		paragraph.setFirstLineIndent(20f);
    		paragraph.setSpacingAfter(10f);
    		paragraph.setSpacingBefore(10f);
    		doc.add(paragraph);
    	}
    
    	// 居中无边框的cell
    	public static void geshi2(PdfPCell cell, PdfPTable table) throws DocumentException {// 表格的格式
    		cell.setBorder(PdfPCell.NO_BORDER);
    		cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
    		cell.setVerticalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell);
    	}
    
    	// 不居中无边框的cell
    	public static void geshi12(PdfPCell cell, PdfPTable table) throws DocumentException {// 表格的格式
    		cell.setBorder(PdfPCell.NO_BORDER);
    		table.addCell(cell);
    	}
    
    	// 居中有边框的cell
    	public static void geshi22(PdfPCell cell, PdfPTable table) throws DocumentException {// 表格的格式
    		cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
    		cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
    		cell.setVerticalAlignment(PdfPCell.ALIGN_CENTER);
    		table.addCell(cell);
    	}
    
    	// 居中有边框的cell
    	public static void geshi32(PdfPCell cell, PdfPTable table) throws DocumentException {// 表格的格式
    		cell.setColspan(3);
    		cell.setBorder(0);
    		table.addCell(cell);
    	}
    
    	// 对doc文件添加页眉页脚方法
    	public static void addheaderandfooter(Document doc, Font chinese, String headertitle) {
    		// 设置页眉页脚方法
    		/**
    		 * HeaderFooter的第2个参数为非false时代表打印页码 页眉页脚中也可以加入图片,并非只能是文字
    		 */
    
    		HeaderFooter header = new HeaderFooter(new Phrase(headertitle, chinese), false);
    		header.setBorder(Rectangle.NO_BORDER);
    		header.setBorder(Rectangle.BOTTOM);
    		header.setAlignment(1);
    		header.setBorderColor(Color.red);
    		doc.setHeader(header);
    
    		HeaderFooter footer = new HeaderFooter(new Phrase("第-", chinese), new Phrase("-页", chinese));
    		/**
    		 * 0是靠左 1是居中 2是居右
    		 */
    		footer.setAlignment(1);
    		footer.setBorderColor(Color.red);
    		footer.setBorder(Rectangle.NO_BORDER);
    		doc.setFooter(footer);
    
    		/**
    		 * 页眉页脚的设置一定要在open前设置好
    		 */
    	}
    
    	// 设置字体
    	public static Font setfont(String fonttype, float fontsize, int fontflag, Color fontcolor, int fontstyle)
    			throws DocumentException, IOException {
    		BaseFont baseFont5 = BaseFont.createFont(fonttype, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    		Font font = new Font(baseFont5, fontsize, fontflag);
    		font.setColor(fontcolor);
    		if (fontstyle != 0) {// 如果传参为0不设置字体
    			font.setStyle(fontstyle);
    		}
    		return font;
    	}
    
    	// 插入图片
    	public static void addpicture(PdfPTable table, Image image, String picpath, PdfPCell cell, Document doc)
    			throws MalformedURLException, IOException, DocumentException {
    		image = Image.getInstance(picpath);
    		cell = new PdfPCell(image);
    		geshi2(cell, table);
    		doc.add(table);
    	}
    
    	// 首页--固定格式布局
    	public static void firstpage(PdfPCell cell, PdfPTable table, Paragraph paragraph, String corpname,
    			String reporttype, String reportNo, Font myfont, Font myfont3, Document doc) throws DocumentException {
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
    		String newyear = sdf.format(new Date());
    
    		paragraph = new Paragraph(corpname + newyear, myfont3);// 公司名
    		paragraph.setAlignment(1);
    		doc.add(paragraph);
    
    		paragraph = new Paragraph("企业信用报告", myfont3);// 信用报告类型
    		paragraph.setAlignment(1);
    		doc.add(paragraph);
    
    		doc.add(new Paragraph("       ", myfont));
    		doc.add(new Paragraph("       ", myfont));
    		doc.add(new Paragraph("       ", myfont));
    		doc.add(new Paragraph("       ", myfont));
    		doc.add(new Paragraph("       ", myfont));
    		doc.add(new Paragraph("       ", myfont));
    
    		table = new PdfPTable(2);
    		cell = new PdfPCell(new Phrase("报告编号:" + reportNo, myfont));
    		cell.setBorder(PdfPCell.NO_BORDER);// Rectangle.NO_BORDER
    		table.addCell(cell);
    		cell = new PdfPCell(new Phrase("报告生成时间:" + sdf.format(new Date()), myfont));
    		cell.setBorder(PdfPCell.NO_BORDER);// Rectangle.NO_BORDER
    		table.addCell(cell);
    
    		cell = new PdfPCell(new Phrase("报告生成机构:*****有限公司", myfont));
    		cell.setBorder(PdfPCell.NO_BORDER);// Rectangle.NO_BORDER
    		table.addCell(cell);
    
    		cell = new PdfPCell(new Phrase("报告结论机构:******研究院", myfont));
    		cell.setBorder(PdfPCell.NO_BORDER);// Rectangle.NO_BORDER
    		table.addCell(cell);
    
    		doc.add(table);
    	}
    	//非空判断
    	public static String isnull(Object a) {
    		if (a != null && a != "" && a != "null" && a.toString() != "null") {
    			return a.toString();
    		} else {
    			return "";
    		}
    	}
    }
    

    完成后,启动项目测试功能是否存在问题:

    打开浏览器,在地址栏中访问接口:

    http://localhost:8080/test/CreditReporterController/getreport.do?corpname=*****有限公司

    访问成功后,返回文件路径:

    文件自动下载到桌面:

    打开PDF文件,查看格式是否正确:

    成功生成PDF文件。

    接口测试成功。

    展开全文
  • 新建一个文本文档,用记事本打开,设置编码为CHINESE_GB2312,另存为后缀为test.rtf文件,存在D盘,然后就可以用Word进行模板的编辑了,其中带有$$标识的字符串必须设置为“宋体”。 [code="java"] ...
    新建一个文本文档,用记事本打开,设置编码为CHINESE_GB2312,另存为后缀为test.rtf文件,存在D盘,然后就可以用Word进行模板的编辑了,其中带有$$标识的字符串必须设置为“宋体”。
    


    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.Map;

    import org.apache.log4j.Logger;

    public class RTFToWordUtil {

    private static Logger logger = Logger.getLogger(RTFToWordUtil.class);

    /**
    * 字符串转换为rtf编码
    *
    * @param content
    * @return
    */
    public String strToRtf(String content) {

    StringBuffer sb = new StringBuffer("");
    try {
    char[] digital = "0123456789ABCDEF".toCharArray();
    byte[] bs = null;
    bs = content.getBytes("GB2312");
    int bit;
    for (int i = 0; i < bs.length; i++) {
    bit = (bs[i] & 0x0f0) >> 4;
    sb.append("\\'");
    sb.append(digital[bit]);
    bit = bs[i] & 0x0f;
    sb.append(digital[bit]);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    return sb.toString();
    }

    /**
    * 替换文档的可变部分
    *
    * @param content 文档内容
    * @param key 标识
    * @param replacecontent 替换内容
    * @return
    */
    public String replaceRTF(String content, String key, String replacecontent) {
    String rc = strToRtf(replacecontent);

    String target = content.replace(key, rc);

    return target;
    }

    /**
    * 半角转为全角
    */
    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 new String(c);
    }

    /**
    * 替换模板
    * @param map 标识与替换内容
    * @param sourceFilePath 模板路径
    * @param targetFilePath 生成Word文档路径
    */
    public void rgModel(Map<String, String> map, String sourceFilePath, String targetFilePath) {

    /* 字节形式读取模板文件内容,将结果转为字符串 */
    String sourcecontent = "";
    InputStream ins = null;
    try {
    ins = new FileInputStream(sourceFilePath);
    byte[] b = new byte[1024];
    if (ins == null) {
    logger.info(RTFToWordUtil.class.getName()+":源模板文件不存在");
    }
    int bytesRead = 0;
    while (true) {
    bytesRead = ins.read(b, 0, 1024); // return final read bytes
    // counts
    if (bytesRead == -1) {// end of InputStream
    logger.info(RTFToWordUtil.class.getName()+":读取模板文件结束");
    break;
    }
    // convert to string using bytes
    sourcecontent += new String(b, 0, bytesRead);

    }
    } catch (Exception e) {
    e.printStackTrace();
    }

    /* 修改变化部分 */
    String targetcontent = "";
    int i = 0;
    for (String key : map.keySet()) {
    String value = map.get(key);
    if (i == 0) {
    targetcontent = replaceRTF(sourcecontent, key, value);
    } else {
    targetcontent = replaceRTF(targetcontent, key, value);
    }
    i++;
    }
    /* 结果输出保存到文件 */
    try {
    FileWriter fw = new FileWriter(targetFilePath,
    true);
    PrintWriter out = new PrintWriter(fw);

    if (targetcontent.equals("") || targetcontent == "") {
    out.println(sourcecontent);
    } else {
    out.println(targetcontent);
    }
    out.close();
    fw.close();
    logger.info(RTFToWordUtil.class.getName()+":生成文件 " + targetFilePath + " 成功");
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    public static void main(String[] args) {

    RTFToWordUtil oRTF = new RTFToWordUtil();

    Map<String, String> map = new HashMap<String, String>();
    map.put("$timetop$", "2008Y10M12D9H-2008Y10M12D6H");
    map.put("$info$", "idea");
    map.put("$idea$", "look");
    map.put("$advice$", "我们参照检\n验药品的方法");
    map.put("$infosend$", "we");

    oRTF.rgModel(map, "d:\\test.rtf", "d:\\test.doc");
    }

    }


    参考文档:
    [url]http://www.iteye.com/problems/14849[/url]
    [url]http://superzhaoxi.iteye.com/blog/621977[/url]
    展开全文
  • Java生成PDF文件

    2020-04-15 09:41:07
    最近项目中使用到Java实现导出PDF文件,经过一番参考研究最终决定使用itextpdf来实现,当然也可以参考 PDF Java类库:Spire.PDF for Java(https://www.e-iceblue.cn/spirepdfjava/create-pdf-in-java.html)。...

    最近项目中使用到Java实现导出PDF文件,经过一番参考研究最终决定使用itextpdf来实现,当然也可以参考 PDF Java类库:Spire.PDF for Java(https://www.e-iceblue.cn/spirepdfjava/create-pdf-in-java.html)。本文是使用第一种来实现的。

    iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
    首先如果是maven项目的话需要添加2个依赖,普通项目的话在官网(http://itextpdf.com/)下载对应的2个jar包加入即可。LZ是maven项目,添加依赖如下:

    1.  <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
    2.     <dependency>
    3.       <groupId>com.itextpdf</groupId>
    4.       <artifactId>itextpdf</artifactId>
    5.       <version>5.5.13</version>
    6.     </dependency>
    7.     <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
    8.     <dependency>
    9.       <groupId>com.itextpdf</groupId>
    10.       <artifactId>itext-asian</artifactId>
    11.       <version>5.2.0</version>
    12. </dependency>

    建立第一个PDF文档:
    一、主要步骤(5个):

    1.新建document对象,可通过一下三种任意一种
    Document document =new Document(); // 默认页面大小是A4
    Document document =new Document(PageSize.A4); // 指定页面大小为A4
    Document document =new Document(PageSize.A4,50,50,30,20); // 指定页面大小为A4,且自定义页边距(marginLeft、marginRight、marginTop、marginBottom)
    其中页面大小PageSize也可自定义大小,例:new Document(new Rectangle(400, 500));

    2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
    创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径
    PdfWriter writer =PdfWriter.getInstance(document,new FileOutputStream(filePath));

    3.打开文档
    写入数据之前要打开文档
    document.open();

    4.向文档中添加内容
    document.add();

    5.关闭文档
    document.close();
     

    二、字体

    新建一个字体,iText的方法
    BaseFont bfChinese;
    bfChinese=BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//jar包
    bfChinese=BaseFont.createFont("C:/Windows/Fonts/msyh.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); //系统字体,其实5.0版以后的iText加入字体还是很方便的。
    STSongStd-Light 是字体,在jar 中以property为后缀
    UniGB-UCS2-H 是编码,在jar 中以cmap为后缀
    H 代表文字版式是横版,相应的 V 代表竖版

    字体设置
    参数一:新建好的字体;参数二:字体大小,参数三:字体样式,多个样式用“|”分隔
    Font topfont = new Font(bfChinese,14,Font.BOLD);
    Font textfont =new Font(bfChinese,10,,Font.BOLD|Font.UNDERLINE);
     

    三、添加文本的对象:块、短句和段落

    Chunk:块(Chunk)是能被添加到文档的文本的最小单位。
    Phrase:短句(Phrase)是一系列以特定间距(两行之间的距离)作为参数的块。
    Paragraph:段落是一系列块和(或)短句。同短句一样,段落有确定的间距。用户还可以指定缩排;在边和(或)右边保留一定空白,段落可以左对齐、右对齐和居中对齐。添加到文档中的每一个段落将自动另起一行。
     

    四、步骤2书写器创建之后,步骤3文档打开之前
    以下项只可在文档关闭状态执行 ,包括水印、页眉、页脚

    水印
    Watermark内部类,需要继承 PdfPageEventHelper类
    writer.setPageEvent(new Watermark());

    页眉/页脚
    iText5中并没有之前版本HeaderFooter对象设置页眉和页脚,可以利用PdfPageEvent来完成页眉页脚的设置工作。
    PdfPageEvent提供了几个pdf在创建时的事件,页眉页脚就是在每页加载完写入的。
    每一页加个页码还是很简单的,但是总页码就麻烦了,iText是流模式的写入内容,只有写到最后,才能知道有多少页,那么显示总页数就麻烦了,不过麻烦不代表不可能。
    其实iText仅在调用释放模板方法后才将PdfTemplate写入到OutputStream中,否则对象将一直保存在内存中,直到关闭文档。
    所以我们可以在最后关闭文档前,使用PdfTemplate写入总页码。可以理解成先写个占位符,然后统一替换。
     

    五、设置文档属性  (与文档是否打开没有关联)

    document.addTitle("Title@PDF-Java");// 标题
    document.addAuthor("Author@umiz");// 作者
    document.addSubject("Subject@iText pdf sample");// 主题
    document.addKeywords("Keywords@iTextpdf");// 关键字
    document.addCreator("Creator@umiz`s");// 创建者
     

    六、文档内容

    段落Paragraph
    Paragraph pt=new Paragraph(name,headfont);//设置字体样式
    pt.setAlignment(1);//设置文字居中 0靠左   1,居中     2,靠右
    pt.setIndentationLeft(12);// 左缩进  
    pt.setIndentationRight(12);// 右缩进  
    pt.setFirstLineIndent(24);// 首行缩进
    paragraph.setLeading(20f); //行间距
    paragraph.setSpacingBefore(5f); //设置段落上空白
    paragraph.setSpacingAfter(10f); //设置段落下空白

    表格table
    Table table =new Table(3);//括号参数表示列
    int width[] = {10,45,45};//设置每列宽度比例  
    table.setWidths(width);  
    table.setWidth(95);//占页面宽度比例
    table.setAlignment(Element.ALIGN_CENTER);//居中   
    table.setAutoFillEmptyCells(true);//自动填满      
    table.setBorderWidth((float)0.1);//表格边框线条宽度   
    table.setPadding(1);//边距:单元格的边线与单元格内容的边距  
    table.setSpacing(0);//间距:单元格与单元格之间的距离
    table.addCell(new Paragraph("name"),textfont));//添加单元格内容
    table.endHeaders();//每页都会显示表头

    单元格内容样式cell 
    Cell cell=new Cell(new Paragraph("序号",keyfont));
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中  
    table.addCell(cell);

    表格嵌套
      最外层表格
    PdfPTable table =new PdfPTable(3);
    table.setTotalWidth(300);
    table.setLockedWidth(true);

    PdfPCell cell;
    cell =new PdfPCell(new Phrase("Table 5"));
    cell.setColspan(3);
    cell.setBorderWidth(0);//设置表格的边框宽度为0
    table.addCell(cell);

      嵌套表格
    PdfPTable celltable =new PdfPTable(2);
    cell =new PdfPCell(celltable);
    cell.setRowspan(2);
    cell.setBorderWidth(1);//设置表格的边框宽度为1
    cell.setPadding(10);//设置表格与上一个表格的填充为10
    table.addCell(cell);

    直线 
    Paragraph p1 =new Paragraph();  
    p1.add(new Chunk(new LineSeparator()));  
    doc.add(p1); 

    点线 
    Paragraph p2 =new Paragraph();  
    p2.add(new Chunk(new DottedLineSeparator()));

    超链接
    Anchor anchor =new Anchor("this is anchor");

    定位
    点击后,跳到topline的位置
    Anchor gotop =new Anchor("go top");
    gotop.setReference("#us");

    添加图片
    Image image =Image.getInstance(imgPath);
    image.setAlignment(Image.ALIGN_CENTER);
    image.scalePercent(40);//依照比例缩放

    Demo

     

    1. package com.soco.erp;
    2.  
    3. import com.itextpdf.text.*;
    4. import com.itextpdf.text.pdf.*;
    5. import com.itextpdf.text.pdf.draw.DottedLineSeparator;
    6. import com.itextpdf.text.pdf.draw.LineSeparator;
    7.  
    8. import java.io.File;
    9. import java.io.FileOutputStream;
    10.  
    11. public class PdfReport {
    12.  
    13.     // main测试
    14.     public static void main(String[] args) throws Exception {
    15.         try {
    16.             // 1.新建document对象
    17.             Document document = new Document(PageSize.A4);// 建立一个Document对象
    18.  
    19.             // 2.建立一个书写器(Writer)与document对象关联
    20.             File file = new File("D:\\PDFDemo.pdf");
    21.             file.createNewFile();
    22.             PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
    23.             writer.setPageEvent(new Watermark("HELLO ITEXTPDF"));// 水印
    24.             writer.setPageEvent(new MyHeaderFooter());// 页眉/页脚
    25.  
    26.             // 3.打开文档
    27.             document.open();
    28.             document.addTitle("Title@PDF-Java");// 标题
    29.             document.addAuthor("Author@umiz");// 作者
    30.             document.addSubject("Subject@iText pdf sample");// 主题
    31.             document.addKeywords("Keywords@iTextpdf");// 关键字
    32.             document.addCreator("Creator@umiz`s");// 创建者
    33.  
    34.             // 4.向文档中添加内容
    35.             new PdfReport().generatePDF(document);
    36.  
    37.             // 5.关闭文档
    38.             document.close();
    39.         } catch (Exception e) {
    40.             e.printStackTrace();
    41.         }
    42.     }
    43.  
    44.     // 定义全局的字体静态变量
    45.     private static Font titlefont;
    46.     private static Font headfont;
    47.     private static Font keyfont;
    48.     private static Font textfont;
    49.     // 最大宽度
    50.     private static int maxWidth = 520;
    51.     // 静态代码块
    52.     static {
    53.         try {
    54.             // 不同字体(这里定义为同一种字体:包含不同字号、不同style)
    55.             BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
    56.             titlefont = new Font(bfChinese, 16, Font.BOLD);
    57.             headfont = new Font(bfChinese, 14, Font.BOLD);
    58.             keyfont = new Font(bfChinese, 10, Font.BOLD);
    59.             textfont = new Font(bfChinese, 10, Font.NORMAL);
    60.  
    61.         } catch (Exception e) {
    62.             e.printStackTrace();
    63.         }
    64.     }
    65.  
    66.     // 生成PDF文件
    67.     public void generatePDF(Document document) throws Exception {
    68.  
    69.         // 段落
    70.         Paragraph paragraph = new Paragraph("美好的一天从早起开始!", titlefont);
    71.         paragraph.setAlignment(1); //设置文字居中 0靠左   1,居中     2,靠右
    72.         paragraph.setIndentationLeft(12); //设置左缩进
    73.         paragraph.setIndentationRight(12); //设置右缩进
    74.         paragraph.setFirstLineIndent(24); //设置首行缩进
    75.         paragraph.setLeading(20f); //行间距
    76.         paragraph.setSpacingBefore(5f); //设置段落上空白
    77.         paragraph.setSpacingAfter(10f); //设置段落下空白
    78.  
    79.         // 直线
    80.         Paragraph p1 = new Paragraph();
    81.         p1.add(new Chunk(new LineSeparator()));
    82.  
    83.         // 点线
    84.         Paragraph p2 = new Paragraph();
    85.         p2.add(new Chunk(new DottedLineSeparator()));
    86.  
    87.         // 超链接
    88.         Anchor anchor = new Anchor("baidu");
    89.         anchor.setReference("www.baidu.com");
    90.  
    91.         // 定位
    92.         Anchor gotoP = new Anchor("goto");
    93.         gotoP.setReference("#top");
    94.  
    95.         // 添加图片
    96.         Image image = Image.getInstance("https://img-blog.csdn.net/20180801174617455?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzg0ODcxMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70");
    97.         image.setAlignment(Image.ALIGN_CENTER);
    98.         image.scalePercent(40); //依照比例缩放
    99.  
    100.         // 表格
    101.         PdfPTable table = createTable(new float[] { 40, 120, 120, 120, 80, 80 });
    102.         table.addCell(createCell("美好的一天", headfont, Element.ALIGN_LEFT, 6, false));
    103.         table.addCell(createCell("早上9:00", keyfont, Element.ALIGN_CENTER));
    104.         table.addCell(createCell("中午11:00", keyfont, Element.ALIGN_CENTER));
    105.         table.addCell(createCell("中午13:00", keyfont, Element.ALIGN_CENTER));
    106.         table.addCell(createCell("下午15:00", keyfont, Element.ALIGN_CENTER));
    107.         table.addCell(createCell("下午17:00", keyfont, Element.ALIGN_CENTER));
    108.         table.addCell(createCell("晚上19:00", keyfont, Element.ALIGN_CENTER));
    109.         Integer totalQuantity = 0;
    110.         for (int i = 0; i < 5; i++) {
    111.             table.addCell(createCell("起床", textfont));
    112.             table.addCell(createCell("吃午饭", textfont));
    113.             table.addCell(createCell("午休", textfont));
    114.             table.addCell(createCell("下午茶", textfont));
    115.             table.addCell(createCell("回家", textfont));
    116.             table.addCell(createCell("吃晚饭", textfont));
    117.             totalQuantity ++;
    118.         }
    119.         table.addCell(createCell("总计", keyfont));
    120.         table.addCell(createCell("", textfont));
    121.         table.addCell(createCell("", textfont));
    122.         table.addCell(createCell("", textfont));
    123.         table.addCell(createCell(String.valueOf(totalQuantity) + "件事", textfont));
    124.         table.addCell(createCell("", textfont));
    125.  
    126.         document.add(paragraph);
    127.         document.add(anchor);
    128.         document.add(p2);
    129.         document.add(gotoP);
    130.         document.add(p1);
    131.         document.add(table);
    132.         document.add(image);
    133.     }
    134.  
    135.  
    136. /**------------------------创建表格单元格的方法start----------------------------*/
    137.     /**
    138.      * 创建单元格(指定字体)
    139.      * @param value
    140.      * @param font
    141.      * @return
    142.      */
    143.     public PdfPCell createCell(String value, Font font) {
    144.         PdfPCell cell = new PdfPCell();
    145.         cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    146.         cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    147.         cell.setPhrase(new Phrase(value, font));
    148.         return cell;
    149.     }
    150.     /**
    151.      * 创建单元格(指定字体、水平..)
    152.      * @param value
    153.      * @param font
    154.      * @param align
    155.      * @return
    156.      */
    157.     public PdfPCell createCell(String value, Font font, int align) {
    158.         PdfPCell cell = new PdfPCell();
    159.         cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    160.         cell.setHorizontalAlignment(align);
    161.         cell.setPhrase(new Phrase(value, font));
    162.         return cell;
    163.     }
    164.     /**
    165.      * 创建单元格(指定字体、水平居..、单元格跨x列合并)
    166.      * @param value
    167.      * @param font
    168.      * @param align
    169.      * @param colspan
    170.      * @return
    171.      */
    172.     public PdfPCell createCell(String value, Font font, int align, int colspan) {
    173.         PdfPCell cell = new PdfPCell();
    174.         cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    175.         cell.setHorizontalAlignment(align);
    176.         cell.setColspan(colspan);
    177.         cell.setPhrase(new Phrase(value, font));
    178.         return cell;
    179.     }
    180.     /**
    181.      * 创建单元格(指定字体、水平居..、单元格跨x列合并、设置单元格内边距)
    182.      * @param value
    183.      * @param font
    184.      * @param align
    185.      * @param colspan
    186.      * @param boderFlag
    187.      * @return
    188.      */
    189.     public PdfPCell createCell(String value, Font font, int align, int colspan, boolean boderFlag) {
    190.         PdfPCell cell = new PdfPCell();
    191.         cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    192.         cell.setHorizontalAlignment(align);
    193.         cell.setColspan(colspan);
    194.         cell.setPhrase(new Phrase(value, font));
    195.         cell.setPadding(3.0f);
    196.         if (!boderFlag) {
    197.             cell.setBorder(0);
    198.             cell.setPaddingTop(15.0f);
    199.             cell.setPaddingBottom(8.0f);
    200.         } else if (boderFlag) {
    201.             cell.setBorder(0);
    202.             cell.setPaddingTop(0.0f);
    203.             cell.setPaddingBottom(15.0f);
    204.         }
    205.         return cell;
    206.     }
    207.     /**
    208.      * 创建单元格(指定字体、水平..、边框宽度:0表示无边框、内边距)
    209.      * @param value
    210.      * @param font
    211.      * @param align
    212.      * @param borderWidth
    213.      * @param paddingSize
    214.      * @param flag
    215.      * @return
    216.      */
    217.     public PdfPCell createCell(String value, Font font, int align, float[] borderWidth, float[] paddingSize, boolean flag) {
    218.         PdfPCell cell = new PdfPCell();
    219.         cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    220.         cell.setHorizontalAlignment(align);
    221.         cell.setPhrase(new Phrase(value, font));
    222.         cell.setBorderWidthLeft(borderWidth[0]);
    223.         cell.setBorderWidthRight(borderWidth[1]);
    224.         cell.setBorderWidthTop(borderWidth[2]);
    225.         cell.setBorderWidthBottom(borderWidth[3]);
    226.         cell.setPaddingTop(paddingSize[0]);
    227.         cell.setPaddingBottom(paddingSize[1]);
    228.         if (flag) {
    229.             cell.setColspan(2);
    230.         }
    231.         return cell;
    232.     }
    233. /**------------------------创建表格单元格的方法end----------------------------*/
    234.  
    235.  
    236. /**--------------------------创建表格的方法start------------------- ---------*/
    237.     /**
    238.      * 创建默认列宽,指定列数、水平(居中、右、左)的表格
    239.      * @param colNumber
    240.      * @param align
    241.      * @return
    242.      */
    243.     public PdfPTable createTable(int colNumber, int align) {
    244.         PdfPTable table = new PdfPTable(colNumber);
    245.         try {
    246.             table.setTotalWidth(maxWidth);
    247.             table.setLockedWidth(true);
    248.             table.setHorizontalAlignment(align);
    249.             table.getDefaultCell().setBorder(1);
    250.         } catch (Exception e) {
    251.             e.printStackTrace();
    252.         }
    253.         return table;
    254.     }
    255.     /**
    256.      * 创建指定列宽、列数的表格
    257.      * @param widths
    258.      * @return
    259.      */
    260.     public PdfPTable createTable(float[] widths) {
    261.         PdfPTable table = new PdfPTable(widths);
    262.         try {
    263.             table.setTotalWidth(maxWidth);
    264.             table.setLockedWidth(true);
    265.             table.setHorizontalAlignment(Element.ALIGN_CENTER);
    266.             table.getDefaultCell().setBorder(1);
    267.         } catch (Exception e) {
    268.             e.printStackTrace();
    269.         }
    270.         return table;
    271.     }
    272.     /**
    273.      * 创建空白的表格
    274.      * @return
    275.      */
    276.     public PdfPTable createBlankTable() {
    277.         PdfPTable table = new PdfPTable(1);
    278.         table.getDefaultCell().setBorder(0);
    279.         table.addCell(createCell("", keyfont));
    280.         table.setSpacingAfter(20.0f);
    281.         table.setSpacingBefore(20.0f);
    282.         return table;
    283.     }
    284. /**--------------------------创建表格的方法end------------------- ---------*/
    285. }

    页眉/页脚的定义实现类:

     

    1. package com.soco.erp;
    2.  
    3. import com.itextpdf.text.*;
    4. import com.itextpdf.text.pdf.*;
    5.  
    6. import java.io.IOException;
    7.  
    8. public class MyHeaderFooter extends PdfPageEventHelper {
    9.     // 总页数
    10.     PdfTemplate totalPage;
    11.     Font hfFont;
    12.     {
    13.         try {
    14.             hfFont = new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 8, Font.NORMAL);
    15.         } catch (DocumentException e) {
    16.             e.printStackTrace();
    17.         } catch (IOException e) {
    18.             e.printStackTrace();
    19.         }
    20.     }
    21.  
    22.     // 打开文档时,创建一个总页数的模版
    23.     public void onOpenDocument(PdfWriter writer, Document document) {
    24.         PdfContentByte cb =writer.getDirectContent();
    25.         totalPage = cb.createTemplate(30, 16);
    26.     }
    27.     // 一页加载完成触发,写入页眉和页脚
    28.     public void onEndPage(PdfWriter writer, Document document) {
    29.         PdfPTable table = new PdfPTable(3);
    30.         try {
    31.             table.setTotalWidth(PageSize.A4.getWidth() - 100);
    32.             table.setWidths(new int[] { 24, 24, 3});
    33.             table.setLockedWidth(true);
    34.             table.getDefaultCell().setFixedHeight(-10);
    35.             table.getDefaultCell().setBorder(Rectangle.BOTTOM);
    36.  
    37.             table.addCell(new Paragraph("我是页眉/页脚", hfFont));// 可以直接使用addCell(str),不过不能指定字体,中文无法显示
    38.             table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
    39.             table.addCell(new Paragraph("第" + writer.getPageNumber() + "页/", hfFont));
    40.             // 总页数
    41.             PdfPCell cell = new PdfPCell(Image.getInstance(totalPage));
    42.             cell.setBorder(Rectangle.BOTTOM);
    43.             table.addCell(cell);
    44.             // 将页眉写到document中,位置可以指定,指定到下面就是页脚
    45.             table.writeSelectedRows(0, -1, 50,PageSize.A4.getHeight() - 20, writer.getDirectContent());
    46.         } catch (Exception de) {
    47.             throw new ExceptionConverter(de);
    48.         }
    49.     }
    50.  
    51.     // 全部完成后,将总页数的pdf模版写到指定位置
    52.     public void onCloseDocument(PdfWriter writer,Document document) {
    53.         String text = "总" + (writer.getPageNumber()) + "页";
    54.         ColumnText.showTextAligned(totalPage, Element.ALIGN_LEFT, new Paragraph(text,hfFont), 2, 2, 0);
    55.     }
    56.  
    57. }

    加水印的实现类:

    package com.soco.erp;
     
    import com.itextpdf.text.Document;
    import com.itextpdf.text.Element;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.Phrase;
    import com.itextpdf.text.pdf.ColumnText;
    import com.itextpdf.text.pdf.GrayColor;
    import com.itextpdf.text.pdf.PdfPageEventHelper;
    import com.itextpdf.text.pdf.PdfWriter;
     
    public class Watermark extends PdfPageEventHelper {
        Font FONT = new Font(Font.FontFamily.HELVETICA, 30, Font.BOLD, new GrayColor(0.95f));
        private String waterCont;//水印内容
        public Watermark() {
     
        }
        public Watermark(String waterCont) {
            this.waterCont = waterCont;
        }
     
        @Override
        public void onEndPage(PdfWriter writer, Document document) {
            for(int i=0 ; i<5; i++) {
                for(int j=0; j<5; j++) {
                    ColumnText.showTextAligned(writer.getDirectContentUnder(),
                            Element.ALIGN_CENTER,
                            new Phrase(this.waterCont == null ? "HELLO WORLD" : this.waterCont, FONT),
                            (50.5f+i*350),
                            (40.0f+j*150),
                            writer.getPageNumber() % 2 == 1 ? 45 : -45);
                }
            }
        }

    }

    展开全文
  • 利用RTF模板生成WORD文件,把WORD文件转为PDF文件;解决FREEMARKER生成的WORD文件直接转PDF文件不成功的问题,解决乱码问题
  •   右键单击模板文件 -> compile Report 对模板进行编译,生成.jasper文件 导入需要的依赖 <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports <version>6.5.0 <groupId>org.olap4j ...
  • iText5实现Java生成PDF文件完整版

    万次阅读 多人点赞 2019-04-25 21:39:22
    最近项目中使用到Java实现导出PDF文件,经过一番参考研究最终决定使用itextpdf来实现,当然也可以参考 PDF Java类库:Spire.PDF for Java(https://www.e-iceblue.cn/spirepdfjava/create-pdf-in-java.html)。...
  • java解析读取.rtf格式文档

    千次阅读 2019-04-09 21:01:50
    rtf是开源格式,同时可通过Microsoft Office打开,那么怎么利用java读取.rtf格式的文档呢? package jichu.test_simple; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; ...
  • java动态生成pdf文件并下载 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助...
  • java生成pdf文件并打印

    万次阅读 2018-11-24 17:03:42
    一、前言  前几天,需要实现打印下载报表,经一番查找,选定iText--用于生成PDF文档的一个Java类库。...通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。  iText的安装非常方...
  • 使用Java抽取RTF思想

    千次阅读 2016-05-25 10:13:58
    1 什么RTF文件 也称富文本格式(Rich Text Format, 一般简称为RTF),意为多文本格式是由微软公司开发的跨平台文档格式。大多数的文字处理软件都能读取和保存RTF文档。[1] rtf是一种非常流行的文件结构,很多文字...
  • Java生成rtf格式文档

    千次阅读 2009-04-03 11:49:00
    package com.newbee.brooder;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import or
  • java,python等语言对于rft的处理很受限,rtf提供了很少的api供外部调用处理,但是对于docx我们却又很多api来处理,所以很多人会有需求将rtf批量转为docx的需求,接下来就来说说解决方案 查询资料可知,rtf格式文件...
  • 此应用程序是用PHP / Java开发的,可帮助您生成RTF文件,包括图像,表和列表。 在设计模式下使用CSS和脚本代码生成html文件非常有用。
  • RTF文件格式说明

    千次阅读 2019-04-15 08:25:31
    RTF是Rich TextFormat的缩写,意即多文本格式。这是一种类似DOC格式(Word文档)的文件,有很好的兼容性,使用Windows“附件”中的“写字板”就能打开并进行编辑。RTF是一种非常流行的文件结构,很多...一个RTF文件由...
  • rtf富文本 In this tutorial I will show you how to provide a dynamic RTF document on your website generated with data from your database. For this tutorial you will need Microsoft Word...
  • java生成word文件

    2018-11-15 11:04:29
     <artifactId>itext-rtf  <version>2.1.7      <groupId>com.itextpdf</groupId>  <artifactId>itext-asian  <version>5.2.0   2、后台代码 public static void main(String[] args) {  ...
  • 写在最前面,我总结出了很多互联网公司的...最近在做也导出试卷的功能,刚开始是导出为doc,可是导出来格式都有变化,最后说直接将word转为pdf,可是各种不稳定,各种报错、最后想到直接将文件写入pdf(参考:http:...
  • 记录一次用Java生成word文档的经验

    千次阅读 2019-02-21 15:15:18
    最近接到一个需求需要将学员的基本信息生成word格式的内容,word的格式如下图所示 开发的任务就是将学员的信息替换掉表格中的** 即可,感觉还蛮简单的。 相信大家以前做的最多的是Java和Excel的转换的功能比较多...
  • 利用RTFtemplate生成rtf报表

    千次阅读 2015-12-29 16:57:15
    通过向rtf插入特定类型的域字段,用来标记将会被报表引擎用实际数据或者逻辑替代的部分。 通常单一的值用:Mergefield代替。 循环和条件采用:bookmark替代。 RefTemplate底层采用了两类模板引擎: 第一类:...
  • Javartf(word) excel文件

    千次阅读 2010-04-06 09:37:00
    ExcelGenerate .java文件 这个文件中每个方法都有解释,好好的看看注释 import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apac
  • Java】使用iText生成PDF文件

    千次阅读 2018-06-12 15:07:41
    通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 项目要使用iText,必须引入jar包。才能使用,maven依赖如下:1 &lt;dependency&gt; 2 &lt;groupId&gt;...
  • java生成pdf

    2018-12-03 10:06:34
    iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件
  • java生成PDF探索

    2017-11-28 15:42:24
    一、前言 前几天,做ASN条码收货模块,需要实现打印下载收货报表,经一番查找,选定iText–用于生成PDF文档的一个Java...通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,549
精华内容 2,219
关键字:

java生成rtf文件

java 订阅