java打印-设置边框的大小

java打印-设置边框的大小,java,swing,graphics,printing,border,Java,Swing,Graphics,Printing,Border,我尝试将大小设置为零或删除java中打印文档的边框。它总是有一个标准的白色边框 下面是我打印JPanel和一些组件的函数: public void printComponent(){ PrinterJob pj = PrinterJob.getPrinterJob(); pj.setJobName(" Print Component "); pj.setPrintable (new Printable() {

我尝试将大小设置为零或删除java中打印文档的边框。它总是有一个标准的白色边框

下面是我打印JPanel和一些组件的函数:

    public void printComponent(){

          PrinterJob pj = PrinterJob.getPrinterJob();
          pj.setJobName(" Print Component ");

          pj.setPrintable (new Printable() {

            @Override
            public int print(Graphics pg, PageFormat pf, int pageNum) throws PrinterException {
                if (pageNum > 0){
                      return Printable.NO_SUCH_PAGE;
                      }

                      Graphics2D g2 = (Graphics2D) pg;
                      g2.translate(pf.getImageableX(), pf.getImageableY());
                      TournamentView.this.paint(g2);
                      return Printable.PAGE_EXISTS;
            }

          });
          if (pj.printDialog() == false)
          return;

          try {
              PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
              aset.add(OrientationRequested.LANDSCAPE);
              PrinterResolution pr = new PrinterResolution(200, 200, PrinterResolution.DPI);
              aset.add(pr);
              pj.print( aset);
          } catch (PrinterException ex) {
                // handle exception
          }
        }
我正在使用Adobe PDF打印机,因为我这里没有打印机。有什么建议吗

使用采用
PageFormat
参数的版本

在PageFormat中,设置纸张的无边框(x=0,y=0,宽度=纸张宽度,高度=纸张高度)

您可能希望通过以下方式实现这一点:

返回页面的克隆,并将其设置调整为与此PrinterJob的当前打印机兼容。例如,返回的页面格式可以调整其可成像区域,以适合当前打印机使用的纸张的物理区域

这是一个好主意,因为打印机可能不支持无边界打印,并且它将使用此方法调整您的
页面格式
,以便设置与打印机兼容

下面是一个示例,用于在删除边框的页面上打印某些文本:

PrinterJob pj = PrinterJob.getPrinterJob();
PageFormat format = pj.getPageFormat(null);
Paper paper = format.getPaper();
//Remove borders from the paper
paper.setImageableArea(0.0, 0.0, format.getPaper().getWidth(), format.getPaper().getHeight());
format.setPaper(paper);

pj.setPrintable(new Printable()
{
    @Override
    public int print(Graphics pg, PageFormat pf, int pageNum)
            throws PrinterException
    {
        if (pageNum > 0)
            return Printable.NO_SUCH_PAGE;

        Graphics2D g2 = (Graphics2D)pg;
        g2.translate(pf.getImageableX(), pf.getImageableY());
        int textHeight = g2.getFontMetrics().getHeight();
        g2.drawString("Good morning, what will be for eating?", 0, textHeight);
        return Printable.PAGE_EXISTS;
    }
}, format);

if (!pj.printDialog())
    return;

pj.print();

在Windows上使用Postscript->文件打印机进行测试。仍然有一个小边框,但这可能是打印机驱动程序的一个限制。

这工作非常好,现在打印机对话框弹出大约需要10秒-有什么想法吗?这发生在您使用PrinterJob.setPrintable(可打印,PageFormat)而不是PrinterJob.setPrintable(可打印)时请尝试将绘画代码减少到绝对最小值(例如,只画一条线或字符串)。可能是大量剪辑速度减慢,或者是打印机驱动程序。在使用postscript打印机驱动程序打印到文件时,我没有遇到过这样的速度减慢。好的,在另一台电脑上尝试过,结果正常。我要检查我的打印机驱动程序!非常感谢你