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();
}
}
分享到:
相关推荐
java 打印pdf文件 ,也可支持批量打印
JAVA编辑PDF文件、调用打印机打印PDF文件
PDF文件JAVA去水印源码Muhimbi PDF Converter 在线服务 关于 这是一项基于 REST 的服务,可以轻松地将文档转换、合并、水印、保护和光学字符识别 (OCR) 添加到大多数编程语言、操作系统和开发平台。 此服务也可作为...
JSPrintManager从Javascript打印命令和文件,管理打印机和扫描文档是针对客户端打印和扫描方案的Javascript + Client App解决方案,旨在用于在任何Web平台(如ASP.NET,PHP,Django,Ruby On Rails(RoR),Express....
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...
通过元动作,为配置计算、现场管控、接口处理和告警等,配置后台处理程序,并配合DRO实现复杂报表和打印。 MQX是企业信息和物联总线,消息和文件的发布和订阅,严格的安全验证,可靠的一次必达包括网络故障和宕机,...
除了对JAVA EE Web编程基本技术的讲解淙外,还针对Web应用开发中如打印、图表、日志、上传、下载和国际化等常见功能特性的实现,综合运用多种JAVA EE开发技术,提出多种解决方案,并深入讲座分析,对开发人员动手...
2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...
优道科技提供在线文档版权保护技术和解决方案,支持保护通过网页进行在线浏览的PDF和XPS文档。控件采用优道科技独创的屏幕黑洞技术进行研发,能完美解决PDF和XPS文档的在线版权保护问题。ActiveX技术支持无缝嵌入到...
快逸报表4.0 Free版提供完备的打印解决方案,实现套打、一纸多页、强制分页、不足补空行等中国式的精确打印需求。 Java版Excel、即时连接数据库、零代码制表、发布、多种统计图、精确完备的报表打印控件、...
2.3.8 打印..... 49 2.4 Eclipse定制...... 49 2.4.1 透视图..... 49 2.4.2 渐进显示..... 51 2.4.3 在Eclipse中运行多窗口和多工作空间..... 51 2.4.4 改变键盘快捷键..... 54 2.4.5 定制JRE... 55 ...
2.3.8 打印..... 49 2.4 Eclipse定制...... 49 2.4.1 透视图..... 49 2.4.2 渐进显示..... 51 2.4.3 在Eclipse中运行多窗口和多工作空间..... 51 2.4.4 改变键盘快捷键..... 54 2.4.5 定制JRE... 55 ...
2.3.8 打印..... 49 2.4 Eclipse定制...... 49 2.4.1 透视图..... 49 2.4.2 渐进显示..... 51 2.4.3 在Eclipse中运行多窗口和多工作空间..... 51 2.4.4 改变键盘快捷键..... 54 2.4.5 定制JRE... 55 2.4.6 在...