问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请问JAVA如何实现打印及打印预览功能?

发布网友 发布时间:2022-04-24 18:50

我来回答

2个回答

热心网友 时间:2022-04-27 20:09

package com.szallcom.tools;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;

import wf.common.SystemProperties;

public class PrintPreviewDialog extends JDialog implements ActionListener{

private JButton nextButton = new JButton("Next");
private JButton previousButton = new JButton("Previous");
private JButton closeButton = new JButton("Close");
private JPanel buttonPanel = new JPanel();
private PreviewCanvas canvas;

public PrintPreviewDialog(Frame parent, String title, boolean modal,
PrintTest pt, String str) {
super(parent, title, modal);
canvas = new PreviewCanvas(pt, str);
setLayout();
}

private void setLayout() {
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(canvas, BorderLayout.CENTER);

nextButton.setMnemonic('N');
nextButton.addActionListener(this);
buttonPanel.add(nextButton);
previousButton.setMnemonic('N');
previousButton.addActionListener(this);
buttonPanel.add(previousButton);
closeButton.setMnemonic('N');
closeButton.addActionListener(this);
buttonPanel.add(closeButton);
this.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
this.setBounds((int) ((SystemProperties.SCREEN_WIDTH - 400) / 2),
(int) ((SystemProperties.SCREEN_HEIGHT - 400) / 2), 400, 400);
}

public void actionPerformed(ActionEvent evt) {
Object src = evt.getSource();
if (src == nextButton)
nextAction();
else if (src == previousButton)
previousAction();
else if (src == closeButton)
closeAction();
}

private void closeAction() {
this.setVisible(false);
this.dispose();
}

private void nextAction() {
canvas.viewPage(1);
}

private void previousAction() {
canvas.viewPage(-1);
}

class PreviewCanvas extends JPanel {
private String printStr;
private int currentPage = 0;
private PrintTest preview;

public PreviewCanvas(PrintTest pt, String str) {
printStr = str;
preview = pt;
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
PageFormat pf = PrinterJob.getPrinterJob().defaultPage();

double xoff;
double yoff;
double scale;
double px = pf.getWidth();
double py = pf.getHeight();
double sx = getWidth() - 1;
double sy = getHeight() - 1;
if (px / py < sx / sy) {
scale = sy / py;
xoff = 0.5 * (sx - scale * px);
yoff = 0;
} else {
scale = sx / px;
xoff = 0;
yoff = 0.5 * (sy - scale * py);
}
g2.translate((float) xoff, (float) yoff);
g2.scale((float) scale, (float) scale);

Rectangle2D page = new Rectangle2D.Double(0, 0, px, py);
g2.setPaint(Color.white);
g2.fill(page);
g2.setPaint(Color.black);
g2.draw(page);

try {
preview.print(g2, pf, currentPage);
} catch (PrinterException pe) {
g2.draw(new Line2D.Double(0, 0, px, py));
g2.draw(new Line2D.Double(0, px, 0, py));
}
}

public void viewPage(int pos) {
int newPage = currentPage + pos;
if (0 <= newPage && newPage < preview.getPagesCount(printStr)) {
currentPage = newPage;
repaint();
}
}
}
}

package wf.common;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;

public final class SystemProperties {

public static final double SCREEN_WIDTH = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
public static final double SCREEN_HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
public static final String USER_DIR = System.getProperty("user.dir");
public static final String USER_HOME = System.getProperty("user.home");
public static final String USER_NAME = System.getProperty("user.name");
public static final String FILE_SEPARATOR = System.getProperty("file.separator");
public static final String LINE_SEPARATOR = System.getProperty("line.separator");
public static final String PATH_SEPARATOR = System.getProperty("path.separator");
public static final String JAVA_HOME = System.getProperty("java.home");
public static final String JAVA_VENDOR = System.getProperty("java.vendor");
public static final String JAVA_VENDOR_URL = System.getProperty("java.vendor.url");
public static final String JAVA_VERSION = System.getProperty("java.version");
public static final String JAVA_CLASS_PATH = System.getProperty("java.class.path");
public static final String JAVA_CLASS_VERSION = System.getProperty("java.class.version");
public static final String OS_NAME = System.getProperty("os.name");
public static final String OS_ARCH = System.getProperty("os.arch");
public static final String OS_VERSION = System.getProperty("os.version");
public static final String[] FONT_NAME_LIST = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
public static final Font[] FONT_LIST = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
}

热心网友 时间:2022-04-27 21:27

猪哥解答:
我这里有以前收藏的代码,两个类实现了简易的文本打印机的功能,包括预览。简单跟你说一下。
1、PrinterDemo.java主体类,也是入口类,里面有main方法可以直接在Eclipse中调试运行,他实现了从本地磁盘读取文本类文件打印以及打印预览的功能,其中File动作按钮中的PrintPreviw就是打印预览功能,你可以运行看看。
2、PrintPreview.java打印预览类,这是专门为预览打印设计的类,通过他的构造方法可以构造出一个预览类,PrinterDemo中的预览功能就是调用了这个类。

两个类放在同一个包下。

提交不上去,我把源码贴上来提交不了,字数也没有超标。你留一个邮箱,或者等我的文库上传的源码吧,我放到文库里,还在审批。

问题补充:档案已经上传到文库里了,地址是
DOC格式的:http://wenku.baidu.com/view/048ae0e8856a561252d36fab.html
PDF格式的:http://wenku.baidu.com/view/67c57a69011ca300a6c390fd.html
你下来看看吧。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...求此视频的背景音乐!http://v.youku.com/v_show/id_XNTAyODQ0NTMy... http://v.youku.com/v_show/id_XOTQ5NDgwOTI=.html求歌曲 http://v.youku.com/v_show/id_XMzYzOTI3MjMy.html 这段MV里最开头唱... ...时辰能算准么,八字如果不知道时辰是不是就不能算了 养生调理产品真的可以防癌吗? 保健食品真能防癌抗癌吗专家直指多种产品“骗人” ...速腾 轩逸等 同价位的车 希望懂车的大侠帮我分析各车的优点和缺点... 怎样让腿变得又长又细 谷歌地球下载手机版有什么软件能代替GOOGLE地球 谷歌地球哪个版本好用 jsp页面如何用代码(java语言)实现打印功能? 高考报名没有报上,还能补报么? 我没有报高考志愿,补录的时候我可不可以报啊 rtx2060搭配CPU的问题,想用一个合适的U,怎么选? 如果高考后我没有填报志愿,还能不能参加补录啊! 因为没有报名军警学校现有补录吗 ? 没过本科线,能不能补录上 解释一下这个程序是啥意思 天津考研报名没报上可以补报吗 C语言程序清单中的代码不懂 问一下 高职扩招报名一所学校没考上 能上另外一所学校的补录吗? java程序模块清单如何写 我的分数线达到了这个学校的分数,但是我的志愿没有填报那个学校。可以补录吗?是中考。 在极客时间上面学习成年编程,最佳学习程序清单是什么? 列出程序清单(c语言程序设计) 高考志愿没被录取怎么办,可以补录吗? c++程序清单 中考没报名可以补报吗? 成年人从零开始学编程的最佳学习程序清单是什么? 你好 我想知道我错过了2021的高考报名可以参加补录吗 我是2020的中专毕业生? java怎样实现打印出查询后的结果 java怎么打印Hello Word! java仓库管理系统的打印功能是怎么实现的 java web页面中做一个打印按钮,点击后可以A4纸打印一些内容. 如何实现... 用java编写的程序中,如何实现打印的功能 被对方好友拉黑怎样恢复 被对方好友拉黑怎样恢复? 舞阳县摇章超市微信公众号 刷着刷着碗,碗的底儿掉了,还把手弄破这是怎么回事儿? 洗碗的时候碗底部掉了是不是不好怎么办? 小碗不知不觉掉底了什么原因? 刷碗时碗底掉一块是不是预示我有灾难啊? 倒入热水在碗中,碗底掉了下来,是怎么回事? 突然碗底掉了预示着什么? 晚上吃饭碗掉地下摔坏了,什么预兆? 盛饭时听到有炸的声音,吃完饭洗碗,碗底掉了是怎么回事? 今天早上盛好饭碗底掉了 塑料米线碗为啥用着用着就掉底了? 老婆拿碗去舀饭。碗底自己掉了? 乘饭时碗底掉了什么预兆