Itext中文处理更新版.docx
- 文档编号:7001873
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:8
- 大小:16.86KB
Itext中文处理更新版.docx
《Itext中文处理更新版.docx》由会员分享,可在线阅读,更多相关《Itext中文处理更新版.docx(8页珍藏版)》请在冰豆网上搜索。
Itext中文处理更新版
Itext中文处理:
Jdk1.4
在Itext中的中文处理随着Itext的版本变化,采取的方法也在变化。
首先我来演示一下利用Itext-2.0.1.jar与iTextAsian.jar两个包来解决中文问题。
附件中有所需要的包:
示例代码:
/*
*创建日期2014-6-27
*
*更改所生成文件模板为
*窗口>首选项>Java>代码生成>代码与注释
*/
packagecom.test.itext.test;
importjava.awt.Color;
importjava.io.;
importjava.io.;
importjava.io.IOException;
importcom.lowagie.text.Document;
importcom.lowagie.text.DocumentException;
importcom.lowagie.text.Font;
importcom.lowagie.text.Paragraph;
importcom.lowagie.text.pdf.BaseFont;
importcom.lowagie.text.pdf.PdfWriter;
publicclassHelloWord{
publicstaticvoidmain(String[]args){
try{
Documentdoc=newDocument();
PdfWriter.getInstance(doc,new("c:
\\good.pdf"));
doc.open();
BaseFontbfChinese=BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H",false);
FontfontChinese=newFont(bfChinese,12,Font.NORMAL,Color.GREEN);
Paragraphpf=newParagraph("eee");
pf.add(newParagraph("我们的家好大的家",fontChinese));
pf.add(newParagraph("sfsfsf"));
doc.add(pf);
doc.close();
}catch(e){
e.printStackTrace();
}catch(DocumentExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
上面代码测试环境是:
JDK1.4编译环境也为1.4,当然在以后的JDK版本中测试也是没问题的。
好了,现在最新的Itext版本为Itext5.0,附件中iText.jar即为该版本。
以下为Itext5.0的修改:
关注两句话:
Fromnowon,theiText.jariscompiledusingJava5(insteadofwiththeJDK1.4).
Thepackagenameshavechangedfromcom.lowagietocom.itextpdf.
上面两句话第一说明itext5.0用于JDK1.5以及之后的版本。
第二句更改了包名。
好了,如果我现在的程序使用iText.jar+iTextAsian.jar运行下面程序:
packagecom.lwf.pdf.test;
importjava.io.;
importjava.io.;
importjava.io.IOException;
importcom.itextpdf.text.BaseColor;
importcom.itextpdf.text.Document;
importcom.itextpdf.text.DocumentException;
importcom.itextpdf.text.Font;
importcom.itextpdf.text.Paragraph;
importcom.itextpdf.text.pdf.BaseFont;
importcom.itextpdf.text.pdf.PdfWriter;
publicclassHelloWord{
publicstaticvoidmain(String[]args){
try{
Documentdoc=newDocument();
PdfWriter.getInstance(doc,new("c:
\\good.pdf"));
doc.open();
BaseFontbfChinese=BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H",false);
//FontfontChinese=newFont(bfChinese,12,Font.NORMAL,Color.GREEN);
FontfontChinese=newFont(bfChinese,12,Font.NORMAL,BaseColor.GREEN);
Paragraphpf=newParagraph("eee");
pf.add(newParagraph("我们的家好大的家",fontChinese));
pf.add(newParagraph("sfsfsf"));
doc.add(pf);
doc.close();
}catch(e){
e.printStackTrace();
}catch(DocumentExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
会报以下错误:
small;">com.itextpdf.text.DocumentException: Nomessagefoundforfont.1.with.2.is.not.recognized atcom.itextpdf.text.pdf.BaseFont.createFont(UnknownSource) atcom.itextpdf.text.pdf.BaseFont.createFont(UnknownSource) atcom.itextpdf.text.pdf.BaseFont.createFont(UnknownSource) atcom.lwf.pdf.test.HelloWord.main(HelloWord.java: 24) 这是为什么呢? 不难发现上面两个测试只是更改了iText包。 而iTextAsian.jar只是包含了亚洲国家的文字信息。 打开iTextAsian.jar发现它采用了与原来iText-2.1.3.jar一样的包名: com.lowagie.text.Font而现在的iText5.0包名已经改为了com.itextpdf.text.Font,显然我们更一下包名就可以解决问题。 在winrar中把对应包名重命名加进来即可。 我把改好的jar放在附件的更改.rar中。 好了,那么现在使用iText.jar+更改.rar中的iTextAsian.jar测试就不会报错了。 其实这个问题也有文章谈到,如: 我在itext官方网站上,查iTextAsian,发现这样的文章 显然,它是一个示例。 那么同样使用iText5.0+更改后的iTextAsian包,下面有另一种实现方法: /* *Thisclassispartofthebook"iTextinAction-2ndEdition" *writtenbyBrunoLowagie(ISBN: 9781935182610) *Formoreinfo,goto: *ThisexampleonlyworkswiththeAGPLversionofiText. */ importjava.io.; importjava.io.IOException; importcom.itextpdf.text.Document; importcom.itextpdf.text.DocumentException; importcom.itextpdf.text.FontFactory; importcom.itextpdf.text.PageSize; importcom.itextpdf.text.Paragraph; importcom.itextpdf.text.Phrase; importcom.itextpdf.text.pdf.BaseFont; importcom.itextpdf.text.pdf.FontSelector; importcom.itextpdf.text.pdf.PdfWriter; /** *ThisexamplewaswrittenbyBrunoLowagie.Itispartofthebook'iTextin *Action'byManningPublications. *ISBN: 1932394796 * * */ publicclassFontSelectionExample{ /**TheresultingPDFfile.*/ publicstaticfinalStringRESULT ="results/part3/chapter11/font_selection.pdf"; /**Sometext*/ publicstaticfinalStringTEXT ="Thesearetheprotagonistsin'Hero',amoviebyZhangYimou: \n" +"\u7121\u540d(Nameless),\u6b98\u528d(BrokenSword)," +"\u98db\u96ea(FlyingSnow),\u5982\u6708(Moon)," +"\u79e6\u738b(theKing),and\u9577\u7a7a(Sky)."+ "中华人民共与国万岁劳动人民是光荣的,岁月峥嵘,百舸争流"; /** *CreatesaPDFdocument. *@paramthepathtothenewPDFdocument *@throwsDocumentException *@throwsIOException *@throwsDocumentException *@throwsIOException */ publicvoidcreatePdf(String)throwsIOException,DocumentException{ //step1 Documentdocument=newDocument(PageSize.A4); //step2 PdfWriter.getInstance(document,new()); //step3: weopenthedocument document.open(); //step4: FontSelectorselector=newFontSelector(); selector.addFont(FontFactory.getFont(FontFactory.TIMES_ROMAN,12)); //selector.addFont(FontFactory.getFont("MSung-Light", //"UniCNS-UCS2-H",BaseFont.NOT_EMBEDDED)); // selector.addFont(FontFactory.getFont("STSongStd-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED)); Phraseph=selector.process(TEXT); document.add(newParagraph(ph)); //step5: weclosethedocument document.close(); } /** *Mainmethod. * *@paramargsnoargumentsneeded *@throwsDocumentException *@throwsIOException */ publicstaticvoidmain(String[]args)throwsIOException,DocumentException{ newFontSelectionExample().createPdf("c: /good.pdf"); } } 呵呵,我只是把示例代码改了一下,那么在C盘就会生成一个名为good.pdf的文件.内容在附件里. 注: 原包iTextAsian.jar的下载路径为: iText-2.1.3.jar(1MB) iTextAsian.jar(324KB) iText.jar(1MB) 更改.rar(309.7KB) good.pdf(1.7KB)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Itext 中文 处理 新版
