我用 java,swing实现了一个系统,最后有要打印的东西,请问各位高手怎么实现,当点击打印按钮时就把当前内容打印出来阿

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【changml0929】截止到2008-06-30 15:28:15的历史汇总数据(不包括此帖):
    发帖数:29                 发帖分:600                
    结贴数:5                  结贴分:100                
    未结数:24                 未结分:500                
    结贴率:17.24 %            结分率:16.67 %            
      

  2.   

    内容比较多
    你去搜一下OpenSwing,那里面有个例子的
    我之前写的记事本里面用的打印就是参考它的
      

  3.   

    打印什么,是不是报表?可以看看jasperReport和jaspeAssistant
      

  4.   

    网上抄的,你看能用不import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.font.FontRenderContext;
    import java.awt.print.PageFormat;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;import javax.swing.JOptionPane;public class TempTest implements Printable {    /**
         * @param args
         */
        public static void main(String[] args) {
            TempTest tt = new TempTest();
        }    private String printStr;    private int PAGES;    public TempTest() {
            this.printTextAction();
        }    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
            Graphics2D g2 = (Graphics2D) g;
            g2.setPaint(Color.black); // 设置打印颜色为黑色
            if (page >= PAGES) // 当打印页号大于需要打印的总页数时,打印工作结束
                return Printable.NO_SUCH_PAGE;
            g2.translate(pf.getImageableX(), pf.getImageableY());// 转换坐标,确定打印边界
            drawCurrentPageText(g2, pf, page); // 打印当前页文本
            return Printable.PAGE_EXISTS; // 存在打印页时,继续打印工作
        }    /* 打印指定页号的具体文本内容 */
        private void drawCurrentPageText(Graphics2D g2, PageFormat pf, int page) {
            String s = getDrawText(printStr)[page];// 获取当前页的待打印文本内容
            // 获取默认字体及相应的尺寸
            FontRenderContext context = g2.getFontRenderContext();
            Font f = g2.getFont();
            String drawText;
            float ascent = 16; // 给定字符点阵
            int k, i = f.getSize(), lines = 0;
            while (s.length() > 0 && lines < 54) // 每页限定在54行以内
            {
                k = s.indexOf('\n'); // 获取每一个回车符的位置
                if (k != -1) // 存在回车符
                {
                    lines += 1; // 计算行数
                    drawText = s.substring(0, k); // 获取每一行文本
                    g2.drawString(drawText, 0, ascent); // 具体打印每一行文本,同时走纸移位
                    if (s.substring(k + 1).length() > 0) {
                        s = s.substring(k + 1); // 截取尚未打印的文本
                        ascent += i;
                    }
                } else // 不存在回车符
                {
                    lines += 1; // 计算行数
                    drawText = s; // 获取每一行文本
                    g2.drawString(drawText, 0, ascent); // 具体打印每一行文本,同时走纸移位
                    s = ""; // 文本已结束
                }
            }
        }    /* 将打印目标文本按页存放为字符串数组 */
        public String[] getDrawText(String s) {
            String[] drawText = new String[PAGES];// 根据页数初始化数组
            for (int i = 0; i < PAGES; i++)
                drawText[i] = ""; // 数组元素初始化为空字符串        int k, suffix = 0, lines = 0;
            while (s.length() > 0) {
                if (lines < 54) // 不够一页时
                {
                    k = s.indexOf('\n');
                    if (k != -1) // 存在回车符
                    {
                        lines += 1; // 行数累加
                        // 计算该页的具体文本内容,存放到相应下标的数组元素
                        drawText[suffix] = drawText[suffix] + s.substring(0, k + 1);
                        if (s.substring(k + 1).length() > 0) s = s.substring(k + 1);
                    } else {
                        lines += 1; // 行数累加
                        // 将文本内容存放到相应的数组元素
                        drawText[suffix] = drawText[suffix] + s;
                        s = "";
                    }
                } else // 已满一页时
                {
                    lines = 0; // 行数统计清零
                    suffix++; // 数组下标加1
                }
            }
            return drawText;
        }    public int getPagesCount(String curStr) {
            int page = 0;
            int position, count = 0;
            String str = curStr;
            while (str.length() > 0) // 文本尚未计算完毕
            {
                position = str.indexOf('\n'); // 计算回车符的位置
                count += 1; // 统计行数
                if (position != -1) str = str.substring(position + 1); // 截取尚未计算的文本
                else
                    str = ""; // 文本已计算完毕
            }
            if (count > 0) page = count / 54 + 1; // 以总行数除以54获取总页数
            return page; // 返回需打印的总页数
        }    private void printTextAction() {
            // printStr = area.getText().trim(); // 获取需要打印的目标文本
            printStr = "aaaaa"; // 获取需要打印的目标文本
            if (printStr != null && printStr.length() > 0) // 当打印内容不为空时
            {
                PAGES = getPagesCount(printStr); // 获取打印总页数
                PrinterJob myPrtJob = PrinterJob.getPrinterJob(); // 获取默认打印作业
                PageFormat pageFormat = myPrtJob.defaultPage(); // 获取默认打印页面格式
                myPrtJob.setPrintable(this, pageFormat); // 设置打印工作
                if (myPrtJob.printDialog()) // 显示打印对话框
                {
                    try {
                        myPrtJob.print(); // 进行每一页的具体打印操作
                    } catch (PrinterException pe) {
                        pe.printStackTrace();
                    }
                }
            } else {
                // 如果打印内容为空时,提示用户打印将取消
                JOptionPane.showConfirmDialog(
                    null,
                    "Sorry, Printer Job is Empty, Print Cancelled!",
                    "Empty",
                    JOptionPane.DEFAULT_OPTION,
                    JOptionPane.WARNING_MESSAGE);
            }
        }}
      

  5.   

    对 搜索一下OpenSwing的demo
    曾经看过这个的介绍
    不过现在找不到了