解决Itext中文编码问题的方案

xiaoxiao2021-02-28  55

iText中输出中文,有三种方式:

1、使用iTextAsian.jar中的字体     BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED); 2、使用Windows系统字体(TrueType)         BaseFont.createFont("C:/WINDOWS/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);     3、使用资源字体(ClassPath)     BaseFont.createFont("/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);

第2、三种方式使用的字体多一些,但是需要和实际资源绑定,在实际项目中可以将一些字体库和项目打包在一起,下面我们以iTextAsian中自带的字体为例说明如何输出中文:

Java代码   BaseFont bfChinese = BaseFont.createFont("STSong-Light""UniGB-UCS2-H",                BaseFont.NOT_EMBEDDED);                   Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);           document.add(new Paragraph(" 产生的报告",FontChinese));  

一个完整的例子:

 

Java代码   /*   * $Id: RepeatingTable.java,v 1.5 2005/05/09 11:52:47 blowagie Exp $   * $Name:  $   *   * This code is part of the 'iText Tutorial'.   * You can find the complete tutorial at the following address:   * http://itextdocs.lowagie.com/tutorial/   *   * This code is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   *   * itext-questions@lists.sourceforge.net   */   package com.lowagie.examples.objects.tables.alternatives;      import java.awt.Color;   import java.io.File;   import java.io.FileOutputStream;   import java.util.Date;      import com.lowagie.text.Cell;   import com.lowagie.text.Document;   import com.lowagie.text.Element;   import com.lowagie.text.Font;   import com.lowagie.text.FontFactory;   import com.lowagie.text.PageSize;   import com.lowagie.text.Paragraph;   import com.lowagie.text.Phrase;   import com.lowagie.text.Rectangle;   import com.lowagie.text.Table;   import com.lowagie.text.pdf.BaseFont;   import com.lowagie.text.pdf.PdfWriter;      /**   * Shows how a table is split if it doesn't fit the page.   */   public class RepeatingTable {          /**       * Shows how a table is split if it doesn't fit the page.       *        * @param args       *            no arguments needed       */       public static void main(String[] args) {           System.out.println("table splitting");           // creation of the document with a certain size and certain margins           Document document = new Document(PageSize.A4.rotate(), 50505050);              try {               // creation of the different writers               String filePath = "d:" + File.separator + "temp" + File.separator                       + "iText_Generated_pdf" + File.separator + "table"                       + File.separator;               File file = new File(filePath);               if (!file.exists()) {                   file.mkdirs();               }               PdfWriter.getInstance(document, new FileOutputStream(filePath                       + "repeatingtable.pdf"));                  // we add some meta information to the document               document.addAuthor("chenzwei@cn.ibm.com,CTE WAC,GBSC,CDL,IBM");               document.addSubject("This is a sample of iText in CTE.");                  document.open();                  Table datatable = new Table(10);                  int headerwidths[] = { 10241212777777 };               datatable.setWidths(headerwidths);               datatable.setWidth(100);               datatable.setPadding(3);                  // the first cell spans 10 columns               Cell cell = new Cell(new Phrase(                       "Administration -System Users Report", FontFactory.getFont(                               FontFactory.HELVETICA, 24, Font.BOLD)));               cell.setHorizontalAlignment(Element.ALIGN_CENTER);               cell.setLeading(30);               cell.setColspan(10);               cell.setBorder(Rectangle.NO_BORDER);               cell.setBackgroundColor(new Color(0xC00xC00xC0));               datatable.addCell(cell);                  // These cells span 2 rows               datatable.setBorderWidth(2);               datatable.setAlignment(1);               datatable.addCell("User Id");               datatable.addCell("Name\nAddress");               datatable.addCell("Company");               datatable.addCell("Department");               datatable.addCell("Admin");               datatable.addCell("Data");               datatable.addCell("Expl");               datatable.addCell("Prod");               datatable.addCell("Proj");               datatable.addCell("Online");                  // this is the end of the table header               datatable.endHeaders();                  datatable.setBorderWidth(1);                  for (int i = 1; i < 30; i++) {                      datatable.setAlignment(Element.ALIGN_LEFT);                      datatable.addCell("myUserId");                   datatable                           .addCell("Somebody with a very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very, very long long name");                   datatable.addCell("No Name Company");                   datatable.addCell("D" + i);                      datatable.setAlignment(Element.ALIGN_CENTER);                   datatable.addCell("No");                   datatable.addCell("Yes");                   datatable.addCell("No");                   datatable.addCell("Yes");                   datatable.addCell("No");                   datatable.addCell("Yes");                  }               BaseFont bfChinese = BaseFont.createFont("STSong-Light""UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);                Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);               document.add(new Paragraph(" 产生的报告",FontChinese));               document.add(datatable);               document.newPage();               document.add(new Paragraph(                       "com.lowagie.text.pdf.PdfPTable - Cells split\n\n"));               datatable.setConvert2pdfptable(true);               document.add(datatable);               document.newPage();               document.add(new Paragraph(                       "com.lowagie.text.Table - Cells kept together"));               datatable.setConvert2pdfptable(false);               datatable.setCellsFitPage(true);               document.add(datatable);               document.newPage();               document                       .add(new Paragraph(                               "com.lowagie.text.pdf.PdfPTable - Cells kept together\n\n"));               datatable.setConvert2pdfptable(true);               document.add(datatable);           } catch (Exception e) {               e.printStackTrace();           }              // we close the document           document.close();       }   }    

 

附录: 

http://www.lowagie.com/iText/tutorial/index.html (iText教程)   http://www.lowagie.com/iText/download.html (iText核心包文件)   http://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948 (iTextArea 包文件)

转载请注明原文地址: https://www.6miu.com/read-36542.html

最新回复(0)