Office之PDF

Office之PDF

1、概述

    1.1 簡介

        不少項目都須要將系統中的數據生成經常使用的辦公軟件中,例如:world,excel,pdf等。這其中最經常使用的就是開源項目Apache POI和操做PDF的IText。其中IText的html、css解析度不夠,因而有人作了一個flying-seucar對Itext進行了增強。css

    2.2 相關包和類

        a)MAVA下載
html

<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)相關依賴
java

            org.xhtmlrenderer.pdf.ITextRenderer:主要渲染類。spring

            org.xhtmlrenderer.pdf.PDFEncryption:密碼服務器

            org.xhtmlrenderer.pdf.ITextFontResolver:字體app


2、實例

    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";
	}
相關文章
相關標籤/搜索