鉴于印刷时的SWT片段:
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.printing.Printer;
import org.eclipse.swt.printing.PrinterData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class SWTPrint2
{
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Printing...");
shell.open();
PrinterData data = Printer.getDefaultPrinterData();
if (data == null)
{
System.out.println("Warning: No default printer.");
display.dispose();
return;
}
Printer printer = new Printer(data);
if (printer.startJob("SWT Printing Snippet"))
{
Color black = printer.getSystemColor(SWT.COLOR_BLACK);
Color white = printer.getSystemColor(SWT.COLOR_WHITE);
Color red = printer.getSystemColor(SWT.COLOR_RED);
Rectangle trim = printer.computeTrim(0, 0, 0, 0);
Point dpi = printer.getDPI();
int leftMargin = dpi.x + trim.x; // one inch from left side of paper
if (leftMargin < 0)
leftMargin = -trim.x; // make sure to print on the printable area
int topMargin = dpi.y / 2 + trim.y; // one-half inch from top edge of paper
if (topMargin < 0)
topMargin = -trim.y; // make sure to print on the printable area
GC gc = new GC(printer);
if (printer.startPage())
{
gc.setBackground(white);
gc.setForeground(black);
String testString = "Hello World!";
Point extent = gc.stringExtent(testString);
gc.drawString(testString, leftMargin, topMargin);
gc.setForeground(red);
gc.drawRectangle(leftMargin, topMargin, extent.x, extent.y);
printer.endPage();
}
gc.dispose();
printer.endJob();
}
printer.dispose();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
如果你不做shell.open()并让用户关闭窗口,那么应用程序永远不会退出。
如果不调用shell.open()并以编程方式处理shell 要么 shell.open()shell.setVisible(false)和shell.close()在处理shell之前,应用程序退出到发送到打印机的打印作业之前。
(这是在linux上)。
我错过了什么?
我正在开发的应用程序正在有效地扩展jasperreports上的打印(实际上能够正确打印!)并且与打印对话框(如果需要)相比,GUI更少。我不希望用户除了选择打印机之外还要做任何其他事情并点击OK,如果我不需要,则不要显示无关的gui位。
由于JPS不能正确支持整理,因此适当输入垃圾箱或打印机质量SWT优于JPS。我使用来自JFree的SWTGraphics2D渲染页面,因为需要支持SWT进行打印。 SWT还提供合理的编程访问打印机选项(通过devmode或gtk结构曝光)。
任何帮助表示赞赏!