我必须用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毫米。 所以文字不适合小页面。 如何从代码中设置自定义边距?或者我可以设置默认打印机设置,以便我不需要每次都设置边距吗?
答案 0 :(得分:0)
我在代码中看不到任何特别错误,但值得一看java.awt.print.PageFormat类中的setImageableWidth和setImageableHeight。
如果你已经尝试过这个(我假设你有)并且发现它不起作用那么不要以为你发疯了,我发现特定的打印机似乎不接受java print api 。
在工作中,我们的Xerox MFD轻轻地忽略了print api中的打印命令或格式。对于打印到特定用户帐户的解决方案,我们必须保存,然后在将其传递给打印机之前更改pcl文件中的某些字节。不是一个很好的解决方案,但它似乎是唯一的方式...