打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用java实现打印功能

java实现打印,java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用用Graphics2D直接输出直接输出。

下面代码实现了简单的打印功能:

Java代码  

1.  import java.awt.BasicStroke;  

2.  import java.awt.Color;    

3.  import java.awt.Component;    

4.  import java.awt.Font;    

5.  import java.awt.Graphics;    

6.  import java.awt.Graphics2D;    

7.  import java.awt.Image;   

8.  import java.awt.Toolkit;    

9.  import java.awt.RenderingHints;    

10. import java.awt.font.FontRenderContext;    

11. import java.awt.font.LineBreakMeasurer;    

12. import java.awt.font.TextAttribute;    

13. import java.awt.font.TextLayout;    

14. import java.awt.geom.Point2D;    

15. import java.awt.image.BufferedImage;    

16. import java.awt.print.Book;    

17. import java.awt.print.PageFormat;    

18. import java.awt.print.Paper;    

19. import java.awt.print.Printable;    

20. import java.awt.print.PrinterException;    

21. import java.awt.print.PrinterJob;    

22. import java.text.AttributedString;   

23. import javax.swing.JApplet;  

24.     

25. public class PrintTest   implements Printable{  

26.     /** 

27.     * @param Graphic指明打印的图形环境 

28.     * @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/721英寸为25.4毫米。A4纸大致为595×842点) 

29.     * @param pageIndex指明页号 

30.     **/  

31.     

32.    public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {  

33.   

34.        System.out.println("pageIndex="+pageIndex);  

35.          Component c = null;    

36.       //print string  

37.         String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。";  

38.         //转换成Graphics2D  

39.         Graphics2D g2 = (Graphics2D) gra;  

40.         //设置打印颜色为黑色  

41.         g2.setColor(Color.black);  

42.         //打印起点坐标  

43.         double x = pf.getImageableX();  

44.         double y = pf.getImageableY();  

45.         switch(pageIndex){  

46.          case 0:  

47.          //设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)  

48.          //Java平台所定义的五种字体系列:SerifSansSerifMonospacedDialog  DialogInput  

49.   

50.            Font font = new Font("新宋体", Font.PLAIN, 9);  

51.              g2.setFont(font);//设置字体  

52.              //BasicStroke   bs_3=new   BasicStroke(0.5f);     

53.              float[]   dash1   =   {2.0f};   

54.              //设置打印线的属性。  

55.              //1.线宽 23、不知道,4、空白的宽度,5、虚线的宽度,6、偏移量  

56.              g2.setStroke(new   BasicStroke(0.5f,   BasicStroke.CAP_BUTT,   BasicStroke.JOIN_MITER,   2.0f,   dash1,   0.0f));    

57.             //g2.setStroke(bs_3);//设置线宽  

58.              float heigth = font.getSize2D();//字体高度  

59.              System.out.println("x="+x);  

60.              // -1- Graphics2D直接输出  

61.              //首字符的基线(右下部)位于用户空间中的 (x, y) 位置处  

62.              //g2.drawLine(10,10,200,300);   

63.              Image src = Toolkit.getDefaultToolkit().getImage("D:\\EclipseWorkSpace3.1\\Kfc-wuxi\\WebRoot\\image\\KFC.jpg");  

64.              g2.drawImage(src,(int)x,(int)y,c);  

65.              int img_Height=src.getHeight(c);  

66.              int img_width=src.getWidth(c);  

67.              //System.out.println("img_Height="+img_Height+"img_width="+img_width) ;  

68.              g2.drawString(str, (float)x, (float)y+1*heigth+img_Height);  

69.   

70.            g2.drawLine((int)x,(int)(y+1*heigth+img_Height+10),(int)x+200,(int)(y+1*heigth+img_Height+10));  

71.   

72.            g2.drawImage(src,(int)x,(int)(y+1*heigth+img_Height+11),c);  

73.   

74.              

75.         return PAGE_EXISTS;  

76.         default:  

77.         return NO_SUCH_PAGE;  

78.      }    

79.    }  

80.    

81.   

82. public static void main(String[] args) {  

83.       //    通俗理解就是书、文档  

84.   

85.     Book book = new Book();  

86.       //    设置成竖打  

87.   

88.     PageFormat pf = new PageFormat();  

89.   

90.     pf.setOrientation(PageFormat.PORTRAIT);  

91.       //    通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。  

92.   

93.     Paper p = new Paper();  

94.   

95.     p.setSize(590,840);//纸张大小   

96.   

97.     p.setImageableArea(10,10590,840);//A4(595 X 842)设置打印区域,其实00应该是7272,因为A4纸的默认X,Y边距是72  

98.   

99.     pf.setPaper(p);  

100.   

101.     //     PageFormat  Printable 添加到书中,组成一个页面  

102.   

103.     book.append(new PrintTest(), pf);  

104.        //获取打印服务对象  

105.   

106.      PrinterJob job = PrinterJob.getPrinterJob();        

107.        // 设置打印类  

108.   

109.      job.setPageable(book);  

110.   

111.      try {  

112.          //可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印  

113.          //boolean a=job.printDialog();  

114.          //if(a)  

115.          //{          

116.   

117.          job.print();  

118.            //}  

119.        } catch (PrinterException e) {  

120.            e.printStackTrace();  

121.      }    

122.    }    

123. }  

