连接打印机打印excel 我写了一个应用程序,我用poi生成了excel表格, 想问下怎么通过java连接打印机打印excel表格...网上的方法太杂,有人说用ireport和jasperReport可以实现,不过没有例子,时间又紧..... 希望大家给点例子... 如果不能用java直接打印excel的话那能用什么方式代替...最后还是先谢谢大家, 最好贴代码例子,可以的话直接贴出来,方便其他人学习,太多的话就发到,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问下:“ 通过java连接打印机打印excel表格” 什么意思 ? 我是想能不能把excel表格转成流的方式传给打印机,然后打印。 就像打开Excel后有个打印的按钮,一点,打印。。 你是想不打开 excel, java程序直接调打印机,批量打印excel里面的内容吗 ? 如果是这样, 那只有坐等高人了 ! 不是批量,就打印一张excel表格, 如果不能这样的话其他有没有其他方法,因为我要打印的是表格, 我能一行行打印字符串,但是这样的话还要自己画那些表格线,所以问下能不能直接用代码打开excel,再连接打印机打印.... /* * To change this template, choose Tools | Templates * and open the template in the editor. */package javaapplication2;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Shape;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.font.FontRenderContext;import java.awt.font.TextLayout;import java.awt.geom.AffineTransform;import java.awt.geom.GeneralPath;import java.awt.geom.Line2D;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import java.awt.print.PageFormat;import java.awt.print.Printable;import java.awt.print.PrinterException;import java.awt.print.PrinterJob;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;/** * * @author Stephen */public class PrintTest{ public static void main(String[] args) { JFrame frame = new PrintTestFrame(); frame.show(); }}class PrintTestFrame extends JFrame implements ActionListener{ public PrintTestFrame() { setTitle( "PrintTest "); setSize(500, 500); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); Container contentPane = getContentPane(); canvas = new PrintPanel(); // contentPane.add(canvas, "Center "); contentPane.add(canvas,BorderLayout.CENTER); JPanel buttonPanel = new JPanel(); printButton = new JButton( "Print "); buttonPanel.add(printButton); printButton.addActionListener(this); pageSetupButton = new JButton( "Page setup "); buttonPanel.add(pageSetupButton); pageSetupButton.addActionListener(this); // contentPane.add(buttonPanel, "North "); contentPane.add(buttonPanel, BorderLayout.NORTH); } public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if (source == printButton) { PrinterJob printJob = PrinterJob.getPrinterJob(); if (pageFormat == null) pageFormat = printJob.defaultPage(); printJob.setPrintable(canvas, pageFormat); if (printJob.printDialog()) { try { printJob.print(); } catch (PrinterException exception) { JOptionPane.showMessageDialog(this, exception); } } } else if (source == pageSetupButton) { PrinterJob printJob = PrinterJob.getPrinterJob(); if (pageFormat == null) pageFormat = printJob.defaultPage(); pageFormat = printJob.pageDialog(pageFormat); } } private JButton printButton; private JButton pageSetupButton; private PrintPanel canvas; private PageFormat pageFormat;}class PrintPanel extends JPanel implements Printable{ @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g;// drawPage(g2); } public int print(Graphics g, PageFormat pf, int page)throws PrinterException { if (page >= 1) return Printable.NO_SUCH_PAGE; Graphics2D g2 = (Graphics2D)g; g2.setPaint(Color.black); g2.translate(pf.getImageableX(), pf.getImageableY()); g2.draw(new Rectangle2D.Double(0, 0, pf.getImageableWidth(), pf.getImageableHeight())); System.out.println("pf.getImageableWidth()" + pf.getImageableWidth()); System.out.println("pf.getImageableHeight()" + pf.getImageableHeight()); drawPage(g2); return Printable.PAGE_EXISTS; } public void drawPage(Graphics2D g2) { FontRenderContext context = g2.getFontRenderContext(); Font f = new Font( "宋体", Font.PLAIN, 18); GeneralPath clipShape = new GeneralPath(); TextLayout layout = new TextLayout( "公司订购单 ", f, context); AffineTransform transform = AffineTransform.getTranslateInstance(50, 18); Shape outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "公司名: AAAA 日期:2010-10-10 ", f, context); transform = AffineTransform.getTranslateInstance(0, 50); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "品名 重量/斤 单价/元 金额/元 ", f, context); transform = AffineTransform.getTranslateInstance(0, 100); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油1 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 150); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油2 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 200); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油3 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 250); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油4 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 300); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油5 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 350); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油6 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 400); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油7 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 450); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油8 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 500); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油9 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 550); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油10 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 600); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油11 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 650); outline = layout.getOutline(transform); clipShape.append(outline, false); layout = new TextLayout( "花生油12 2 2.2 4.4 ", f, context); transform = AffineTransform.getTranslateInstance(0, 700); outline = layout.getOutline(transform); clipShape.append(outline, false); g2.draw(clipShape); g2.clip(clipShape); final int NLINES =50; Point2D p = new Point2D.Double(0, 0); for (int i = 0; i < NLINES; i++) { double x = (2 * getWidth() * i) / NLINES; double y = (2 * getHeight() * (NLINES - 1 - i)) / NLINES; Point2D q = new Point2D.Double(x, y); g2.draw(new Line2D.Double(p, q)); } }}用上面的代码能打印,但是不知道怎么分页,望高手指点。 如果是windows平台,建议调windows API. 是windows平台,怎么调用windoss API 参考这里http://www.iplab.cs.tsukuba.ac.jp/liuxj/jdk1.2/zh/docs/guide/2d/spec/j2d-print.fm3.html Vmware+Ubuntu下配置Java环境,Tomcat出现问题 急!急!急! JAVA Swing中 怎么判断panel上的滚动条是否出现? 选择题 JAVA简单问题,请求帮助!~~~~~~~ 打包后的类不能双击来运行? java项目缺少插件 界面布局问题 问一个关于Applet鼠标绘图的问题 [求助]关于wait()和notify()的学习求助 高分请教一个概念性问题关于接口与构造函数方法? 求教:我的程序引入jxl包,我把我的程序打成jar包后,运行报NoClassFoundError:jxl/write/WritableCell 想当然的问题
我是想能不能把excel表格转成流的方式传给打印机,然后打印。 就像打开Excel后有个打印的按钮,一点,打印。。
不是批量,就打印一张excel表格, 如果不能这样的话其他有没有其他方法,因为我要打印的是表格, 我能一行行打印字符串,但是这样的话还要自己画那些表格线,所以问下能不能直接用代码打开excel,再连接打印机打印....
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/package javaapplication2;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;/**
*
* @author Stephen
*/
public class PrintTest
{ public static void main(String[] args)
{ JFrame frame = new PrintTestFrame();
frame.show();
}
}class PrintTestFrame extends JFrame implements ActionListener
{
public PrintTestFrame()
{
setTitle( "PrintTest ");
setSize(500, 500);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} ); Container contentPane = getContentPane();
canvas = new PrintPanel();
// contentPane.add(canvas, "Center ");
contentPane.add(canvas,BorderLayout.CENTER);
JPanel buttonPanel = new JPanel();
printButton = new JButton( "Print ");
buttonPanel.add(printButton);
printButton.addActionListener(this); pageSetupButton = new JButton( "Page setup ");
buttonPanel.add(pageSetupButton);
pageSetupButton.addActionListener(this); // contentPane.add(buttonPanel, "North ");
contentPane.add(buttonPanel, BorderLayout.NORTH);
} public void actionPerformed(ActionEvent event)
{
Object source = event.getSource();
if (source == printButton)
{ PrinterJob printJob = PrinterJob.getPrinterJob();
if (pageFormat == null)
pageFormat = printJob.defaultPage();
printJob.setPrintable(canvas, pageFormat);
if (printJob.printDialog())
{ try
{ printJob.print();
}
catch (PrinterException exception)
{ JOptionPane.showMessageDialog(this, exception);
}
}
}
else if (source == pageSetupButton)
{ PrinterJob printJob = PrinterJob.getPrinterJob();
if (pageFormat == null)
pageFormat = printJob.defaultPage();
pageFormat = printJob.pageDialog(pageFormat);
}
} private JButton printButton;
private JButton pageSetupButton; private PrintPanel canvas;
private PageFormat pageFormat;
}class PrintPanel extends JPanel implements Printable
{
@Override
public void paintComponent(Graphics g)
{ super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
// drawPage(g2);
} public int print(Graphics g, PageFormat pf, int page)throws PrinterException
{
if (page >= 1)
return Printable.NO_SUCH_PAGE;
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.black);
g2.translate(pf.getImageableX(), pf.getImageableY());
g2.draw(new Rectangle2D.Double(0, 0, pf.getImageableWidth(), pf.getImageableHeight()));
System.out.println("pf.getImageableWidth()" + pf.getImageableWidth());
System.out.println("pf.getImageableHeight()" + pf.getImageableHeight()); drawPage(g2);
return Printable.PAGE_EXISTS;
} public void drawPage(Graphics2D g2)
{
FontRenderContext context = g2.getFontRenderContext();
Font f = new Font( "宋体", Font.PLAIN, 18);
GeneralPath clipShape = new GeneralPath(); TextLayout layout = new TextLayout( "公司订购单 ", f, context);
AffineTransform transform = AffineTransform.getTranslateInstance(50, 18);
Shape outline = layout.getOutline(transform);
clipShape.append(outline, false); layout = new TextLayout( "公司名: AAAA 日期:2010-10-10 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 50);
outline = layout.getOutline(transform);
clipShape.append(outline, false); layout = new TextLayout( "品名 重量/斤 单价/元 金额/元 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 100);
outline = layout.getOutline(transform);
clipShape.append(outline, false); layout = new TextLayout( "花生油1 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 150);
outline = layout.getOutline(transform);
clipShape.append(outline, false); layout = new TextLayout( "花生油2 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 200);
outline = layout.getOutline(transform);
clipShape.append(outline, false);
layout = new TextLayout( "花生油3 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 250);
outline = layout.getOutline(transform);
clipShape.append(outline, false);
layout = new TextLayout( "花生油4 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 300);
outline = layout.getOutline(transform);
clipShape.append(outline, false);
layout = new TextLayout( "花生油5 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 350);
outline = layout.getOutline(transform);
clipShape.append(outline, false);
layout = new TextLayout( "花生油6 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 400);
outline = layout.getOutline(transform);
clipShape.append(outline, false); layout = new TextLayout( "花生油7 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 450);
outline = layout.getOutline(transform);
clipShape.append(outline, false); layout = new TextLayout( "花生油8 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 500);
outline = layout.getOutline(transform);
clipShape.append(outline, false); layout = new TextLayout( "花生油9 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 550);
outline = layout.getOutline(transform);
clipShape.append(outline, false); layout = new TextLayout( "花生油10 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 600);
outline = layout.getOutline(transform);
clipShape.append(outline, false); layout = new TextLayout( "花生油11 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 650);
outline = layout.getOutline(transform);
clipShape.append(outline, false); layout = new TextLayout( "花生油12 2 2.2 4.4 ", f, context);
transform = AffineTransform.getTranslateInstance(0, 700);
outline = layout.getOutline(transform);
clipShape.append(outline, false); g2.draw(clipShape);
g2.clip(clipShape); final int NLINES =50;
Point2D p = new Point2D.Double(0, 0);
for (int i = 0; i < NLINES; i++)
{ double x = (2 * getWidth() * i) / NLINES;
double y = (2 * getHeight() * (NLINES - 1 - i)) / NLINES;
Point2D q = new Point2D.Double(x, y);
g2.draw(new Line2D.Double(p, q));
}
}
}
用上面的代码能打印,但是不知道怎么分页,望高手指点。
是windows平台,怎么调用windoss API
http://www.iplab.cs.tsukuba.ac.jp/liuxj/jdk1.2/zh/docs/guide/2d/spec/j2d-print.fm3.html