`
ember_319
  • 浏览: 21155 次
  • 性别: 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`类向图片写汉字,以及如何解决汉字乱码问题。 首先,`Graphics2D`是Java AWT(Abstract Window Toolkit)库中的一个高级图形绘制接口,它扩展了`Graphics`类,提供了更多...

    Microsoft.Maui.Graphics.Skia 使用 DrawString 绘制文本的坐标问题.rar

    在Microsoft.Maui.Graphics.Skia中,`DrawString`方法是用于在画布上渲染文本的核心功能。这个方法的使用有时会涉及到一些坐标系统和布局的问题,特别是对于初学者来说可能会遇到一些困惑。本篇文章将深入探讨`...

    水印 java Graphics2D实现文字图片水印

    Graphics2D是Java 2D API的一部分,它提供了丰富的绘图和图形操作功能,包括添加水印到图像。下面将详细介绍如何使用Java Graphics2D实现文字和图片水印,以及如何在四个角落添加水印。 首先,我们要导入必要的Java...

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

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

    Graphics实现指定字符间距

    在C#编程中,`Graphics`类是GDI+(Graphics Device Interface Plus)的一部分,用于在屏幕上绘制图形、文本和其他视觉元素。当我们需要在屏幕上输出文本,并且希望控制字符之间的间距时,`Graphics`类提供了丰富的...

    C# DrawString方法绘制文字

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

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

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

    Java程序设计:chapter08 图形和Java 2D.ppt

    `Graphics`对象提供了多种绘图方法,如`drawLine()`, `drawRect()`, `fillOval()`, `drawString()`等,这些方法允许程序员在屏幕上绘制各种形状和文本。 8.5 Java2D API Java2D API扩展了基本的图形功能,提供了更...

    Java中的Graphics2D类基本使用教程

    例如,可以使用`create()`方法创建Graphics2D的副本,用于在不同变换之间保持状态,或者使用`drawImage()`方法绘制图像,并通过`drawString()`方法绘制文本。Graphics2D还支持抗锯齿和平滑渲染,可以提高图形的质量...

    Java 2D API 程序员指南中文版

    - **文本渲染**:使用`Graphics2D.drawString()`方法在指定位置绘制文本,支持多语言和复杂的字体排版。 - **图片处理**:可以加载、缩放、旋转和绘制图像,如使用`BufferedImage`类。 3. **高级特性** - **路径...

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

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

    java 生成图片验证码

    - 使用`Graphics2D.drawString()`方法在图像上逐个绘制字符。 6. **扭曲图像**: - 可以通过扭曲坐标系统来增加额外的难度,例如`Graphics2D.transform()`方法可以实现这一效果。 7. **保存或输出图像**: - 将...

    java中处理图片水印

    如果是文本,使用`Font`对象设置字体样式,并用`Graphics2D.drawString()`方法绘制;如果是图像,使用`ImageIO.read()`加载,然后用`Graphics2D.drawImage()`方法绘制。 5. **设置透明度** 添加水印时,通常希望...

    C#实现打印

    e.Graphics.DrawString("供货商:河南科技学院", new Font(new FontFamily("黑体"), 8), Brushes.Blue, 10, 12); // 绘制表格头部 e.Graphics.DrawLine(Pens.Black, 8, 30, 480, 30); e.Graphics.DrawString(...

    java2D超经典例程(包含2D各个方面,附源码)

    `Font`类用于创建和管理字体,`Graphics2D.drawString()`用于在指定位置绘制文本。 4. **线条绘制**:Java 2D允许绘制直线、曲线、圆弧等各种线条。`drawLine()`绘制直线,`drawRect()`绘制矩形,`drawRoundRect()`...

    vb.net如何打印dataGridview中的数据

    在实际应用中,可能还需要考虑更多的细节,比如页面设置、自定义样式、多列布局等问题。如果需要进一步定制,可以参考提供的链接(http://www.codeproject.com/KB/grid/PrintDataGrid_CS.aspx)或其他相关的教程和...

    在Java中使用Draw2D和SWT绘图的源码

    Java中的Draw2D和SWT(Standard Widget Toolkit)是两种强大的图形用户界面(GUI)工具,它们被广泛用于创建复杂的2D图形和可视化应用程序。在Java编程中,这两个库为开发者提供了丰富的功能,使得在屏幕上绘制高...

    winform 打印

    e.Graphics.DrawString("打印时间:" + DateTime.Now.ToString(), new Font("Arial", 8), Brushes.Red, 560, 100); // 绘制表头 e.Graphics.DrawString("项", new Font("Arial", 10), Brushes.Red, startX, ...

    Java实现给图片添加图片水印,文字水印及马赛克的方法示例

    graphics2D.drawString(text, 0, 0); graphics2D.dispose(); ImageIO.write(bufferedImage, imageType, new File(output+imageName+"."+imageType)); return "success"; } ``` 3. 马赛克:使用Java 2D API可以...

Global site tag (gtag.js) - Google Analytics