124. 这个例子实现了打印字符串,线(包括虚线)和打印图片。而且通过PapersetImageableArea可以设置打印的区域和边距,让开发者随意的设置打印的位置。  

125. 下面的打印代码没有设置打印区域,默认为打印纸张的区域和边距,比如我们一般用的A4纸,打印的起点XY坐标则是7272  

126. 无区域设置的代码:  

127.   

128. import java.awt.BasicStroke;    

129. import java.awt.Color;    

130. import java.awt.Component;    

131. import java.awt.Font;    

132. import java.awt.Graphics;    

133. import java.awt.Graphics2D;    

134. import java.awt.Image;    

135. import java.awt.Toolkit;    

136. import java.awt.RenderingHints;    

137. import java.awt.font.FontRenderContext;    

138. import java.awt.font.LineBreakMeasurer;    

139. import java.awt.font.TextAttribute;    

140. import java.awt.font.TextLayout;    

141. import java.awt.geom.Point2D;    

142. import java.awt.image.BufferedImage;    

143. import java.awt.print.Book;    

144. import java.awt.print.PageFormat;    

145. import java.awt.print.Paper;    

146. import java.awt.print.Printable;    

147. import java.awt.print.PrinterException;    

148. import java.awt.print.PrinterJob;    

149. import java.text.AttributedString;  

150.  import javax.swing.JApplet;  

151.   

