打印设计为每英寸像素.基本打印API使用DPI为72.

您需要相应地转换测量值…

double paperWidth = 8 * 72d;

double paperHeight = 4 * 72d;

double margin = 1 * 72d;

用例子更新

g2d.setClip(0,0,(int)pageFormat.getImageableWidth(),(int)pageFormat.getImageableHeight());是不明智的,危险的,通常,不是必需的,除此之外,你使用了错误的宽度和高度值.可成像参数考虑了边距,但是您没有翻译图形,这将更有可能切割您必须打印到的区域的底部左侧部分…

我只是避免使用剪辑

public class TestPrinting01 {

public static void main(String[] args) {

PrinterJob pj = PrinterJob.getPrinterJob();

if (pj.printDialog()) {

PageFormat pf = pj.defaultPage();

Paper paper = pf.getPaper();

double width = 8d * 72d;

double height = 4d * 72d;

double margin = 1d * 72d;

paper.setSize(width, height);

paper.setImageableArea(

margin,

margin,

width - (margin * 2),

height - (margin * 2));

System.out.println("Before- " + dump(paper));

pf.setOrientation(PageFormat.LANDSCAPE);

pf.setPaper(paper);

System.out.println("After- " + dump(paper));

System.out.println("After- " + dump(pf));

dump(pf);

PageFormat validatePage = pj.validatePage(pf);

System.out.println("Valid- " + dump(validatePage));

Book pBook = new Book();

pBook.append(new Page(), pf);

pj.setPageable(pBook);

try {

pj.print();

} catch (PrinterException ex) {

ex.printStackTrace();

}

}

}

protected static String dump(Paper paper) {

StringBuilder sb = new StringBuilder(64);

sb.append(paper.getWidth()).append("x").append(paper.getHeight())

.append("/").append(paper.getImageableX()).append("x").

append(paper.getImageableY()).append(" - ").append(paper

.getImageableWidth()).append("x").append(paper.getImageableHeight());

return sb.toString();

}

protected static String dump(PageFormat pf) {

Paper paper = pf.getPaper();

return dump(paper);

}

public static class Page implements Printable {

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {

if (pageIndex >= 1) {

return Printable.NO_SUCH_PAGE;

}

Graphics2D g2d = (Graphics2D) graphics;

// Be careful of clips...

g2d.translate((int) pageFormat.getImageableX(), (int) pageFormat.getImageableY());

double width = pageFormat.getImageableWidth();

double height = pageFormat.getImageableHeight();

g2d.drawRect(0, 0, (int)pageFormat.getImageableWidth() - 1, (int)pageFormat.getImageableHeight() - 1);

FontMetrics fm = g2d.getFontMetrics();

String text = "top";

g2d.drawString(text, 0, fm.getAscent());

text = "bottom";

double x = width - fm.stringWidth(text);

double y = (height - fm.getHeight()) + fm.getAscent();

g2d.drawString(text, (int)x, (int)y);

return Printable.PAGE_EXISTS;

}

}

}

更新

打印组件时,您将对其布局负责.

public class TestPrinting01 {

private static JEditorPane editor;

public static void main(String[] args) {

try {

editor = new JEditorPane();

editor.setPage(new File("C:/hold/search.htm").toURI().toURL());

PrinterJob pj = PrinterJob.getPrinterJob();

if (pj.printDialog()) {

PageFormat pf = pj.defaultPage();

Paper paper = pf.getPaper();

double width = 8d * 72d;

double height = 4d * 72d;

double margin = 1d * 72d;

paper.setSize(width, height);

paper.setImageableArea(

margin,

margin,

width - (margin * 2),

height - (margin * 2));

System.out.println("Before- " + dump(paper));

pf.setOrientation(PageFormat.LANDSCAPE);

pf.setPaper(paper);

System.out.println("After- " + dump(paper));

System.out.println("After- " + dump(pf));

dump(pf);

PageFormat validatePage = pj.validatePage(pf);

System.out.println("Valid- " + dump(validatePage));

Book pBook = new Book();

pBook.append(new Page(), pf);

pj.setPageable(pBook);

try {

pj.print();

} catch (PrinterException ex) {

ex.printStackTrace();

}

}

} catch (Exception exp) {

exp.printStackTrace();

}

}

protected static String dump(Paper paper) {

StringBuilder sb = new StringBuilder(64);

sb.append(paper.getWidth()).append("x").append(paper.getHeight())

.append("/").append(paper.getImageableX()).append("x").

append(paper.getImageableY()).append(" - ").append(paper

.getImageableWidth()).append("x").append(paper.getImageableHeight());

return sb.toString();

}

protected static String dump(PageFormat pf) {

Paper paper = pf.getPaper();

return dump(paper);

}

public static class Page implements Printable {

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {

if (pageIndex >= 1) {

return Printable.NO_SUCH_PAGE;

}

Graphics2D g2d = (Graphics2D) graphics;

// Be careful of clips...

// g2d.setClip(0, 0, (int) pageFormat.getWidth(), (int) pageFormat.getHeight());

g2d.translate((int) pageFormat.getImageableX(), (int) pageFormat.getImageableY());

double width = pageFormat.getImageableWidth();

double height = pageFormat.getImageableHeight();

System.out.println("width = " + width);

System.out.println("height = " + height);

editor.setLocation(0, 0);

editor.setSize((int)width, (int)height);

editor.printAll(g2d);

g2d.setColor(Color.BLACK);

g2d.draw(new Rectangle2D.Double(0, 0, width, height));

return Printable.PAGE_EXISTS;

}

}

}

