我尝试将大小设置为零或删除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打印机,因为我这里没有任何打印机。有什么建议?
答案 0 :(得分:6)
使用带有PageFormat
参数的PrinterJob.setPrintable()版本。
在PageFormat中,设置纸张imageable area没有边框(x = 0,y = 0,宽度=纸张宽度,高度=纸张高度)。
您可能希望通过PrinterJob.validatePage()提供该信息,其中包含:
返回页面的克隆,其设置已调整为与此PrinterJob的当前打印机兼容。例如,返回的PageFormat可以调整其可成像区域以适合当前打印机使用的纸张的物理区域。
这是一个好主意,因为打印机可能不支持无边距打印,并且此方法将调整您的PageFormat
,以便设置与打印机兼容。
这是一个在带有删除边框的页面上打印一些文字的示例:
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();
使用Postscript测试 - > Windows上的文件打印机。仍然有一个小的边框,但这可能是打印机驱动程序的限制。