java打印机

java打印机


2024年4月27日发(作者:)

猪哥解答:

我这里有以前收藏的代码,两个类实现了简易的文本打印机的功能,包括预览。

简单跟你说一下。

1、主体类,也是入口类,里面有main方法可以直接在Eclipse

中调试运行,他实现了从本地磁盘读取文本类文件打印以及打印预览的功能,其

中File动作按钮中的PrintPreviw就是打印预览功能,你可以运行看看。

2、打印预览类,这是专门为预览打印设计的类,通过他的构造

方法可以构造出一个预览类,PrinterDemo中的预览功能就是调用了这个类。

两个类的源码:

【】的源码:

import Layout;

import ;

import ner;

import ion;

import ;

import ;

import cs;

import cs2D;

import t;

import Event;

import nt;

import Adapter;

import Event;

import rmat;

import ble;

import rException;

import rJob;

import edReader;

import ;

import ader;

import ption;

import ;

import ctAction;

import nent;

import hooser;

import ;

import ;

import ar;

import lPane;

import oke;

public class PrinterDemo extends JFrame{

private static final long serialVersionUID = 1L;

private PageFormat pageFormat;

private FilePageRenderer pageRenderer;

private String title;

public PrinterDemo(){

super();

init();

PrinterJob pj = nterJob();

pageFormat = tPage();

setVisible(true);

}

protected void init()

{

setSize(350, 300);

center();

Container content = getContentPane();

out(new BorderLayout());

JMenuBar mb = new JMenuBar();

JMenu file = new JMenu("File", true);

(new

FileOpenAction()).setAccelerator(Stroke(_O

,_MASK));

(new

FilePrintPreviwAction()).setAccelerator(Stroke(KeyEve

_V, _MASK));

(new

FilePrintAction()).setAccelerator(Stroke(_

P,_MASK));

(new

FilePageSetupAction()).setAccelerator(Stroke(KeyEvent

.VK_P, _MASK| _MASK));

arator();

(new

FileQuitAction()).setAccelerator(Stroke(_Q

,

_MASK));

(file);

JMenu page = new JMenu("Page", true);

(new PageNextPageAction())

.setAccelerator(Stroke(_PAGE

_DOWN, 0));

(new PagePreviousPageAction())

.setAccelerator(Stroke(_PAGE

_UP, 0));

(page);

setJMenuBar(mb);

getContentPane().setLayout(new BorderLayout());

addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

(0);

}

});

}

protected void center()

{

Dimension screenSize =

aultToolkit().getScreenSize();

Dimension frameSize = getSize();

int x = ( - ) / 2;

int y = ( - ) / 2;

setLocation(x, y);

}

public void showTitle()

{

int currentPage = rentPage() + 1;

int numPages = Pages();

setTitle(title + " - page " + currentPage + " of " + numPages);

}

public class FileOpenAction extends AbstractAction

{

private static final long serialVersionUID = 1L;

public FileOpenAction()

{

super("");

}

public void actionPerformed(ActionEvent ae)

{

// Pop up a file dialog.

JFileChooser fc = new JFileChooser(".");

int result = enDialog();

if (result != 0)

{

return;

}

f = ectedFile();

if (f == null)

{

return;

}

// Load the specified file.

try

{

pageRenderer = new FilePageRenderer(f, pageFormat);

title = "[" + e() + "]";

showTitle();

JScrollPane jsp = new JScrollPane(pageRenderer);

getContentPane().removeAll();

getContentPane().add(jsp, );

validate();

} catch (ption ioe)

{

n(ioe);

}

}

}

public static void main(String[] args){

new PrinterDemo();

}

public class FilePrintPreviwAction extends AbstractAction{

private static final long serialVersionUID = 1L;

public FilePrintPreviwAction(){

super("PrintPreviw");

}

public void actionPerformed(ActionEvent ae){

new

PrintPreview(pageRenderer,"PrintPreviw",entation());

}

}

public class FilePrintAction extends AbstractAction{

private static final long serialVersionUID = 1L;

public FilePrintAction(){

super("Print");

}

public void actionPerformed(ActionEvent ae){

PrinterJob pj = nterJob();

ntable(pageRenderer, pageFormat);

if (ialog()){

try{

();

} catch (PrinterException e){

n(e);

}

}

}

}

public class FilePageSetupAction extends AbstractAction {

private static final long serialVersionUID = 1L;

public FilePageSetupAction(){

super("");

}

public void actionPerformed(ActionEvent ae){

PrinterJob pj = nterJob();

pageFormat = alog(pageFormat);

if (pageRenderer != null){

it(pageFormat);

showTitle();

}

}

}

public class FileQuitAction extends AbstractAction{

private static final long serialVersionUID = 1L;

public FileQuitAction(){

super("Quit");

}

public void actionPerformed(ActionEvent ae){

(0);

}

}

public class PageNextPageAction extends AbstractAction{

private static final long serialVersionUID = 1L;

public PageNextPageAction(){

super("Next page");

}

public void actionPerformed(ActionEvent ae){

if (pageRenderer != null)

ge();

showTitle();

}

}

public class PagePreviousPageAction extends AbstractAction{

private static final long serialVersionUID = 1L;

public PagePreviousPageAction(){

super("Previous page");

}

public void actionPerformed(ActionEvent ae){

if (pageRenderer != null)

usPage();

showTitle();

}

}

class FilePageRenderer extends JComponent implements Printable{

private static final long serialVersionUID = 1L;

private int currentPageIndex;

private Vector lineVector;

private Vector pageVector;

private Font font;

private int fontSize;

private Dimension preferredSize;

public FilePageRenderer(File file, PageFormat pageFormat)

throws IOException{

fontSize = 12;

font = new Font("Serif", , fontSize);

BufferedReader in = new BufferedReader(new

FileReader(file));

String line;

lineVector = new Vector();

while ((line = ne()) != null)

ment(line);

();

pageInit(pageFormat);

}

public void pageInit(PageFormat pageFormat){

currentPageIndex = 0;

pageVector = new Vector();

float y = fontSize;

Vector page = new Vector();

for (int i = 0; i < (); i++)

{

String line = (String) tAt(i);

ment(line);

y += fontSize;

if (y + fontSize * 2 > geableHeight())

{

y = 0;

ment(page);

page = new Vector();

}

}

if (() > 0)

ment(page);

preferredSize = new Dimension((int)

geableWidth(),

(int)

geableHeight());

repaint();

}

public void paintComponent(Graphics g) {

Graphics2D g2 = (Graphics2D) g;

gle2D r = new

(0,

0,

,

);

nt();

(r);

Vector page = (Vector)

tAt(currentPageIndex);

t(font);

nt();

float x = 0;

float y = fontSize;

for (int i = 0; i < (); i++){

String line = (String) tAt(i);

if (() > 0)

ring(line, (int) x, (int) y);

y += fontSize;

}

}

public int print(Graphics g, PageFormat pageFormat, int

pageIndex){

if (pageIndex >= ())

return NO_SUCH_PAGE;

int savedPage = currentPageIndex;

currentPageIndex = pageIndex;

Graphics2D g2 = (Graphics2D) g;

ate(geableX(),

geableY());

paint(g2);

currentPageIndex = savedPage;

return PAGE_EXISTS;

}

public Dimension getPreferredSize(){

return preferredSize;

}

public int getCurrentPage(){

return currentPageIndex;

}

public int getNumPages(){

return ();

}

public void nextPage() {

if (currentPageIndex < () - 1)

currentPageIndex++;

repaint();

}

public void previousPage(){

if (currentPageIndex > 0)

currentPageIndex--;

repaint();

}

}

}

【】的源码:

import Layout;

import ;

import ent;

import ;

import ion;

import cs;

import ;

import ;

import Event;

import Listener;

import edImage;

import rmat;

import ble;

import rException;

import rJob;

import con;

import n;

import Box;

import ;

import ;

import lPane;

import ar;

import order;

public class PrintPreview extends JFrame

{

private static final long serialVersionUID = 1L;

protected int m_wPage;

protected int m_hPage;

protected int m_orientation;

protected Printable m_target;

protected JComboBox m_cbScale;

protected PreviewContainer m_preview;

public PrintPreview(Printable target)

{

this(target, "Print Preview ", IT);

}

public PrintPreview(Printable target, String title, int orientation)

{

super(title);

setSize(600, 400);

getContentPane().setLayout(new BorderLayout());

m_target = target;

m_orientation = orientation;

JToolBar tb = new JToolBar();

JButton bt = new JButton("Print ", new ImageIcon(" "));

ActionListener lst = new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

try

{

PrinterJob prnJob = nterJob();

PageFormat pageFormat = tPage();

entation(m_orientation);

ntable(m_target, pageFormat);

if (!ialog())

return;

setCursor(definedCursor(_CURSOR));

();

setCursor(definedCursor(T_CURSOR));

dispose();

} catch (PrinterException ex)

{

tackTrace();

n("Printing error: " +

ng());

}

}

};

ionListener(lst);

gnmentY(0.5f);

gin(new Insets(4, 6, 4, 6));

(bt);

bt = new JButton("Close ");

lst = new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

dispose();

}

};

ionListener(lst);

gnmentY(0.5f);

gin(new Insets(2, 6, 2, 6));

(bt);

String[] scales = { "10%", "25%", "50%", "100%" };

m_cbScale = new JComboBox(scales);

lst = new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

String str = m_ectedItem().toString();

if (th("%"))

str = ing(0, () - 1);

str = ();

int scale = 0;

try

{

scale = nt(str);

} catch (NumberFormatException ex)

{

return;

}

int w = (int) (m_wPage * scale / 100);

int h = (int) (m_hPage * scale / 100);

Component[] comps = m_ponents();

for (int k = 0; k < ; k++)

{

if (!(comps[k] instanceof PagePreview))

continue;

PagePreview pp = (PagePreview) comps[k];

ledSize(w, h);

}

m_ut();

m_ent().getParent().validate();

}

};

m_ionListener(lst);

m_imumSize(m_ferredSize());

m_table(true);

arator();

(m_cbScale);

getContentPane().add(tb, );

m_preview = new PreviewContainer();

PrinterJob prnJob = nterJob();

PageFormat pageFormat = tPage();

entation(m_orientation);

if (ght() == 0 || th() == 0)

{

n("Unable to determine default

page size ");

return;

}

m_wPage = (int) (th());

m_hPage = (int) (ght());

int scale = 10;

int w = (int) (m_wPage * scale / 100);

int h = (int) (m_hPage * scale / 100);

int pageIndex = 0;

try

{

while (true)

{

BufferedImage img = new BufferedImage(m_wPage, m_hPage,

_INT_RGB);

Graphics g = phics();

or();

ct(0, 0, m_wPage, m_hPage);

if ((g, pageFormat, pageIndex) !=

_EXISTS)

break;

PagePreview pp = new PagePreview(w, h, img);

m_(pp);

pageIndex++;

}

} catch (PrinterException e)

{

tackTrace();

n("Printing error: " + ng());

}

JScrollPane ps = new JScrollPane(m_preview);

getContentPane().add(ps, );

setDefaultCloseOperation(DISPOSE_ON_CLOSE);

setVisible(true);

}

class PreviewContainer extends JPanel

{

private static final long serialVersionUID = 1L;

protected int H_GAP = 16;

protected int V_GAP = 10;

public Dimension getPreferredSize()

{

int n = getComponentCount();

if (n == 0)

return new Dimension(H_GAP, V_GAP);

Component comp = getComponent(0);

Dimension dc = ferredSize();

int w = ;

int h = ;

Dimension dp = getParent().getSize();

int nCol = (( - H_GAP) / (w + H_GAP), 1);

int nRow = n / nCol;

if (nRow * nCol < n)

nRow++;

int ww = nCol * (w + H_GAP) + H_GAP;

int hh = nRow * (h + V_GAP) + V_GAP;

Insets ins = getInsets();

return new Dimension(ww + + , hh +

+ );

}

public Dimension getMaximumSize()

{

return getPreferredSize();

}

public Dimension getMinimumSize()

{

return getPreferredSize();

}

public void doLayout()

{

Insets ins = getInsets();

int x = + H_GAP;

int y = + V_GAP;

int n = getComponentCount();

if (n == 0)

return;

Component comp = getComponent(0);

Dimension dc = ferredSize();

int w = ;

int h = ;

Dimension dp = getParent().getSize();

int nCol = (( - H_GAP) / (w + H_GAP), 1);

int nRow = n / nCol;

if (nRow * nCol < n)

nRow++;

int index = 0;

for (int k = 0; k < nRow; k++)

{

for (int m = 0; m < nCol; m++)

{

if (index >= n)

return;

comp = getComponent(index++);

nds(x, y, w, h);

x += w + H_GAP;

}

y += h + V_GAP;

x = + H_GAP;

}

}

}

class PagePreview extends JPanel

{

private static final long serialVersionUID = 1L;

protected int m_w;

protected int m_h;

protected Image m_source;

protected Image m_img;

public PagePreview(int w, int h, Image source)

{

m_w = w;

m_h = h;

m_source = source;

m_img = m_ledInstance(m_w, m_h,

_SMOOTH);

m_();

setBackground();

setBorder(new MatteBorder(1, 1, 2, 2, ));

}

public void setScaledSize(int w, int h)

{

m_w = w;

m_h = h;

m_img = m_ledInstance(m_w, m_h,

_SMOOTH);

repaint();

}

public Dimension getPreferredSize()

{

Insets ins = getInsets();

return new Dimension(m_w + + , m_h +

+ );

}

public Dimension getMaximumSize()

{

return getPreferredSize();

}

public Dimension getMinimumSize()

{

return getPreferredSize();

}

public void paint(Graphics g)

{

or(getBackground());

ct(0, 0, getWidth(), getHeight());

age(m_img, 0, 0, this);

paintBorder(g);

}

}

}

两个类放在同一个包下。


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714226748a2405943.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信