1

我必须在 80 毫米 * 297 毫米的纸张上打印一页。我正在使用以下代码:

 public static void printCard(final String bill ){



Printable contentToPrint = new Printable(){
   @Override
   public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws     PrinterException {


       Graphics2D g2d = (Graphics2D) graphics;
    g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
    pageFormat.setOrientation(PageFormat.PORTRAIT);
    Paper pPaper = pageFormat.getPaper();
     pPaper.setImageableArea(1.0, 1.0, pPaper.getWidth() , pPaper.getHeight() -2);
     pageFormat.setPaper(pPaper);

       if (pageIndex >0){return NO_SUCH_PAGE;} //Only one page

      String Bill [] = bill.split(";");

      int y = 0;
    for (int i = 0; i < Bill.length; i++) {

        g2d.drawString(Bill[i], 0, y);
        y = y + 15;
    }

    return PAGE_EXISTS;

   }


};  
  PrinterJob job = PrinterJob.getPrinterJob();
  job.setPrintable(contentToPrint);
    boolean dojob = job.printDialog();
  //You can show a print dialog before printing by job by wrapping the following blocks     with a conditional statement if(job.printDialog()){...}


try {
    job.print();
} catch (PrinterException e) {
    System.err.println(e.getMessage());
}

}

该代码运行良好,但唯一的问题是每次使用此代码都必须设置边距。预设边距为距顶部 20 毫米、距左侧 21 毫米和距底部 18 毫米。所以文本不适合小页面。如何从我的代码中设置自定义边距?或者我可以设置默认打印机设置,这样我就不需要每次都设置边距?

4

1 回答 1

0

我在您的代码中看不到任何具体错误,但值得看看 java.awt.print.PageFormat 类中的 setImageableWidth 和 setImageableHeight 。

如果您已经尝试过(我假设您已经尝试过)并且发现它不起作用,那么不要以为您会发疯,我已经找到了似乎根本不接受 java print api 的特定打印机。

在工作中,我们的 Xerox MFD 会愉快地忽略打印命令或打印 api 中的格式。对于打印到特定用户帐户的解决方案,我们必须先保存并更改 pcl 文件中的某些字节,然后再将其传递给打印机。不是一个好的解决方案,但它似乎是唯一的方法......

于 2013-11-14T09:55:58.413 回答