首蠢信先 来看看效果 如下图
带激轮
代码如下
PrintTest java
import java awt BasicStroke
铅穗import java awt Color
import java awt Font
import java awt Graphics
import java awt Graphics D
import java awt print Book
import java awt print PageFormat
import java awt print Paper
import java awt print Printable
import java awt print PrinterException
import java awt print PrinterJob
import java text SimpleDateFormat
import java util Date
import snjp model RentDetail
import snjp parameter RentRecordParameter
public class PrintTest implements Printable
{
private String roomID
private Date printDate
private Integer rentType
private Float waterFee
private Float electricityFee
private Float rent
private String remark
private static int RECEIPT_NO =
public PrintTest()
{
}
public PrintTest printTest
public PrintTest(RentRecordParameter prentRecord RentDetail prentDetail)
{
this roomID = prentRecord getRoomId()+ 房间
this printDate = prentRecord getRegisterDate()
this rentType = prentRecord getRentType()
this waterFee = prentDetail getWaterBill()
this electricityFee = prentDetail getElectricityBill()
this rent = prentDetail getRent()
this remark = prentDetail getRemark()
}
/** */
/**
* @param Graphic指明打印的图形环境
* @param PageFormat指明打印页格式(页面大小以点为计量单位 点为 英才的 / 英寸为 毫米 A 纸大致为 × 点)
* @param pageIndex指明页号
**/
public int print(Graphics graphics PageFormat pf int pageIndex)
throws PrinterException
{
//print string
String receiptTitle = 收款收据
String content = 今收到
String feeItem = null
Float rentTotal = f
String content = 总计人民币(大写)
//收款的内容(根据租赁类型 只有 房租 房租 水费 电费 两种值)
switch(this rentType)
{
case :
feeItem = 房租 押金
rentTotal=this rent
break
case :
feeItem = 房租 押金 水费 电费
rentTotal=this rent+this electricityFee+this waterFee
break
default:
feeItem = 未知收费项目
}
//转换成Graphics D
Graphics D graphics D = (Graphics D) graphics
//设置打印颜色为黑色
graphics D setColor(Color black)
//打印起点坐标x=
double x = pf getImageableX()
double y = pf getImageableY()
System out println( 打印起点坐标值是{ +x+ +y+ } )
switch (pageIndex)
{
case :
//设置打印字体(字体名称 样式和点大小)(字体名称可以是物理或者逻辑名称)
//Java平台所定义的五种字体系列 Serif SansSerif Monospaced Dialog 和 DialogInput
Font font = new Font( 新宋体 Font TRUETYPE_FONT )
graphics D setFont(font)//设置字体
BasicStroke basicStroke=new BasicStroke( f)
float[] dash = { f }
//设置打印线的属性
// 线宽空白的宽度虚线的宽度偏移量
// graphics D setStroke(new BasicStroke( f
// BasicStroke CAP_BUTT BasicStroke JOIN_MITER
// f dash f))
//graphics D setStroke(new BasicStroke( f))
graphics D setStroke(basicStroke)//设置线宽
float height = font getSize D()//字体高度
System out println( 字体高度是 +height)
//绘制收据标题
graphics D drawString(receiptTitle (float) y + * height)
//绘制收据编号
String receiptNo = String valueOf(RECEIPT_NO)
graphics D drawString( No : +GlobalMethod get String(receiptNo ) (float)x* (float) y + * height)
//绘制打印时间
SimpleDateFormat myDateFormat = new SimpleDateFormat( yyyy年MM月dd日 )
graphics D drawString(myDateFormat format(printDate) (float)x* (float) y + * height)
//绘制收据标题下面的第一条横线
graphics D drawLine(
(int) (y + * height+ )
(int) (y + * height+ )
)
//绘制收据标题下面的第二条横线
graphics D drawLine(
(int) (y + * height+ )
(int) (y + * height+ )
)
//正文 ——今收到
graphics D drawString(content (float) x* (float) y + * height)
//收费项目名称
graphics D drawString(this roomID+feeItem (float) x* (float) y + * height)
//绘制正文 下划线
graphics D drawLine(
(int)x*
(int) (y + * height+ )
(int)x+
(int) (y + * height+ )
)
//人民币(大写)
graphics D drawString(content +Money NumToRMBStr(rentTotal) (float) x* (float) y + * height)
//绘制人民币(大写)下划线
graphics D drawLine(
(int)x*
(int) (y + * height+ )
(int)x+
(int) (y + * height+ )
)
//(小写)
graphics D drawString( (小写) +rentTotal+ 元 (float) x* (float) y + * height)
//绘制(小写)下划线
graphics D drawLine(
(int)x*
(int) (y + * height+ )
(int)x+
(int) (y + * height+ )
)
//附注
graphics D drawString( 附注: +this remark (float) x* (float) y + * height)
//绘制附注下划线
graphics D drawLine(
(int)x* +
(int) (y + * height+ )
(int)x+
(int) (y + * height+ )
)
// 签字(收款人)
graphics D drawString( 签字(收款人) (float) x* + (float) y + * height)
//签字(收款人)下划线
graphics D drawLine(
(int)x*
(int) (y + * height+ )
(int)x+
(int) (y + * height+ )
)
return PAGE_EXISTS
default:
RECEIPT_NO=RECEIPT_NO
return NO_SUCH_PAGE
}
}
//方法调用
public void printReceipt(PrintTest printTest){
//通俗理解就是书 文档
Book book = new Book()
//设置成竖打
PageFormat pf = new PageFormat()
pf setOrientation(PageFormat PORTRAIT)
//通过Paper设置页面的空白边距和可打印区域 必须与实际打印纸张大小相符
Paper p = new Paper()
p setSize( )//纸张大小
p setImageableArea( )//A ( X )设置打印区域 其实 应该是 因为A 纸的默认X Y边距是
pf setPaper(p)
//把 PageFormat 和 Printable 添加到书中 组成一个页面
book append(printTest pf)
//获取打印服务对象
PrinterJob job = PrinterJob getPrinterJob()
//设置打印类
job setPageable(book)
try
{
//可以用printDialog显示打印对话框 在用户确认后打印 也可以直接打印
// boolean isShowing=job printDialog()
// if(isShowing)
// {
// System out println(this printDate+ ************* )
RECEIPT_NO=RECEIPT_NO+
job print()
// }
}
catch (PrinterException e)
{
e printStackTrace()
}
}
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( )//纸张大小
p setImageableArea( )//A ( X )设置打印区域 其实 应该是 因为A 纸的默认X Y边距是
pf setPaper(p)
// 把 PageFormat 和 Printable 添加到书中 组成一个页面
book append(new PrintTest() pf)
//获取打印服务对象
PrinterJob job = PrinterJob getPrinterJob()
// 设置打印类
job setPageable(book)
try
{
//可以用printDialog显示打印对话框 在用户确认后打印 也可以直接打印
//boolean a=job printDialog()
//if(a)
//{
job print()
//}
}
catch (PrinterException e)
{
e printStackTrace()
}
}
lishixinzhi/Article/program/Java/hx/201311/25778楼上的人一看就是在混分。
其实这种问题应该到更专业的地方问,比如CSDN或者JAVAEYE。
还是把以纳哗前写的一个例子给楼主看一下。
很多对方对照注释看一下。
这里只是写一个java实现打印小票最基本的功能:(记住:每一行不能有太长的数据,否则要超出边界)
public class TestPrint 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) gra
// 设置打印颜色为黑色
g2.setColor(Color.red)
// 打印起点坐标
double x = pf.getImageableX()
double y = pf.getImageableY()
switch (pageIndex) {
case 0:
// 设置打印字体(字体名称、样式和点大小)(字体名羡茄告称可以是物理或者逻辑名称)
// 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(
"D:\\Aotori\\javaPic.jpg")
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.drawString("oooooooooooo", (float) 50, (float) 60 + 1 * heigth + img_Height)//第二排
g2.drawString("22222222222ddddddddddddddddddddddddddd222222222222", (float) 80, (float) 90 + 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
default:
return NO_SUCH_PAGE
}
}
public static void test() {
//ReadData()
// 通俗理解就是书、文档
Book book = new Book()
// 设置成竖打
PageFormat pf = new PageFormat()
pf.setOrientation(PageFormat.PORTRAIT)// LANDSCAPE表示竖打PORTRAIT表示横打REVERSE_LANDSCAPE表示打印空白
// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
Paper p = new Paper()
p.setSize(590, 840)// 纸张大小(590, 840)表示A4纸
p.setImageableArea(10, 10, 260, 343)// A4(595 X
// 842)设置打印区域,其实0,0应该是72,72
// ,因为A4纸的默认X,Y边距是72
pf.setPaper(p)
// 把 PageFormat 和 Printable 添加到书中,组成一个页面
book.append(new TestPrint(), pf)
// 获取打印服务对象
PrinterJob job = PrinterJob.getPrinterJob()
// 设置打印类
job.setPageable(book)
try {
// 可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印
boolean a=job.printDialog()
if(a)
{
job.print()
}
} catch (PrinterException e) {
e.printStackTrace()
}
}
}
需要导入扎两个包。import java.awt.*
import java.awt.event.*
Font类和Color类能改变隐脊悔字体灶正野者大小和颜色(详情可参考API)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)