JAVA打印功能总结文档

高手请斧正,菜鸟请虚心,引用请注明出处,转发请告知作者,谢谢尊重!

 

近期农信项目后台系统客户新提出需求的其中一项涉及到“打印”功能,前期技术储备时,发现网上相关资源甚少且混杂,特别是有关web打印技术,被码农们一致称为“老大难”。现整理了几项经本人验证的可行的打印方法,包括C/S和B/S的,供码友们参考。

 

一、C/S

1.利用java.awt中提供的打印API,继承Printable实现接口方法print进行打印。

参考文献:《Java实现打印功能》-----------百度文库。

此方法实际是C/S的打印方法,但是在某些特殊情况下,B/S的打印依然可用,例如在某些特殊的管理系统,操作此系统的用户可以非常方便的设置发布此系统的服务器,那么将服务器所连接的打印机设置成用户指定的打印机,此时再将代码设置成直接打印状态(不弹出打印提示页面),就可以顺利完成打印操作。

该方法的弊端也比较明显,java.awt所提供API实现接口的方法print,最后是用Graphics2D直接输出,所以有关长篇文字的格式只能手动调整(可参考官方API文档的格式调整算法),且参数中只有一个Graphics,以至于整篇文档的字体、颜色都是统一格式,无法调整(也许是本人对Graphics实在不了解),且无法操作页眉页脚(当以Word文档格式时);优点不用说,一般的打印还是可以实现的,且Graphics能画出来的也就都能打印出来,所以,此种打印方式所适用的和不适用的情况也就比较明显了吧。

 

以下是关键代码,详细请见文件夹下printHelp.java文件中内容。

package com.hepow.cbrc.help;

 

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Component;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

importjava.awt.Image;

importjava.awt.Toolkit;

import java.awt.font.FontRenderContext;

import java.awt.font.LineBreakMeasurer;

import java.awt.font.TextAttribute;

import java.awt.font.TextLayout;

import java.awt.geom.Point2D;

import java.awt.print.PageFormat;

import java.awt.print.Printable;

import java.awt.print.PrinterException;

importjava.text.AttributedString;

 

publicclassprintHelpimplementsPrintable {

/**

* @param Graphic指明打印的图形环境

* @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/721英寸为25.4毫米。A4纸大致为595×842点)

* @param pageIndex指明页号

**/

       publicintprint(Graphicsgra,PageFormatpf,intpageIndex)throws PrinterException {

           System.out.println("pageIndex="+pageIndex);

           Component c =null;

          //print string

           String test = "根据国家劳动管理规定以及本公司员工聘用办法,甲方招聘乙方为试用员<br/>工,双方在平等、自愿的基础上,经协商一致签订本试用合同,共同遵守本协议所列条款"

                + "根据国家劳动管理规定以及本公司员工聘用办法,甲方招聘乙方为试用员工,双方在平等、自愿的基础上,经协商一致签订本试用合同,共同遵守本协议所列条款"

                + "根据国家劳动管理规定以及本公司员工聘用办法,甲方招聘乙方为试用员工,双<br/>方在平等、自愿的基础上,经协商一致签订本试用合同,共同遵守本协议所列条款"

                + "根据国家劳动管理规定以及本公司员工聘用办法,甲方招聘乙方为试用员工,双方在平等、自愿的基础上,经协商一致签订本试用合同,共同遵守本协议所列条款";

           String head ="劳动合同范本(二)——试用期劳动合同范本";

              String str ="";

              String str01 ="甲方:______________________";

              String str02 ="乙方: (身份证号)______________________";

              String str03 =" 根据国家劳动管理规定以及本公司员工聘用办法,甲方招聘乙方为试用员工,双方在平等、自愿的基础上,经协商一致签订本试用合同,共同遵守本协议所列条款";

              String str033 ="基础上,经协商一致签订本试用合同,共同遵守本协议所列条款。";

              String str04 ="一、试用合同期限:试用期为个月,自_____年_____月_____日至_____年_____月_____日止。";

              String str05 ="二、根据甲方的工作安排,聘用乙方在_______________工作岗位。";

              String str06 ="三、甲方聘用乙方的月薪为_____元(含养老、医疗、住房公积金)。试用期满后,并经考核合格,可";

              String str066 ="根据平等协商的原则,签订正式劳动合同。";

              String str07 ="四、甲方的基本权利与义务:";

              String str08 ="1.甲方的权利";

              String str09 =" 有权要求乙方遵守国家法律和公司各项规章制度;";

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JAVA语言课程设计报告 题 目:记事本的制作 设 计 者: 专业班级: 学 号: 2012年 12 月 24 日 目录 1、系统需求分析 3 2.系统总体设计 3 3 系统详细设计 5 4软件测试 13 5 系统总结 13 6系统设计心得体会 13 7参考文献 13 1、系统需求分析 1.1系统名称: Window记事本 1.2系统介绍: 开发一个window记事本,主要有一个主界面及以下功能: 1:文件的新建,打开,保存,打印,另存等; 2:对文件的编辑,如全选,复制,剪切,粘贴等; 3:对文件的格式操作,如自动换行,字体等; 4:帮助,包括帮助主题,关于。 1.3开发环境 Eclipse 2.系统总体设计 2.1 系统功能结构图 2.2系统文件结构图 2.3系统编辑结构图 2.4系统格式、帮助结构图 3 系统详细设计 3.1.主界面 主界面主要是用于对选择相应的功能进行相应的功能,主界面主要包括文件,编辑,格式,帮助四个下拉菜单功能。 重要代码: ①创建界面,安装各种监听器 public Notebook() { setTitle("记事本 -- 刘兴钢"); con=getContentPane(); text=new JTextArea(); JSPane=new JScrollPane(text); createMenu(); createPopupMenu(); setJMenuBar(mainMenuBar); con.add(JSPane,BorderLayout.CENTER); text.setComponentPopupMenu(popMenu); text.getDocument().addDocumentListener(this); text.addKeyListener(new handleKey()); text.addMouseListener(new handleMouse()); setSize(400,300); setVisible(true); ② 菜单代码 public void createMenu(){ //创建JMenuBar mainMenuBar=new JMenuBar(); //创建四个JMenu fileMenu=new JMenu("文件"); editMenu=new JMenu("编辑"); formatMenu=new JMenu("格式"); helpMenu=new JMenu("帮助"); 3.2.字体设计界面 主要代码 import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.awt.*; public class fontDialog extends JDialog implements ActionListener,ListSelectionListener{ public static final int Cancle=0; public static final int OK=1; public static final String [] style={"正常","斜体","粗体","粗斜体"}; public static final String [] size={"8","9","10","11","12","14","16", "18","20","22","24","26","28","36","48","72"}; private Font userFont=null; private int userSelect=Cancle; private JFrame parent=null; private Container con; private JScrollPane nameSPane,styleSPane,sizeSPane; private JPanel panel[]; private JLabel nameLbl,styleLbl,sizeLbl; private JTextField nameText,styleText,sizeText; private JList nameList,styleList,sizeList; private JButton OKBtn,cancleBtn; public fontDialog() { this(null); } public fontDialog(JFrame owner){ super(owner,true); parent=owner; setTitle("字体"); con=getContentPane(); BoxLayout box=new BoxLayout(con,BoxLayout.Y_AXIS); con.setLayout(box); panel=new JPanel[4]; for(int i=0;i<3;i++){ panel[i]=new JPanel(); panel[i].setLayout(new GridLayout(1,3)); } panel[3]=new JPanel(); panel[3].setLayout(new FlowLayout()); nameLbl=new JLabel("字体"); styleLbl=new JLabel("字形"); sizeLbl=new JLabel("大小"); panel[0].add(nameLbl); panel[0].add(styleLbl); panel[0].add(sizeLbl); nameText=new JTextField("宋体"); nameText.setColumns(5); nameText.setEditable(false); styleText=new JTextField("正常"); styleText.setColumns(5); styleText.setEditable(false); sizeText=new JTextField("12"); sizeText.setColumns(5); sizeText.setEditable(false); panel[1].add(nameText); panel[1].add(styleText); panel[1].add(sizeText); GraphicsEnvironment eq = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] availableFonts= eq.getAvailableFontFamilyNames(); nameList=new JList(availableFonts); nameList.addListSelectionListener(this); nameSPane=new JScrollPane(nameList); styleList=new JList(style); styleList.addListSelectionListener(this); styleSPane=new JScrollPane(styleList); sizeList=new JList(size); sizeList.addListSelectionListener(this); sizeSPane=new JScrollPane(sizeList); panel[2].add(nameSPane); panel[2].add(styleSPane); panel[2].add(sizeSPane); OKBtn=new JButton("确定"); OKBtn.addActionListener(this); cancleBtn=new JButton("取消"); cancleBtn.addActionListener(this); panel[3].add(OKBtn); panel[3].add(cancleBtn); for(int i=0;i<4;i++) con.add(panel[i]); } public int showFontDialog(){ setSize(300,300); int x,y; if (parent!=null){ x=parent.getX()+30; y=parent.getY()+30; }else{ x=150; y=100; } setLocation(new Point(x,y)); setVisible(true); return userSelect; } public Font getFont(){ return userFont; } public void actionPerformed(ActionEvent e){ int styleIndex=Font.PLAIN,fontSize; if(e.getSource()==OKBtn){ if(styleText.getText().equals("正常")) styleIndex=Font.PLAIN; if(styleText.getText().equals("斜体")) styleIndex=Font.ITALIC; if(styleText.getText().equals("粗体")) styleIndex=Font.BOLD; if(styleText.getText().equals("粗斜体")) styleIndex=Font.BOLD | Font.ITALIC; fontSize=Integer.parseInt(sizeText.getText()); userFont=new Font(nameText.getText(),styleIndex,fontSize); userSelect=OK; setVisible(false); }else{ userSelect=Cancle; setVisible(false); } } public void valueChanged(ListSelectionEvent e){ if (e.getSource()==nameList) nameText.setText((String)nameList.getSelectedValue()); if (e.getSource()==styleList) styleText.setText((String)styleList.getSelectedValue()); if (e.getSource()==sizeList) sizeText.setText((String)sizeList.getSelectedValue()); } } 3.3.保存界面 代码 int doSave(){ FileOutputStream fout; byte content[]; int flag; if (!haveName){ flag = doSaveAs(); }else if(changed){ try{ fout=new FileOutputStream(file); content=text.getText().getBytes(); fout.write(content); fout.close(); changed=false; flag = 1; }catch(FileNotFoundException e){ JOptionPane.showMessageDialog(this,"指定的文件名称或属性有问题!"); flag = 0; }catch(IOException e){ JOptionPane.showMessageDialog(this,"无法写文件,请检查文件是否被锁定"); flag = 0; } }else{ flag =1; } return flag; } 3.4.打印设计界面

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值