java 打印pdf文件

依赖

compile group: ‘org.apache.pdfbox‘, name: ‘pdfbox‘, version: ‘2.0.3‘
//    compile group: ‘org.apache.pdfbox‘, name: ‘pdfbox-app‘, version: ‘1.8.10‘
compile group: ‘org.apache.pdfbox‘, name: ‘fontbox‘, version: ‘1.5.0‘

1. 生成pdf 文件

pdf 文件代码

public Map<String, Object> generatePDF(Map<String, Object> params) {
        Map<String, Object> data = new HashMap<>(params);
        String pwoId = ConversionUtil.toString(params.get(FIELD_ID));
        if (!StringUtil.isEmpty(pwoId)) {
            String filepath = FILEPATH_PDF + pwoId + +new java.util.Date().getTime() + ".pdf";
            Document document = null;
            if (!StringUtil.equalsIgnoreCase(way, DEFAULT_WAY)) {
                document = new Document(PageSize.A4);
            } else {
                document = new Document(PageSize.A4.rotate());
            }
            try {
                BaseFont encoding = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                Font font = new Font(encoding, DEFAULT_FONT_SIZE, Font.NORMAL, BaseColor.BLACK);
                File file = new File(filepath);
                if (!file.getParentFile().exists()) {
                    file.getParentFile().mkdirs();
                }
                file.createNewFile();
                PdfWriter.getInstance(document, new FileOutputStream(filepath));
                document.open();
                Paragraph title = new Paragraph(DEFAULT_TITLE, font);
                data.put(PRINTER_STATUS, STATE_SUCCESS);
                data.put(PRINTER_TIME, LocalDateTime.now());
                data.put(PRINTER_NAME, "HP LaserJet Pro MFP M128fw");
                String text = printTemplateText(data);
                Paragraph body = new Paragraph(text, font);
                title.setAlignment(Element.ALIGN_CENTER);
                title.setSpacingAfter(DEFAULT_AFTER_SPACING);
                title.setSpacingBefore(DEFAULT_BEFORE_SPACING);
                document.add(title);
                document.add(body);
                document.close();
                if (logger.isDebugEnabled()) {
                    logger.debug("PDF create filepath : " + file.getAbsolutePath());
                }
                int format = ConversionUtil.toInt(way);
                if (file.exists()) {
                    data.put(PRINTER_CODE, 200);//目前生成pdf,打印失败也算处置成功
                }

                if (printAction(data, file, format)) {
                    data.put(PRINTER_CODE, 200);
                    if (logger.isDebugEnabled()) {
                        logger.debug(filepath + "File printed successfully");
                    }
                } else {
                    data.put(PRINTER_CODE, 500);
                }
            } catch (Throwable e) {
                logger.error("create PDF file failed", e);
            }
        }
        return data;
    }

