最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java調(diào)用打印機打印圖片和文本的多種方法

 更新時間:2026年01月18日 11:32:26   作者:齊魯大蝦  
這篇文章主要介紹了在Java中調(diào)用打印機打印文本和圖片的多種方法,包括Java內(nèi)置的打印API、JavaPrintServiceAPI、ApachePDFBox庫、iText庫等,并提供了詳細(xì)的使用步驟和注意事項,需要的朋友可以參考下

在Java中調(diào)用打印機打印文本和圖片有多種方法,以下是幾種常用的實現(xiàn)方式:

一、使用Java內(nèi)置的打印API

1.基本打印框架

import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import java.awt.*;
import java.awt.print.*;
import java.io.*;
import javax.imageio.ImageIO;

public class JavaPrinter {
    
    // 打印文本
    public static void printText(String text) {
        PrinterJob job = PrinterJob.getPrinterJob();
        
        // 設(shè)置打印內(nèi)容
        job.setPrintable(new Printable() {
            @Override
            public int print(Graphics g, PageFormat pf, int pageIndex) {
                if (pageIndex > 0) {
                    return Printable.NO_SUCH_PAGE;
                }
                
                Graphics2D g2d = (Graphics2D) g;
                g2d.translate(pf.getImageableX(), pf.getImageableY());
                
                // 設(shè)置字體
                Font font = new Font("宋體", Font.PLAIN, 12);
                g2d.setFont(font);
                
                // 繪制文本
                g2d.drawString(text, 100, 100);
                
                return Printable.PAGE_EXISTS;
            }
        });
        
        try {
            // 顯示打印對話框
            if (job.printDialog()) {
                job.print();
            }
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }
}

2.完整打印類(支持文本和圖片)

import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import java.awt.*;
import java.awt.print.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;

public class DocumentPrinter implements Printable {
    
    private String text;
    private BufferedImage image;
    private boolean hasImage;
    
    public DocumentPrinter(String text) {
        this.text = text;
        this.hasImage = false;
    }
    
    public DocumentPrinter(String text, BufferedImage image) {
        this.text = text;
        this.image = image;
        this.hasImage = true;
    }
    
    public void printDocument() {
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        printerJob.setPrintable(this);
        
        // 設(shè)置打印屬性
        PageFormat pageFormat = printerJob.defaultPage();
        
        // 自定義頁面設(shè)置
        Paper paper = new Paper();
        paper.setSize(595, 842); // A4 size in points (1/72 inch)
        paper.setImageableArea(72, 72, 451, 698); // 1 inch margins
        pageFormat.setPaper(paper);
        
        // 顯示打印對話框
        if (printerJob.printDialog()) {
            try {
                printerJob.print();
            } catch (PrinterException e) {
                System.err.println("打印失敗: " + e.getMessage());
            }
        }
    }
    
    @Override
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) 
            throws PrinterException {
        
        if (pageIndex > 0) {
            return NO_SUCH_PAGE;
        }
        
        Graphics2D g2d = (Graphics2D) graphics;
        
        // 設(shè)置高質(zhì)量渲染
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                            RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                            RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        
        // 轉(zhuǎn)換坐標(biāo)到可打印區(qū)域
        double pageWidth = pageFormat.getImageableWidth();
        double pageHeight = pageFormat.getImageableHeight();
        
        int x = (int) pageFormat.getImageableX();
        int y = (int) pageFormat.getImageableY();
        
        // 打印文本
        if (text != null && !text.isEmpty()) {
            printText(g2d, x, y, pageWidth);
        }
        
        // 打印圖片
        if (hasImage && image != null) {
            printImage(g2d, x, y, pageWidth, pageHeight);
        }
        
        return PAGE_EXISTS;
    }
    
