java操作pdf(解决中文导出有关问题)
java操作pdf(解决中文导出问题)?/**???*?HelloWorld.java??*/????import?java.io.FileOutputStream??impo
java操作pdf(解决中文导出问题)
?
/**???*?HelloWorld.java??*/????import?java.io.FileOutputStream;??import?java.io.IOException;????import?com.lowagie.text.*;??import?com.lowagie.text.pdf.PdfWriter;????public?class?HelloWorld?{??????public?static?void?main(String[]?args)?{????????System.out.println("Hello?World");????????//?创建一个Document对象??????Document?document?=?new?Document();????????try???????{??????????//?生成名为?HelloWorld.pdf?的文档????????PdfWriter.getInstance(document,?new?FileOutputStream("HelloWorld.pdf"));??????????//?添加PDF文档的一些信息????????document.addTitle("Hello?World?example");????????document.addAuthor("Bruno?Lowagie");????????document.addSubject("This?example?explains?how?to?add?metadata.");????????document.addKeywords("iText,?Hello?World,?step?3,?metadata");????????document.addCreator("My?program?using?iText");??????????//?打开文档,将要写入内容????????document.open();??????????//?插入一个段落????????document.add(new?Paragraph("Hello?World!"));????????}???????catch?(DocumentException?de)???????{????????System.err.println(de.getMessage());??????}??????catch?(IOException?ioe)???????{????????System.err.println(ioe.getMessage());??????}????????//?关闭打开的文档??????document.close();????}??}????
编译运行以后,我们可以在运行的目录发现生成的HelloWorld.pdf,打开可以看到我们写的文字:
?
三、中文问题:
????????由于iText不支持东亚语言,我们下载了iTextAsian.jar?以后,就可以在PDF里面写中文:
?
/**???*?AsianTest.java??*/????import?java.io.FileOutputStream;??import?java.io.IOException;????import?com.lowagie.text.*;??import?com.lowagie.text.pdf.PdfWriter;??import?com.lowagie.text.pdf.BaseFont;??import?com.lowagie.text.Font;??import?java.awt.Color;????public?class?AsianTest{??????public?static?void?main(String[]?args)?{????????//?创建一个Document对象??????Document?document?=?new?Document();????????try???????{??????????//?生成名为?AsianTest.pdf?的文档????????PdfWriter.getInstance(document,?new?FileOutputStream("AsianTest.pdf"));?????????/**??新建一个字体,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);???????????//?打开文档,将要写入内容????????document.open();??????????//?插入一个段落????????Paragraph?par?=?new?Paragraph("我们",fontChinese);??????????document.add(par);????????}???????catch?(DocumentException?de)???????{????????System.err.println(de.getMessage());??????}??????catch?(IOException?ioe)???????{????????System.err.println(ioe.getMessage());??????}????????//?关闭打开的文档??????document.close();????}??}???
就可以显示中文了。
四、其他问题:(应导入相应的包)
???????1. 换页:
document.newPage();
???????2. 表格:
?
//?设置?Table??Table?aTable?=?new?Table(3);??int?width[]?=?{25,25,50};??aTable.setWidths(width);??aTable.setWidth(80);?//?占页面宽度?80%????aTable.setDefaultHorizontalAlignment(Element.ALIGN_LEFT);??aTable.setDefaultVerticalAlignment(Element.ALIGN_MIDDLE);??aTable.setAutoFillEmptyCells(true);?//自动填满??aTable.setPadding(1);??aTable.setSpacing(1);??aTable.setDefaultCellBorder(0);??aTable.setBorder(0);????Cell?cell?=?new?Cell(new?Phrase("这是一个测试的?3*3?Table?数据",?fontChinese?));??cell.setVerticalAlignment(Element.ALIGN_TOP);??cell.setRowspan(3);??aTable.addCell(cell);????aTable.addCell(new?Cell("#1"));??aTable.addCell(new?Cell("#2"));??aTable.addCell(new?Cell("#3"));????aTable.addCell(new?Cell("#4"));??aTable.addCell(new?Cell("#5"));??aTable.addCell(new?Cell("#6"));????document.add(aTable);???
3. 图片:
// 可以是绝对路径,也可以是URL
Image?img =?Image.getInstance("logo.gif");
// Image image = Image.getInstance(new URL(http://xxx.com/logo.jpg));
img.setAbsolutePosition(0, 0);
document.add(img);
五、参考文档: