zoukankan      html  css  js  c++  java
  • iText中输出中文

    原文链接

    http://hintcnuie.iteye.com/blog/183690

    转载内容

    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.
     *
     * 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(), 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("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[] = { 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
    Address");
                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
    
    "));
                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
    
    "));
                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 包文件)

  • 相关阅读:
    反射/元类/项目的生命周期
    面向对象高级
    面向对象之封装/鸭子类型
    面向对象之继承
    面向对象1
    包/logging模块/hashlib模块/openpyxl模块/深浅拷贝
    python 几行代码实现自动回复功能
    python crypto rsa 加密运用
    pytohn 单下划线与双下划线的区别
    python 线程小练习
  • 原文地址:https://www.cnblogs.com/wenlong/p/4524954.html
Copyright © 2011-2022 走看看