java pdf写入中文时不显示,如何解决。
2015-12-07 11:26
706 查看
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下载事例代码:
只下载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; }
相关文章推荐
- JavaEE体系学习路径(尚硅谷版)
- java去空格
- java.lang.IllegalArgumentException: Receiver not registered
- 利用eclipse修改不同类型文件的编码格式
- Spring MVC拦截器+注解方式实现防止表单重复提交
- Eclipse 报 “Exception in thread "main" java.lang.OutOfMemoryError: Java heap space ”错误的解决办法
- 六、WorldWindJava编码问题
- Eclipse项目出现红色叹号
- 使用spring-loaded实现应用热部署
- Struts2基本配置(1)
- Spring:Spring入门和bean的生命周期
- SpringMVC+JPA+EasyUI 服务端分页
- struts2之单个文件上传
- MyEclipse之Could not create the view: An unexpected exception was thrown
- 字节流、字符串、16进制字符串转换
- Spring MVC注解冲突
- Java 中文 乱码问题
- 配置android开发环境时出现eclipse获取不到ADT的解决方法
- Java 文件操作工具类
- Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重复读取配置文件的方法