转载:http://blog.csdn.net/xorong/archive/2007/04/21/1574100.aspx
这是由编码问题引起的。XML标准规定,XML分析器必须支持“UTF-8”和“UTF-16”编码,而且必须能够自动区分这两种编码的文件,对于其他编码(包括常用的中文编码“GB2312”或“BIG5”)并不要求支持。如果XML文件中包含编码声明,分析器则按照声明的编码进行处理,否则就按照识别结果进行处理(识别的结果总是“UTF-8”和“UTF-16”中的一种)。因此,如果XML文件的编码在这两种之外,你必须在XML文件前加上编码声明,如:<?xml version="1.0" encoding="gb2312"?>就表示XML文件的编码是“gb2312”。
现有的XML分析器大多不支持中文编码“GB2312”或“BIG5”,因此无法读取包含中文的XML文件。你可以使用支持中文编码的分析器,如MSXML,IBMJAVA4C,IBMJAVA4J等进行XML分析。你也可以用内码转换工具,将编码转换为“UTF-8”或“UTF-16”后进行解析,然后将解析结果转换回原来的编码。
1、关于字体的支持
自己写一个类,覆盖iText自带的htmparser,供自己调用,里面加入了对默认中文字体的支持
import java.io.IOException;
import java.io.InputStream;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.lowagie.text.DocListener;
import com.lowagie.text.ExceptionConverter;
import com.lowagie.text.html.HtmlParser;
import com.lowagie.text.html.SAXmyHtmlHandler;
import com.lowagie.text.pdf.BaseFont;
public class ITextSurportHtmlParser extends HtmlParser {
public ITextSurportHtmlParser(){
super();
}
public void goGB(DocListener document, InputStream is) {
try {
BaseFont bfComic = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
parser.parse(new InputSource(is), new SAXmyHtmlHandler(document, bfComic));
}
catch(Exception e) {
e.printStackTrace(System.out);
}
}
}
2、参考代码
String htmText = cfo.getOutputText();
htmText = new String(htmText.getBytes("gb2312"), "ISO8859_1");
StringBufferInputStream sbis = new StringBufferInputStream(htmText);
Document doc = new Document(PageSize.A4, 80, 50, 30, 65);
PdfWriter.getInstance(doc, res.getOutputStream());
ITextSurportHtmlParser p = new ITextSurportHtmlParser();
p.goGB(doc, sbis);
return null;
关键是将html文件先转换成unicode,然后交给sax解析即可
注:适用于 iText_2.1.7 及以下版本,iText 5.0不适用
分享到:
相关推荐
在IT行业中,HTML和PDF是两种非常...总的来说,`iText 7`提供了一种强大且灵活的方式来处理HTML到PDF的转换,包括对中文的支持和自定义的文档元素。通过熟练掌握其API和用法,你可以轻松地满足各种复杂的PDF生成需求。
1. **导入中文字体**:确保你的项目中包含了支持中文的TrueType或OpenType字体文件,如Arial Unicode MS或SimSun。 2. **创建Font对象**:使用`FontFactory.register()`方法注册字体文件,然后通过`FontFactory....
1. **导入字体资源**:首先,你需要一个支持中文的TrueType Font (TTF) 文件,如Arial Unicode MS、SimSun等。这些字体包含了大量中文字符,适合在PDF中显示中文。 2. **注册字体**:在iText中,你需要注册这个字体...
1. **iText.CHM**:这是一个帮助文件,通常以CHM(Compiled HTML Help)格式呈现,提供了iText库的API参考和使用指南。用户可以通过查阅此文件了解如何使用iText的各种功能,包括文本添加、图像插入、表格创建、书签...
8. **与其他格式转换**:可以从 HTML、XML 等格式导入数据并生成 PDF。 ### 二、搭建 iText 环境 在使用 iText 之前,你需要确保环境准备就绪: 1. **环境准备**:确保你的开发环境中已经安装了 Java 开发工具...
用户可以通过iReport导入必要的JAR包,如itext-2.0.3.jar和iTextAsian.jar,以便在报表设计阶段预览和测试中文显示效果。 5. **中文显示问题**: 在报表制作中,中文字符的正确显示是一个常见挑战,尤其是在跨平台或...
通过这个中文帮助文档,开发者能够掌握使用iText创建专业、结构化的PDF文档所需的所有技术,包括基本的文本和图形处理,到复杂的布局和交互元素。对于需要在Java或.NET环境中生成PDF的应用来说,iText是一个不可或缺...
导入 <groupId>org.xhtmlrenderer <artifactId>core-renderer <version>R8 直接根目录下新建包org.xhtmlrenderer.layout 覆盖jar
在实际开发中,导入上述jar包后,开发者可以通过编写Java代码来调用iText提供的API,实现PDF文档的创建和处理。例如,要创建一个简单的PDF文档,可以使用Document对象作为容器,PdfWriter对象负责写入PDF流,...
1. **导入itext库**:首先,你需要在项目中引入`itext`库。如果你使用的是Maven,可以在pom.xml文件中添加对应的依赖。 2. **获取URL内容**:使用Java的`java.net.URL`和`java.net.URLConnection`类来打开和读取URL...
一旦完成这个步骤,就可以在代码中直接导入并使用iText的相关类库。 三、创建第一个PDF文档 使用iText生成PDF文档的基本流程如下: 1. 创建`com.lowagie.text.Document`对象实例,表示一个PDF文档: ```java ...
### Word导入导出技术详解——基于Java与SSH ...此外,通过引入`iTextAsian.jar`库,还可以解决中文显示的问题,使得该技术在中文环境中也能得到广泛应用。希望本文能够帮助您更好地理解和掌握Word文档处理的相关技术。
这意味着这个`html2pdf`项目可能是在Eclipse环境中开发的,用户可以导入这些配置快速在Eclipse中启动和构建项目。 `bin`目录通常包含编译后的Java类文件或者可执行文件,是项目的输出目录。在这个项目中,这可能是...
这个库通常与iText一起使用,iText是一个强大的PDF处理库。当我们遇到"Flying Saucer的中文不显示问题"时,这通常是由于字符编码设置不正确或者字体支持不足所导致的。 在默认情况下,Flying Saucer可能不包含对...
"iText中文文档"是iText库的中文版使用手册,对开发者理解和使用iText功能非常有帮助。通过阅读这份文档,你可以了解如何创建PDF文档,如何添加各种元素,以及如何进行安全设置。 "src"目录包含了项目的源代码,...
easypoi是一个Java库,主要用于Excel、Word、HTML、PDF等文档的导出和导入操作。下面是easypoi教程总结的知识点: 第一章 Excel 篇 1. Excel 注解:easypoi提供了多种Excel注解,例如@Excel注解、@ExcelTarget注解...
* ireport支持中文,需要加入iText-2.1.5.jar和iTextAsian.jar两个jar包到ireport的lib目录下。 三、在web应用中使用jasperreport * 在web应用中使用jasperreport需要导入依赖的包,包括...
此外,iTextSharp还支持将PDF转换为HTML、XML等其他格式,或者将这些格式的数据导入到PDF中,极大地扩展了PDF处理的灵活性。 需要注意的是,在使用iTextSharp.dll时,需要确保遵循PDF的标准规范,以保证生成的文档...
- 特别注意:如果报表中包含中文,需要确保使用支持中文显示的字体,并考虑下载 iText Asian 语言包来避免中文显示问题。 - **下载地址**: [http://itext.sourceforge.net/downloads/iTextAsian.jar]...
itext中关于亚洲编码的类库,在这里用于中文字体的输入。 junit.jar Junit包,当你运行Hibernate自带的测试代码的时候需要,否则就不用。 commons-digester.jar Apache Commons包中的一个,通过它可以很方便的解析...