关于JAVA如何调用打印机的问题?

wubingbing 2004-07-11 01:02:03
在JAVA中要用什么函数调用打印机打印列表信息?
...全文
1520 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
newdayhope 2004-08-10
  • 打赏
  • 举报
回复
阿米。保存
wubingbing 2004-08-10
  • 打赏
  • 举报
回复
太感激了,谢谢
shuneng 2004-08-05
  • 打赏
  • 举报
回复
gz
Frank1982 2004-08-05
  • 打赏
  • 举报
回复
import javax.print.*;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.OrientationRequested;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.print.Printable;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;
import java.awt.*;
import javax.swing.*;
import java.lang.*;
import java.awt.font.FontRenderContext;
import java.util.Arrays;
import java.lang.reflect.Array;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class printtest extends JFrame implements ActionListener{
int PAGES = 1 ;
private String printStr = null ;
private int printFlag = -1 ;
public JFrame mainFrame = new JFrame() ;
public JTextArea area = null ;
private JButton print = new JButton() ;
private JScrollPane scrollPane ;
private JPanel btnPanel = new JPanel();
public printtest() {
Container contentPane = mainFrame.getContentPane();
mainFrame.setSize(new Dimension(400,300));
mainFrame.setTitle("Print example");
area = new JTextArea(30,30) ;
area.setText("aaaaaaaaaaaaaddddddddddddddddd");
scrollPane = new JScrollPane(area) ;
print = new JButton("Print") ;
print.addActionListener(this);
btnPanel.add(print) ;
contentPane.add(btnPanel,BorderLayout.SOUTH) ;
contentPane.add(area,BorderLayout.CENTER) ;
mainFrame.pack();
mainFrame.show();
}

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; //存在打印页时,继续打印工作
//return 1 ;
}

private void drawCurrentPageText(Graphics2D g2, PageFormat pf, int page) {
String s = getDrawText(printStr)[page];//获取当前页的待打印文本内容
FontRenderContext context = g2.getFontRenderContext();//获取默认字体及相应的尺寸
Font f = area.getFont();
String drawText;
float ascent = 16; //给定字符点阵
int k, i = f.getSize(), lines = 0;
while(s.length() > 0 && lines < 30) //每页限定在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 < 30) //不够一页时
{
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; //返回需打印的总页数
}

public void actionPerformed(ActionEvent evt) {
printText2Action();
}
//以jdk1.4新版本提供的API实现打印动作按钮监听,并完成具体的打印操作
private void printText2Action() {
printFlag = 0; //打印标志清零
printStr = area.getText().trim();//获取需要打印的目标文本
//Array.newInstance(componntType,printStr.length()) ;

System.out.println("the content are :::");
System.out.println(printStr);
//System.out.println("the area documents is :"+this.area.g);

if (printStr != null && printStr.length() > 0) //当打印内容不为空时
{
PAGES = getPagesCount(printStr); //获取打印总页数
//DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;//指定打印输出格式
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;//指定打印输出格式
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob job = printService.createPrintJob();//创建打印作业
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();//设置打印属性
DocAttributeSet das = new HashDocAttributeSet();//指定打印内容
Doc doc = new SimpleDoc(this, flavor, das);//不显示打印对话框,直接进行打印工作
try {
job.print(doc, pras); //进行每一页的具体打印操作
}
catch(PrintException pe) {
pe.printStackTrace();
}
}
else {
JOptionPane.showConfirmDialog(null,
"Sorry, Printer Job is Empty, Print Cancelled!",
"Empty", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
}
}

//test
public static void main(String[] args) {
printtest test = new printtest() ;
}

}
这个是一个很完整的打印程序
Frank1982 2004-08-05
  • 打赏
  • 举报
回复
import java.awt.*;
import java.awt.print.*;
import javax.swing.*;

public class ClipTest {

protected JTable table;

public static void main(String[] args) {
ClipTest ct = new ClipTest();
}

public ClipTest() {
table = new JTable();
table.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"ts", "etry", null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null}
},
new String [] {
"厂商编号", "厂商名称", "应付款金额", "预付款金额", "实际欠款", "联系人", "联系电话", "邮政编码", "通信地址", "入档日期"
}
) {
boolean[] canEdit = new boolean [] {
false, false, false, false, false, false, false, false, false, false
};

public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
table.setSize(table.getPreferredSize());
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(new MyPrintable());
try {
job.print();
} catch (PrinterException pe) {};
System.exit(0);
}

class MyPrintable implements Printable {

public int print(Graphics g, PageFormat pf, int index) {
int positionX = (int)(pf.getImageableX());
int positionY = (int)(pf.getImageableY());
int width = (int)(pf.getImageableWidth());
g.clipRect(positionX, positionY, width, 500);
g.translate(positionX, positionY);
int pixelIndex = index * 500;
if (pixelIndex < table.getHeight()) {
g.translate(0, -pixelIndex);
table.paint(g);
return Printable.PAGE_EXISTS;
}
return Printable.NO_SUCH_PAGE;
}

}

}
这个是打印一个table
wubingbing 2004-07-26
  • 打赏
  • 举报
回复
谢谢各位了!
朋友别哭 2004-07-24
  • 打赏
  • 举报
回复
up
Javatomchen 2004-07-24
  • 打赏
  • 举报
回复
javax.print.PrintServiceLookup的lookupPrintServices方法
draco2002 2004-07-20
  • 打赏
  • 举报
回复
是啊,java的打印确实不方便,建议楼主看一下这个:
http://www-900.ibm.com/developerWorks/cn/java/l-javaprint/index.shtml

我也在看,看完后给你写个完整的程序。
jianeng310 2004-07-16
  • 打赏
  • 举报
回复
up
听说不是很方便

50,542

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