Office之PDF

Office之PDF

一、概述

    1.1 简介

        很多项目都需要将系统中的数据生成常用的办公软件中,例如:world,excel,pdf等。这其中最常用的就是开源项目Apache POI和操作PDF的IText。其中IText的html、css解析度不够,于是有人做了一个flying-seucar对Itext进行了加强。

    2.2 相关包和类

        a)MAVA下载

<dependency>
			<groupId>org.xhtmlrenderer</groupId>
			<artifactId>flying-saucer-core</artifactId>
			<version>9.0.8</version>
		</dependency>
		<dependency>
			<groupId>org.xhtmlrenderer</groupId>
			<artifactId>flying-saucer-pdf-itext5</artifactId>
			<version>9.0.8</version>
		</dependency>
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itextpdf</artifactId>
			<version>5.5.8</version>
		</dependency>

        b)相关依赖

            org.xhtmlrenderer.pdf.ITextRenderer:主要渲染类。

            org.xhtmlrenderer.pdf.PDFEncryption:密码

            org.xhtmlrenderer.pdf.ITextFontResolver:字体


二、实例

    2.1 普通使用:

//在使用中:格式要求很严格。
	private final static String CONTENTFILE = "D:\\project\\test\\111.txt";// 元数数据
	private final static String PDFOUT = "D:\\project\\test\\my.pdf";// PDF输出
	private final static String TTLPATH = "D:\\project\\test\\simsun.ttc";// 字体文件

	@Test
	public void TestPdfOne() throws Exception {
		// 生成渲染器
		ITextRenderer renderer = new ITextRenderer();
		// 字体
		ITextFontResolver font = renderer.getFontResolver();
		/**
		 * @see 字体的相关设�?<字体这块不熟、大家还是自己多测试�?>
		 * @see path 字体文件路径
		 * @see encoding 编码
		 * @see embeded :内前
		 */
		font.addFont(TTLPATH, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
		// 加载内容
		 renderer.setDocumentFromString("你好我是命令");// string
		//renderer.setDocument(new File(CONTENTFILE));//文件
		//renderer.setDocument("http://www.baidu.com");// URL
		// 版本
		renderer.setPDFVersion('1'); 
		// 加密
		renderer.setPDFEncryption(TestPdf.getPdfEncryption()); 
		// 存储
		renderer.createPDF(new FileOutputStream(PDFOUT));
	}

	
	/**
	 * @see 加密
	 * @return
	 */
	public static PDFEncryption getPdfEncryption() {
		/**
		 * 操作级别
		 * PdfWriter.ALLOW_PRINTING :打印 
		 * PdfWriter.ALLOW_COPY :复制 
		 * PdfWriter.ALLOW_FILL_IN :所有
		 */
		/**
		 * 加密类型: 
		 * STANDARD_ENCRYPTION_40 = 0; 
		 * STANDARD_ENCRYPTION_128 = 1;
		 */
		return new PDFEncryption("1231".getBytes(), "1231".getBytes(), PdfWriter.ALLOW_PRINTING, 1);
	}

    2.2 服务器使用:

//1.这里和springMVC的结合
//2.这种方法不会在服务器生成PDF文件
//3.利用页面生成的PDF,最接近平时所用的PDF排版
@RequestMapping(value = "/user/downprotocal/{investId}")
	public void downProtocal(HttpServletRequest request,
			HttpServletResponse response, @PathVariable int investId) {
		try {
			Bid bid = this.bidService.getBidByInvestId(investId);
			if (null != bid) {
				// 中文需转义
				response.setHeader("Content-disposition",
						"attachment;filename=" + bid.getSerialNumber() + ".pdf");
				response.setContentType("application/pdf");
				OutputStream os = response.getOutputStream();
				ITextRenderer renderer = new ITextRenderer();
				// 指定模板地址
				System.out.println(MyUriUtil.getUri(request) + "user/getpdf/"
						+ investId);
				//服务器PDF页面的连接
				renderer.setDocument(MyUriUtil.getUri(request)
						+ "pdftemp/" + investId);
				ITextFontResolver fontResolver = renderer.getFontResolver();
				// 字体
				fontResolver.addFont(
						request.getServletContext().getRealPath("/")
								+ "WEB-INF\\fonts\\simsun.ttc",
						BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
				renderer.layout();
				renderer.createPDF(os);
				os.close();
				// fontResolver.addFont("C:/Windows/Fonts/simhei.ttf",
				// BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
				// fontResolver.addFont("C:/Windows/Fonts/simkai.ttf",
				// BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
			} else {
				response.sendRedirect(request.getContextPath()
						+ "/user/loadprotocal");
			}
		} catch (IOException | DocumentException e) {
			LOGGER.error(MyTimeUtil.getYYMMDDTimeString() + "[PDF错误]", e);
		}
	}

	//pdf页面
	@RequestMapping(value = "/pdftemp/{investId}")
	public String pdfTemp(HttpServletRequest request, @PathVariable int investId) {
		try {
			/**
			* 数据处理的文件
			*/
		} catch (Exception e) {
			LOGGER.error("[协议加载]", e);
		}
		return "pdf/protocal";
	}


你可能感兴趣的:(java,itext,flying-seucar)