您的位置:首页 > 编程语言 > Java开发

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下载事例代码:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: