打印程序无法显示中文(100分)

  • 主题发起人 appleseeker
  • 开始时间
A

appleseeker

Unregistered / Unconfirmed
GUEST, unregistred user!
我自己编写了段打印程序。读文件内容,打印。但打印出来的,中文无法解决。请高手帮助帮助。我在BUTTON里调用下面这个printfile()函数。
public void printfile()
{
do
cFlavor flavor =do
cFlavor.INPUT_STREAM.AUTOSENSE;
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
PrintService service = ServiceUI.printDialog(null, 400, 400, printService
, defaultService, flavor, pras);
if (service != null)
{
try
{
do
cPrintJob job = service.createPrintJob();
FileInputStream fis = new FileInputStream("c://c.txt");
do
cAttributeSet das = new HashDocAttributeSet();
do
cdo
c = new SimpleDoc(fis, flavor, das);
job.print(doc, pras);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public int print(Graphics g, PageFormat pf, int page) throws PrinterException
{
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.black);
if (page >= PAGES)
return Printable.NO_SUCH_PAGE;
g2.translate(pf.getImageableX(), pf.getImageableY());
return Printable.PAGE_EXISTS;
}
public int getPagesCount(String curStr)
{
int page = 0;
int position, count = 0;
String str = curStr;
while(str.length() > 0)
{
position = str.indexOf('/n');
count += 1;
if (position != -1)
str = str.substring(position + 1);
else
str = "";
}
if (count > 0)
page = count / 54 + 1;
return page;
}
}
 
解决问题的具体思路、方法
  Java采用Unicode码编码方式,中英文字符均采用16bit存储。既然存储英文信息是
正确的,根据一定规则,将中文信息转换成英文信息后存储,自然不会出现截尾现象。
读取信息时再进行逆向操作,将英文信息还原成中文信息即可。由GB2312编码规则可知
,汉字一般为二个高位为1的ASCII码,在转换时将一个汉字的二个高位1去掉,还原时再
将二个高位1加上。为了处理含有英文字符的中文字串,对英文字符则需要加上一个Byt
e 0标记。以下提供的两个公用静态方法,可加入任何一个类中使用。
  将中英文字串转换成纯英文字串
  public static String toTureAsciiStr(String str){
  StringBuffer sb = new StringBuffer();
  byte[] bt = str.getBytes();
  for(int i =0 i〈btelse
{//是英文字符 补0作记录
  sb.append((char)0);
  sb.append((char)bt);
   }
   }
  return sb.toString();
  }
  将经转换的字串还原
  public static String unToTrueAsciiStr(String str){
   byte[] bt = str.getBytes();
   int i,l=0,length = bt.length,j=0;
   for(i = 0;i〈length;i++){
   if(bt == 0){
   l++;
   }
   }
   byte []bt2 = new byte[length-l];
   for(i =0 i〈length;i++){
   if(bt == 0){
   i++;
   bt2[j] = bt;
   }else
{
   bt2[j] = (byte)(bt|0x80);
   }
   j++;
   }
  String tt = new String(bt2);
  return tt;
  }
  上例在实际编程中效果很好,只是存储的中文信息需要经过同样处理,才能被其他
系统使用。而且如果中文字串出现英文字符,实际上增加了额外的存储空间。
上面的建议仅供参考^_^
 
那就是说我先在存写文件前先把这段转成英文。之后读取的时候把英文转成中文??是这意思吗
 
我想想还不是很懂。英文转换成中文在哪里进行转换
在程序中FileInputStream fis = new FileInputStream("c://c.txt");
我已经全部读取文件里的内容就不需要直接转换的存在了
 
顶部