用Java怎么向打印机输出尺寸设置发送设置图片原始尺寸打印的参数命

用java实现打印,java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用Graphics2D直接输出直接输出。
下面的例子实现了打印字符串,线(包括虚线)和打印图片。而且通过Paper的setImageableArea可以设置打印的区域和边距,让开发者随意的设置打印的位置。
package com.cn.
import java.awt.G
import java.awt.print.B
import java.awt.print.PageF
import java.awt.print.P
import java.awt.print.P
import java.awt.print.PrinterE
import java.awt.print.PrinterJ
import java.awt.*;
public class PrintTest implements Printable{
* @param Graphic指明打印的图形环境
* @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595&842点)
* @param pageIndex指明页号
public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {
System.out.println("pageIndex="+pageIndex);
Component c = null;
//print string
String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。";
//转换成Graphics2D
Graphics2D g2 = (Graphics2D)
//设置打印颜色为黑色
g2.setColor(Color.black);
//打印起点坐标
double x = pf.getImageableX();
double y = pf.getImageableY();
switch(pageIndex){
//设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)
//Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput
Font font = new Font("新宋体", Font.PLAIN, 9);
g2.setFont(font);//设置字体
//BasicStroke bs_3=new BasicStroke(0.5f);
float[] dash1 = {2.0f};
//设置打印线的属性。
//1.线宽 2、3、不知道,4、空白的宽度,5、虚线的宽度,6、偏移量
g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 2.0f, dash1, 0.0f));
//g2.setStroke(bs_3);//设置线宽
float heigth = font.getSize2D();//字体高度
System.out.println("x="+x);
// -1- 用Graphics2D直接输出
//首字符的基线(右下部)位于用户空间中的 (x, y) 位置处
//g2.drawLine(10,10,200,300);
Image src = Toolkit.getDefaultToolkit().getImage("F:\\workspace\\QQ.png");
g2.drawImage(src,(int)x,(int)y,c);
int img_Height=src.getHeight(c);
int img_width=src.getWidth(c);
//System.out.println("img_Height="+img_Height+"img_width="+img_width) ;
g2.drawString(str, (float)x, (float)y+1*heigth+img_Height);
g2.drawLine((int)x,(int)(y+1*heigth+img_Height+10),(int)x+200,(int)(y+1*heigth+img_Height+10));
g2.drawImage(src,(int)x,(int)(y+1*heigth+img_Height+11),c);
return PAGE_EXISTS;
return NO_SUCH_PAGE;
public static void main(String[] args) {
通俗理解就是书、文档
Book book = new Book();
设置成竖打
PageFormat pf = new PageFormat();
pf.setOrientation(PageFormat.PORTRAIT);
通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper p = new Paper();
p.setSize(590,840);//纸张大小
p.setImageableArea(10,10, 590,840);//A4(595 X 842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72
pf.setPaper(p);
把 PageFormat 和 Printable 添加到书中,组成一个页面
book.append(new PrintTest(), pf);
//获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob();
// 设置打印类
job.setPageable(book);
//可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印
boolean a=job.printDialog();
job.print();
job.cancel();
} catch (PrinterException e) {
e.printStackTrace();
下面的打印代码没有设置打印区域,默认为打印纸张的区域和边距,比如我们一般用的A4纸,打印的起点X和Y坐标则是72,72。无区域设置的代码:
package com.cn.
import java.awt.BasicS
import java.awt.C
import java.awt.C
import java.awt.F
import java.awt.G
import java.awt.Graphics2D;
import java.awt.I
import java.awt.T
import java.awt.print.*;
public class PrintTest1 implements Printable{
* @param Graphic指明打印的图形环境
* @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595&842点)
* @param pageIndex指明页号
public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {
System.out.println("pageIndex="+pageIndex);
Component c = null;
//print string
String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。";
//转换成Graphics2D
Graphics2D g2 = (Graphics2D)
//设置打印颜色为黑色
g2.setColor(Color.black);
/*Paper paper = pf.getPaper();//得到页面格式的纸张
paper.setSize(500,500);//纸张大小
paper.setImageableArea(0,0,500,500); //设置打印区域的大小
System.out.println(paper.getWidth());
System.out.println(paper.getHeight());
pf.setPaper(paper);//将该纸张作为格式 */
//打印起点坐标
double x = pf.getImageableX();
double y = pf.getImageableY();
switch(pageIndex){
//设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)
//Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput
Font font = new Font("新宋体", Font.PLAIN, 9);
g2.setFont(font);//设置字体
//BasicStroke bs_3=new BasicStroke(0.5f);
float[] dash1 = {4.0f};
g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 4.0f, dash1, 0.0f));
float heigth = font.getSize2D();//字体高度
System.out.println("x="+x);
//使用抗锯齿模式完成文本呈现
/*g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);*/
// -1- 用Graphics2D直接输出
//首字符的基线(右下部)位于用户空间中的 (x, y) 位置处
//g2.drawLine(10,10,200,10);
Image src = Toolkit.getDefaultToolkit().getImage("d://logo.gif");
g2.drawImage(src,(int)x,(int)y,c);
int img_Height=src.getHeight(c);
int img_width=src.getWidth(c);
//System.out.println("img_Height="+img_Height+"img_width="+img_width) ;
g2.drawString(str, (float)x, (float)y+1*heigth+img_Height);
g2.drawLine((int)x,(int)(y+1*heigth+img_Height+10),(int)x+200,(int)(y+1*heigth+img_Height+10));
g2.drawImage(src,(int)x,(int)(y+1*heigth+img_Height+11),c);
// -2- 直接构造TextLayout打印
/*FontRenderContext frc = g2.getFontRenderContext();
TextLayout layout = new TextLayout(str, font, frc);
layout.draw(g2, (float)x, (float)y+2*heigth);*/
// -3- 用LineBreakMeasurer进行打印
/*AttributedString text = new AttributedString(str);
text.addAttribute(TextAttribute.FONT, font);
LineBreakMeasurer lineBreaker = new LineBreakMeasurer(text.getIterator(), frc);
//每行字符显示长度(点)
double width = pf.getImageableWidth();
//首字符的基线位于用户空间中的 (x, y) 位置处
Point2D.Double pen = new Point2D.Double (100, y+3*heigth);
while ( (layout = lineBreaker.nextLayout( (float) width)) != null){
layout.draw(g2, (float)x, (float) pen.y);
pen.y += layout.getAscent();
return PAGE_EXISTS;
return NO_SUCH_PAGE;
public static void main(String[] args) {
//获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob();
PageFormat pageFormat = job.defaultPage();//得到默认页格式
job.setPrintable(new PrintTest1());//设置打印类
//可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印
boolean a=job.printDialog();
job.print();
job.cancel();
} catch (PrinterException e) {
e.printStackTrace();
阅读(...) 评论()&&完java页面如何连接打印机实现打印网页?最近有需求需要将java中的某些页面,通过打印机把这些页面打印出来!!要求是支持ie,火狐等主流浏览器!!!!1个牛币所有回答列表(2)&LV2
&input type=&button& onClick=&window.print()& value=&打印& /&&最佳答案&LV2ladop 打印前可预览。等等等完等等等完完等等等相关问答完完完完等完完完完完完完最近浏览暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友博客分类:
有一种可直接打印条码的打印机,本文采用这种方式,
这种打印机,可直接打印条形码,二维码,还可打印文字,图片(PCX,BMP)
有客户端软件,可设计打印的东西,并打印,
也有编程接口,需加载dll,貌似没有linux版的
打印机有USB接口,也有带网线的,我选的带网线的,
打印纸用的是热敏打印机,打印纸有多种规格的,
标签(带条码):打印的是文字,横线(也可也打下划线),条码,折行的是截取字符串后,在另一行打印的,
佳博打印机官网
GP-3150TIN条码打印机
带USB口,带网口,还有好几个带网口的,这个最便宜 500左右。
动态链接库TSCLIB.dll,支持大部分佳博打印机,和其他品牌的TSC系列的打印机
Windows DLL version V2.00.
有文档和样例,包括JAVA调用,JSP掉用,其他语言调用的,
(JSP调用是用js在前端调用,通过控件调用)
import com.sun.jna.L
import com.sun.jna.N
* 打印序列号
* @author happyqing
public class PrintLabel {
* 加载打印Dll,打印接口
public interface TscLibDll extends Library {
//把TSCLIB.dll发到JAVA_HOME\bin下
TscLibDll INSTANCE = (TscLibDll) Native.loadLibrary ("TSCLIB", TscLibDll.class);
TscLibDll INSTANCE = (TscLibDll) Native.loadLibrary ("C:\\Windows\\System32\\TSCLIB.dll", TscLibDll.class);
int about ();
int openport (String pirnterName);
int closeport ();
int sendcommand (String printerCommand);
int setup (String width,String height,String speed,String density,String sensor,String vertical,String offset);
int downloadpcx (String filename,String image_name);
int barcode (String x,String y,String type,String height,String readable,String rotation,String narrow,String wide,String code);
int printerfont (String x,String y,String fonttype,String rotation,String xmul,String ymul,String text);
int clearbuffer ();
int printlabel (String set, String copy);
int formfeed ();
int nobackfeed ();
int windowsfont (int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, String szFaceName, String content);
//厂商提供的测试方法
public static void main(String[] args) {
TscLibDll.INSTANCE.about();
TscLibDll.INSTANCE.openport("TSC TTP-2410M");
//TscLibDll.INSTANCE.downloadpcx("C:\\UL.PCX", "UL.PCX");
TscLibDll.INSTANCE.sendcommand("REM ***** This is a test by JAVA. *****");
TscLibDll.INSTANCE.setup("100", "100", "5", "8", "0", "0", "0");
TscLibDll.INSTANCE.clearbuffer();
//TscLibDll.INSTANCE.sendcommand("PUTPCX 550,10,\"UL.PCX\"");
TscLibDll.INSTANCE.printerfont ("100", "10", "3", "0", "1", "1", "(JAVA) DLL Test!!");
TscLibDll.INSTANCE.barcode("100", "40", "128", "50", "1", "0", "2", "2", "");
TscLibDll.INSTANCE.windowsfont(400, 200, 48, 0, 3, 1, "arial", "DEG 0");
TscLibDll.INSTANCE.windowsfont(400, 200, 48, 90, 3, 1, "arial", "DEG 90");
TscLibDll.INSTANCE.windowsfont(400, 200, 48, 180, 3, 1, "arial", "DEG 180");
TscLibDll.INSTANCE.windowsfont(400, 200, 48, 270, 3, 1, "arial", "DEG 270");
TscLibDll.INSTANCE.printlabel("1", "1");
TscLibDll.INSTANCE.closeport();
注意:要是打印乱码
请把JAVA文件编译成GBK的class,就好了,不只是设置编码
比如一种方式 VM arguments 加 -Dfile.encoding=GBK
附件中提供打印以上两个样例图片的java类(PrintLabel.java),Dto类类似于Map
下载次数: 198
下载次数: 219
浏览: 1219968 次
来自: 北京
代码报异常啊
mysql的注释符号“-- ”,“#”,“/**/”要加上吗? ...
Thanks for sharing!
多谢楼主分享!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客访问: 187011
博文数量: 48
博客积分: 2598
博客等级: 少校
技术积分: 499
注册时间:
分类: Java 10:10:11
import java.awt.Cimport java.awt.Fimport java.awt.Gimport java.awt.Graphics2D;import java.awt.print.PageFimport java.awt.print.Pimport java.awt.print.PrinterEimport javax.print.Dimport javax.print.DocFimport javax.print.DocPrintJimport javax.print.PrintEimport javax.print.PrintSimport javax.print.PrintServiceLimport javax.print.SimpleDimport javax.print.attribute.DocAttributeSimport javax.print.attribute.HashDocAttributeSimport javax.print.attribute.HashPrintRequestAttributeSimport javax.print.attribute.PrintRequestAttributeSimport javax.print.attribute.standard.MediaSizeNimport javax.swing.JOptionP/**&* java定位打印,把打印内容打到指定的地方。&*&* @author lyb&*&*/public class throwadv implements Printable{&&& private int PAGES = 0;&&& private String printS&&& /*&&&& * Graphic指明打印的图形环境;PageFormat指明打印页格式(页面大小以点为计量单位,&&&& * 1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点);page指明页号&&&& */&&& public int print(Graphics gp, PageFormat pf, int page)&&&&&&&&&&& throws PrinterException&&& {&&&&&&& Graphics2D g2 = (Graphics2D)&&&&&&& g2.setPaint(Color.black); // 设置打印颜色为黑色&&&&&&& if (page >= PAGES) // 当打印页号大于需要打印的总页数时,打印工作结束&&&&&&& {&&&&&&&&&&& return Printable.NO_SUCH_PAGE;&&&&&&& }&&&&&&& g2.translate(pf.getImageableX(), pf.getImageableY());// 转换坐标,确定打印边界&&&&&&& Font font = new Font("宋体", Font.PLAIN, 24);// 创建字体&&&&&&& g2.setFont(font);&&&&&&& // 打印当前页文本&&&&&&& int printFontCount = printStr.length();// 打印字数&&&&&&& int printFontSize = font.getSize();// Font 的磅值大小&&&&&&& float printX = 595 / 2; // 给定字符点阵,X页面正中&&&&&&& float printY = 842 / 2; // 给定字符点阵,Y页面正中&&&&&&& float printMX = printX - (printFontCount * printFontSize / 2);// 打印到正中间&&&&&&& float printMY = printY - printFontSize / 2;// 打印到正中间&&&&&&& g2.drawString(printStr, printMX, printMY); // 具体打印每一行文本,在指定位置&&&&&&& g2.drawString(printStr, printMX - printFontSize * printFontCount,&&&&&&&&&&&&&&& printMY + printFontSize); // 具体打印每一行文本 &&&&&&& g2.drawString(printStr, printMX + printFontSize * printFontCount,&&&&&&&&&&&&&&& printMY + printFontSize); // 具体打印每一行文本 &&&&&&& g2.drawString(printStr, printMX, printMY + printFontSize * 2); // 具体打印每一行文本 &&&&&&& g2.drawString(printStr, printMX, printMY + printFontSize * 2);&&&&&&&& g2.drawString(printStr, printMX, printMY + printFontSize * 2);&&&&&&&&& g2.drawString(printStr, printMX, printMY + printFontSize * 2);&&&&&&& return Printable.PAGE_EXISTS; // 存在打印页时,继续打印工作&&& }&&& // 打印内容到指定位置&&& public void printContent()&&& {&&&&&&& printStr = "打印测试内容";// 获取需要打印的目标文本&&&&&&& if (printStr != null && printStr.length() > 0) // 当打印内容不为空时&&&&&&& {&&&&&&&&&&& PAGES = 1; // 获取打印总页数&&&&&&&&&&& // 指定打印输出格式&&&&&&&&&&& DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;&&&&&&&&&&& // 设置打印属性&&&&&&&&&&& PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();&&&&&&&&&&& // 设置纸张大小,也可以新建MediaSize类来自定义大小&&&&&&&&&&& pras.add(MediaSizeName.ISO_A4);&&&&&&&&&&& DocAttributeSet das = new HashDocAttributeSet();&&&&&&&&&&& // 指定打印内容&&&&&&&&&&& Doc doc = new SimpleDoc(this, flavor, das);&&&&&&&&&&& // 定位默认的打印服务&&&&&&&&&&& PrintService printService =&&&&&&&&&&& printService = PrintServiceLookup.lookupPrintServices(flavor, pras)[0];&&&&&&&&&&& System.out.println(printService);&&&&&&&&&&& // 创建打印作业&&&&&&&&&&& DocPrintJob job = printService.createPrintJob();&&&&&&&&&&& 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);&&&&&&& }&&& }&&& public static void main(String[] args)&&& {&&&&&&& throwadv lp = new throwadv();&&&&&&& lp.printContent();&&& }}
阅读(10006) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
请登录后评论。}

我要回帖

更多关于 打印机照片尺寸设置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信