JAVA itext一行设置两种字体 我用的是生成pdf

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA itext一行设置两种字体 我用的是生成pdf相关的知识,希望对你有一定的参考价值。

在使用itext打印pdf时,如果希望一行内出现两种字体,需要注意Paragraph与Chunk 的配合使用。其中Paragraph是段落,Chunk表示块,可以理解成一个词组之类的。其中Chunk的使用非常灵活,可以实现上标、角标等效果。针对于你的问题,可参照如下代码(注意,代码是示意性的,只是一个思路,可以仿照着来写):
Paragraph largeText = new Paragraph();

Chunk chunk1 = new Chunk(“第一种字体”, getFontChineseFun(ts1));

Chunk chunk2 = new Chunk(“第二种字体”, getFontChineseFun(ts2));

largeText.add(chunk1);

largeText.add(chunk2);追问

ts1是什么

追答

这个是我自己封装的一个class,可以忽略,主要是理解“getFontChineseFun(ts1)”是表示用户获得字体的一个方法,你可以自己准备。

追问

如何设置chunk的位置

追答

通过Paragraph设置就可以了,因为chunk是需要add到Paragraph中的。

追问

能给出代码吗?

参考技术A /** 新建一个字体,iText的方法
* STSongStd-Light 是字体,在iTextAsian.jar 中以property为后缀
* UniGB-UCS2-H 是编码,在iTextAsian.jar 中以cmap为后缀
* H 代表文字版式是横版,相应的 V 代表竖版
*/

BaseFont bfChinese = BaseFont.createFont("STSongStd-Light",
"UniGB-UCS2-H", false);

Font fontChinese = new Font(bfChinese,12, Font.NORMAL, Color.GREEN);追问

不能用啊,字体还是一样大小

java相关,关于使用itext导出pdf后,中文字体设置的问题。

我使用itext导出pdf后,想把字体设置为方正小标宋,但是这个iTextAsian.jar中文貌似只支持STSong(std)-Light这种,涉及到的简体中文编码集也是UniGB-UCS2-H,并不支持方针这种字体。
如何把方正这种字体和对应的编码集导入进去,或者说是否可以自己编写那个properties,求高手指教。若能解决还可加分。

可以直接调用字体 写一个
BaseFont bf=BaseFont.createFont("字体",BaseFont.CP1250, BaseFont.EMBEDDED);
字体就设置,你的那个字体路径追问

BaseFont ttChinese=BaseFont.createFont("C:\\Windows\\Fonts\\微软雅黑",BaseFont.CP1250, BaseFont.EMBEDDED);
我写完这个后,系统报一个错误:com.lowagie.text.DocumentException: Font 'C:\Windows\Fonts\微软雅黑' with 'Cp1250' is not recognized.
是Cp1250不支持微软雅黑的意思么?

追答

抱歉 一个地方说错了
BaseFont ttChinese=BaseFont.createFont("F://MSYHBD.TTF",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font f=new Font(ttChinese);
Paragraph p = new Paragraph();
p.setFont(f);
p.add("你 好 David!");
字体要找对应的字体文件,BaseFont.IDENTITY_H 这个东西我忘了是什么了?好像只有这种编码方式,这样才能支持。BaseFont.EMBEDDED 表示字体是否嵌入PDF

参考技术A 这个我以前遇到过,看看对你有没有帮助
1.将字符编码文件复制到系统字符集下面一份(好像是ttf)结尾的吧,因为有的系统有可能不带该字符集
2.将字符集放到java程序运行的根目录下,比如如果是webapp,那就放在WEB-INF/classes下
3.编辑模板文件的时候选择的字符好像是U什么开头的,我给忘了(反正不是特殊的),或者需要把字体导入到编辑器里(有这个选项),具体记不清楚了。追问

请问这个编辑模版文件在哪里?是不是应该我自己创建的properties?
以下是STSong-Light.properties的内容,应该咋修改啊。
Flags=6
FontBBox=[-25 -254 1000 880]
ItalicAngle=0
Ascent=880
Descent=-120
CapHeight=880
StemV=93
Panose=\u0001\......
Registry=Adobe
Ordering=GB1
Supplement=4
W=1 207 2 270 ......
W2=
另外能不能详细说说导入编辑器这个操作?

追答

能不能把你的问题这样描述一下?
1.功能描述
2.实现过程
3.存在的问题
这样的话才好解决

参考技术B BaseFont bf=BaseFont.createFont("字体",BaseFont.CP1250, BaseFont.NOT_EMBEDDED);BaseFont.EMBEDDED处应写成BaseFont.NOT_EMBEDDED。

以上是关于JAVA itext一行设置两种字体 我用的是生成pdf的主要内容,如果未能解决你的问题,请参考以下文章

java相关,关于使用itext导出pdf后,中文字体设置的问题。

itext pdf文件打印中文无法识别问题

使用iText-2.1.4.jar生成PDF表格,单元格内容越界怎么解决?

java用iText导出word文档

java用啥方法设置label的字体

ITEXT 生成基本的PDF文档