java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java打印PDF文档

Java实现PDF文档静默打印与弹窗选择打印的实操指南

作者:秋天的落叶铺满小路

在日常 Java 后端、桌面开发场景中,PDF 打印是非常常见的业务需求,本文主要为大家详细介绍了Java实现PDF文档静默打印与弹窗选择打印的示例代码,有需要的可以参考下

在日常 Java 后端、桌面开发场景中,PDF 打印是非常常见的业务需求,例如报表打印、单据打印、文档归档打印等。Java 原生提供了 java.awt.print 打印核心 API,但原生 API 无法直接解析渲染 PDF 文档,需要借助第三方 PDF 解析类库配合实现完整打印能力。

本文将结合 Spire.PDF for Java (PDF 文档解析渲染)与 java.awt.print (系统打印调度)两套技术,实现两种主流的 PDF 打印场景:无弹窗默认打印机静默打印、带打印弹窗手动选择打印机打印,提供完整可运行代码及详细原理说明。

一、技术栈与环境准备

1.1 核心依赖说明

java.awt.print :JDK 原生打印工具包,无需引入额外依赖,主要负责获取系统打印机、设置打印页面格式、调度打印任务、捕获打印异常,是 Java 打印功能的基础核心。

Spire.PDF for Java :专业的 PDF 解析工具库,用于加载本地 PDF 文件、渲染 PDF 页面内容,适配原生打印 API 的打印渲染接口,解决原生 Java 无法直接打印 PDF 的痛点。

1.2 项目依赖引入

若使用 Maven 项目,需在 pom.xml 中引入 Spire.PDF 依赖:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf</artifactId>
        <version>12.9.0</version>
    </dependency>
</dependencies>

二、场景一:默认打印机静默打印(无打印弹窗)

该场景适用于后台自动打印、无需人工干预的业务场景,系统直接调用默认打印机执行打印任务,不弹出任何打印配置窗口,全程静默执行。

核心实现逻辑:通过 PrinterJob 获取系统默认打印任务,自定义打印页面纸张区域,加载 PDF 文档并绑定打印任务,直接执行打印操作。

完整可运行代码

import com.spire.pdf.PdfDocument;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
/**
 * PDF 静默打印(默认打印机,无弹窗)
 */
public class PrintWithDefaultPrinter {
    public static void main(String[] args) {
        // 1. 获取系统默认打印机的打印任务对象
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        // 2. 初始化页面格式,获取默认页面尺寸和排版方向
        PageFormat pageFormat = printerJob.defaultPage();
        // 3. 获取页面对应的纸张对象,自定义打印可渲染区域
        Paper paper = pageFormat.getPaper();
        // 设置纸张完整可打印区域(去除默认边距,适配完整PDF页面)
        paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());
        // 将自定义纸张配置绑定到页面格式中
        pageFormat.setPaper(paper);
        // 4. 加载本地PDF文档
        PdfDocument pdf = new PdfDocument();
        // 替换为本地实际PDF文件路径
        pdf.loadFromFile("input.pdf");
        // 5. 绑定PDF文档与打印页面格式,准备打印渲染
        printerJob.setPrintable(pdf, pageFormat);
        // 6. 执行静默打印任务
        try {
            printerJob.print();
            System.out.println("PDF静默打印任务执行完成");
        } catch (PrinterException e) {
            e.printStackTrace();
            System.err.println("PDF静默打印失败:" + e.getMessage());
        }
    }
}

代码核心要点解析

PrinterJob.getPrinterJob():获取系统默认的打印任务实例,自动绑定本机默认打印机。

paper.setImageableArea():重置纸张可打印区域,取消系统默认的留白边距,避免 PDF 内容打印不完整、留白过大的问题。

printerJob.print():直接触发打印任务,无任何交互弹窗,适合自动化打印场景。

三、场景二:带弹窗选择打印(手动配置打印机)

该场景适用于需要人工选择打印机、调整打印参数的场景,程序启动后会弹出系统标准打印弹窗,支持手动切换 打印机、设置打印份数、页码范围、横竖排版等参数,确认后执行打印。

核心实现逻辑:在静默打印的基础上,增加打印弹窗判断,用户确认打印后才执行打印任务,灵活性更高。

完整可运行代码

import com.spire.pdf.PdfDocument;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
/**
 * PDF 弹窗选择打印(手动选择打印机、配置参数)
 */
public class PrintWithPrintDialog {
    public static void main(String[] args) {
        // 1. 初始化打印任务
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        // 2. 配置打印页面与纸张格式
        PageFormat pageFormat = printerJob.defaultPage();
        Paper paper = pageFormat.getPaper();
        paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());
        pageFormat.setPaper(paper);
        // 3. 加载本地PDF文件
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("input.pdf");
        // 4. 绑定PDF文档与打印格式
        printerJob.setPrintable(pdf, pageFormat);
        // 5. 弹出系统打印弹窗,判断用户是否确认打印
        if (printerJob.printDialog()) {
            try {
                // 用户确认后执行打印
                printerJob.print();
                System.out.println("PDF弹窗打印任务执行完成");
            } catch (PrinterException e) {
                e.printStackTrace();
                System.err.println("PDF弹窗打印失败:" + e.getMessage());
            }
        } else {
            System.out.println("用户取消打印任务");
        }
    }
}

代码核心要点解析

printerJob.printDialog():唤起系统原生打印弹窗,返回布尔值,true 表示用户确认打印,false 表示用户取消打印。

所有打印参数(打印机选择、份数、页码)均通过系统弹窗配置,无需代码硬编码,适配多变的打印场景。

保留了自定义纸张可打印区域的配置,保证 PDF 打印排版完整、无缺失。

四、常见问题与注意事项

4.1 路径适配问题

示例中使用 Windows 绝对路径,若部署在 Linux、Mac 系统,需修改为对应系统的文件路径,同时保证程序对 PDF 文件有读取权限。

4.2 打印内容不全/留白过多

核心解决方式就是代码中 paper.setImageableArea() 方法,重置纸张可打印区域,覆盖系统默认的边距限制,适配 PDF 原始尺寸。

4.3 打印异常捕获

代码中捕获了 PrinterException,可拦截打印机离线、纸张不足、文件损坏等打印异常,便于业务层做异常提示与日志记录。

五、总结

本文基于 java.awt.print 原生打印 API + Spire.PDF 实现了 Java 环境下两种核心的 PDF 打印方案:

两套代码均简洁通用、无冗余逻辑,可直

到此这篇关于Java实现PDF文档静默打印与弹窗选择打印的实操指南的文章就介绍到这了,更多相关Java打印PDF文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文