无法指定正确的打印尺寸

Lio*_*han 12 java printing java-print

我们最近收购了兄弟QL-700打印机,我们正在通过这台机器进行贴纸打印.

我们喂食的纸是62毫米宽的贴纸卷,没有"长度"限制.

问题是,不管我怎么做(我试过Book,PrintRequestAttributeSet),我无法使用Java来告诉打印机对话窗口使用正确的纸张尺寸打印机.我无法做到,例如,我们需要的确切的62毫米×40毫米.它总是"按下"到最近的纸张:

这是有问题的代码:

PrinterJob job = PrinterJob.getPrinterJob();
PageFormat pf = job.defaultPage();
Paper p = pf.getPaper();
p.setSize(UnitConv.mm2pt(62), UnitConv.mm2pt(40));
p.setImageableArea(0, 0, UnitConv.mm2pt(62), UnitConv.mm2pt(40));
pf.setPaper(p);
pf.setOrientation(PageFormat.LANDSCAPE);

job.setPrintable(this, pf);

if (job.printDialog()) {
    try {
        job.print();
    } catch (Exception PrintException) {
        PrintException.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)



我可以确认打印机可以随意打印,如下面的屏幕截图所示(使用Brother的P-touch编辑器).请注意,虽然它是可调整的,但是36mm由软件本身预设:

所以问题:

如何强制length纸张的" "精确到40mm?

相关: 标签打印机的自定义纸张尺寸(Brother QL 570)

编辑

我做了一个媒体大小查询(代码),这里是它可以支持的媒体列表:

17 mm x 54 mm: width = 0.67; height = 2.12
17 mm x 87 mm: width = 0.67; height = 3.42
23 mm x 23 mm: width = 0.9066535; height = 0.9066535
iso-b10: width = 1.2204725; height = 1.7322835
29 mm x 90 mm: width = 1.14; height = 3.5366535
38 mm x 90 mm: width = 1.4966536; height = 3.5366535
39 mm x 48 mm: width = 1.5366535; height = 1.8833464
52 mm x 29 mm: width = 1.1366535; height = 2.0466535
iso-b8: width = 2.440945; height = 3.464567
62 mm x 29 mm: width = 1.1366535; height = 2.44
62 mm x 100 mm: width = 2.44; height = 3.93
12 mm Dia: width = 0.47334644; height = 0.47334644
23 mm x 23 mm: width = 0.9066535; height = 0.9066535
58 mm Dia: width = 2.2933464; height = 2.2933464
12 mm: width = 0.47334644; height = 3.9366536
29 mm: width = 1.14; height = 3.9366536
38 mm: width = 1.4966536; height = 3.9366536
50 mm: width = 1.9666536; height = 3.9366536
54 mm: width = 2.1266534; height = 3.9366536
62 mm x 100 mm: width = 2.44; height = 3.93
12 mm x2: width = 0.82665354; height = 3.9366536
54 mm: width = 2.1266534; height = 3.9366536
38 mm x2: width = 2.8733466; height = 3.9366536
50 mm x2: width = 3.8133464; height = 3.9366536
54 mm x2: width = 3.9366536; height = 4.0933466
62 mm x2: width = 3.9366536; height = 4.76
29 mm: width = 1.14; height = 3.9366536
29 mm x3: width = 3.18; height = 3.9366536
38 mm x3: width = 3.9366536; height = 4.25
50 mm x3: width = 3.9366536; height = 5.66
54 mm x3: width = 3.9366536; height = 6.06
62 mm x3: width = 3.9366536; height = 7.08
38 mm: width = 1.4966536; height = 3.9366536
29 mm x4: width = 3.9366536; height = 4.2
38 mm x4: width = 3.9366536; height = 5.6266537
50 mm x4: width = 3.9366536; height = 7.5066533
54 mm x4: width = 3.9366536; height = 8.026653
62 mm x4: width = 3.9366536; height = 9.4
29 mm x 90 mm: width = 1.14; height = 3.5366535
38 mm x 90 mm: width = 1.4966536; height = 3.5366535
Small Address Label: width = 1.1366535; height = 2.44
17 mm x 54 mm: width = 0.67; height = 2.12
62 mm x 100 mm: width = 2.44; height = 3.93
62 mm x 100 mm: width = 2.44; height = 3.93
17 mm x 87 mm: width = 0.67; height = 3.42
17 mm x 54 mm: width = 0.67; height = 2.12
Binder 3 cm - Spine: width = 1.14; height = 8.226653
Binder 5 cm - Spine: width = 2.44; height = 8.226653
58 mm Dia: width = 2.2933464; height = 2.2933464
12 mm Dia: width = 0.47334644; height = 0.47334644
23 mm x 23 mm: width = 0.9066535; height = 0.9066535
23 mm x 23 mm: width = 0.9066535; height = 0.9066535
62 mm x 184 mm Postage Label: width = 2.44; height = 7.24
Binder 5 cm - Spine: width = 2.44; height = 8.226653
Run Code Online (Sandbox Code Playgroud)

编辑(2017年4月)

只是为了更新这个问题的状态.最后我通过使用python和一个开源实用程序brother_ql来解决它,它直接将作业发送到usb端口,甚至没有使用兄弟提供的固件.它完美无缺,解决了我的问题.

sea*_*sea 1

没有比这里更好的回答方式了

然后也不要混淆高度和长度和宽度,java中的paper类采用宽度和高度而不是长度

 public void setSize(double width, double height) {
    mWidth = width;
    mHeight = height;
Run Code Online (Sandbox Code Playgroud)

你可能还想考虑这个

   /**
 * Sets the imageable area of this <code>Paper</code>.  The
 * imageable area is the area on the page in which printing
 * occurs.
 * @param x the X coordinate to which to set the
 * upper-left corner of the imageable area of this <code>Paper</code>
 * @param y the Y coordinate to which to set the
 * upper-left corner of the imageable area of this <code>Paper</code>
 * @param width the value to which to set the width of the
 * imageable area of this <code>Paper</code>
 * @param height the value to which to set the height of the
 * imageable area of this <code>Paper</code>
 */
public void setImageableArea(double x, double y,
                             double width, double height) {
    mImageableArea = new Rectangle2D.Double(x, y, width,height);
}
Run Code Online (Sandbox Code Playgroud)

这些只是 Paper 类中的一些方法,您在实现时可能需要查看更多参数,因此希望它有所帮助:)

  • 谢谢。打印机的问题是,无论您设置什么尺寸,打印机服务似乎总是“捕捉”到他们喜欢的最接近的尺寸,这对打印机来说是不行的,因为打印机能够打印 62mm x *mm 尺寸的纸张。他们提供的软件证明可以做到,但用Java不行。不知何故,要么我没有得到正确的组合,要么 Java 服务不支持它。 (2认同)