java pdf写入中文时不显示,如何解决。

来源:互联网 发布:excel数据下拉列表 编辑:程序博客网 时间:2024/04/29 19:55

java中生成pdf文件需要用到java文件:iText 5.0.6.jar文件

只下载iText5.0.6.jar文件是不能写入中文到pdf文件,同时需要iTextAsian.jar

但是我们在使用这2个jar文件的时候仍然发现一个问题,只能设置windos自带的文字库才能把中文写入:

        例子:BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);

虽然上面的例子解决了中文问题,但是并没有世界解决问题,从路径就可以看出,很明显,这样的写法只能在windows下运行有用。

当我们改成文字库的时候,还是会报错:BaseFont baseFont = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);

找了好久,解压了iTextAsian.jar文件才发现,原来是iText5.0.6.jar文件包路径不对应。

后来找了新的jar文件替换掉了原先的版本,中文问题解决。

新jar文件下载路径:iText1.3.jar和iTextAsian.jar

pdf下载事例代码:

private void downloadPDF(HttpServletResponse response, String merno,String filename, String date, String z_mernoshh,String z_daterq, int z_transcnt, double z_transamt,double z_transfee, int z_tkcnt, double z_tkamt, double z_tkfee,double z_remark, List<WxdzType> wxdzlist,List<WxdzInf> list){Document doc = new Document(PageSize.A4.rotate());// 实例化文档对象;  PageSize.A4.rotate();横向ByteArrayOutputStream baos = null;String filenamepdf =  filename+".pdf";try {PdfWriter.getInstance(doc, new FileOutputStream("HelloWorld.pdf"));BaseFont bfChinese = BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H", false);Font font = new Font(bfChinese, 10, Font.NORMAL);baos = new ByteArrayOutputStream();@SuppressWarnings("unused")PdfWriter writer = PdfWriter.getInstance(doc, baos);// 创建@SuppressWarnings("unused")byte[] bt = baos.toByteArray();doc.open();//打开文档对象Paragraph p;p = new Paragraph(filename+"\n", font);p.setAlignment(1);doc.add(p);p=new Paragraph("===========================================================================================\n",font);p.setAlignment(1);doc.add(p);if(merno.equals("No")){merno="全部";p=new Paragraph("商户名称:" + merno + "                                                                                                                                                                                                                                                                                            制表日期:"+date+"\n",font);}else{p=new Paragraph("商户名称:" + merno + "                                                                                                                                                                                                                                                                          制表日期:"+date+"\n",font);}doc.add(p);//doc.add(new Paragraph(" \n",font));------为了空行p=new Paragraph(" \n");doc.add(p);PdfPTable table = createPDF(font,wxdzlist,list,z_mernoshh,z_daterq,z_transcnt,z_transamt,z_transfee,z_tkcnt,z_tkamt,z_tkfee,z_remark);//创建表格并写入数据doc.add(table);p=new Paragraph(" \n");doc.add(p);doc.add(new Paragraph("会计:                                                                                                                                                            复核:                                                                                                                                                       制表:",font));} catch (DocumentException de) {System.err.println(de.getMessage());} catch (IOException ioe) {System.err.println(ioe.getMessage());}// 关闭打开的文档doc.close();ServletOutputStream out;try {out = response.getOutputStream();response.setContentType("application/pdf");response.addHeader("Content-Disposition", "attachment;filename="+ java.net.URLEncoder.encode(filenamepdf, "utf-8"));response.setContentLength(baos.size());baos.writeTo(out);out.flush();out.close();baos.close();} catch (IOException e) {e.printStackTrace();}}


   
private PdfPTable createPDF(Font font, List<WxdzType> wxdzlist,List<WxdzInf> list,String z_mernoshh,String z_daterq, int z_transcnt, double z_transamt,double z_transfee, int z_tkcnt, double z_tkamt, double z_tkfee,double z_remark) throws DocumentException,IOException{PdfPTable table = new PdfPTable(10);// 创建一个多少列的表格table.getDefaultCell().setMinimumHeight(50); // 设置默认的表格高度int[] widths = new int[10];for (int i = 0; i < 10; i++) widths[i] = 1;widths[0] = 2;//widths[1] = 2;//widths[2] = 1;//widths[date.size()-1] =2;table.setWidths(widths);// 设置所有宽度table.setWidthPercentage(100f);//PdfPCell cell;//Phrase ph;// cell = new PdfPCell(ph);// cell.setColspan(date.size());//合并列String[] tableName=new String[]{"商户名称","交易类型","交易日期","交易笔数","交易金额","手续费","退款笔数","退款金额","退款手续费","划账金额"};for(int i=0;i<tableName.length;i++){Paragraph element = new Paragraph(tableName[i], font);PdfPCell cell = new PdfPCell(element);cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);}for(int i=0;i<wxdzlist.size();i++){ List<WxdzInf> wxd = wxdzlist.get(i).getList(); for(int j=0;j<wxd.size();j++){  Paragraph element = new Paragraph(wxd.get(j).getMerName(),font);PdfPCell cell1 = new PdfPCell(element);cell1.setHorizontalAlignment(Element.ALIGN_LEFT);table.addCell(cell1);Paragraph element_1 = new Paragraph(wxd.get(j).getTranstype(),font);PdfPCell cell_1 = new PdfPCell(element_1);cell_1.setHorizontalAlignment(Element.ALIGN_LEFT);table.addCell(cell_1);Paragraph element_2 = new Paragraph(wxd.get(j).getDate(),font);PdfPCell cell_2 = new PdfPCell(element_2);cell_2.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell_2);Paragraph element_3 = new Paragraph(wxd.get(j).getTranscnt()+"",font);//交易笔数PdfPCell cell_3 = new PdfPCell(element_3);cell_3.setHorizontalAlignment(Element.ALIGN_RIGHT);table.addCell(cell_3);Paragraph element_4 = new Paragraph(ChangeNumPoint(String.valueOf(wxd.get(j).getTransamt())),font);PdfPCell cell_4 = new PdfPCell(element_4);cell_4.setHorizontalAlignment(Element.ALIGN_RIGHT);table.addCell(cell_4);Paragraph element_5 = new Paragraph(ChangeNumPoint(String.valueOf(wxd.get(j).getTransfee())),font);PdfPCell cell_5 = new PdfPCell(element_5);cell_5.setHorizontalAlignment(Element.ALIGN_RIGHT);table.addCell(cell_5);Paragraph element_6 = new Paragraph(wxd.get(j).getTkcnt()+"",font);//退款笔数PdfPCell cell_6 = new PdfPCell(element_6);cell_6.setHorizontalAlignment(Element.ALIGN_RIGHT);table.addCell(cell_6);Paragraph element_7 = new Paragraph(ChangeNumPoint(String.valueOf(wxd.get(j).getTkamt())),font);PdfPCell cell_7 = new PdfPCell(element_7);cell_7.setHorizontalAlignment(Element.ALIGN_RIGHT);table.addCell(cell_7);Paragraph element_8 = new Paragraph(ChangeNumPoint(String.valueOf(wxd.get(j).getTkfee())),font);PdfPCell cell_8 = new PdfPCell(element_8);cell_8.setHorizontalAlignment(Element.ALIGN_RIGHT);table.addCell(cell_8);Paragraph element_9 = new Paragraph(ChangeNumPoint(String.valueOf(wxd.get(j).getRemark())),font);PdfPCell cell_9 = new PdfPCell(element_9);cell_9.setHorizontalAlignment(Element.ALIGN_RIGHT);table.addCell(cell_9); } //小计   Paragraph element_x1 = new Paragraph(wxdzlist.get(i).getMerno(),font); PdfPCell cell_x1 = new PdfPCell(element_x1); cell_x1.setHorizontalAlignment(Element.ALIGN_CENTER); cell_x1.setColspan(2);//合并2列 table.addCell(cell_x1);  Paragraph element_x2 = new Paragraph(wxdzlist.get(i).getDate(),font); PdfPCell cell_x2 = new PdfPCell(element_x2); cell_x2.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell_x2);  Paragraph element_x3 = new Paragraph(wxdzlist.get(i).getTranscnt()+"",font);//交易笔数 PdfPCell cell_x3 = new PdfPCell(element_x3); cell_x3.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x3);  Paragraph element_x4 = new Paragraph(ChangeNumPoint(String.valueOf(wxdzlist.get(i).getTransamt())),font); PdfPCell cell_x4 = new PdfPCell(element_x4); cell_x4.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x4);  Paragraph element_x5 = new Paragraph(ChangeNumPoint(String.valueOf(wxdzlist.get(i).getTransfee())),font); PdfPCell cell_x5 = new PdfPCell(element_x5); cell_x5.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x5);  Paragraph element_x6 = new Paragraph(wxdzlist.get(i).getTkcnt()+"",font);//退款笔数 PdfPCell cell_x6 = new PdfPCell(element_x6); cell_x6.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x6);  Paragraph element_x7 = new Paragraph(ChangeNumPoint(String.valueOf(wxdzlist.get(i).getTkamt())),font); PdfPCell cell_x7 = new PdfPCell(element_x7); cell_x7.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x7);  Paragraph element_x8 = new Paragraph(ChangeNumPoint(String.valueOf(wxdzlist.get(i).getTkfee())),font); PdfPCell cell_x8 = new PdfPCell(element_x8); cell_x8.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x8);  Paragraph element_x9 = new Paragraph(ChangeNumPoint(String.valueOf(wxdzlist.get(i).getRemark())),font); PdfPCell cell_x9 = new PdfPCell(element_x9); cell_x9.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x9);//---------------------------------------------------------------------------------------------------------------------------------------------------------- } //合计/*String z_mernoshh= "合计";//合计String z_daterq="";// 交易日期int z_transcnt=0;// 交易笔数double z_transamt=0;// 交易金额double =0;// 手续费int =0;// 退款笔数double =0;// 退款金额double =0;// 退款手续费double =0;// 划账金额*/ Paragraph element_x1 = new Paragraph(z_mernoshh,font); PdfPCell cell_x1 = new PdfPCell(element_x1); cell_x1.setHorizontalAlignment(Element.ALIGN_CENTER); cell_x1.setColspan(2);//合并2列 table.addCell(cell_x1);  Paragraph element_x2 = new Paragraph(z_daterq,font); PdfPCell cell_x2 = new PdfPCell(element_x2); cell_x2.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell_x2);  Paragraph element_x3 = new Paragraph(z_transcnt+"",font);//交易笔数 PdfPCell cell_x3 = new PdfPCell(element_x3); cell_x3.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x3);  Paragraph element_x4 = new Paragraph(ChangeNumPoint(String.valueOf(z_transamt)),font); PdfPCell cell_x4 = new PdfPCell(element_x4); cell_x4.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x4);  Paragraph element_x5 = new Paragraph(ChangeNumPoint(String.valueOf(z_transfee)),font); PdfPCell cell_x5 = new PdfPCell(element_x5); cell_x5.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x5);  Paragraph element_x6 = new Paragraph(z_tkcnt+"",font);//退款笔数 PdfPCell cell_x6 = new PdfPCell(element_x6); cell_x6.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x6);  Paragraph element_x7 = new Paragraph(ChangeNumPoint(String.valueOf(z_tkamt)),font); PdfPCell cell_x7 = new PdfPCell(element_x7); cell_x7.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x7);  Paragraph element_x8 = new Paragraph(ChangeNumPoint(String.valueOf(z_tkfee)),font); PdfPCell cell_x8 = new PdfPCell(element_x8); cell_x8.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x8);  Paragraph element_x9 = new Paragraph(ChangeNumPoint(String.valueOf(z_remark)),font); PdfPCell cell_x9 = new PdfPCell(element_x9); cell_x9.setHorizontalAlignment(Element.ALIGN_RIGHT); table.addCell(cell_x9);return table;}


0 0