分享

java 后台调用指定打印机并打印文件(支持PDF打印)

 hncdman 2023-02-14 发布于湖南

Robert·Ran

订阅专栏

package com.xxx.wxzf.util;

import org.apache.pdfbox.pdmodel.PDDocument;

import org.apache.pdfbox.printing.PDFPageable;

import org.apache.pdfbox.printing.PDFPrintable;

import org.apache.pdfbox.printing.Scaling;

import javax.print.DocFlavor;

import javax.print.PrintService;

import javax.print.PrintServiceLookup;

import javax.print.attribute.HashPrintRequestAttributeSet;

import java.awt.print.Book;

import java.awt.print.PageFormat;

import java.awt.print.Paper;

import java.awt.print.PrinterJob;

import java.io.InputStream;

import java.net.URL;

fileUrl 文件链接

printService 指定打印机

@Author: Robert·Ran

 @CreateTime: 2019/5/17 11:59

@Description: 打印方法

public class Print {

public static void printFile(String fileUrl, PrintService printService, String jobName) throws Exception {

URL url = new URL(fileUrl);

InputStream is = url.openStream();

 读取pdf文件

PDDocument document = PDDocument.load(is);

创建打印任务

PrinterJob job = PrinterJob.getPrinterJob();

job.setJobName("文件_" + jobName);

job.setPrintService(printService);

job.setPageable(new PDFPageable(document));

Paper paper = new Paper();

设置打印纸张大小

paper.setSize(595, 842); // 值为点 1 = 1/72 inch

设置打印位置与坐标

paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight()); // no margins

PageFormat pageFormat = new PageFormat();

pageFormat.setPaper(paper);

Book book = new Book();

实际大小 ACTUAL_SIZE,

缩小     SHRINK_TO_FIT,

拉伸     STRETCH_TO_FIT,

适应     SCALE_TO_FIT;

book.append(new PDFPrintable(document, Scaling.SCALE_TO_FIT), pageFormat, 1);

job.setPageable(book);

job.print();

printerName 指定打印机名称

@Author: Robert·Ran

@CreateTime: 2019/5/17 11:59

@Description: 指定打印机, 若无指定打印机则调用默认打印机

public static PrintService specifyPrinter(String printerName) {

DocFlavor psInFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;

HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

PrintService printService[] = PrintServiceLookup.lookupPrintServices(psInFormat, pras);

PrintService myPrinter = null;

遍历所有打印机如果没有选择打印机或找不到该打印机则调用默认打印机

for (PrintService printService2 : printService) {

String svcName = printService2.toString();

if (svcName.contains(printerName)) {

myPrinter = printService2;

break;

if (myPrinter == null) {

myPrinter = PrintServiceLookup.lookupDefaultPrintService();

return myPrinter;

版权声明:本文为CSDN博主「Robert·Ran」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_38022616/article/details/90296045

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多