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文件及批量打印实现 #### 一、引言 在企业级应用开发中,经常需要处理各种文档操作,其中包括PDF文件的打印。Java作为一种广泛应用的企业级开发语言,提供了多种方式来实现这一功能。本文将详细...
Java实现PDF打印的解决方案 在本文中,我们将探讨Java实现PDF打印的解决方案,包括Java Print Service、Apache PDFBox、Adobe Reader命令打印和Linux打印四种方法。 1. Java Print Service Java Print Service是...
在Java环境中,我们可以利用GSview的API(如果有的话)或者通过调用系统命令来启动GSview并打印PDF文件。例如,通过`Runtime.getRuntime().exec()`方法执行GSview的命令行参数,将PDF文件路径和打印指令传递给它。 ...
其次,打印PDF文件在JAVA中可以使用Java Print Service API。这个API允许开发者控制打印任务,包括选择打印机、设置打印参数等。以下是一个简单的示例,展示如何使用JAVA打印PDF: ```java File file = new File(...
1. **PDF处理**:`pdfbox-2.0.2.jar`是Apache PDFBox库的一个版本,它提供了处理PDF文件的能力。PDFBox提供了API来读取、创建和修改PDF文档。在打印过程中,可能使用了`PDDocument`类来加载PDF,`PDFRenderer`类将...
在IT行业中,PDF(Portable Document...总的来说,直接打印PDF文件而不弹出设置窗口涉及到对PDF阅读器、编程接口、自动化工具以及企业级解决方案的深入理解。通过选择合适的方法,我们可以提高工作效率,优化打印流程。
在Java SE(标准版)开发中,处理PDF文件并实现打印功能是一项常见的需求。本案例主要探讨了如何通过调用接口来获取PDF文件,然后对其进行分割,并将分割后的页面转换为JPG图像以便进行打印。这里我们将详细讲解涉及...
若要处理这种情况,可能需要寻找其他解决方案,如使用支持这类元素的第三方库,或者在转换后手动添加水印和图章。 后端代码通常会涉及接收PDF文件,执行转换操作,然后返回结果图像。这可能涉及到文件上传、文件...
Java的`Apache PDFBox`库或者`iText`库可以帮助读取和操作PDF文件,以便进行打印。这些库提供了API来添加、修改或提取PDF文档的内容。 5. **模板设计**:为了实现自定义打印,可以创建一个模板设计,然后根据实际...
iText作为一款强大的PDF处理库,为Web应用中的报表打印提供了灵活且高效的解决方案。无论是直接编程生成还是利用模板填充,iText都能满足不同场景下的需求,成为Java开发者实现报表打印的理想选择。通过本文的探讨,...
这个"多种office文件转换为pdf文件的java解决方案.zip"压缩包显然包含了一个名为DocumentConvertor.java的源代码文件,可能是实现这个功能的核心类。下面将详细介绍相关的Java技术及其可能的实现方式。 1. **Apache...
Lodop与Java的结合使用,为实现高效、灵活的打印解决方案提供了一种有效途径,特别是对于条码打印这种需求。以下是对这个主题的详细阐述: Lodop(乐度云打印服务)是一款专业的网页打印控件,它提供了丰富的API...
这个项目“JAVA仿百度文库预览PDF文件绝对好用”就是这样的一个解决方案,它允许用户在Web端预览PDF文档,类似于百度文库的功能。 首先,让我们了解PDF和SWF格式。PDF(Portable Document Format)是一种通用的文件...
总的来说,JasperReports和iReport的组合为开发者提供了一套强大的报表解决方案,不仅可以用于单一报表的生成,还支持大规模的数据处理和批量打印。通过学习和实践,开发者能够灵活地满足各种复杂的打印需求。
本项目提供了一个Java实现HTML转PDF的解决方案,适用于Eclipse开发环境。 1. **Java与PDF库** Java中用于生成PDF的库有很多,如iText、Flying Saucer、PDFBox等。其中,Flying Saucer是一个常用的库,它可以将HTML...
在JavaWeb开发中,有时我们需要实现用户在浏览器中...总的来说,"jsp在线浏览pdf文件的jar包和插件"提供的解决方案大大简化了JavaWeb应用中PDF预览的实现,只需简单集成和少量代码,就能在浏览器中流畅地查看PDF文件。
首先,Java自带的API是实现打印功能的基础,随着J2SE的发布,Java打印服务API为开发者提供了新的打印支持。这一API突破了早期java.print包的PrintService和DocPrintJob接口的局限性,提供了更为丰富的打印功能。实现...
该解决方案提供基于Java的多功能打印服务,涵盖PDF、Word、图片和Jasperreports模板等多种打印格式,源码包含22个文件,包括6个Java源文件、3个JAR包、2个属性文件、2个DLL文件、1个Git忽略文件、1个Markdown文档、1...
### Java打印功能开发手册知识点详解 #### 一、引言 在Java的发展历程中,打印功能一直是相对薄弱的一环。最初版本的Java甚至不支持任何打印功能,直到Java 1.1才引入了`PrintJob`类,但这仅仅提供了一个非常基础...