java pdf寫入中文時不顯示,如何解決。

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;
	}


發佈了25 篇原創文章 · 獲贊 9 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章