SWT(JFace) 打印功能
SWT(JFace) 打印功能
发布时间:2016-12-28 来源:查字典编辑
摘要:演示代码如下:复制代码代码如下:packageswt_jface.demo11;importorg.eclipse.swt.graphics...

演示代码如下:

复制代码 代码如下:

package swt_jface.demo11;

import org.eclipse.swt.graphics.GC;

import org.eclipse.swt.printing.PrintDialog;

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 SimplePrint {

Display display = new Display();

Shell shell = new Shell(display);

public SimplePrint() {

shell.pack();

shell.open();

PrintDialog dialog = new PrintDialog(shell);

PrinterData printerData = dialog.open();

if(printerData != null) {

Printer printer = new Printer(printerData);

if(printer.startJob("Text")) {

GC gc = new GC(printer);

if(printer.startPage()) {

gc.drawString("Eclipse", 200, 200);

printer.endPage();

}

gc.dispose();

printer.endJob();

}

printer.dispose();

System.out.println("Print job done.");

}

while (!shell.isDisposed()) {

if (!display.readAndDispatch()) {

display.sleep();

}

}

display.dispose();

}

public static void main(String[] args) {

new SimplePrint();

}

}

常规Main菜单加入打印按钮:

复制代码 代码如下:

package swt_jface.demo11;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.Reader;

import org.eclipse.jface.window.ApplicationWindow;

import org.eclipse.jface.window.WindowManager;

import org.eclipse.swt.SWT;

import org.eclipse.swt.custom.StyledText;

import org.eclipse.swt.custom.StyledTextPrintOptions;

import org.eclipse.swt.events.SelectionAdapter;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.graphics.Color;

import org.eclipse.swt.graphics.Font;

import org.eclipse.swt.graphics.FontData;

import org.eclipse.swt.graphics.GC;

import org.eclipse.swt.graphics.Point;

import org.eclipse.swt.graphics.RGB;

import org.eclipse.swt.graphics.Rectangle;

import org.eclipse.swt.layout.FillLayout;

import org.eclipse.swt.printing.PrintDialog;

import org.eclipse.swt.printing.Printer;

import org.eclipse.swt.printing.PrinterData;

import org.eclipse.swt.widgets.ColorDialog;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.FileDialog;

import org.eclipse.swt.widgets.FontDialog;

import org.eclipse.swt.widgets.Menu;

import org.eclipse.swt.widgets.MenuItem;

import org.eclipse.swt.widgets.MessageBox;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Text;

public class Main {

ApplicationWindow applicationWindow;

WindowManager manager;

StyledTextPrintOptions styledTextPrintOptions;

StyledText styledText;

Display display;

Shell shell;

Text text;

Font font;

Color foregroundColor, backgroundColor;

Printer printer;

GC gc;

Font printerFont;

Color printerForegroundColor, printerBackgroundColor;

int lineHeight = 0;

int tabWidth = 0;

int leftMargin, rightMargin, topMargin, bottomMargin;

int x, y;

int index, end;

String textToPrint;

String tabs;

StringBuffer wordBuffer;

public static void main(String[] args) {

new Main().open();

}

void open() {

display = new Display();

font = new Font(display, "Courier", 10, SWT.NORMAL);

foregroundColor = display.getSystemColor(SWT.COLOR_BLACK);

backgroundColor = display.getSystemColor(SWT.COLOR_WHITE);

shell = new Shell(display);

shell.setLayout(new FillLayout());

shell.setText("Print Text");

shell.setMaximized(true);

text = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);

text.setFont(font);

text.setForeground(foregroundColor);

text.setBackground(backgroundColor);

Menu menuBar = new Menu(shell, SWT.BAR);

shell.setMenuBar(menuBar);

MenuItem item = new MenuItem(menuBar, SWT.CASCADE);

item.setText("&File");

Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);

item.setMenu(fileMenu);

item = new MenuItem(fileMenu, SWT.PUSH);

item.setText("&Open...");

item.setAccelerator(SWT.CTRL + 'O');

item.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent event) {

menuOpen();

}

});

item = new MenuItem(fileMenu, SWT.PUSH);

item.setText("Font...");

item.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent event) {

menuFont();

}

});

item = new MenuItem(fileMenu, SWT.PUSH);

item.setText("Foreground Color...");

item.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent event) {

menuForegroundColor();

}

});

item = new MenuItem(fileMenu, SWT.PUSH);

item.setText("Background Color...");

item.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent event) {

menuBackgroundColor();

}

});

item = new MenuItem(fileMenu, SWT.PUSH);

item.setText("&Print...");

item.setAccelerator(SWT.CTRL + 'P');

item.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent event) {

menuPrint();

}

});

new MenuItem(fileMenu, SWT.SEPARATOR);

item = new MenuItem(fileMenu, SWT.PUSH);

item.setText("E&xit");

item.addSelectionListener(new SelectionAdapter() {

public void widgetSelected(SelectionEvent event) {

System.exit(0);

}

});

shell.pack();

shell.open();

while (!shell.isDisposed()) {

if (!display.readAndDispatch()) display.sleep();

}

if (font != null) font.dispose();

if (foregroundColor != null) foregroundColor.dispose();

