Fop生成pdf(xsl)

阅读更多

  在做项目的时候需要生成PDF,使用了fop技术实现
  1、下载对应的jar包,不是maven工程直接下载

Fop生成pdf(xsl)_第1张图片
  1.1 maven项目

Fop生成pdf(xsl)_第2张图片
 
2、下载相关字体和模板文件

Fop生成pdf(xsl)_第3张图片
 
 2.1设置字体路径

Fop生成pdf(xsl)_第4张图片
 
 2.2设置模板文件数据源

Fop生成pdf(xsl)_第5张图片
 

  3、编写Java代码
   

public class FopReport extends BaseService{
	
	private static final String TYPE = ".pdf";

	private static final FopFactory fopFactory = FopFactory.newInstance();
	
	private static final String CONRIGURL = "fop.xml";
	
	
	/**
	 * 转PDF文件
	 * @param xsl 模板文件
	 * @param policy 数据对象
	 * @throws IOException
	 * @throws SAXException
	 */
	private ReportData createReport(File xsl,Object policy,boolean flag) throws IOException, SAXException {
		ReportData reportData = new ReportData();
		String userConfig = Configuration.getValue("pdf.font.path")+"/"+CONRIGURL;
		logger.info("加载字体目录:"+Configuration.getValue("pdf.font.path")+"/"+CONRIGURL);
		fopFactory.setUserConfig(userConfig); //读取自定义配置
		ByteArrayOutputStream output = new ByteArrayOutputStream();
		try {
			Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, output);
			TransformerFactory factory = TransformerFactory.newInstance();
			String templateUrl = Configuration.getValue("pdf.template.path");
			File xslFile = new File(new File(templateUrl),xsl.toString());
			Transformer transformer = factory.newTransformer(new StreamSource(xslFile)); //模板文件
			logger.info("加载模板:"+xslFile.toString());
			String str = "";
			if (!flag) {
				Ojbect2Xml ox = new Ojbect2Xml();
				str = ox.getFullXML(policy, "get");
			} else {
				str = policy.toString();
			}
			ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(
					str.getBytes("UTF-8"));
			Charset charset = Charset.forName("UTF-8");
			Reader r = new InputStreamReader(bytearrayinputstream, charset);
			Source src = new StreamSource(r);
			Result res = new SAXResult(fop.getDefaultHandler());
			transformer.transform(src, res);
			reportData.setPdfData(output.toByteArray());
			writePdf(reportData);
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			output.close();
		}
		return reportData;
	}
}

 
   4、生成一个字节流文件,将文件流写出即可,最终效果
   
Fop生成pdf(xsl)_第6张图片
   
   

 

  • Fop生成pdf(xsl)_第7张图片
  • 大小: 6 KB
  • Fop生成pdf(xsl)_第8张图片
  • 大小: 5.1 KB
  • Fop生成pdf(xsl)_第9张图片
  • 大小: 18.9 KB
  • Fop生成pdf(xsl)_第10张图片
  • 大小: 14.9 KB
  • Fop生成pdf(xsl)_第11张图片
  • 大小: 96.2 KB
  • Fop生成pdf(xsl)_第12张图片
  • 大小: 150 KB
  • fop.rar (5.5 MB)
  • 下载次数: 13
  • 查看图片附件

你可能感兴趣的:(fop,java,xsl,xml)