2 . 打印pdf 文件

 private static boolean printAction(Map<String, Object> data, File file, int way) throws PrinterException, IOException {
        Boolean isPrint = false;
        PDDocument document = null;
        try {
            document = PDDocument.load(file);
            PrinterJob printJob = PrinterJob.getPrinterJob();
            printJob.setJobName(file.getName());
            //查找并设置打印机,获得所有打印机
            PrintService[] printServices = PrinterJob.lookupPrintServices();
            if (printServices == null || printServices.length == 0) {
                logger.error("Failed to print. No available printer found.");
                isPrint = false;
                return isPrint;
            }
            PrintService printService = null;
            for (int i = 0, len = printServices.length; i < len; i++) {
                printService = printServices[i];
                if (printService == null) {
                    continue;
                } else {
                    printJob.setPrintService(printService);
                    data.put(PRINTER_NAME, printService.getName());
                }
                //设置纸张及缩放
                PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.ACTUAL_SIZE);
                //设置多页打印
                Book book = new Book();
                PageFormat pageFormat = new PageFormat();
                //设置打印方向 1纵向 0 横向
                pageFormat.setOrientation(way);
                //设置纸张
                pageFormat.setPaper(getPaper());
                book.append(pdfPrintable, pageFormat, document.getNumberOfPages());
                printJob.setPageable(book);
                //设置打印份数
                printJob.setCopies(1);
                //添加打印属性
                HashPrintRequestAttributeSet pars = new HashPrintRequestAttributeSet();
                pars.add(Sides.DUPLEX); //设置单双页
                try {
                    printJob.print(pars);
                    isPrint = true;
                } catch (PrinterException e) {
                    isPrint = false;
                    continue;
                }
            }
        } finally {
            if (document != null) {
                try {
                    document.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return isPrint;
    }

原文地址:https://www.cnblogs.com/daijiabao/p/12092824.html

时间: 2025-01-21 20:51:48

java 打印pdf文件的相关文章

Java打印pdf方法的记录

[java] view plaincopy public class PrintDemo { public static void main(String[] args) { JFileChooser fileChooser = new JFileChooser(); // 创建打印作业 int state = fileChooser.showOpenDialog(null); if (state == JFileChooser.APPROVE_OPTION) { File file = fil

关于这两天研究Java打印pdf方法的记录

这两天在研究Java调用打印机打印PDF文件的方法,学到了不少东西,特别来记录一下. 关于Java打印网上最多的而且也是Java正统的打印方法就是使用PrintService,一套比較标准的打印代码例如以下: public class PrintDemo { public static void main(String[] args) { JFileChooser fileChooser = new JFileChooser(); // 创建打印作业 int state = fileChoose

Print2Flash在线浏览打印pdf文件

原理:把 pdf 文件转换成 Flash 文件,再显示这个 Flash. 1 .安装print2flashsetup64.exe2.停止Print2Flash3服务(如果配置了服务并启动了的话)3.拷贝p2fServer.exe.Print2Flash.exe到安装目标文件夹替换原文件4.拷贝Print2FlashPrinter3_2.dll到以下文件夹替换原始文件: C:\Windows\System32\spool\drivers\x64\ 以及 C:\Windows\System32\sp

javaWeb项目springMVC框架下利用ITextpdf 工具打印PDF文件的方法(打印表单、插入图片)

方法一:打印PDF表单以及在PDF中加入图片 需要的资料: jar包:iTextAsian.jar ,itext-2.1.7.jar: 源码: 1 public static void main(String args[]) throws IOException, DocumentException { 2 String fileName = "D:/testPDF.pdf"; // pdf模板 3 InputStream input = new FileInputStream(new

JAVA生成PDF文件

生成PDF文件是主要应用的是ITEXT插件 1 import java.awt.Color; 2 import java.io.File; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.util.ArrayList; 6 import java.util.List; 7 8 import com.lowagie.text.Cell; 9 import com.lowagie.text.

java生成pdf文件 --- Table

Java利用itext实现导出PDF文件 所需要的jar包:com.lowagie.text_2.1.7.v201004222200.jar jar包下载地址:http://cn.jarfire.org/com.lowagie.html 一.主要步骤 1.新建document对象 第一个参数是页面大小.接下来的参数分别是左.右.上和下页边距. Document document =new Document(PageSize.A4,50,50,30,20); 2.建立一个书写器(Writer)与d

Java导出pdf文件数据

提示:导出pdf文件,需要3个jar包iText-2.1.5.jar,iTextAsian.jar,iText-rtf-2.1.4.jar. public boolean outputPdfJhsy(EntityBean data) { try { Global.getInstance().LogApp("导出pdf开始"); String pdfpath = File.get("LEAP/NSESTModule/WRModule/nsjhsyzm.pdf").ge

打印机打印pdf文件特别慢怎么解决

PDF等文件中都包含了一些或者很多光栅化数据(图片.嵌入的字体等).这些文件在打印时,打印机驱动程序都会在系统中生成大量EMF文件(增强型变换文件),小到1MB,大到500MB,过大的EMF临时文件会造成打印效率明显下降.解决方法是: 点击“开始→设置→打印机和传真”: 然后右击需要打印的打印机选择“属性”: 在弹出窗口的“高级”选项卡中选择“直接打印到打印机”: 点击“确定”后速度就提高了. 原文地址:https://www.cnblogs.com/caiyt/p/12217643.html

JAVA 读取pdf文件

第一个路口action /* * wuhan syspro author zhangrui 2010/08/23 */ package jp.co.syspro.poo.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts