使用drawString对阿拉伯语打印时,打印方向怎么设置成从右往左打印? 使用drawString对阿拉伯语打印时,打印方向怎么设置成从右往左打印? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 字符逆序 new StringBuilder("string").reverse().toString();对齐问题自行计算坐标……为什么要用 drawString ? 我是在网上搜的打印例子,里面用的就是drawstring。我刚测试了一下,这个办法不行啊。如果不用drawstring,那应该使用什么能从右往左打印啊? 你实际想要的是不是就是 右对齐?你说 drawString 我还以为是 Graphics 2D …… 原来是打印机 …… 就是Graphics 2D 。下面是我的打印功能部分代码。中文部分没有问题,但是阿拉伯语部分,总是打印出来时反的。调试过程中,line里的赋值的方向是正确的。但是打印出来的阿拉伯语就是反的。 public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setPaint(Color.white); Vector page = (Vector) pageVector.elementAt(currentPageIndex); g2.setFont(font); // font.LAYOUT_LEFT_TO_RIGHT(); g2.setPaint(Color.black); double x = pageFormat.getImageableX(); // double x= pagewidth-130; float y = fontSize; this.z=(int)y; for (int i = 0; i < page.size(); i++) { String line = (String) page.elementAt(i); FontMetrics metrics=g2.getFontMetrics(); if (line.length() > 0) drawWrapString(g2,line,(int)x,(int)this.z,pagewidth-130,metrics); //biaoji this.z +=fontSize; } }public void drawWrapString(Graphics g,String str, int x, int y,int rightMargin,FontMetrics font) { int leftMargin = x;// 左边距 int fW = 0;// 单个字符的宽 char c; for (int i = 0; i < str.length(); i++) { c = str.charAt(i); fW = font.charWidth(c);// if (currentPageIndex < pageVector.size() - 1)// currentPageIndex++; if ( (x + fW) > rightMargin) { x = leftMargin; // 改变x坐标 y += fontSize; // 换行 this.z=y; } g.drawString(c+"", x, y); x += fW; // 使X坐标变大 } } 用这个方法:drawStringpublic abstract void drawString(String str, int x, int y)使用 Graphics2D 上下文中的当前文本属性状态呈现指定的 String 的文本。首字符的基线位于用户空间的 (x, y) 位置处。应用的呈现属性包括 Clip、Transform、Paint、Font 和 Composite 属性。对于脚本系统(如 Hebrew 和 Arabic)中的字符,在提供的坐标位于基线上最左边字符的情况下,可以从右到左呈现字形。 指定者:类 Graphics 中的 drawString参数:str - 要呈现的字符串x - 呈现 String 位置的 x 坐标y - 呈现 String 位置的 y 坐标 BufferedImage image = cloneImage(cache.getImage(colorCost, Cache.CARDBACKGROUND)); Graphics2D imageG = image.createGraphics(); imageG.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); imageG.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); Font f = new Font("Helvetica", Font.BOLD, 24); // TextLayout tl = new TextLayout(container.getName(), f, frc); // imageG.setColor(Color.black); // tl.draw(imageG, 50, 79); AttributedString ats = new AttributedString("testing it all"); ats.addAttribute(TextAttribute.RUN_DIRECTION, TextAttribute.RUN_DIRECTION_RTL); ats.addAttribute(TextAttribute.FONT, f); AttributedCharacterIterator iter = ats.getIterator(); FontRenderContext frc = imageG.getFontRenderContext(); TextLayout tl = new TextLayout(iter, frc); System.out.println("direction = " + tl.isLeftToRight()); tl.draw(imageG, 640, 79); this.setSize(image.getWidth(), image.getHeight()); g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null); Java里面注解是什么? 怎么得到HashMap的键啊!!! 一个if语法问题 恳求您的帮助 急!200分!求如何动态将Object转换为指定类型 为了一本电子书,散分! 还是关于java反编译那些经过Java混淆编译器的代码,望高人指点 问问问,我最近学JAVA,有关网络数据库的。谁给指点下用什么教材?谢 关于 .jar 文件的解包问题 各位高手:String 和 StringBuffer这两个类有什么区别。 java applet checkbox怎么样放大 寫一個自動生成文本框的SWT界面的java(有圖),還未完成,請幫忙
字符逆序 new StringBuilder("string").reverse().toString();对齐问题自行计算坐标
……为什么要用 drawString ?
我是在网上搜的打印例子,里面用的就是drawstring。
我刚测试了一下,这个办法不行啊。
如果不用drawstring,那应该使用什么能从右往左打印啊?
你实际想要的是不是就是 右对齐?你说 drawString 我还以为是 Graphics 2D …… 原来是打印机 ……
就是Graphics 2D 。下面是我的打印功能部分代码。中文部分没有问题,但是阿拉伯语部分,总是打印出来时反的。调试过程中,line里的赋值的方向是正确的。但是打印出来的阿拉伯语就是反的。 public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g; g2.setPaint(Color.white); Vector page = (Vector) pageVector.elementAt(currentPageIndex); g2.setFont(font);
// font.LAYOUT_LEFT_TO_RIGHT();
g2.setPaint(Color.black);
double x = pageFormat.getImageableX();
// double x= pagewidth-130;
float y = fontSize;
this.z=(int)y;
for (int i = 0; i < page.size(); i++) {
String line = (String) page.elementAt(i);
FontMetrics metrics=g2.getFontMetrics();
if (line.length() > 0)
drawWrapString(g2,line,(int)x,(int)this.z,pagewidth-130,metrics);
//biaoji
this.z +=fontSize;
}
}public void drawWrapString(Graphics g,String str, int x, int y,int rightMargin,FontMetrics font) {
int leftMargin = x;// 左边距
int fW = 0;// 单个字符的宽
char c;
for (int i = 0; i < str.length(); i++) {
c = str.charAt(i);
fW = font.charWidth(c);
// if (currentPageIndex < pageVector.size() - 1)
// currentPageIndex++;
if ( (x + fW) > rightMargin) {
x = leftMargin; // 改变x坐标
y += fontSize;
// 换行
this.z=y;
}
g.drawString(c+"", x, y);
x += fW; // 使X坐标变大 }
}
drawString
public abstract void drawString(String str,
int x,
int y)使用 Graphics2D 上下文中的当前文本属性状态呈现指定的 String 的文本。首字符的基线位于用户空间的 (x, y) 位置处。应用的呈现属性包括 Clip、Transform、Paint、Font 和 Composite 属性。对于脚本系统(如 Hebrew 和 Arabic)中的字符,在提供的坐标位于基线上最左边字符的情况下,可以从右到左呈现字形。 指定者:
类 Graphics 中的 drawString
参数:
str - 要呈现的字符串
x - 呈现 String 位置的 x 坐标
y - 呈现 String 位置的 y 坐标
Cache.CARDBACKGROUND)); Graphics2D imageG = image.createGraphics();
imageG.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
imageG.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY); Font f = new Font("Helvetica", Font.BOLD, 24);
// TextLayout tl = new TextLayout(container.getName(), f, frc);
// imageG.setColor(Color.black);
// tl.draw(imageG, 50, 79); AttributedString ats = new AttributedString("testing it all");
ats.addAttribute(TextAttribute.RUN_DIRECTION, TextAttribute.RUN_DIRECTION_RTL);
ats.addAttribute(TextAttribute.FONT, f);
AttributedCharacterIterator iter = ats.getIterator(); FontRenderContext frc = imageG.getFontRenderContext();
TextLayout tl = new TextLayout(iter, frc);
System.out.println("direction = " + tl.isLeftToRight());
tl.draw(imageG, 640, 79); this.setSize(image.getWidth(), image.getHeight());
g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);