if (backgroundColor != null) backgroundColor.dispose();

}

void menuOpen() {

final String textString;

FileDialog dialog = new FileDialog(shell, SWT.OPEN);

dialog.setFilterExtensions(new String[] {"*.java", "*.*"});

String name = dialog.open();

if ((name == null) || (name.length() == 0)) return;

try {

File file = new File(name);

FileInputStream stream= new FileInputStream(file.getPath());

try {

Reader in = new BufferedReader(new InputStreamReader(stream));

char[] readBuffer= new char[2048];

StringBuffer buffer= new StringBuffer((int) file.length());

int n;

while ((n = in.read(readBuffer)) > 0) {

buffer.append(readBuffer, 0, n);

}

textString = buffer.toString();

stream.close();

} catch (IOException e) {

MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);

box.setMessage("Error reading file:n" + name);

box.open();

return;

}

} catch (FileNotFoundException e) {

MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);

box.setMessage("File not found:n" + name);

box.open();

return;

}

text.setText(textString);

}

void menuFont() {

FontDialog fontDialog = new FontDialog(shell);

fontDialog.setFontList(font.getFontData());

FontData fontData = fontDialog.open();

if (fontData != null) {

if (font != null) font.dispose();

font = new Font(display, fontData);

text.setFont(font);

}

}

void menuForegroundColor() {

ColorDialog colorDialog = new ColorDialog(shell);

colorDialog.setRGB(foregroundColor.getRGB());

RGB rgb = colorDialog.open();

if (rgb != null) {

if (foregroundColor != null) foregroundColor.dispose();

foregroundColor = new Color(display, rgb);

text.setForeground(foregroundColor);

}

}

void menuBackgroundColor() {

ColorDialog colorDialog = new ColorDialog(shell);

colorDialog.setRGB(backgroundColor.getRGB());

RGB rgb = colorDialog.open();

if (rgb != null) {

if (backgroundColor != null) backgroundColor.dispose();

backgroundColor = new Color(display, rgb);

text.setBackground(backgroundColor);

}

}

void menuPrint() {

PrintDialog dialog = new PrintDialog(shell, SWT.NULL);

PrinterData data = dialog.open();

if (data == null) return;

if (data.printToFile) {

data.fileName = "print.out";

}

textToPrint = text.getText();

printer = new Printer(data);

Thread printingThread = new Thread("Printing") {

public void run() {

print(printer);

printer.dispose();

}

};

printingThread.start();

}

void print(Printer printer) {

if (printer.startJob("Text")) {

Rectangle clientArea = printer.getClientArea();

Rectangle trim = printer.computeTrim(0, 0, 0, 0);

Point dpi = printer.getDPI();

leftMargin = dpi.x + trim.x;

rightMargin = clientArea.width - dpi.x + trim.x + trim.width;

topMargin = dpi.y + trim.y;

bottomMargin = clientArea.height - dpi.y + trim.y + trim.height;

int tabSize = 4;

StringBuffer tabBuffer = new StringBuffer(tabSize);

for (int i = 0; i < tabSize; i++) tabBuffer.append(' ');

tabs = tabBuffer.toString();

gc = new GC(printer);

FontData fontData = font.getFontData()[0];

printerFont = new Font(printer, fontData.getName(), fontData.getHeight(), fontData.getStyle());

gc.setFont(printerFont);

tabWidth = gc.stringExtent(tabs).x;

lineHeight = gc.getFontMetrics().getHeight();

RGB rgb = foregroundColor.getRGB();

printerForegroundColor = new Color(printer, rgb);

gc.setForeground(printerForegroundColor);

rgb = backgroundColor.getRGB();

printerBackgroundColor = new Color(printer, rgb);

gc.setBackground(printerBackgroundColor);

printText();

printer.endJob();

printerFont.dispose();

printerForegroundColor.dispose();

printerBackgroundColor.dispose();

gc.dispose();

}

}

void printText() {

printer.startPage();

wordBuffer = new StringBuffer();

x = leftMargin;

y = topMargin;

index = 0;

end = textToPrint.length();

while (index < end) {

char c = textToPrint.charAt(index);

index++;

if (c != 0) {

if (c == 0x0a || c == 0x0d) {

if (c == 0x0d && index < end && textToPrint.charAt(index) == 0x0a) {

index++;

}

printWordBuffer();

newline();

} else {

if (c != 't') {

wordBuffer.append(c);

}

if (Character.isWhitespace(c)) {

printWordBuffer();

if (c == 't') {

x += tabWidth;

}

}

}

}

}

if (y + lineHeight <= bottomMargin) {

printer.endPage();

}

}

void printWordBuffer() {

if (wordBuffer.length() > 0) {

String word = wordBuffer.toString();

int wordWidth = gc.stringExtent(word).x;

if (x + wordWidth > rightMargin) {

newline();

}

gc.drawString(word, x, y, false);

x += wordWidth;

wordBuffer = new StringBuffer();

}

}

void newline() {

x = leftMargin;

y += lineHeight;

if (y + lineHeight > bottomMargin) {

printer.endPage();

if (index + 1 < end) {

y = topMargin;

printer.startPage();

}

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Java学习
热门Java学习
编程开发子分类