我正在尝试用java编写水印程序,所以我发现this piece of code也是如此.
/**
*
* This method converts a multiline string into an ArrayList of Strings
* Each item on the array list is a line of the string.
* @param str A multiline string
* @return An ArrayList of strings , a string per line of text
* @see java.util.ArrayList
*/
private static ArrayList convertStringToLineString(String str){
ArrayList string = new ArrayList();
String s = new String ();
char [] ca = str.toCharArray();
for(int i=0;i
if(ca[i] == '
'){
string.add(s);
s = new String();
}
s += ca[i];
}
return string;
}
字符串是这样绘制的
int x =(img.getIconWidth() - (int) rect.getWidth()) / 2,
y =(img.getIconHeight() - (int) rect.getHeight()) / 2;
ArrayList watermarks = convertStringToLineString(watermark);
for (String w : watermarks){
g2d.drawString(w,x,y);
y+=20;
}
我面临的问题是像日历一样的字符串
November 2011
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
包含多行的内容无法正确绘制.
例
PS:我对使用java的任何类型的解决方案持开放态度,即使是那些使用其他库的解决方案.
使用以下行工作
g2D.setFont(new Font("Monospaced", Font.PLAIN, 12));
但必须有一个更优雅的解决方案适用于任何类型的字体.