java打印功能,java实现打印功能

发布时间:2023-01-09

本文目录一览:

  1. java如何实现打印功能?
  2. [如何在java web项目中实现打印功能,比如一](#如何在java web项目中实现打印功能,比如一)
  3. 在java中什么是打印?什么是打印功能?
  4. java怎么实现打印机打印

java如何实现打印功能?

Print.java--打印内容定义

import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.util.*;
import java.io.*;
public class Print implements Printable {
    int m_wPage;
    int m_hPage;
    int m_orientation;
    Printable m_target;
    int maxNumPage = 1;
    String title = "数据表格打印";
    Font titleFont = new Font("黑体", Font.BOLD, 14);
    boolean hasTail = true;
    int tailAlign = 0;
    int headAlign = 0;
    int topSpace = 0;
    int leftSpace = 0;
    int yStart = 0;
    int yEnd = 0;
    int xStart = topSpace;
    int xEnd = 0;
    int x = 0, y = 0;
    String strTemp = "打印内容";
    public void doPrint() {
        try {
            m_orientation = PageFormat.PORTRAIT;
            // 设置打印对象,默认纸张
            PrinterJob prnJob = PrinterJob.getPrinterJob();
            PageFormat pageFormat = prnJob.defaultPage();
            pageFormat.setOrientation(m_orientation);
            m_wPage = (int) (pageFormat.getWidth());
            m_hPage = (int) (pageFormat.getHeight());
            // 将待打印的窗体根据默认纸张设置传入打印对象
            prnJob.setPrintable(this, pageFormat);
            if (!prnJob.printDialog()) return;
            prnJob.print();
        } catch (PrinterException ex) {
            ex.printStackTrace();
            System.err.println("打印错误:" + ex.toString());
        }
    }
    /**
     * 初始化打印参数
     */
    public void initPrintParameter() {
    }
    /**
     * 构造打印内容,以送打印机打印
     */
    public int print(Graphics pg, PageFormat pageFormat, int pageIndex) throws PrinterException {
        // 初始化打印参数
        initPrintParameter();
        // 将画布设置为页面大小
        pg.translate((int) pageFormat.getImageableX(), (int) pageFormat.getImageableY());
        int wPage = 0;
        int hPage = 0;
        // 根据打印机页面设置调整画布大小
        if (pageFormat.getOrientation() == pageFormat.PORTRAIT) {
            wPage = (int) pageFormat.getImageableWidth();
            hPage = (int) pageFormat.getImageableHeight();
        } else {
            wPage = (int) pageFormat.getImageableWidth();
            wPage += wPage / 2;
            hPage = (int) pageFormat.getImageableHeight();
            pg.setClip(0, 0, wPage, hPage);
        }
        wPage = wPage - 2 * leftSpace;
        hPage = hPage - 2 * topSpace;
        xStart = leftSpace;
        xEnd = wPage - 2;
        // 为画布设置颜色和字体
        int y = topSpace;
        pg.setFont(titleFont);
        pg.setColor(Color.black);
        // 画标题,并使其居中
        Font fn = pg.getFont();
        FontMetrics fm = pg.getFontMetrics();
        y += fm.getAscent();
        alignText(title, pg, y, xStart, xEnd, headAlign);
        y += 30;
        x = leftSpace + 2;
        Font headerFont = new Font("宋体", Font.BOLD, 14);
        pg.setFont(headerFont);
        fm = pg.getFontMetrics();
        int h = fm.getAscent();
        yStart = y - 1;
        y += h;
        pg.setFont(headerFont);
        fm = pg.getFontMetrics();
        int header = y;
        h = fm.getHeight();
        // 计算行高,每页行数,总行数和指定页码的起始行、结束行
        int rowH = Math.max(h, 10);
        int tailH = rowH + 30;
        int rowPerPage = 0;
        int leftPix = 0;
        if (hasTail) {
            rowPerPage = (hPage - header - tailH) / rowH;
            leftPix = (hPage - header - tailH) % rowH;
            yEnd = hPage - leftPix - tailH + 2;
        } else {
            rowPerPage = (hPage - header) / rowH;
            leftPix = (hPage - header) % rowH;
            yEnd = hPage - leftPix + 2;
        }
        pg.drawString(strTemp, x, y);
        // 画表格边框
        pg.drawLine(xStart, yStart, xStart, yEnd);
        pg.drawLine(xStart, yStart, xEnd, yStart);
        pg.drawLine(xEnd, yStart, xEnd, yEnd);
        pg.drawLine(xStart, yEnd, xEnd, yEnd);
        // 打印页码
        if (hasTail) {
            int pageNumber = pageIndex + 1;
            String s = "第" + pageNumber + "页";
            alignText(s, pg, yEnd + 30, xStart, xEnd, tailAlign);
        }
        System.gc();
        return PAGE_EXISTS;
    }
    /**
     * 文字排列,坐标在y处,显示范围(start-end)
     * 0表示居中显示,1表示左对齐,2表示右对齐
     */
    private void alignText(String s, Graphics pg, int y, int start, int end, int mode) {
        Font fn = pg.getFont();
        FontMetrics fm = pg.getFontMetrics();
        int wString = fm.stringWidth(s);
        int x = start;
        switch (mode) {
            case 0:
                if ((end - start - wString) > 0) x = start + (end - start - wString) / 2;
                break;
            case 1:
                break;
            case 2:
                if ((end - start - wString) > 0) x = start + (end - start - wString);
                break;
        }
        pg.drawString(s, x, y);
    }
    public static void main(String[] args) {
        Print p = new Print();
        p.doPrint();
    }
}

运行方法:

javac -d . Print.java
java Print

自己运行一下

如何在java web项目中实现打印功能,比如一

你可以了解下 jatoolsprint,目前所遇到的打印问题都可以解决。 不过要装一个控件,大小60K。 这是他们网上的介绍,你可以了解下。 jatoolsPrinter(杰表.打印控件)是一款实现网页套打的专用工具。作为web应用开发者,我们经常会遇到在浏览器中打印报表、票据的需求,这些需求浏览器本身的打印功能一般不能满足,如精确分页,套打等。这就需要有一种能解决常见的浏览器端打印问题的软件工具,这也是 jatoolsPrinter 的研发背景。 jatoolsPrinter 的特点是可以直接对web页面进行精确的分页打印。jatoolsPrinter 通过在网页中嵌入控件,解决了web客户端精确打印,批量打印,打印配置自动保留等问题。具体功能有:

  • 支持设置打印参数,指定输出打印机、纸张类型,打印方向(横、竖)等。
  • 支持html格式的页脚、页眉设置,也就是说,页脚页眉可设置图片等,如公司logo。
  • 支持程序分页与自动分页。
  • 支持打印参数自动保留,待下一次打印同一票据时,自动设置,这使客户端也可以控制打印参数。
  • 支持打印预览,支持预览时指定页、指定份数打印。
  • 支持直接打印指定票据的URL。
  • 支持票据及其附件的批量打印。
  • 支持取得本机中的可用打印机,可用纸张类型列表,帮您设计出更友好的参数设置界面。
  • 支持回调,可以帮助您在打印后自动处理有关事务,比如打印后自动关闭窗口、自动递交表单数据等。
  • 支持票据套打时,底图仅在打印预览时显示,不输出到打印机。
  • 小巧,整个控件只有60K。不需要额外的软件包支持。
  • 与您项目采用的技术标准无关,J2EE、.NET 项目均可。
  • IE 5.5+ 中适用。

在java中什么是打印?什么是打印功能?

如楼上所言,标准打印输出,System.out.println(); 如果不加 ln 则不换行打印输出(默认带 ln),当然更多时候是用键盘敲 syso 然后 Alt+/ 会直接打印输出 System.out.println();

java怎么实现打印机打印

接口 PrintServiceDocPrintJob 的工厂。PrintService 描述了打印机的功能,并可查询它来了解打印机支持的属性

package com.tj.print;
import java.io.File;
import java.io.FileInputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.ServiceUI;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.swing.JFileChooser;
public class PrintDemo1 {
    public static void main(String[] args) {
        JFileChooser fileChooser = new JFileChooser(); // 创建打印作业
        int state = fileChooser.showOpenDialog(null);
        if (state == fileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile(); // 获取选择的文件
            // 构建打印请求属性集
            HashPrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
            // 设置打印格式,因为未确定类型,所以选择autosense
            DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
            // 查找所有的可用的打印服务
            PrintService[] printService = PrintServiceLookup.lookupPrintServices(flavor, pras);
            // 定位默认的打印服务
            PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
            // 显示打印对话框
            PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, flavor, pras);
            if (service != null) {
                try {
                    DocPrintJob job = service.createPrintJob(); // 创建打印作业
                    FileInputStream fis = new FileInputStream(file); // 构造待打印的文件流
                    DocAttributeSet das = new HashDocAttributeSet();
                    Doc doc = new SimpleDoc(fis, flavor, das);
                    job.print(doc, pras);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}