java - 在 PersonaC30 证卡打印机上进行 Jpanel 打印

标签 java swing printing

我正在使用 PersonaC30 卡片打印机在卡片上打印我的 Jpanel 数据。我的打印方法在纸质打印机上运行良好,但是当我用卡片打印机打印时,它不会打印我的数据。它在外部打印良好,但不适用于我的应用程序。

这是我的代码:

private void printCard(){

PrinterJob printjob = PrinterJob.getPrinterJob();
printjob.setJobName(" TESSCO CUSTOMER CARD ");

printjob.setPrintable (new Printable() {

public int print(Graphics pg, PageFormat pf, int pageNum){

    Paper card = pf.getPaper();
   // card.setImageableArea(0, 0, 153, 243);
    card.setSize(243, 154);
    pf.setPaper(card);
    pf.setOrientation(PageFormat.LANDSCAPE);

if (pageNum > 0){
return Printable.NO_SUCH_PAGE;
}
Graphics2D g2 = (Graphics2D) pg;

g2.translate(pf.getImageableX(), pf.getImageableY());
g2.translate( 0f, 0f );

jLayeredPane2.paint(g2);

return Printable.PAGE_EXISTS;
}
});
if (printjob.printDialog() == false)
return;

try {
        printjob.print();
      }
      catch (PrinterException ex) {
        System.out.println("NO PAGE FOUND."+ex);

      }
}

最佳答案

试试这个。我添加了一些代码来调整面板图像的大小。

private void printCard() {

    PrinterJob printjob = PrinterJob.getPrinterJob();
    printjob.setJobName(" TESSCO CUSTOMER CARD ");

    Printable printable = new Printable() {

        public int print(Graphics pg, PageFormat pf, int pageNum) {

            if (pageNum > 0) {
                return Printable.NO_SUCH_PAGE;
            }

            Dimension size = jLayeredPane2.getSize();
            BufferedImage bufferedImage = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB);

            jLayeredPane2.print(bufferedImage.getGraphics());

            Graphics2D g2 = (Graphics2D) pg;
            g2.translate(pf.getImageableX(), pf.getImageableY());
            g2.drawImage(bufferedImage, 0, 0, (int) pf.getWidth(), (int) pf.getHeight(), null);

            return Printable.PAGE_EXISTS;
        }
    };

    Paper paper = new Paper();
    paper.setImageableArea(0, 0, 153, 243);
    paper.setSize(243, 154);

    PageFormat format = new PageFormat();
    format.setPaper(paper);
    format.setOrientation(PageFormat.LANDSCAPE);

    printjob.setPrintable(printable, format);
    if (printjob.printDialog() == false)
        return;

    try {
        printjob.print();
    } catch (PrinterException ex) {
        System.out.println("NO PAGE FOUND." + ex);

    }
}

关于java - 在 PersonaC30 证卡打印机上进行 Jpanel 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/776621/

相关文章:

java - 如何处置 JPanel - jPanel1.dispose() 或同等内容

python - 使用 matplotlib,如何打印 "actual size"?

javascript - 打印页面时分页符、边框等 CSS 不起作用(Angular 5)

Java:保存对象供以后使用

java - Log4j 格式化 : Is it possible to truncate stacktraces?

Java Event-Dispatching Thread 解释

java - 如何根据用户操作更改图标的颜色?

arrays - 在 Excel 中打印特定工作表,具有不同的打印区域和使用 VBA 的打印设置

java - 使用 jGit 添加目录中的所有文件

Java DAO 对象 SQLException