`
ember_319
  • 浏览: 20642 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

解决Graphics2D..drawString(message, px, py)的乱码问题

    博客分类:
  • Java
阅读更多

昨天开始查找解决打印图片出现中文乱码的问题,今天终于搞定;写一下大致的经过,供遇到同样问题的人参考。

 

问题描述:

用户使用手机登录我们系统,在订购产品时,需要从服务器端下载一张图片,显示到手机屏幕上,该图片上可能包含中英文字符,视情况而定。 结果测试下来,英文没有问题,中文打印为方块。

 

环境描述:

开发平台为WinXP,测试环境为Solaris10。

 

数据来源:

用以打印到图片的信息通过Web serice从另一系统获取。

 

=====

下面说一下解决的思路,

 

1、是否字符编码问题

为了检查获取的字符串的编码是否正确,使用下面的方式尝试多种字符集编码的转换,但是都没有效果;

 

String message=“...”;//ws获取到的信息
new String(message.getBytes("utf8"),"gbk");

 

回过来仔细考虑了一下我们的系统,系统的jsp页面及数据库编码都是采用的utf-8编码,无论是录入、保存还是显示都没有出现中文乱码问题;尤其是系统之间多处使用ws方式同步数据,也没有出现乱码问题,于是认为ws获取到的信息同样是utf-8编码。为了验证这个想法,做了一个jsp页面,使用utf-8的方式显示获取到的信息,在不经过任何转换的前提下,正确显示中文。最终确定,不是字符集编码的问题。

 

2、是否打印过程发生了问题

查看了JDK API的说明,发现在使用字体的时候,我没有特别设定,使用了默认字体。写了一个简单的输出平台默认字体的类,得到的字体却是一样的信息:

 

Default font:java.awt.Font[family=Dialog,name=Dialog,style=plain,size=12]

 于是到网上查找“java drawString 中文乱码” 关键字信息,查找csdn的一条信息:http://topic.csdn.net/u/20080603/13/3590c1f9-30bc-4e4d-bb2a-ada472b05973.html。大家可以去看一下,我就不贴过来了。我的动作是:

1) 指定打印到图片的字体为中文

 

g2d.setFont(new Font("宋体", Font.PLAIN, 12));

 

2) 上传WinXp 中的宋体字体文件到服务器(Solaris)

我的本地字体文件地址是“C:\WINDOWS\Fonts\simsun.ttc”,上传到服务器地址是:“/usr/jdk/instances/jdk1.5.0/jre/lib/fonts/simsun.ttc”

3) 通过验证程序,确定图片上的小方块正确显示为中文

 

打印图片中文乱码问题到这里就解决了。

 

考虑起来,因为打印字符成为图片,需要用到像素排列,如果字体不对,的确是没有办法打印啊。

 

 

分享到:
评论
1 楼 sunriseqh715 2015-12-14  
由于linux系统缺少字体,会有这样问题,确实可以解决,多谢

相关推荐

    打印窗体中的数据C#源代码e.Graphics.DrawString(label1.Text, new Font("宋体", 10, FontStyle.Regular), Brushes.Black, 260, 400);

    打印窗体中的数据C#源代码e.Graphics.DrawString(label1.Text, new Font("宋体", 10, FontStyle.Regular), Brushes.Black, 260, 400); e.Graphics.DrawString(textBox1.Text, new Font("宋体", 10, FontStyle....

    往图片写汉字显示乱码

    使用Graphics2D类向图片书写汉字,以及解决汉字显示为方块的乱码问题。使用pic这个类实现向图片写汉字,使用simsun.ttc解决乱码问题。(将simsun.ttc放在规定的位置就ok了)

    Java绘图:绘制虚线与实线.rar

      Graphics2D g2=(Graphics2D)g; //得到2D图形   Dimension dim = this.getSize(); //得到组件尺寸   g2.setColor(Color.white); //设置绘制颜色为白色   g2.fillRect(0, 0, dim.width, dim.height); //填充...

    c#打印窗体中的数据

    e.Graphics.DrawString(label1.Text, new Font("宋体", 20, FontStyle.Regular), Brushes.Black,270, 400); //绘制textBox1中的内容 e.Graphics.DrawString(textBox1.Text, new Font("宋体", 20, FontStyle....

    graphics2d:Go的2D图形包,其中包含一些图像处理内容

    Go的另一个2D图形包尽管图像功能与我将要制作的功能一样完整,但仍处于开发阶段。 顶级的“路径”和“形状”类型是完整的,并且已实现大多数PathProcessor,包括: StrokeProc-具有多种上限和联接类型的固定宽度的...

    Java制作跳动动画的阴影文字.rar

    Java阴影文字、跳动文字... newGraphics.drawString(message,xpoint 3,baseline 3); //绘制阴影  newGraphics.setColor(textColor); //设置文本颜色  newGraphics.drawString(message,xpoint,baseline); //绘字符串

    C# DrawString方法绘制文字

    C#使用自身的DrawString方法绘制文字,源码简单,示例演示了绘制过程,具体实现思路请参阅源码文件,运行示例程序后,点击“绘制文字”按钮,即可看到由DrawString方法生成的一行文字。运行效果截图:...

    文件生成图片

    <br>import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; <br>import ...

    图片水印 缩略图+裁剪(MyImageHelper)

    System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage); //设置质量 resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; resultG....

    C#写的透明背景验证码

    C#写的透明背景验证码,使用Graphics.

    关于在扇子上题字的算法

    g2.drawString("格",70,105); g2.drawString("物",95, 125); g2.drawString("致", 100, 80); g2.drawString("知", 120, 110); g2.drawString("诚", 130, 65); g2.drawString("意", 145, 95); g2....

    安装mschart创建ChartSpace对象来放置图表

    MyPen.SetLineCap(Drawing2D.LineCap.NoAnchor, Drawing2D.LineCap.ArrowAnchor, Drawing2D.DashCap.Flat) Dim mFont As Font = New Font(FontFamily.GenericSansSerif, 12.0F, FontStyle.Bold) '绘制Y轴 ...

    java helloworld java

    import java.awt.Graphics; import java.applet.Applet; public class app2 extends Applet{ int x,y; public void init() { x=8; y=7; } public void paint(Graphics g) {g.drawString("类中定义两个变量:x=8 y=7...

    JButton 美化(圆角矩形立体效果加鼠标响应)Demo.rar

    Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); // 画一个渐变圆角矩形 RoundRectangle2D.Float r2d=new RoundRectangle...

    java JButton美化Demo.rar

    Graphics2D g2d = (Graphics2D) g; g2d.setColor(Color.GREEN); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.fillRoundRect(0, 0, 100, 30, 15, 15); ...

    要在vs2008中实现最基本的打印文本基本上需要以下几个步骤

    e.Graphics.DrawString(textBox1.Text, new Font("Arial", 20, FontStyle.Bold), Brushes.Black, 150, 125); // textBox1.Text 是打印的文本内容 Arial 指定打印字体 20 指定打印字体大小 150, 125 指定在页面中...

    java JTextField美化Demo

    Graphics2D g2d=(Graphics2D) g; g2d.setStroke(new BasicStroke(2,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f)); g2d....

    Image textImage = new Bitmap("..\\..\\Texture.ICO");

    Image textImage = new Bitmap("..\\..\\Texture.ICO"); TextureBrush textTextureBrush = new TextureBrush(textImage);... e.Graphics.DrawString("Hello gouyue", myFont, textTextureBrush, 10, 20);

    C#中TreeView节点的自定义绘制方法

    本文实例讲述了C#中TreeView节点的自定义绘制方法。分享给大家供大家参考。具体如下: if ((e.State & TreeNodeStates.Selected) != 0) { //演示为绿底白字 ... e.Graphics.DrawString(e.Node.Text, no

    QR.NET-master.zip_QRCODE_asp.net_drawing_web打印 二维码_二维码

    g.DrawString(strCode, font, brush, layoutRectangle); string filepath = System.Web.HttpContext.Current.Server.MapPath(@"~\attachment")+ "1.png"; System.IO.FileStream fs = new System...

Global site tag (gtag.js) - Google Analytics