+ -
当前位置:首页 → 问答吧 → PrinterJob自订纸张问题

PrinterJob自订纸张问题

时间:2011-11-30

来源:互联网

印表机是点阵式, 有关於自订纸张的问题
不论如何设定 Paper.setsize(width,height)
实际上最后都会 height > width 而且 height有最小值 就算设更小 还是跑回最小值

印出结果
ImageableWidth 410.4 Width 419.52755...
ImageableHeight 325.94458... Height 595.27557...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
public class TestPrint {
  
  final static double PAPER_WIDTH = 504;   final static double PAPER_HEIGHT = 325.944;
  final static String PRINTERNAME = "US_RECEIPT"; //印表机名称
  
  private int PrinterIndex;
  private PrintService[] printservice = java.awt.print.PrinterJob.lookupPrintServices();   public static void main(String[] args) {
    TestPrint tp = new TestPrint();
    tp.print();
 
  }   
  public void print() {
    for (int i=0;i<printservice.length;i++) {
      if (printservice[i].getName().equals(PRINTERNAME))
        PrinterIndex = i ;
    }
    
    PrinterJob pjob = PrinterJob.getPrinterJob();
    
    PageFormat pf = new PageFormat();
   Paper pp = new Paper();    pp.setSize(PAPER_WIDTH, PAPER_HEIGHT);
      pp.setImageableArea(0, 0, PAPER_WIDTH, PAPER_HEIGHT);
   pf.setPaper(pp);
    
    PrintPage p1 = new PrintPage();
    try {
      pjob.setPrintService(printservice[PrinterIndex]);
    } catch (PrinterException ex) {
      ex.printStackTrace();
      return;
    }
    pjob.setPrintable(p1,pf);
    pjob.setCopies(1);
    try {
      pjob.print();
    }
    catch(Exception ex) {
      ex.printStackTrace();     System.exit(0);
    }
  }
  class PrintPage implements Printable {
    public int print(Graphics g, PageFormat pf, int pageIndex) {
      if(pageIndex > 0)
        return NO_SUCH_PAGE;
      Graphics2D g2d = (Graphics2D) g;
      g2d.translate(pf.getImageableX(), pf.getImageableY());
      
      g2d.drawString(String.valueOf(pf.getImageableWidth()), 10, 10);
      g2d.drawString(String.valueOf(pf.getImageableHeight()), 10, 120);
      g2d.drawString(String.valueOf(pf.getWidth()), 130, 20);
      g2d.drawString(String.valueOf(pf.getHeight()), 130, 130);
      
      return PAGE_EXISTS;
    }
  }
 
}

作者: yiaman2003   发布时间: 2011-11-30

yiaman2003 wrote:
印表机是点阵式, 有关於自订纸张的问题
不论如何设定 Paper.setsize(width,height)
实际上最后都会 height > width 而且 height有最小值 就算设更小 还是跑回最小值

印出结果
ImageableWidth 410.4 Width 419.52755...
ImageableHeight 325.94458... Height 595.27557...


paper 的 size 会依照印表机的实际情况来调整,page format 也是

作者: Duncan   发布时间: 2011-12-01

经过测试后 height可以大於width
但是字体是横的, 请问有无设定可以把字直印 ??
感谢!!!

作者: yiaman2003   发布时间: 2011-12-01

yiaman2003 wrote:
经过测试后 height可以大於width
但是字体是横的, 请问有无设定可以把字直印 ??
感谢!!!


请问你使用的印表机所进的纸是直的(height>width)还是横的(height<width)?我想应该是直的(如果纸是连续的,裁切后应该是直的),因为你原来实测出来的 page format 是 height > width

作者: Duncan   发布时间: 2011-12-01