152. public class PrintTest1   implements Printable{  

153.    /** 

154.     * @param Graphic指明打印的图形环境 

155.     * @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/721英寸为25.4毫米。A4纸大致为595×842点) 

156.     * @param pageIndex指明页号 

157.  

158.    **/  

159.  

160.    public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {  

161.   

162.        System.out.println("pageIndex="+pageIndex);  

163.   

164.        Component c = null;  

165.         //print string  

166.   

167.       String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。";  

168.         //转换成Graphics2D  

169.   

170.       Graphics2D g2 = (Graphics2D) gra;  

171.         //设置打印颜色为黑色  

172.   

173.       g2.setColor(Color.black);  

174.         /*Paper paper = pf.getPaper();//得到页面格式的纸张  

175.        paper.setSize(500,500);//纸张大小  

176.        paper.setImageableArea(0,0,500,500); //设置打印区域的大小  

177.        System.out.println(paper.getWidth()); 

178.        System.out.println(paper.getHeight());  

179.        pf.setPaper(paper);//将该纸张作为格式 */  

180.        //打印起点坐标  

181.   

182.       double x = pf.getImageableX();  

183.       double y = pf.getImageableY();  

184.     

185.       switch(pageIndex){  

186.            case 0:  

187.            //设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)    

188.            //Java平台所定义的五种字体系列:SerifSansSerifMonospacedDialog  DialogInput  

189.   

190.            Font font = new Font("新宋体", Font.PLAIN, 9);    

191.            g2.setFont(font);//设置字体    

192.            //BasicStroke   bs_3=new   BasicStroke(0.5f);      

193.     

194.            float[]   dash1   =   {4.0f};   

195.   

196.            g2.setStroke(new   BasicStroke(0.5f,   BasicStroke.CAP_BUTT,   BasicStroke.JOIN_MITER,   4.0f,   dash1,   0.0f));  

197.   

198.  

199.            float heigth = font.getSize2D();//字体高度  

200.   

201.            System.out.println("x="+x);    

202.            //使用抗锯齿模式完成文本呈现    

203.              /*g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,  

204.           RenderingHints.VALUE_TEXT_ANTIALIAS_ON);*/    

205.            // -1- Graphics2D直接输出    

206.            //首字符的基线(右下部)位于用户空间中的 (x, y) 位置处    

207.            //g2.drawLine(10,10,200,10);      

208.  

209.            Image src = Toolkit.getDefaultToolkit().getImage("d://logo.gif");  

210.   

211.            g2.drawImage(src,(int)x,(int)y,c);    

212.            int img_Height=src.getHeight(c);    

213.            int img_width=src.getWidth(c);  

214.   

215.            //System.out.println("img_Height="+img_Height+"img_width="+img_width) ;  

216.            g2.drawString(str, (float)x, (float)y+1*heigth+img_Height);  

217.   

218.            g2.drawLine((int)x,(int)(y+1*heigth+img_Height+10),(int)x+200,(int)(y+1*heigth+img_Height+10));  

219.   

220.            g2.drawImage(src,(int)x,(int)(y+1*heigth+img_Height+11),c);  

221.   

222.   

223.            // -2- 直接构造TextLayout打印  

224.            /*FontRenderContext frc = g2.getFontRenderContext();  

225.            TextLayout layout = new TextLayout(str, font, frc);  

226.            layout.draw(g2, (float)x, (float)y+2*heigth);*/    

227.            // -3- LineBreakMeasurer进行打印  

228.            /*AttributedString text = new AttributedString(str);  

229.            text.addAttribute(TextAttribute.FONT, font);  

230.            LineBreakMeasurer lineBreaker = new LineBreakMeasurer(text.getIterator(), frc);  

231.            //每行字符显示长度()  

232.            double width = pf.getImageableWidth();  

233.            //首字符的基线位于用户空间中的 (x, y) 位置处  

234.            Point2D.Double pen = new Point2D.Double (100, y+3*heigth);  

235.            while ( (layout = lineBreaker.nextLayout( (float) width)) != null){  

236.               layout.draw(g2, (float)x, (float) pen.y); 

237.  

238.               pen.y += layout.getAscent();  

239.            }*/    

240.          return PAGE_EXISTS;    

241.          default:    

242.          return NO_SUCH_PAGE;    

243.       }   

244.    }  

245. public static void main(String[] args) {  

246.      //获取打印服务对象  

247.   

248.      PrinterJob job = PrinterJob.getPrinterJob();     

249.      PageFormat pageFormat = job.defaultPage();//得到默认页格式      

250.      job.setPrintable(new PrintTest1());//设置打印类    

251.    

252.      try {    

253.          //可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印  

254.          //boolean a=job.printDialog();    

255.          //if(a)  

256.          //{    

257.          job.print();    

258.          //}    

259.      } catch (PrinterException e) {    

260.          e.printStackTrace();    

261.      }    

262.    }    

263. }  

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java7的一个新类JLayer:装饰的Swing组件简单实例
java实现二维码的生成和解析:QRCode、zxing 两种方式
将文字转换成图片
Java验证码
springmvc生成注册验证码
java双立方插值算法图片缩放完整示例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服