java 计算打印纸大小_java – 如何打印自定义纸张尺寸(检查8“x 4”)?相关推荐

  1. 弄了一整天,终于把打印自定义纸张大小搞定了(上)--IT man

    Csdn-Blog <script language="javascript" src="http://www.023rcsc.com/count/count2.a ...

  2. Word控件Spire.Doc 【打印】教程(3):如何在自定义纸张尺寸上打印 Word—C#/VB.NET

    Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库.在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建.编辑.转换和打印 Micr ...

  3. 计算机和打印机的打印机尺寸设置不匹配,理光MP5000B复印机无法打印提示纸张尺寸不匹配怎么办?...

    在我们平时的工作中复印机是经常要用到的,在办公的时候我们偶尔会碰到复印机显示纸张尺寸不匹配而无法打印的情况,找人来修耽误时间浪费钱,这里小编给大家详细介绍一下理光MP5000B复印机显示纸张尺寸不匹配 ...

  4. Java调用PDFBox打印自定义纸张PDF

    打印对象 一份设置为A3纸张, 页面边距为(10, 10, 10, 10)mm的PDF文件. PageFormat 默认PDFPrintable无法设置页面大小. 1 PDFPrintable pri ...

  5. java 时间判断大小_java判断时间大小

    //构造日期格式yyyy-MM-NN SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); Date d ...

  6. 弄了一整天,终于把打印自定义纸张大小搞定了

    长江支流说的办法保留太多了,结果不行,很多类都是他在程序集里自定义的,源码又没公开 不过还是要感谢他的提示 今天和小陈搞了一天,他在国外的论坛上看到了一篇文章得到了启示,最后我们在凌晨3点终于把自定义 ...

  7. pb11 打印 自定义纸张_pb自定义纸张(连续走纸)

    Pb中定制打印页长实现连续打印 pb与打印机的通讯使用ASCII码进行,其中标准ASCII码包括可打印字符及非打印字符(控制码), 打印机使用控制码来定制打印机.大多数打印机指令使用控制码escape ...

  8. XtraReport报表打印自定义纸张问题

    当在打印 机设置完自定义纸张后 设置User Paper为YES后,指定打印机,页面就采用了打印机的默认纸张了. 可在属性中设置需指向的打印机 Printer Name来设置打印机,Paper Kin ...

  9. Autocad经验 CAD2018怎么设置打印的纸张尺寸和方向?

    我们在进行图纸设计的时候,不仅要专业知识够硬,还要学会运用很多的小技巧,比如怎么修改图纸特性.选择打印纸张,调整打印边距离,还有,居中打印 勾选.修改图形方向.使CAD打印界面的设置纸张.图形方向一致 ...

最新文章

  1. JAVA SE学习day_12:集合的排序、队列、栈结构
  2. input placeholder样式
  3. ASP调用sql server 存储过程详解-附带实例-
  4. annotations' in project ':test'. Resolved versions for app (26.1.0) and test app (27.1.1) differ
  5. linux su切换用户提示Authentication failture的解决办法
  6. 数据科学 IPython 笔记本 7.10 组合数据集:合并和连接
  7. 公文写作与计算机应用,德阳市事业单位《计算机应用和公文写作》真题.doc
  8. 修改yum源的资源路径baseurl
  9. jquery实现某宝放大点击切换
  10. JAVA前三章预习总结
  11. MYSQL 单表一对多查询,将多条记录合并成一条记录
  12. (三)Redis两种持久化方案
  13. android windows的一些item属性
  14. 机器人参数校准的原理
  15. python中button中command_tkinter模块的button控件不点击也运行command
  16. Delphi的Indy通信中发送流文件的注意事项
  17. 文献中数学公式规范复制工具——Mathpix Snip
  18. java定积分_记录一次定积分实现方法(java)
  19. svg 树状图_树状图(关系图)
  20. imac下修改本地hosts文件解决react项目中的跨域问题

热门文章

  1. CentOS docker使用镜像加速器
  2. 集合专题----List篇
  3. linux lite改中文,Linux Lite 发布 4.0 版本
  4. ScrollView的上下联动事件 触摸事件传递机制
  5. vfw视频捕捉显示黑屏解决办法
  6. 迅雷用“久”了,启动缓慢的解决办法
  7. UVa220黑白棋问题
  8. 定义父亲类Father(姓lastName,财产property,血型bloodType),儿子Son类(玩游戏PlayGame方法),女儿Daughter类(跳
  9. python素描画_python如何将图片转换素描画
  10. 分享抖音壁纸号年赚20W的玩法,一个冷门也偏门的正规网络项目