首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

java兑现打印PDF文件解决方案

2012-09-04 
java实现打印PDF文件解决方案Java print service API本身支持打印, 但其并不具有解释PDF文件的能力,也就是

java实现打印PDF文件解决方案
Java print service API本身支持打印, 但其并不具有解释PDF文件的能力,也就是说,用标准的Java Print API能够打印PDF文件, 但所用的打印机必须支持PDF打印标准,即打印机支持Post Script标准, 而这种打印机通常昂贵,目前市场上流通的廉价打印机(使用基于主机的驱动程序)基本不支持,故用Pure Java打印PDF这种想当然的简单事情变得复杂起来, 网上现有的解决方案通常是用OCX或是其它的本地解决方案, 不具有跨平台性,限于Windows平台.   这里介绍一种基于纯Java的产品.
PDF Renderer

本项目实现解析HTML文件转化成PDF文件,然后调用打印机打印PDF文件并支持横版打印,打印机的选择。。
欢迎转载学习,转载时请注明来自http://fuchangle.iteye.com/blog/1558749

项目需要的jar包
core-renderer.jar, iText-2.0.8.jar, iTextAsian.jar,
jsoup-1.6.1.jar,  PDFRenderer-0.9.0.jar

import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Rectangle;import java.awt.print.Book;import java.awt.print.PageFormat;import java.awt.print.Paper;import java.awt.print.Printable;import java.awt.print.PrinterException;import java.awt.print.PrinterJob;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.net.URL;import java.nio.ByteBuffer;import javax.print.PrintService;import javax.print.PrintServiceLookup;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.xhtmlrenderer.pdf.ITextFontResolver;import org.xhtmlrenderer.pdf.ITextRenderer;import com.lowagie.text.DocumentException;import com.lowagie.text.pdf.BaseFont;import com.nudms.server.nurse.servlet.CompressDataServlet;import com.sun.pdfview.PDFFile;import com.sun.pdfview.PDFPage;import com.sun.pdfview.PDFRenderer;/** * 打印表单 * @author fu-changle * */public class PrintUtil {public void printmenu(String urlpath,String filepath, String printName) throws  IOException,DocumentException, PrinterException{URL url = new URL(urlpath);Document document =Jsoup.parse(url, 100000);String html = document.html();ITextRenderer renderer = new ITextRenderer();ITextFontResolver fontResolver = renderer.getFontResolver();            fontResolver.addFont(CompressDataServlet.FONTSPATH, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);                renderer.setDocumentFromString(html);        renderer.layout();                 OutputStream os = new FileOutputStream(filepath);           renderer.createPDF(os);         os.close();        int j=0;PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);if(services.length == 0){System.out.println("not found printer");}PrinterJob job = PrinterJob.getPrinterJob();for(PrintService ps: services){if(ps.getName().equals(printName)){job.setPrintService(services[j]);}else {j++;}}FileInputStream fis = new FileInputStream(filepath);byte[] pdfContent = new byte[fis.available()];fis.read(pdfContent, 0, fis.available());ByteBuffer buf = ByteBuffer.wrap(pdfContent);PDFFile pdfFile = new PDFFile(buf);Book bk = new Book();int num = pdfFile.getNumPages();for(int i=0; i<num; i++){PDFPage page = pdfFile.getPage(i+1);PageFormat pf = job.defaultPage();bk.append(new MyPDFPrintPage(page), pf);Paper paper = pf.getPaper();double x = 0;double y = 0; if(page.getAspectRatio()<1){double width = page.getBBox().getWidth();double height = page.getBBox().getHeight();paper.setImageableArea(x, y, width, height);pf.setOrientation(PageFormat.PORTRAIT);}else{double width = page.getBBox().getHeight();double height = page.getBBox().getWidth();paper.setImageableArea(x, y, width, height);pf.setOrientation(PageFormat.LANDSCAPE);}pf.setPaper(paper);System.out.println();}job.setPageable(bk);    job.setJobName("My book");    try {        job.print();      } catch (Exception e) {      e.printStackTrace();      }}

热点排行