用itext生成PDF时画的字符串和用Java画的不一样长(字体一样), 怎么解决?(急!!)

xg1204 2004-11-30 09:29:14
比较一下java画的String和itext画的String,不一样长,好象是字间距不一样,为什么呢,在java的字体中怎么调整kerning,使得两者画的一样长(调整java)


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JFrame;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfWriter;

public class testDebug extends JFrame {
public void paint(Graphics g2)
{
Graphics2D g = (Graphics2D)g2;

String s = "herzlichen Dank f Ihren telefonischen Auftrag vom 25.10.2004, den wir unter Hinweis auf unse";
try {
Font f =
Font.createFont(
Font.TRUETYPE_FONT,
new FileInputStream("C:\\WINNT\\Fonts\\arial.TTF"));
f = f.deriveFont(Font.PLAIN, 40);
BaseFont bf =
BaseFont.createFont(
"C:\\WINNT\\Fonts\\arial.TTF",
BaseFont.CP1252,
BaseFont.NOT_EMBEDDED);
g.setColor(Color.GRAY);
g.fillRect(200, 80, 456, 20);
g.setFont(f);
g.setColor(Color.BLACK);
g.drawString(s,200,100);

Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("test1.pdf"));
document.open();
PdfContentByte contentBytes = writer.getDirectContent();
contentBytes.beginText();
//如果你系统的DPI是72,别那么Size就用40, 是96就用30
contentBytes.setFontAndSize(bf, 30);
contentBytes.setTextMatrix(0, 600);
contentBytes.showText(s);
contentBytes.endText();
document.close();


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


public static void main(String[] args) throws DocumentException, IOException {

testDebug t = new testDebug();
t.setSize(300,300);
t.show();
}
}
...全文
253 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xg1204 2004-12-08
  • 打赏
  • 举报
回复
up
xg1204 2004-12-01
  • 打赏
  • 举报
回复
怎么没人知道吗?
catblue 2004-12-01
  • 打赏
  • 举报
回复
关注ing

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