    private void printText(Graphics2D g2d, int x, int y, double pageWidth) {
        // 設(shè)置字體
        Font font = new Font("宋體", Font.PLAIN, 12);
        g2d.setFont(font);
        g2d.setColor(Color.BLACK);
        
        // 計算文本布局
        FontMetrics metrics = g2d.getFontMetrics();
        int lineHeight = metrics.getHeight();
        int currentY = y + lineHeight;
        
        // 處理換行
        String[] lines = text.split("\n");
        for (String line : lines) {
            // 如果一行太長,進(jìn)行換行處理
            if (metrics.stringWidth(line) > pageWidth - 100) {
                printWrappedLine(g2d, line, x + 50, currentY, 
                                (int)pageWidth - 100, metrics);
            } else {
                g2d.drawString(line, x + 50, currentY);
            }
            currentY += lineHeight;
        }
    }
    
    private void printWrappedLine(Graphics2D g2d, String line, 
                                 int x, int y, int maxWidth, FontMetrics metrics) {
        String[] words = line.split(" ");
        StringBuilder currentLine = new StringBuilder();
        
        for (String word : words) {
            String testLine = currentLine + word + " ";
            if (metrics.stringWidth(testLine) <= maxWidth) {
                currentLine.append(word).append(" ");
            } else {
                if (currentLine.length() > 0) {
                    g2d.drawString(currentLine.toString(), x, y);
                    y += metrics.getHeight();
                }
                currentLine = new StringBuilder(word + " ");
            }
        }
        
        if (currentLine.length() > 0) {
            g2d.drawString(currentLine.toString(), x, y);
        }
    }
    
    private void printImage(Graphics2D g2d, int x, int y, 
                           double pageWidth, double pageHeight) {
        if (image == null) return;
        
        // 計算圖片尺寸和位置
        int imgWidth = image.getWidth();
        int imgHeight = image.getHeight();
        
        // 調(diào)整圖片大小以適應(yīng)頁面
        double scale = Math.min(
            (pageWidth - 100) / imgWidth,
            (pageHeight - 200) / imgHeight
        );
        
        int scaledWidth = (int) (imgWidth * scale);
        int scaledHeight = (int) (imgHeight * scale);
        
        // 居中顯示圖片
        int imgX = x + (int)((pageWidth - scaledWidth) / 2);
        int imgY = y + (int)((pageHeight - scaledHeight) / 2) + 100;
        
        // 繪制圖片
        g2d.drawImage(image, imgX, imgY, scaledWidth, scaledHeight, null);
        
        // 添加圖片邊框
        g2d.setColor(Color.LIGHT_GRAY);
        g2d.drawRect(imgX - 1, imgY - 1, scaledWidth + 2, scaledHeight + 2);
    }
    
