知识大全 在Java程序中实现高精度打印
Posted 内容
篇首语:“善与恶皆为上帝的成见。”蛇如是说。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在Java程序中实现高精度打印相关的知识,希望对你有一定的参考价值。
在Java程序中实现高精度打印 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在Java环境中 可以使用 java awt Toolkit getScreenResolution()可以得到屏幕每英寸的象素数 但是好像没有什么方法能知道某一台打印机的分辨率 更别提去控制打印粒度了 于是可耻的使用着丑陋的缺省打印精度几年后 终于找到了解决方法 不知道该高兴还是悲伤 其原理说出来也是非常的简单
提高打印精度 其实就是把本来是A 纸的内容往A 纸里画 也就是说 打印区域(这里对应着Java里的Graphics对象)需要缩小 然后由于缺省情况下打印是照 DPI来打的 不做改变的话 打印内容也会跟着变小 这样就不是我们想要的效果了 所以还得把打印内容成比例放大 一个缩小 一个放大 于是画完后 在指定大小的纸张内 便容纳了比以往更多象素的内容 这下世界总算完美了
以上做法形象的说应该是这样 把需要产生的图形对象先放大 画在一张 纸上 然后整体缩小 这样精度就提高了
tips 在一般企业报表表格打印中 使用 DPI得到的表格线的宽度看起来最舒服
tips 现在号称 DPI的打印机其实是 DPI 如果想使用这个分辨率的精度 需要用好一点的纸张 因为已经到极限了 纸张稍差点 打印墨粉就沾不上 导致线体残缺
附源码(修改分辨率就改动变量iResMul就好)
import java awt *;
import java awt print *;
public class MyPrintableObject implements Printable
public int iResMul = ; // = dpi; = dpi
public int print(Graphics g PageFormat pf int iPage)
throws PrinterException
final int FONTSIZE = ;
final double PNT_MM = / ;
if ( != iPage)
return NO_SUCH_PAGE;
try
int iPosX = ;
int iPosY = ;
int iAddY = FONTSIZE * / * iResMul;
int iWdth = (int) Math round(pf getImageableWidth() * iResMul) ;
int iHght = (int) Math round(pf getImageableHeight() * iResMul) ;
int iCrcl = Math min(iWdth iHght) * iResMul;
Graphics D g = (Graphics D) g;
PrinterJob prjob = ((PrinterGraphics) g ) getPrinterJob();
g translate(pf getImageableX() pf getImageableY());
g scale( / iResMul / iResMul);
g setFont(new Font( SansSerif Font PLAIN FONTSIZE * iResMul));
g setColor(Color black);
g drawRect(iPosX iPosY iWdth iHght);
g drawLine(iPosX iHght / + iWdth / iPosX + iWdth iHght /
iWdth / );
g drawLine(iPosX iHght / iWdth / iPosX + iWdth iHght /
+ iWdth / );
g drawOval(iPosX + * iResMul iHght iCrcl * iResMul
iCrcl iCrcl);
iPosX += iAddY;
iPosY += iAddY / ;
g drawString( PrinterJob UserName: + prjob getUserName() iPosX
iPosY += iAddY);
g drawString( Betriebssystem: + System getProperty( os name )
+ + System getProperty( os version ) iPosX
iPosY += iAddY);
g drawString( Java Version: JDK
+ System getProperty( java version ) iPosX
iPosY += iAddY);
g drawString( Width/Height: + dbldgt(pf getWidth()) + /
+ dbldgt(pf getHeight()) + points =
+ dbldgt(pf getWidth() * PNT_MM) + /
+ dbldgt(pf getHeight() * PNT_MM) + mm iPosX
iPosY += iAddY);
g drawString( Imageable Width/Height:
+ dbldgt(pf getImageableWidth()) + /
+ dbldgt(pf getImageableHeight()) + points =
+ dbldgt(pf getImageableWidth() * PNT_MM) + /
+ dbldgt(pf getImageableHeight() * PNT_MM) + mm iPosX
iPosY += iAddY);
g drawString( Imageable X/Y: + dbldgt(pf getImageableX())
+ / + dbldgt(pf getImageableY()) + points =
+ dbldgt(pf getImageableX() * PNT_MM) + /
+ dbldgt(pf getImageableY() * PNT_MM) + mm iPosX
iPosY += iAddY);
g drawString( versuchte Druckaufl sung: + * iResMul + dpi
iPosX iPosY += iAddY);
catch (Exception ex)
throw new PrinterException(ex getMessage());
return PAGE_EXISTS;
private static double dbldgt(double d)
return Math round(d * ) / ; // show one digit after point
public static void main(String[] args)
PrinterJob pj = PrinterJob getPrinterJob();
pj setPrintable(new MyPrintableObject());
if (pj printDialog())
try
pj print();
catch (PrinterException e)
System out println(e);
cha138/Article/program/Java/hx/201311/26417
相关参考
cha138/Article/program/Java/hx/201311/27053
对于java的打印问题各种书上谈的很少我想主要原因可能是java的打印功能太弱了没有什么可介绍的最近我因为工作的关系用到了java的打印图象功能不过因为缺少可参考的例子和教材我只有查看jdk的AP
知识大全 我安装好惠普1010打印机驱动程序后,还是打印不出文档,这是为什么
我安装好惠普1010打印机驱动程序后,还是打印不出文档,这是为什么打印机驱动的安装:1、在官方网站上面下载好打印机的驱动,网上搜索打印机驱动,进入官方即可下载;2、下载好驱动安装程序包后,然后解压,保
用Java代码生成打印收据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先来看看效果如下图
用JNI实现一个高精度的Java计时器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
Java高级编程:使用打印服务API二(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 选择
知识大全 在java中请应用学过的知识,使用面向物件的思想实现影院选座功能,要求打印出座点阵图
在java中请应用学过的知识,使用面向物件的思想实现影院选座功能,要求打印出座点阵图你跟我刚才回答的那个问题是同学吧,我刚贴出来。下次提问之前可以先搜一下---------------分割线---下面
用Delphi编写打印程序的窍门 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如果你想自己用D
知识大全 用java实现输入ASCII码,打印出对应的大写字母。
用java实现输入ASCII码,打印出对应的大写字母。 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
Delphi开发WEB应用程序打印组件[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ()