在Java程序中实现高精度打印-Java基础-Java-编程开发

Java程序设计基础知识点 Java程序设计基础 一、Java语言概述 1.1 Java基本概念: 类是java程序的基本构成单位,重要的入口main方法,基本结构主类主方法 public class test{ public static void main(String[] args){ System.println(“hello java”); } } 1.2 Java特性: 跨平台、安全稳定、支持多线程、支持网络编程、具有丰富的库函数、面向对象(继承、封装、多态) 1.3 JDK文件的结构: bin: 该目录存放运行程序; d 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>  在Java环境中,可以使用 java.awt.Toolkit.getScreenResolution()可以得到屏幕每英寸的象素数,但是好像没有什么方法能知道某一台打印机的分辨率,更别提去控制打印粒度了。于是可耻的使用着丑陋的缺省打印精度几年后,终于找到了解决方法,不知道该高兴还是悲伤,其原理说出来也是非常的简单:

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

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

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

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

  附源码(修改分辨率就改动变量iResMul就好):
import java.awt.*;
import java.awt.print.*;

public class MyPrintableObject implements Printable {
public int iResMul = 1; // 1 = 72 dpi; 4 = 288 dpi

public int print(Graphics g, PageFormat pf, int iPage)
throws PrinterException {
final int FONTSIZE = 12;
final double PNT_MM = 25.4 / 72.;
if (0 != iPage)
return NO_SUCH_PAGE;
try {
int iPosX = 1;
int iPosY = 1;
int iAddY = FONTSIZE * 3 / 2 * iResMul;
int iWdth = (int) Math.round(pf.getImageableWidth() * iResMul) - 3;
int iHght = (int) Math.round(pf.getImageableHeight() * iResMul) - 3;
int iCrcl = Math.min(iWdth, iHght) - 4 * iResMul;
Graphics2D g2 = (Graphics2D) g;
PrinterJob prjob = ((PrinterGraphics) g2).getPrinterJob();
g2.translate(pf.getImageableX(), pf.getImageableY());
g2.scale(1.0 / iResMul, 1.0 / iResMul);
g2.setFont(new Font("SansSerif", Font.PLAIN, FONTSIZE * iResMul));
g2.setColor(Color.black);
g2.drawRect(iPosX, iPosY, iWdth, iHght);
g2.drawLine(iPosX, iHght / 2 iWdth / 50, iPosX iWdth, iHght / 2
- iWdth / 50);
g2.drawLine(iPosX, iHght / 2 - iWdth / 50, iPosX iWdth, iHght / 2
iWdth / 50);
g2.drawOval(iPosX 2 * iResMul, iHght - iCrcl - 2 * iResMul,
iCrcl, iCrcl);
iPosX = iAddY;
iPosY = iAddY / 2;
g2.drawString("PrinterJob-UserName: " prjob.getUserName(), iPosX,
iPosY = iAddY);
g2.drawString("Betriebssystem: " System.getProperty("os.name")
" " System.getProperty("os.version"), iPosX,
iPosY = iAddY);
g2
.drawString("Java-Version: JDK "
System.getProperty("java.version"), iPosX,
iPosY = iAddY);
g2.drawString("Width/Height: " dbldgt(pf.getWidth()) " / "
dbldgt(pf.getHeight()) " points = "
dbldgt(pf.getWidth() * PNT_MM) " / "
dbldgt(pf.getHeight() * PNT_MM) " mm", iPosX,
iPosY = iAddY);
g2.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);
g2.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);
g2.drawString("versuchte Druckaufl sung: " 72 * 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 * 10.) / 10.; // 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);
}
}
}
}

Java高精度数值运算编程 在Java编程中,处理大整数或高精度数值运算是一项重要的任务。为了解决这个问题,Java提供了BigInteger和BigDecimal类,它们能够处理任意精度的整数和小数运算。本文介绍了在Java中进行高精度数值运算的方法,通过使用BigInteger类和BigDecimal类,我们可以处理大整数和高精度小数的运算。这些类提供了丰富的方法来执行加法、减法、乘法、除法等运算操作,并且能够处理任意精度的数值。然后,我们使用BigDecimal提供的方法进行加法、减法、乘法和除法运算,并将结果打印输出。 阅读详情

相关推荐

java自适应打印

java打印,自制的表格,可以打印A4字,附带所有源码

java 限制打印次数_java中实现高精度打印(优快云限制还真多了,事多...)

在优快云中看到这篇文章,代码比较乱,花了点时间改了一下代码格式,调试运行了一下,效果还不错,感谢作者....__转自java技术网在Java环境中,可以使用 java.awt.Toolkit.getScreenResolution()可以得到屏幕每英寸的象素数,但是好像没有什么方法能知道某一台打印机的分辨率,更别提去控制打印粒度了。于是可耻的使用着丑陋的缺省打印精度几年后,终于找到了...

weixin_39724889的博客 459

用 Java 打印表格 到A4纸的可用代码

已试用,可行.用Java 打印表格 到A4纸的可用代码,

Java高精度打印

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

Ryan Z 的技术日志 854

数据分析——员工离职预测

员工离职预测一. 题目描述二. 数据说明三. 步骤实现1.导入并查看2.数据探索性分析3.数据处理4.模型分析5.结果分析(1) 可视化的结果分析(2)特征选择结果分析(3)多模型交叉验证结果分析 一. 题目描述 员工是否准备离职是困扰用人单位的问题,其关系到单位业务的开展及新人员的招聘,及时的分析出有离职倾向的员工成为关键的因素。数据主要包括影响员工离职的各种因素(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等)以及员工是否已经离职的对应记录。 二. 数据说明 数据分为训练数据

weixin_43925467的博客 1万+

Qt 插件开发 plugin 超详细 有源码

Qt 插件化开发框架类似于前后端的微服务的场景,授权哪个微服务则前端可以使用哪个微服务,插件就行硬件插卡一样,可以被随时删除、插入和修改,所以结构很灵活,容易修改,方便软件的升级和维护;插件主要面向接口编程,无需访问.lib文件,热插拔、利于团队开发。即使在程序运行时.dll不存在,也可以正常启动,只是相应插件功能无法正常使用而已;动态库需要访问.lib文件,而且在程序运行时必须保证.lib存在,否则无法正常启动;

q610098308的专栏 6547

在java中实现高精度打印

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

scenery_86 743

基于迁移学习的花卉识别系统

本研究采用了预训练的经典深度学习模型,包括ResNet、AlexNet和VGG,通过微调的方式在Oxford-102数据集和一个自制花卉数据集上进行训练,并对图像进行了多种数据增强操作,以提高模型的泛化能力,致力于实现花卉的高效分类。

m0_71146337的博客 2378

java输出精度控制

double sqr = 1.23456789; 假如只要输出小数点后五位小树怎么处理 C语言有printf通过格式控制来处理 java System.out.printf有类似于C语言的格式控制 public PrintStream printf(String format, Object... args) 产生格式化输出的

ChampionLai 8369

从菜鸟到高手:我的Abaqus壳单元S4R、S3R、S8R选择心路历程

第一次打开Abaqus的单元库时,我被琳琅满目的壳单元类型晃花了眼。S4R、S3R、S8R、STRI65、S9R5...这些看似随意的字母数字组合,背后却隐藏着影响仿真精度的关键密码。作为一名从土木工程转行到汽车结构仿真的工程师,我花了三年时间才真正理解如何根据问题特性精准选择壳单元。这段学习历程充满试错与顿悟,今天就用几个关键案例,分享我的壳单元选择方法论。

weixin_42525637的博客 419

AI基础入门(大模型基础篇)——技术视角:你应该知道的LLM基础知识

本文从技术视角解析了大模型的工作原理,主要介绍了三个核心概念:Token、温度和Embedding。首先,大模型通过逐个添加Token来生成文本,Token数量直接影响上下文窗口大小和计费标准。其次,通过引入温度参数控制随机性,温度越高输出越多样化。最后,解释了字符串如何通过One-Hot编码和神经网络压缩转化为向量形式的Embedding,这是AI处理各类输入的基础。这些概念对理解大模型应用开发至关重要,Token决定处理能力,温度影响输出风格,Embedding则是信息转换的关键步骤。

小志的博客 1506

java 精度输出_java输出精度控制

DecimalFormat的用法 Java 浮点数 Float Double 小数 格式化 保留小数位后几位等1 DecimalFormat df = new DecimalFormat();2 double data = 1234.56789;3 System.out.println("格式化之前的数字: " + data);4...

weixin_29018335的博客 921

win11 labelme 汉化菜单

【代码】win11 labelme 汉化菜单。

一直记录 1169

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

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

子恒专栏 1213

【32】OpenCV——图像含义关系?RGGB , BGGR , GRBG , GBRG呢?raw8,raw10,raw12,raw14呢? YUV422; RAW16呢?YCbYCr/RG_GB;

‌如前所述,定义原始数据的位深精度。‌* ‌一种压缩色彩编码方式,通过色度抽样(亮度Y全分辨率,色度U/V半分辨率)减少数据量,常用于视频传输。‌* ‌可能指每个像素分量占16位存储(如高位填充的RAW10/12/14),或未明确量化的高精度原始数据。‌ ‌分类‌核心定义‌关联性及典型应用传感器原始色彩排列(RGGB/BGGR等)决定RAW数据的色彩分布规则RAW位深每个分量的数据精度(8/10/12/14位)影响动态范围和存储空间‌YUV422。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 794

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java打印计算机_在Java程序中实现高精度打印

在Java环境中,可以使用 java.awt.Toolkit.getScreenResolution()可以得到屏幕每英寸的象素数,但是好像没有什么方法能知道某一台打印机的分辨率,更别提去控制打印粒度了。于是可耻的使用着丑陋的缺省打印精度几年后,终于找到了解决方法,不知道该高兴还是悲伤,其原理说出来也是非常的简单提高打印精度,其实就是把本来是A3纸的内容往A4纸里画,也就是说,打印区域(这里对应着...

weixin_42352981的博客 174

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java中实现高精度打印(优快云限制还真多了,事多...)

      在优快云中看到这篇文章,代码比较乱,花了点时间改了一下代码格式,调试运行了一下,效果还不错,感谢作者....      __转自java技术网       在Java环境中,可以使用 java.awt.Toolkit.getScreenResolution()可以得到屏幕每英寸的象素数,但是好像没有什么方法能知道某一台打印机的分辨率,更别提去控制打印粒度了。于是可耻的使用着丑

blackanger的专栏 996

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【关于JAVA 高精度题目知识点 总结】

关于一篇JAVA高精度基础用法的文章:链接 下面是我自己记下的一下比较重要的 import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); while(in.has...

an94460061的博客 213

java 模拟 减法 进位_JAVA实现高精度整数加减乘

首先,需要指出的是,java内的BigInteger类很好用,功能相当全面。像加减乘这样的基础操作都是可以胜任的。所以,在java中其实没有手动实现高精度的必要。所以写下这篇博客的初衷并不是放在实际情况下使用,而是当做高精度算法的练习,也同时练习java编程能力。封装类内容:实现接口克隆接口Cloneable,重写clone方法。便于复制可比较接口Comparable,实现CompareTo方法,...

weixin_36376879的博客 256

java编程思想视频教程 零基础如何学Java

java编程思想视频教程 零基础如何学Java java编程思想的形成,靠的是去实践,去练习不知道你java编程现在学到什么程度了我就从头说起吧 首先学习的是java编程的特性(安全,跨平台),学习java的编程思想,一些常用的类等等这时候你可以做一些简单的练习比如书上的例子你写到电脑上,运行,看看结果,一句一句的分析。每行代码干什么的,然后试着去改变变量的值,修改一些语句。慢慢培养自己,熟悉ja...

fengliaoai的博客 1765
上一篇: Java理论和实践:用软引用阻止内存泄漏-Java基础-Java-编程开发
下一篇: Java 5.0 多线程编程实践-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值