E:\>javac pp.javaE:\>java pp
null源码如下import java.io.*;
import java.io.IOException;
import java.io.FileOutputStream;
import java.lang.*;
import java.lang.String;
import java.util.*;
import java.text.*;
import java.awt.Color;
import com.lowagie.text.*;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.PageSize;
import com.lowagie.text.Document;
import com.lowagie.text.pdf.ColumnText;
import com.lowagie.text.Phrase;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Rectangle;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Element;
import com.lowagie.text.pdf.PdfPageEventHelper;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.DocumentException;
import com.lowagie.text.ExceptionConverter;
import com.lowagie.text.Image;
public class pp extends PdfPageEventHelper
{
public static void main(String[] args) throws Exception
{
Document document = new Document(PageSize.A4, 20, 20, 90, 30);
try
{
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("aa.pdf"));
writer.setViewerPreferences(PdfWriter.PageModeUseOutlines);
writer.setPageEvent(new pdf());
document.open();
BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font FontChinese = new Font(bfChinese,12,Font.NORMAL);
Paragraph chunk = new Paragraph("我们是害虫", FontChinese);
document.add(chunk);
document.close();
}catch (Exception e) {System.out.println(e.getMessage());}
}
}

解决方案 »

  1.   

    呵呵!!因为你要加载windows里面的汉字包
    如: BaseFont bfChinese = BaseFont.createFont("../webapps/CMCS3.1/business/overDraft/SIMYOU.TTF", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);    
            com.lowagie.text.Font FontChinese = new com.lowagie.text.Font(bfChinese, 12, com.lowagie.text.Font.NORMAL);SIMYOU.TTF这个文件在windows的系统目录中可以找到的,
      

  2.   

    谢谢不过我没有找到你说SIMYOU.TTFC:\WINDOWS\Fonts>dir s*.ttf
     Volume in drive C has no label.
     Volume Serial Number is 4CDE-FFB0 Directory of C:\WINDOWS\Fonts1999-03-17  15:07           168,756 SCHLBKB.TTF
    1999-03-17  15:07           160,964 SCHLBKBI.TTF
    1999-03-17  15:07           163,164 SCHLBKI.TTF
    1999-06-24  09:33            55,500 SCRIPTBL.TTF
    2004-08-04  20:00           234,280 shruti.ttf
    2004-08-04  20:00        10,044,356 simhei.ttf
    2004-08-04  20:00           221,676 sylfaen.ttf
    2004-08-04  20:00            69,464 symbol.ttf
                   8 File(s)     11,118,160 bytes
                   0 Dir(s)  15,229,747,200 bytes freeC:\WINDOWS\Fonts>cd /C:\WINDOWS\Fonts>cd \C:\>dir sim*.ttf /a/s
     Volume in drive C has no label.
     Volume Serial Number is 4CDE-FFB0 Directory of C:\WINDOWS\Fonts2004-08-04  20:00        10,044,356 simhei.ttf
                   1 File(s)     10,044,356 bytes     Total Files Listed:
                   1 File(s)     10,044,356 bytes
                   0 Dir(s)  15,229,747,200 bytes free
      

  3.   

    //writer.setPageEvent(new pdf());
    找不到pdf类,所以将此句引掉。
    然后执行,能够正确地生成aa.pdf。
    我的环境运行环境是:jdk1.5.0。是不是jdk版本问题?
      

  4.   

    //writer.setPageEvent(new pdf());
    =================================
    跟这个没关系
      

  5.   

    请问,如果是要读取日文的pdf,怎么实现呢?用pdfbox怎么实现呢?或者用itext(亚洲)怎么实现呢?
      

  6.   

    打开BaseFont类你会发现   
    public static final String RESOURCE_PATH = "com/itextpdf/text/pdf/fonts/";
    但是在iTextAsian.jar里你会发现 iTextAsian的包名是 "com.itextpdf.text.pdf.fonts"程序在加载的过程中会根据 RESOURCE_PATH的路径去寻找下面的peoperties文件,它的font和encoding文件都是从String RESOURCE_PATH = "com/itextpdf/text/pdf/fonts/"; 这里加载的,而老itextasian.jar的包名是com.lowagie.text.pdf.fonts, 应该是包名重新命名了, 而没有及时更新itextasian.jar, 改了一下itextasian.jar包路径, 重新运行程序, OK, 搞定.
    更改iTextAsian.jar包名的方法如下
    1)使用winrar解压缩程序将原来的iTextAsian.jar解压,目录结构如下
      iTextAsian
         --com
            --lowagie
              --text
                --pdf
                  --fonts
                    --...(字体属性文件)
    2)将加压后com目录下的包名lowagie更改为itextpdf
    3)在命令行转至iTextAsian目录,重新打包为iTextAsian.jar文件
      命令如下:
         jar cvf iTextAsian.jar .