在Star TSP 100U上打印组件

时间:2013-12-11 21:41:00

标签: java swing printing

我试图将jscrollpane打印到收据热敏打印机,TSP100 / 143 USB。 问题是,如果我点击打印后从页面设置中选择A4,它将打印为好像是A4纸,它将具有A4高度。如果我选​​择72mm x收据,它将把收据扩展到一个巨大的高度,我必须关闭它,因为它打印像全长的页面。

我的收据可能很短或长达数米,具体取决于用户条目的数量,滚动窗格会展开。 现在,另一个问题是它只会打印滚动窗格的可见部分。

我真的不太了解java的印刷部分,所以你能帮帮我吗? 我真的卡住了,我需要尽快完成这项工作。 我在Android中做到了这一点很好,但在我看来,java在本章中非常混乱。

以下是一些截图和我的打印代码:

https://www.dropbox.com/s/5l8ausvgwpztoui/Screenshot%202013-12-11%2023.25.34.png 我的应用程序的样子截图,为我想做的事情做好准备。

https://www.dropbox.com/s/2fnyigcieqf7eyi/2013-12-11%2023.24.10.jpg 如您所见,它将内容传播为A4纸的高度。

https://www.dropbox.com/s/pppez3dz2s3t709/2013-12-11%2023.32.42.jpg 在这里,您可以看到除了展开它之外,它只显示滚动窗格的可见部分。

打印代码:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
PrinterJob pjob = PrinterJob.getPrinterJob();
PageFormat preformat = pjob.defaultPage();
preformat.setOrientation(PageFormat.PORTRAIT);
PageFormat postformat = pjob.pageDialog(preformat);

if (preformat != postformat) {
//Set print component
pjob.setPrintable(this, postformat);
if (pjob.printDialog()) {
    try {
        pjob.print();
    } catch (PrinterException ex) {
        Logger.getLogger(Test2.class.getName()).log(Level.SEVERE, null, ex);
    }
}}
}                                        

@Override
public int print(Graphics g, PageFormat format, int page_index)
        throws PrinterException {
    if (page_index > 0) {
        return Printable.NO_SUCH_PAGE;
    }

    // get the bounds of the component
    Dimension dim = jScrollPane2.getSize();
    double cHeight = dim.getHeight();
    double cWidth = dim.getWidth();

    // get the bounds of the printable area
    double pHeight = format.getImageableHeight();
    double pWidth = format.getImageableWidth();

    double pXStart = format.getImageableX();
    double pYStart = format.getImageableY();

    double xRatio = pWidth / cWidth;
    double yRatio = pHeight / cHeight;

    Graphics2D g2 = (Graphics2D) g;
    g2.translate(pXStart, pYStart);
    g2.scale(xRatio, yRatio);
    jScrollPane2.paint(g2);

    return Printable.PAGE_EXISTS;

}

我该如何修复它还是有其他方法可以简单地打印到TSP100 / 143 USB吗? JavaPOS真的很奇怪,看起来很复杂,除了旧的,没有更新,无法按你的意愿安排东西。

谢谢,祝你有个美好的一天!

编辑:嗯,现在一切都好起来了。我改变了#39; double yRatio = pHeight / cHeight;'到' double yRatio = pHeight / 0.75;'然后我将打印的视图更改为滚动窗格内的jpanel,现在它一切都很好。它打印即使不可见,如果我选择72xReceipt也不会缩放它。

感谢MadProgrammer。你对我搜索的关于这个话题的每一个问题都有所了解,你帮了很多忙!

0 个答案:

没有答案