在我的桌面应用程序中,我需要在点阵打印机上打印jPanel数据,其中纸张大小应为10x6。在java中,我们有一个宽度不应大于高度的限制。但是,如何通过超越此限制来完成我的任务。如果我设置高度小于宽度的页面格式,则将其视为A4纸并送入纸张底部。
如果我没有指定页面格式,那么打印正常但会留下很多边距(顶部,底部,左侧,右侧)。我无法改变边距。如果仅设置边距,则将页面视为A4并在底部提供Feed。
我需要在预打印页面上打印数据并进行对齐。有没有其他方法可以做到这一点。我可以使用横向,如果是这样,如何控制文本流(从下到上 - X轴)。
这是我的代码
PrinterJob job = PrinterJob.getPrinterJob();
PageFormat pageFormat = job.defaultPage();
pageFormat.setOrientation(PageFormat.LANDSCAPE);
job.setPrintable(this,pageFormat);
try {
job.print();
} catch (PrinterException ex) {
System.out.println(ex);
}
绘画方法
public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
if (page > 0) {
return NO_SUCH_PAGE;
}
g.setFont(new java.awt.Font("Sans Serif", java.awt.Font.PLAIN, 10));
Graphics2D g2d = (Graphics2D)g;
AffineTransform old = g2d.getTransform();
if (pf.getOrientation() == PageFormat.LANDSCAPE) {
g2d.rotate( -Math.PI / 2, 0, 0);
g2d.translate( -pf.getImageableWidth(), 0);
}
else {
g2d.rotate(Math.PI / 2, 0, 0);
g2d.translate(0, -pf.getImageableHeight());
}
jPanel1.printAll(g2d);
g2d.setTransform(old);
//g2d.translate(70, 30);
return PAGE_EXISTS;
}
提前致谢。
答案 0 :(得分:1)
将PageFormat的方向设置为横向并旋转内容。在print()方法中,旋转并翻译内容。
Graphics2D g2d = (Graphics2D) g;
AffineTransform old = g2d.getTransform();
if (contentOrientation == ORIENTATION_DOWN_UP) {
g2d.rotate( -Math.PI / 2, 0, 0);
g2d.translate( -w, 0);
}
else {
g2d.rotate(Math.PI / 2, 0, 0);
g2d.translate(0, -h);
}
//paint all your content here
g2d.setTransform(old);