    public static void main(String[] args) {
        try {
            // 示例1:打印文本
            String text = "這是一個打印測試文檔。\n" +
                         "第二行文本內(nèi)容。\n" +
                         "第三行文本內(nèi)容,這一行比較長,用于測試自動換行功能。";
            
            DocumentPrinter textPrinter = new DocumentPrinter(text);
            textPrinter.printDocument();
            
            // 示例2:打印文本和圖片
            BufferedImage image = ImageIO.read(new File("image.jpg"));
            DocumentPrinter imagePrinter = new DocumentPrinter(text, image);
            imagePrinter.printDocument();
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

二、使用Java Print Service API(更現(xiàn)代的方式)

import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import java.awt.print.*;
import java.io.*;
import java.util.Locale;

public class PrintServiceExample {
    
    // 獲取所有打印機
    public static void listPrinters() {
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        System.out.println("可用的打印機:");
        for (PrintService service : services) {
            System.out.println(" - " + service.getName());
        }
    }
    
    // 使用指定打印機打印文本
    public static void printToSpecificPrinter(String text, String printerName) {
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        PrintService selectedService = null;
        
        // 查找指定打印機
        for (PrintService service : services) {
            if (service.getName().equals(printerName)) {
                selectedService = service;
                break;
            }
        }
        
        if (selectedService == null) {
            System.err.println("未找到打印機: " + printerName);
            return;
        }
        
        // 創(chuàng)建打印作業(yè)
        DocPrintJob job = selectedService.createPrintJob();
        
        // 創(chuàng)建打印屬性集
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        attributes.add(MediaSizeName.ISO_A4);
        attributes.add(OrientationRequested.PORTRAIT);
        attributes.add(new Copies(1));
        
        // 創(chuàng)建打印文檔
        byte[] bytes = text.getBytes();
        Doc doc = new SimpleDoc(bytes, DocFlavor.BYTE_ARRAY.AUTOSENSE, null);
        
        try {
            job.print(doc, attributes);
            System.out.println("打印任務(wù)已發(fā)送到: " + printerName);
        } catch (PrintException e) {
            System.err.println("打印失敗: " + e.getMessage());
        }
    }
    
    // 打印HTML內(nèi)容
    public static void printHTML(String htmlContent) {
        try {
            // 創(chuàng)建臨時HTML文件
            File tempFile = File.createTempFile("print", ".html");
            try (FileWriter writer = new FileWriter(tempFile)) {
                writer.write(htmlContent);
            }
            
            // 使用默認(rèn)程序打開并打印(Windows)
            if (System.getProperty("os.name").toLowerCase().contains("win")) {
                Runtime.getRuntime().exec(
                    "rundll32 url.dll,FileProtocolHandler " + 
                    tempFile.getAbsolutePath()
                );
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、使用Apache PDFBox庫打印PDF

首先添加Maven依賴:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.27</version>
</dependency>
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.printing.PDFPrintable;
import org.apache.pdfbox.printing.Scaling;
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import java.awt.print.*;
import java.io.*;

public class PDFPrinter {
    
    // 創(chuàng)建PDF并打印
    public static void createAndPrintPDF(String text, String imagePath) {
        try (PDDocument document = new PDDocument()) {
            PDPage page = new PDPage();
            document.addPage(page);
            
            PDPageContentStream contentStream = new PDPageContentStream(
                document, page);
            
            // 添加文本
            contentStream.beginText();
            contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
            contentStream.newLineAtOffset(50, 750);
            contentStream.showText(text);
            contentStream.endText();
            
            // 添加圖片
            if (imagePath != null) {
                PDImageXObject image = PDImageXObject.createFromFile(
                    imagePath, document);
                contentStream.drawImage(image, 100, 400, 300, 300);
            }
            
            contentStream.close();
            
            // 保存PDF
            document.save("document.pdf");
            
            // 打印PDF
            printPDF("document.pdf");
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    // 打印PDF文件
    public static void printPDF(String pdfPath) throws IOException {
        try (PDDocument document = PDDocument.load(new File(pdfPath))) {
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setPrintable(new PDFPrintable(document, Scaling.SCALE_TO_FIT));
            
            if (job.printDialog()) {
                job.print();
            }
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }
    
    // 直接打印PDF(無對話框)
    public static void silentPrintPDF(String pdfPath) throws IOException {
        try (PDDocument document = PDDocument.load(new File(pdfPath))) {
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setPrintable(new PDFPrintable(document, Scaling.SCALE_TO_FIT));
            job.print();
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }
}

四、使用iText庫打印

首先添加Maven依賴:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import java.io.*;
import java.awt.print.*;

public class ITextPrinter {
    
    public static void createPdfAndPrint(String text, String imagePath) {
        Document document = new Document();
        
        try {
            // 創(chuàng)建PDF文件
            PdfWriter writer = PdfWriter.getInstance(
                document, new FileOutputStream("output.pdf"));
            document.open();
            
            // 添加文本
            Font font = FontFactory.getFont(FontFactory.HELVETICA, 12);
            Paragraph paragraph = new Paragraph(text, font);
            document.add(paragraph);
            
            // 添加圖片
            if (imagePath != null) {
                Image image = Image.getInstance(imagePath);
                image.scaleToFit(300, 300);
                document.add(image);
            }
            
            document.close();
            
            // 打印PDF
            printDocument("output.pdf");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private static void printDocument(String filePath) {
        try {
            // 使用系統(tǒng)命令打印(Windows)
            if (System.getProperty("os.name").toLowerCase().contains("win")) {
                Runtime.getRuntime().exec(
                    "rundll32 SHELL32.DLL,ShellExec_RunDLL " +
                    "msprint2.dll,MyPrint " + filePath
                );
            } else {
                // Linux/Mac
                Runtime.getRuntime().exec("lpr " + filePath);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

五、Web應(yīng)用中的打?。↗ava Servlet)

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.awt.print.*;

public class WebPrinterServlet extends HttpServlet {
    
    protected void doPost(HttpServletRequest request, 
                         HttpServletResponse response) 
            throws ServletException, IOException {
        
        String content = request.getParameter("content");
        String printerName = request.getParameter("printer");
        
        // 在服務(wù)器端打印
        if (printOnServer(content, printerName)) {
            response.getWriter().write("打印任務(wù)已提交");
        } else {
            response.getWriter().write("打印失敗");
        }
    }
    
    private boolean printOnServer(String content, String printerName) {
        try {
            PrinterJob job = PrinterJob.getPrinterJob();
            
            // 設(shè)置打印機(如果指定)
            if (printerName != null && !printerName.isEmpty()) {
                PrintService[] services = PrinterJob.lookupPrintServices();
                for (PrintService service : services) {
                    if (service.getName().equals(printerName)) {
                        job.setPrintService(service);
                        break;
                    }
                }
            }
            
            job.setPrintable(new Printable() {
                @Override
                public int print(Graphics g, PageFormat pf, int page) {
                    if (page > 0) return NO_SUCH_PAGE;
                    
                    Graphics2D g2d = (Graphics2D) g;
                    g2d.setFont(new Font("宋體", Font.PLAIN, 12));
                    g2d.drawString(content, 100, 100);
                    
                    return PAGE_EXISTS;
                }
            });
            
            job.print();
            return true;
            
        } catch (PrinterException e) {
            e.printStackTrace();
            return false;
        }
    }
    
    // 生成HTML頁面,包含打印按鈕
    protected void doGet(HttpServletRequest request, 
                        HttpServletResponse response) 
            throws ServletException, IOException {
        
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        out.println("<html>");
        out.println("<head><title>打印測試</title>");
        out.println("<script>");
        out.println("function printContent() {");
        out.println("  var content = document.getElementById('content').value;");
        out.println("  var printWindow = window.open('', '', 'width=800,height=600');");
        out.println("  printWindow.document.write('<html><head><title>打印</title></head><body>');");
        out.println("  printWindow.document.write('<pre>' + content + '</pre>');");
        out.println("  printWindow.document.write('</body></html>');");
        out.println("  printWindow.document.close();");
        out.println("  printWindow.print();");
        out.println("}");
        out.println("</script>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h2>打印測試</h2>");
        out.println("<textarea id='content' rows='10' cols='50'></textarea><br>");
        out.println("<button onclick='printContent()'>打印</button>");
        out.println("</body>");
        out.println("</html>");
    }
}

六、高級打印功能

import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import java.util.*;

public class AdvancedPrinter {
    
    // 批量打印
    public static void batchPrint(List<String> documents, String printerName) {
        PrintService printer = findPrinter(printerName);
        if (printer == null) {
            System.err.println("打印機未找到: " + printerName);
            return;
        }
        
        DocPrintJob job = printer.createPrintJob();
        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
        
        for (String doc : documents) {
            byte[] bytes = doc.getBytes();
            Doc document = new SimpleDoc(bytes, 
                DocFlavor.BYTE_ARRAY.AUTOSENSE, null);
            
            try {
                job.print(document, attributes);
                System.out.println("已打印文檔: " + doc.substring(0, Math.min(50, doc.length())));
                
                // 延遲一下,避免打印機過載
                Thread.sleep(1000);
                
            } catch (Exception e) {
                System.err.println("打印失敗: " + e.getMessage());
            }
        }
    }
    
    // 查找打印機
    private static PrintService findPrinter(String printerName) {
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        for (PrintService service : services) {
            if (service.getName().contains(printerName)) {
                return service;
            }
        }
        return null;
    }
    
    // 獲取打印機狀態(tài)
    public static void checkPrinterStatus(String printerName) {
        PrintService printer = findPrinter(printerName);
        if (printer == null) {
            System.out.println("打印機未找到");
            return;
        }
        
        Attribute[] attributes = printer.getAttributes().toArray();
        System.out.println("打印機狀態(tài): " + printer.getName());
        
        for (Attribute attr : attributes) {
            System.out.println("  " + attr.getName() + ": " + attr);
        }
    }
    
    // 打印設(shè)置類
    public static class PrintSettings {
        private String printerName;
        private int copies = 1;
        private boolean duplex = false;
        private MediaSizeName paperSize = MediaSizeName.ISO_A4;
        private OrientationRequested orientation = OrientationRequested.PORTRAIT;
        
        // getters and setters
        public String getPrinterName() { return printerName; }
        public void setPrinterName(String printerName) { this.printerName = printerName; }
        
        public int getCopies() { return copies; }
        public void setCopies(int copies) { this.copies = copies; }
        
        public boolean isDuplex() { return duplex; }
        public void setDuplex(boolean duplex) { this.duplex = duplex; }
        
        public MediaSizeName getPaperSize() { return paperSize; }
        public void setPaperSize(MediaSizeName paperSize) { this.paperSize = paperSize; }
        
        public OrientationRequested getOrientation() { return orientation; }
        public void setOrientation(OrientationRequested orientation) { this.orientation = orientation; }
    }
}

七、實用工具類

import java.awt.*;
import java.awt.print.*;
import javax.print.*;
import javax.print.attribute.*;
import java.io.*;
import java.util.*;

public class PrintUtility {
    
    // 打印圖片文件
    public static boolean printImageFile(File imageFile) {
        try {
            PrinterJob job = PrinterJob.getPrinterJob();
            
            job.setPrintable(new Printable() {
                @Override
                public int print(Graphics g, PageFormat pf, int pageIndex) {
                    if (pageIndex > 0) return NO_SUCH_PAGE;
                    
                    Graphics2D g2d = (Graphics2D) g;
                    Image image = Toolkit.getDefaultToolkit().getImage(
                        imageFile.getAbsolutePath());
                    
                    // 等待圖片加載
                    MediaTracker tracker = new MediaTracker(new Component() {});
                    tracker.addImage(image, 0);
                    try {
                        tracker.waitForID(0);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    
                    // 計算縮放比例
                    double pageWidth = pf.getImageableWidth();
                    double pageHeight = pf.getImageableHeight();
                    double imageWidth = image.getWidth(null);
                    double imageHeight = image.getHeight(null);
                    
                    double scale = Math.min(
                        pageWidth / imageWidth,
                        pageHeight / imageHeight
                    );
                    
                    int scaledWidth = (int) (imageWidth * scale);
                    int scaledHeight = (int) (imageHeight * scale);
                    
                    // 居中繪制
                    int x = (int) pf.getImageableX() + 
                           (int) ((pageWidth - scaledWidth) / 2);
                    int y = (int) pf.getImageableY() + 
                           (int) ((pageHeight - scaledHeight) / 2);
                    
                    g2d.drawImage(image, x, y, scaledWidth, scaledHeight, null);
                    
                    return PAGE_EXISTS;
                }
            });
            
            if (job.printDialog()) {
                job.print();
                return true;
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return false;
    }
    
    // 打印HTML到PDF再打印
    public static void printHTMLAsPDF(String htmlContent) {
        try {
            // 創(chuàng)建臨時HTML文件
            File htmlFile = File.createTempFile("print", ".html");
            try (FileWriter writer = new FileWriter(htmlFile)) {
                writer.write(htmlContent);
            }
            
            // 使用wkhtmltopdf轉(zhuǎn)換為PDF(需要安裝wkhtmltopdf)
            File pdfFile = File.createTempFile("print", ".pdf");
            String command = String.format("wkhtmltopdf %s %s", 
                htmlFile.getAbsolutePath(), pdfFile.getAbsolutePath());
            
            Process process = Runtime.getRuntime().exec(command);
            process.waitFor();
            
            // 打印PDF
            printPDF(pdfFile);
            
            // 清理臨時文件
            htmlFile.delete();
            pdfFile.delete();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private static void printPDF(File pdfFile) {
        // 使用系統(tǒng)打印命令
        try {
            String os = System.getProperty("os.name").toLowerCase();
            
            if (os.contains("win")) {
                // Windows
                Runtime.getRuntime().exec(
                    "rundll32 SHELL32.DLL,ShellExec_RunDLL " +
                    "msprint2.dll,MyPrint " + pdfFile.getAbsolutePath()
                );
            } else if (os.contains("mac")) {
                // Mac
                Runtime.getRuntime().exec(
                    "lp " + pdfFile.getAbsolutePath()
                );
            } else {
                // Linux
                Runtime.getRuntime().exec(
                    "lp " + pdfFile.getAbsolutePath()
                );
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    // 測試方法
    public static void main(String[] args) {
        // 測試打印文本
        PrinterJob job = PrinterJob.getPrinterJob();
        
        job.setPrintable(new Printable() {
            @Override
            public int print(Graphics g, PageFormat pf, int page) {
                if (page > 0) return NO_SUCH_PAGE;
                
                Graphics2D g2d = (Graphics2D) g;
                g2d.setFont(new Font("Arial", Font.BOLD, 16));
                g2d.drawString("測試打印", 100, 100);
                
                g2d.setFont(new Font("Arial", Font.PLAIN, 12));
                g2d.drawString("當(dāng)前時間: " + new Date(), 100, 150);
                
                // 繪制表格
                int startY = 200;
                g2d.drawLine(100, startY, 300, startY);
                g2d.drawString("項目", 110, startY - 5);
                g2d.drawString("數(shù)量", 210, startY - 5);
                
                startY += 30;
                g2d.drawString("商品A", 110, startY);
                g2d.drawString("10", 210, startY);
                
                return PAGE_EXISTS;
            }
        });
        
        try {
            if (job.printDialog()) {
                job.print();
            }
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }
}

八、使用注意事項

1.依賴管理(Maven)

<!-- PDFBox -->
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.27</version>
</dependency>

<!-- iText -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

<!-- 圖形處理 -->
<dependency>
    <groupId>com.twelvemonkeys.imageio</groupId>
    <artifactId>imageio-core</artifactId>
    <version>3.8.2</version>
</dependency>

2.錯誤處理

public class SafePrinter {
    public static boolean safePrint(Runnable printTask) {
        try {
            printTask.run();
            return true;
        } catch (PrinterException e) {
            System.err.println("打印機錯誤: " + e.getMessage());
            return false;
        } catch (SecurityException e) {
            System.err.println("安全權(quán)限錯誤: " + e.getMessage());
            return false;
        } catch (Exception e) {
            System.err.println("未知錯誤: " + e.getMessage());
            return false;
        }
    }
}

3.異步打印

public class AsyncPrinter {
    public static void printAsync(String content) {
        new Thread(() -> {
            try {
                PrinterJob job = PrinterJob.getPrinterJob();
                job.setPrintable((g, pf, page) -> {
                    // 打印邏輯
                    return PAGE_EXISTS;
                });
                job.print();
            } catch (PrinterException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

總結(jié)

選擇打印方法:

  1. 簡單文本打印:使用PrinterJobPrintable接口
  2. 復(fù)雜文檔打印:使用PDFBox或iText生成PDF后打印
  3. Web應(yīng)用打印:使用Servlet或生成HTML/PDF
  4. 跨平臺需求:使用Java內(nèi)置API,或調(diào)用系統(tǒng)命令

注意事項:

  • Java的打印API在不同操作系統(tǒng)上可能有差異
  • 處理大圖片時注意內(nèi)存使用
  • 生產(chǎn)環(huán)境中應(yīng)添加完善的錯誤處理
  • 考慮使用異步打印避免阻塞主線程
  • 注意字體和編碼問題(特別是中文)

以上就是Java調(diào)用打印機打印圖片和文本的多種方法的詳細(xì)內(nèi)容,更多關(guān)于Java打印機打印圖片和文本的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 中 Reference用法詳解

    Java 中 Reference用法詳解

    這篇文章主要介紹了Java 中 Reference用法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java的堵塞隊列BlockingQueue詳解

    Java的堵塞隊列BlockingQueue詳解

    這篇文章主要介紹了Java的堵塞隊列BlockingQueue詳解,阻塞隊列常用于生產(chǎn)者和消費者的場景,生產(chǎn)者是向隊列里添加元素的線程,消費者是從隊列里取元素的線程,需要的朋友可以參考下
    2023-12-12
  • Java 消息的可靠性投遞實踐建議

    Java 消息的可靠性投遞實踐建議

    文章詳細(xì)介紹了消息可靠性投遞(ReliableDelivery)的概念、面臨的挑戰(zhàn)及關(guān)鍵實現(xiàn)機制,生產(chǎn)端通過事務(wù)機制、確認(rèn)機制、本地消息表和消息持久化等技術(shù)保證消息不丟失、不重復(fù)、按順序傳遞,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • SpringBoot中的配置類(@Configuration)

    SpringBoot中的配置類(@Configuration)

    這篇文章主要介紹了SpringBoot中的配置類(@Configuration),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java多態(tài)的向上轉(zhuǎn)型的概念及實例分析

    java多態(tài)的向上轉(zhuǎn)型的概念及實例分析

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于java多態(tài)的向上轉(zhuǎn)型的概念及實例分析,對此有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-05-05
  • java整合itext?pdf實現(xiàn)自定義PDF文件格式導(dǎo)出方式

    java整合itext?pdf實現(xiàn)自定義PDF文件格式導(dǎo)出方式

    Spring?Boot整合iTextPDF實現(xiàn)自定義PDF導(dǎo)出,按周次和星期顯示打卡記錄打勾,需定義數(shù)據(jù)VO、表格結(jié)構(gòu),確保所有單元格填充(含空值),測試接口生成格式正確的PDF文件
    2025-07-07
  • maven搭建java ee項目圖文教程

    maven搭建java ee項目圖文教程

    這篇文章主要為大家詳細(xì)介紹了maven搭建java ee項目圖文教程,感興趣的小伙伴們可以參考一下
    2016-04-04
  • SpringCloud微服務(wù)踩坑記錄分享

    SpringCloud微服務(wù)踩坑記錄分享

    本文記錄了作者在使用SpringCloud微服務(wù)時遇到的問題,首先,作者嘗試修改配置文件中的service-name和instance-id,但仍然無法解決問題,后來,作者嘗試更換SpringCloud版本為2.2.5,并搭配Hoxton.SR3版本,問題得以解決
    2024-11-11
  • 一文帶你掌握J(rèn)ava8強大的StreamAPI

    一文帶你掌握J(rèn)ava8強大的StreamAPI

    Java8API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數(shù)據(jù)。Stream 使用一種類似用SQL 語句從數(shù)據(jù)庫查詢數(shù)據(jù)的直觀方式來提供一種對 Java 集合運算和表達(dá)的高階抽象。Stream API可以極大提高Java程序員的生產(chǎn)力,讓程序員寫出高效率、干凈、簡潔的代碼
    2021-10-10
  • Java集合和數(shù)組的區(qū)別

    Java集合和數(shù)組的區(qū)別

    本文主要介紹了Java集合和數(shù)組的區(qū)別。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02

最新評論

高阳县| 晋宁县| 罗定市| 绿春县| 海宁市| 武汉市| 辽阳县| 开封县| 太仆寺旗| 常山县| 彩票| 宁河县| 安西县| 西乌| 海安县| 济宁市| 安国市| 永宁县| 乌什县| 邢台县| 东港市| 阿图什市| 涿鹿县| 峨山| 杭锦后旗| 牙克石市| 黄大仙区| 邛崃市| 丰原市| 无极县| 岗巴县| 白河县| 揭东县| 金乡县| 溧阳市| 鄂托克旗| 德庆县| 常山县| 高要市| 玛纳斯县| 通许县|