动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.JAVA:附加码生成器(图片).
.DHCP(动态主机配置协议)基本信.
.如何使用动态代理实现AOP功能.
.Java多线程同步中的两个特殊类.
.Java图像技术.
.预装载以及JavaScript Image()对.
.Java 网络编程---I/O部分学习笔记.
.Java的执行效率完全可以比C/C++的.
.用Jbuilder9开发媒体播放器.
.IsReady 属性.
.enoeht的Java源码系列之处理配置.
.按要求进行决定是否有状态的EJB(.
.Java和C++版本的简单Stack程序.
.野马的性格 Java SE 6.0新特性体.
.慎防恶意的JavaApplet.
.Ant实战之Jar文件数字签名的制作.
.关于 Java.
.WAS 5.x中数据源的配置使用及常见.
.了解MVC架构对于用Struts构建的强.
.Weblogic中使用Servlet.

在Java程序中实现高精度打印

发表日期:2008-1-5 |



  在Java环境中,可以使用 java.awt.Toolkit.getScreenResolution()可以得到屏幕每英寸的象素数,但是似乎没有什么方法能知道某一台打印机的分辨率,更别提去控制打印粒度了。于是可耻的使用着丑陋的缺省打印精度几年后,终于找到了解决方法,不知道该兴奋还是悲伤,其原理说出来也是非常的简单:

  提高打印精度,其实就是把本来是A3纸的内容往A4纸里画,也就是说,打印区域(这里对应着Java里的Graphics对象)需要缩小,然后由于缺省情况下打印是照72DPI来打的,不做改变的话,打印内容也会跟着变小。这样就不是我们想要的效果了,所以还得把打印内容成比例放大。一个缩小,一个放大,于是画完后,在指定大小的纸张内,便容纳了比以往更多象素的内容,这下世界总算完美了。

  以上做法形象的说应该是这样:把需要产生的图形对象先放大,画在一张“纸上”,然后整体缩小,这样精度就提高了。

  tips 1:在一般企业报表表格打印中,使用144DPI得到的表格线的宽度看起来最舒适。

  tips 2:现在号称600DPI的打印机其实是576DPI,假如想使用这个分辨率的精度,需要用好一点的纸张,因为已经到极限了,纸张稍差点,打印墨粉就沾不上,导致线体残缺。

  附源码(修改分辨率就改动变量iResMul就好):


在Java程序中实现高精度打印(图一)import java.awt.*;
在Java程序中实现高精度打印(图二)import java.awt.print.*;
在Java程序中实现高精度打印(图三)
在Java程序中实现高精度打印(图四)在Java程序中实现高精度打印(图五)public class MyPrintableObject implements Printable 在Java程序中实现高精度打印(图六){
在Java程序中实现高精度打印(图七) public int iResMul = 1; // 1 = 72 dpi; 4 = 288 dpi在Java程序中实现高精度打印(图八)
在Java程序中实现高精度打印(图九)
在Java程序中实现高精度打印(图十) public int print(Graphics g, PageFormat pf, int iPage)
在Java程序中实现高精度打印(图十)在Java程序中实现高精度打印(图十二) throws PrinterException 在Java程序中实现高精度打印(图十三){
在Java程序中实现高精度打印(图十四) final int FONTSIZE = 12;
在Java程序中实现高精度打印(图十五) final double PNT_MM = 25.4 / 72.;
在Java程序中实现高精度打印(图十六) if (0 != iPage)
在Java程序中实现高精度打印(图十七) return NO_SUCH_PAGE;
在Java程序中实现高精度打印(图十八)在Java程序中实现高精度打印(图十九) try 在Java程序中实现高精度打印(图二十){
在Java程序中实现高精度打印(图二十) int iPosX = 1;
在Java程序中实现高精度打印(图二十二) int iPosY = 1;
在Java程序中实现高精度打印(图二十三) int iAddY = FONTSIZE * 3 / 2 * iResMul;
在Java程序中实现高精度打印(图二十四) int iWdth = (int) Math.round(pf.getImageableWidth() * iResMul) - 3;
在Java程序中实现高精度打印(图二十五) int iHght = (int) Math.round(pf.getImageableHeight() * iResMul) - 3;
在Java程序中实现高精度打印(图二十六) int iCrcl = Math.min(iWdth, iHght) - 4 * iResMul;
在Java程序中实现高精度打印(图二十七) Graphics2D g2 = (Graphics2D) g;
在Java程序中实现高精度打印(图二十八) PrinterJob prjob = ((PrinterGraphics) g2).getPrinterJob();
在Java程序中实现高精度打印(图二十九) g2.translate(pf.getImageableX(), pf.getImageableY());
在Java程序中实现高精度打印(图三十) g2.scale(1.0 / iResMul, 1.0 / iResMul);
在Java程序中实现高精度打印(图三十) g2.setFont(new Font("SansSerif", Font.PLAIN, FONTSIZE * iResMul));
在Java程序中实现高精度打印(图三十二) g2.setColor(Color.black);
在Java程序中实现高精度打印(图三十三) g2.drawRect(iPosX, iPosY, iWdth, iHght);
在Java程序中实现高精度打印(图三十四) g2.drawLine(iPosX, iHght / 2 + iWdth / 50, iPosX + iWdth, iHght / 2
在Java程序中实现高精度打印(图三十五) - iWdth / 50);
在Java程序中实现高精度打印(图三十六) g2.drawLine(iPosX, iHght / 2 - iWdth / 50, iPosX + iWdth, iHght / 2
在Java程序中实现高精度打印(图三十七) + iWdth / 50);
在Java程序中实现高精度打印(图三十八) g2.drawOval(iPosX + 2 * iResMul, iHght - iCrcl - 2 * iResMul,
在Java程序中实现高精度打印(图三十九) iCrcl, iCrcl);
在Java程序中实现高精度打印(图四十) iPosX += iAddY;
在Java程序中实现高精度打印(图四十) iPosY += iAddY / 2;
在Java程序中实现高精度打印(图四十二) g2.drawString("PrinterJob-UserName: " + prjob.getUserName(), iPosX,
在Java程序中实现高精度打印(图四十三) iPosY += iAddY);
在Java程序中实现高精度打印(图四十四) g2.drawString("Betriebssystem: " + System.getProperty("os.name")
在Java程序中实现高精度打印(图四十五) + " " + System.getProperty("os.version"), iPosX,
在Java程序中实现高精度打印(图四十六) iPosY += iAddY);
在Java程序中实现高精度打印(图四十七) g2
在Java程序中实现高精度打印(图四十八) .drawString("Java-Version: JDK "
在Java程序中实现高精度打印(图四十九) + System.getProperty("java.version"), iPosX,
在Java程序中实现高精度打印(图五十) iPosY += iAddY);
在Java程序中实现高精度打印(图五十) g2.drawString("Width/Height: " + dbldgt(pf.getWidth()) + " / "
在Java程序中实现高精度打印(图五十二) + dbldgt(pf.getHeight()) + " points = "
在Java程序中实现高精度打印(图五十三) + dbldgt(pf.getWidth() * PNT_MM) + " / "
在Java程序中实现高精度打印(图五十四) + dbldgt(pf.getHeight() * PNT_MM) + " mm", iPosX,
在Java程序中实现高精度打印(图五十五) iPosY += iAddY);
在Java程序中实现高精度打印(图五十六) g2.drawString("Imageable Width/Height: "
在Java程序中实现高精度打印(图五十七) + dbldgt(pf.getImageableWidth()) + " / "
在Java程序中实现高精度打印(图五十八) + dbldgt(pf.getImageableHeight()) + " points = "
在Java程序中实现高精度打印(图五十九) + dbldgt(pf.getImageableWidth() * PNT_MM) + " / "
在Java程序中实现高精度打印(图六十) + dbldgt(pf.getImageableHeight() * PNT_MM) + " mm", iPosX,
在Java程序中实现高精度打印(图六十) iPosY += iAddY);
在Java程序中实现高精度打印(图六十二) g2.drawString("Imageable X/Y: " + dbldgt(pf.getImageableX())
在Java程序中实现高精度打印(图六十三) + " / " + dbldgt(pf.getImageableY()) + " points = "
在Java程序中实现高精度打印(图六十四) + dbldgt(pf.getImageableX() * PNT_MM) + " / "
在Java程序中实现高精度打印(图六十五) + dbldgt(pf.getImageableY() * PNT_MM) + " mm", iPosX,
在Java程序中实现高精度打印(图六十六) iPosY += iAddY);
在Java程序中实现高精度打印(图六十七) g2.drawString("versuchte Druckaufl sung: " + 72 * iResMul + " dpi",
在Java程序中实现高精度打印(图六十八) iPosX, iPosY += iAddY);
在Java程序中实现高精度打印(图六十九)在Java程序中实现高精度打印(图七十) } catch (Exception ex) 在Java程序中实现高精度打印(图七十){
在Java程序中实现高精度打印(图七十二) throw new PrinterException(ex.getMessage());
在Java程序中实现高精度打印(图七十三) }
在Java程序中实现高精度打印(图七十四) return PAGE_EXISTS;
在Java程序中实现高精度打印(图七十五) }
在Java程序中实现高精度打印(图七十六)
在Java程序中实现高精度打印(图七十七)在Java程序中实现高精度打印(图七十八) private static double dbldgt(double d) 在Java程序中实现高精度打印(图七十九){
在Java程序中实现高精度打印(图八十) return Math.round(d * 10.) / 10.; // show one digit after point
在Java程序中实现高精度打印(图八十) }
在Java程序中实现高精度打印(图八十二)
在Java程序中实现高精度打印(图八十三)在Java程序中实现高精度打印(图八十四) public static void main(String[] args) 在Java程序中实现高精度打印(图八十五){
在Java程序中实现高精度打印(图八十六) PrinterJob pj = PrinterJob.getPrinterJob();
在Java程序中实现高精度打印(图八十七) pj.setPrintable(new MyPrintableObject());
在Java程序中实现高精度打印(图八十八)在Java程序中实现高精度打印(图八十九) if (pj.printDialog()) 在Java程序中实现高精度打印(图九十){
在Java程序中实现高精度打印(图九十)在Java程序中实现高精度打印(图九十二) try 在Java程序中实现高精度打印(图九十三){
在Java程序中实现高精度打印(图九十四) pj.print();
在Java程序中实现高精度打印(图九十五)在Java程序中实现高精度打印(图九十六) } catch (PrinterException e) 在Java程序中实现高精度打印(图九十七){
在Java程序中实现高精度打印(图九十八) System.out.println(e);
在Java程序中实现高精度打印(图九十九) }
在Java程序中实现高精度打印(图一百) }
在Java程序中实现高精度打印(图一百零一) }
在Java程序中实现高精度打印(图一百零二)}
在Java程序中实现高精度打印(图一百零三)
在Java程序中实现高精度打印(图一百零四)
上一篇:Java高手论道:你还在用if else吗? 人气:417
下一篇:Eclipse插件开发之Bytecode Outline 人气:355
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