itext 输出 中文

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中自带的字体为例说明如何输出中文:

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


一个完整的例子:

/*
 * $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.
 *
 * [email protected]
 */
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(), 50, 50, 50, 50);

		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("[email protected],CTE WAC,GBSC,CDL,IBM");
			document.addSubject("This is a sample of iText in CTE.");

			document.open();

			Table datatable = new Table(10);

			int headerwidths[] = { 10, 24, 12, 12, 7, 7, 7, 7, 7, 7 };
			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(0xC0, 0xC0, 0xC0));
			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();
	}
}

你可能感兴趣的:(windows,.net,IBM)