`

iText生成Pdf 和 中文编码问题

阅读更多
前几天偶然在网上看到iText输出PDF格式这一技术,今天下午心血澎湃就尝试了一下。
中间碰到了一个创建字体的问题:
Java代码
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);   
console错误提示"Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized" 

BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
console错误提示"Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized"

   google一下,处理方式可以采用windos自带字库:
Java代码
BaseFont bf = BaseFont.CreateFont("c:\\windows\\fonts\\simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 

BaseFont bf = BaseFont.CreateFont("c:\\windows\\fonts\\simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);



   下面是在对网上一例的代码整理:

Java代码
/** 
* 创建pdfWriter模板 
*  
* @Field cell表示表格中每个单元格的内容,paragraph为段落内容 
* @date 2009年01月13日 
* @author 林维煜 
*/ 
abstract public class PDFWriter {  
 
    protected Document document = null;  
    protected FileOutputStream out = null;  
    protected Rectangle pageSize = null;  
    protected String filePath = null;  
 
    protected Cell cell = null;  
    protected Paragraph header = null;  
    protected Paragraph prg = null;  
    protected Table table = null;  
      
    public PDFWriter(String filePath) {  
        try {  
            this.filePath = filePath;  
            document = new Document();  
            out = new FileOutputStream(filePath);//文档输出路径信息  
            PdfWriter.getInstance(document, out);  
            document.open();  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (DocumentException e) {  
            e.printStackTrace();  
        }  
    }  
 
    public void close() {  
        try {  
            document.close();  
            out.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  


/**
* 创建pdfWriter模板
*
* @Field cell表示表格中每个单元格的内容,paragraph为段落内容
* @date 2009年01月13日
* @author 林维煜
*/
abstract public class PDFWriter {

protected Document document = null;
protected FileOutputStream out = null;
protected Rectangle pageSize = null;
protected String filePath = null;

protected Cell cell = null;
protected Paragraph header = null;
protected Paragraph prg = null;
protected Table table = null;

public PDFWriter(String filePath) {
try {
this.filePath = filePath;
document = new Document();
out = new FileOutputStream(filePath);//文档输出路径信息
PdfWriter.getInstance(document, out);
document.open();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}

public void close() {
try {
document.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


Java代码
import com.lowagie.text.BadElementException;  
import com.lowagie.text.Cell;  
import com.lowagie.text.Chunk;  
import com.lowagie.text.Font;  
 
/** 
* 定制单元格 
*  
* @date 2009年01月13日 
* @author 林维煜 
*/ 
public class PDFCell extends Cell {  
 
    public PDFCell(String content, int rowspan, int colspan)  
            throws BadElementException {  
        super(new Chunk(content, PDFChineseFont.createChineseFont(10,  
                Font.NORMAL)));  
        setRowspan(rowspan);  
        setColspan(colspan);  
        setHeader(false);  
    }  


import com.lowagie.text.BadElementException;
import com.lowagie.text.Cell;
import com.lowagie.text.Chunk;
import com.lowagie.text.Font;

/**
* 定制单元格
*
* @date 2009年01月13日
* @author 林维煜
*/
public class PDFCell extends Cell {

public PDFCell(String content, int rowspan, int colspan)
throws BadElementException {
super(new Chunk(content, PDFChineseFont.createChineseFont(10,
Font.NORMAL)));
setRowspan(rowspan);
setColspan(colspan);
setHeader(false);
}
}


Java代码
import com.lowagie.text.Element;  
import com.lowagie.text.Font;  
import com.lowagie.text.Paragraph;  
 
/** 
* 定制段落 
*  
* @date 2009年01月13日 
* @author 林维煜 
*/ 
@SuppressWarnings("serial")  
public class PDFParagragh extends Paragraph {  
 
    public PDFParagragh(String content, int alignment, int fontSize) {  
        super(content, PDFChineseFont.createChineseFont(fontSize, Font.NORMAL));  
        setAlignment(alignment);  
    }  
 
    public static final int CENTER = Element.ALIGN_CENTER;  
    public static final int LEFT = Element.ALIGN_LEFT;  
    public static final int RIGHT = Element.ALIGN_RIGHT;  
    public static final int TOP = Element.ALIGN_TOP;  
    public static final int MIDDLE = Element.ALIGN_MIDDLE;  
    public static final int BOTTOM = Element.ALIGN_BOTTOM;  


import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;

/**
* 定制段落
*
* @date 2009年01月13日
* @author 林维煜
*/
@SuppressWarnings("serial")
public class PDFParagragh extends Paragraph {

public PDFParagragh(String content, int alignment, int fontSize) {
super(content, PDFChineseFont.createChineseFont(fontSize, Font.NORMAL));
setAlignment(alignment);
}

public static final int CENTER = Element.ALIGN_CENTER;
public static final int LEFT = Element.ALIGN_LEFT;
public static final int RIGHT = Element.ALIGN_RIGHT;
public static final int TOP = Element.ALIGN_TOP;
public static final int MIDDLE = Element.ALIGN_MIDDLE;
public static final int BOTTOM = Element.ALIGN_BOTTOM;
}


Java代码
import java.io.IOException;  
import com.lowagie.text.DocumentException;  
import com.lowagie.text.Font;  
import com.lowagie.text.pdf.BaseFont;  
 
/** 
* 如果无此函数定义,生成的pdf文件中的中文字符将不会显示 
*  
* @date 2009年01月13日 
* @author 林维煜 
*/ 
public class PDFChineseFont {  
 
    private static Font chineseFont;  
 
    public final static Font createChineseFont(int size, int style) {  
        try {  
//          chineseFont = new Font(BaseFont.createFont("STSong-Light",  
//                  "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), size, style);  
              
            //使用windos自带字库:  
            chineseFont = new Font(BaseFont.createFont("c:\\windows\\fonts\\simsun.ttc,1",  
                    BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), size, style);  
        } catch (DocumentException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return chineseFont;  
    }  


import java.io.IOException;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;

/**
* 如果无此函数定义,生成的pdf文件中的中文字符将不会显示
*
* @date 2009年01月13日
* @author 林维煜
*/
public class PDFChineseFont {

private static Font chineseFont;

public final static Font createChineseFont(int size, int style) {
try {
// chineseFont = new Font(BaseFont.createFont("STSong-Light",
// "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), size, style);

//使用windos自带字库:
chineseFont = new Font(BaseFont.createFont("c:\\windows\\fonts\\simsun.ttc,1",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), size, style);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return chineseFont;
}
}


Java代码
import com.lowagie.text.BadElementException;  
import com.lowagie.text.DocumentException;  
import com.lowagie.text.Paragraph;  
import com.lowagie.text.Table;  
 
/** 
* 定制PDF文档格式 
*  
* @date 2009年01月13日 
* @author 林维煜 
*/ 
public class MyWriter extends PDFWriter {  
 
    public MyWriter(String path) {  
        super(path);  
        try {  
            header = new Paragraph("练习文档");  
        //  header = new PDFParagraph("练习文档");   
 
            document.add(header);  
            table = new Table(14);  
            table.setBorderWidth(0);  
            table.addCell(new PDFCell("(单价:1毛)", 1, 5));  
            table.addCell(new PDFCell("2009年01月13号", 1, 9));  
            document.add(table);  
            table = new Table(14);  
            table.setBorderWidth(0);  
            table.addCell(new PDFCell("公司名称", 1, 2));  
            table.addCell(new PDFCell("网址", 1, 3));  
            table.addCell(new PDFCell("型号规格", 1, 2));  
            table.addCell(new PDFCell("数量", 1, 1));  
            table.addCell(new PDFCell("单价", 1, 1));  
            table.addCell(new PDFCell("总价", 1, 1));  
            table.addCell(new PDFCell("附件", 1, 2));  
            table.addCell(new PDFCell("备注", 1, 2));  
            table.endHeaders();// 换行  
            table.addCell(new PDFCell("广拓芯", 1, 2));  
            table.addCell(new PDFCell("www.thepartnumber.com", 1, 3));  
            table.addCell(new PDFCell("1860", 1, 2));  
            table.addCell(new PDFCell("3", 1, 1));  
            table.addCell(new PDFCell("0.3", 1, 1));  
            table.addCell(new PDFCell("2000", 1, 1));  
            table.addCell(new PDFCell("无", 1, 2));  
            table.addCell(new PDFCell("无", 1, 2));  
            table.endHeaders();       
            document.add(table);  
            close();// 别忘记关闭  
        } catch (BadElementException e) {  
            e.printStackTrace();  
        } catch (DocumentException e) {  
            e.printStackTrace();  
        }  
    }  


import com.lowagie.text.BadElementException;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Table;

/**
* 定制PDF文档格式
*
* @date 2009年01月13日
* @author 林维煜
*/
public class MyWriter extends PDFWriter {

public MyWriter(String path) {
super(path);
try {
header = new Paragraph("练习文档");
// header = new PDFParagraph("练习文档");

document.add(header);
table = new Table(14);
table.setBorderWidth(0);
table.addCell(new PDFCell("(单价:1毛)", 1, 5));
table.addCell(new PDFCell("2009年01月13号", 1, 9));
document.add(table);
table = new Table(14);
table.setBorderWidth(0);
table.addCell(new PDFCell("公司名称", 1, 2));
table.addCell(new PDFCell("网址", 1, 3));
table.addCell(new PDFCell("型号规格", 1, 2));
table.addCell(new PDFCell("数量", 1, 1));
table.addCell(new PDFCell("单价", 1, 1));
table.addCell(new PDFCell("总价", 1, 1));
table.addCell(new PDFCell("附件", 1, 2));
table.addCell(new PDFCell("备注", 1, 2));
table.endHeaders();// 换行
table.addCell(new PDFCell("广拓芯", 1, 2));
table.addCell(new PDFCell("www.thepartnumber.com", 1, 3));
table.addCell(new PDFCell("1860", 1, 2));
table.addCell(new PDFCell("3", 1, 1));
table.addCell(new PDFCell("0.3", 1, 1));
table.addCell(new PDFCell("2000", 1, 1));
table.addCell(new PDFCell("无", 1, 2));
table.addCell(new PDFCell("无", 1, 2));
table.endHeaders();
document.add(table);
close();// 别忘记关闭
} catch (BadElementException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}


Java代码
/** 
* 测试类 
*  
* @date 2009年01月13日 
* @author 林维煜 
*/ 
public class Test {  
 
    public static void main(String[] args) {  
        PDFWriter pdf = new MyWriter("gtxin.pdf");  
    }  


/**
* 测试类
*
* @date 2009年01月13日
* @author 林维煜
*/
public class Test {

public static void main(String[] args) {
PDFWriter pdf = new MyWriter("gtxin.pdf");
}
}
分享到:
评论

相关推荐

    解决Itext生成PDF中文不换行的jar

    总之,处理Itext生成PDF时的中文换行问题,关键在于正确设置字体、编码和布局策略。如果遇到困难,不妨尝试更新库或使用其他替代方案。同时,保持对PDF生成技术的深入理解和实践,是提高PDF文档质量的关键。

    使用iText生成PDF.doc

    示例中使用了`GB2312`编码,对于中文字符的处理,需要确保编码与实际使用的字符集一致,防止乱码问题。 9. **页面设置与样式**: iText允许开发者自定义页面大小、边距、字体样式等,通过`Document`对象的`...

    Java生成pdf文件,解决中文乱码问题.pdf

    本文将通过一个完整的示例代码,详细讲解如何使用 iText 库生成 PDF 文件,解决中文乱码问题。 1. 使用 iText 库 iText 库是一个流行的 Java 库,用于生成 PDF 文件。它提供了丰富的功能,包括文档结构、字体、...

    iText生成PDF - 实例

    **iText生成PDF实例详解** 在信息技术领域,PDF(Portable Document Format)文件因其跨平台、易阅读和保真性等特点,被广泛应用于文档共享和交流。而iText是一款开源的Java库,它允许开发者轻松地创建、修改和操作...

    初学Itext 生成PDF 表格,条形码(一维),图片

    对于初学者来说,掌握使用iText生成PDF文档中的表格、一维条形码和图片是一项基本技能。此外,需要注重代码中字符串的准确性,避免由于扫描或输入错误导致的问题。熟练掌握iText库的使用,可以使开发者在处理PDF文件...

    itextpdf 导出pdf 表格 自动分页中文 目录

    它包含了对CJK(Chinese, Japanese, Korean)字符集的支持,确保在生成PDF时能够正确显示和处理中文文字,解决了在某些情况下中文字符无法正确渲染的问题。 3. **PDF表格自动分页**: 在生成PDF文档时,如果一个表格...

    Android用itext库生成中文PDF文档

    然而,由于版权和字符集的问题,原版的iText库在默认情况下可能无法正确地显示中文字符。这篇内容将深入探讨如何在Android环境中使用iText库生成包含中文的PDF文档。 首先,我们需要了解为什么原版iText库无法直接...

    Java解决Itext pdf中文不显示问题

    这个问题主要是由于PDF编码格式与Java字符串编码不匹配导致的。下面将详细介绍如何解决Java中Itext PDF中文不显示的问题。 首先,我们需要理解PDF文档的编码机制。PDF文档默认使用的是Adobe的标准字体,如Helvetica...

    itext导出pdf不显示中文 ITextRenderer不显示中文

    在IT行业中,生成PDF文档是常见的需求,而iText是一个广泛使用的Java库,用于创建和修改PDF文件。然而,当涉及到非英文字符,如中文时,可能会遇到显示问题。"iText导出pdf不显示中文 ITextRenderer不显示中文"这个...

    itextpdf 解决中文不显示问题

    itextpdf 再创将pdf格式文件的时候中文不显示或者乱码问题的解决 其实目前最新版本的itexpdf即使加了asian的辅助包也不能解决中文不显示问题 因为自己试过 可能方式不对 这个绝对显示 显示不了的 分不要

    iTextpdf支持中文

    在iTextpdf中,可能需要指定支持中文的字体(如SimSun、Arial Unicode MS等),并确保数据正确编码为UTF-8,以避免乱码问题。 使用iTextpdf库,开发者可以实现以下功能: 1. **创建PDF**:从头开始创建全新的PDF...

    Java生成PDF完整示例,解决中文乱码

    在Java编程环境中,生成PDF文档是一项...总的来说,Java生成PDF并解决中文乱码问题涉及到对iText库的深入理解和使用,以及对PDF文档格式的理解。通过合理利用这些库和工具,我们可以高效地生成符合业务需求的PDF文档。

    itext生成pdf支持qq自造字

    使用iText生成支持自造字的PDF,关键在于选择合适的字体和嵌入字体到PDF中。iText提供了多种方式来处理字体,包括直接使用内置字体、加载外部TrueType或OpenType字体文件,以及使用自定义的字形数据。 1. **加载...

    iText PDF中文字体文件.rar

    在IT行业中,生成PDF文档是常见的需求,尤其是在Java开发中。iText是一个强大的PDF库,它允许开发者在程序中创建、修改和操作PDF文档。然而,对于处理中文字符,iText需要额外的字体文件支持,因为默认的字体库不...

    itextpdf-5.5.9.jar和中文支持包itextasian-5.5.9.jar

    2. **编码**:支持GBK、UTF-8等常见中文编码,解决中文字符的乱码问题。 3. **排版**:优化了亚洲文字的排版算法,确保文字布局的美观和自然。 在实际使用时,你需要将这两个JAR文件都包含到你的项目类路径中。在...

    iText和支持中文的jar包

    通过以上步骤,我们可以在使用iText生成PDF报表时有效地处理中文字符。在实际开发中,还需要注意性能优化,因为加载字体文件和处理中文可能会增加内存消耗和CPU使用率。此外,对于大量中文文本的处理,合理布局和...

    itextpdf和中文支持包

    `itextasian`包含了额外的字体和编码支持,使得iText能够正确渲染中文字符,避免出现乱码问题。 在使用iText处理中文时,还需要注意以下几点: 1. 字体设置:需要确保使用的字体包含中文字符,通常可以使用如SimSun...

    解决itextpdf生成PDF在IOS18浏览中文乱码问题

    苹果手机升级IOS18后,项目使用APP打开PDF显示中文乱码,itextPdf生成的Pdf中文入参,IOS18平台所有浏览器打开后中文显示乱码。

    itextpdf中文依赖包

    2. **创建Font对象**:在生成PDF时,通过`FontFactory`类加载所需的字体。例如,可以使用`FontFactory.getFont("ArialUni", BaseFont.IDENTITY_H, BaseFont.EMBEDDED)`来获取支持中文的Arial Unicode MS字体。 3. **...

    java使用IText导出PDF(包含图片、表格、文字等等Demo和依赖包)

    总结来说,IText是Java中一个强大且灵活的PDF生成库,通过它可以轻松地创建包含文字、图片和表格的PDF文档。通过理解并实践提供的Demo,你将能够熟练地运用IText进行PDF的生成工作。记住,持续学习和更新库的版本以...

Global site tag (gtag.js) - Google Analytics