`
SwordShadow
  • 浏览: 270991 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

itext的PDF生成方案

    博客分类:
  • java
阅读更多

itext实现HTML转pdf网上有很多实现方案,可惜大部分没有提供完整的源码下载,而有的方案却随着itext API的升级而失效,在此记录一下解决此问题的过程。

 

方法一:

最初是在老外的网站看到 http://hmkcode.com/itext-html-to-pdf-using-java/ 

// step 1
            Document document = new Document();
        // step 2
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("pdf.pdf"));
        // step 3
        document.open();
        // step 4
        XMLWorkerHelper.getInstance().parseXHtml(writer, document,
                new FileInputStream("index.html"));        
        //step 5
         document.close();

        System.out.println( "PDF Created!" );

Maven构建对应的版本  关于eclipse配置maven,可以参考此文

<dependency>
          <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.4.2</version>
        </dependency>
        <dependency>
                <groupId>com.itextpdf.tool</groupId>
                <artifactId>xmlworker</artifactId>
                <version>5.4.1</version>
        </dependency>

 

 

 最简单的方式,HTML支持度很好,可惜不支持中文 源码地址:https://github.com/hmkcode/Java/blob/master/itext-java-html-pdf

 

 方法二:

使用的jar包:itext-2.0.8.jar  core-render.jar

 

App.java

/**
 * 
 * @author LJS
 * 
 */
public class App {
	public void createPdf() throws Exception {
		// step 1
		String inputFile = "index.html";
		String url = new File(inputFile).toURI().toURL().toString();
		String outputFile = "index.pdf";
		System.out.println(url);
		// step 2
		OutputStream os = new FileOutputStream(outputFile);
		org.xhtmlrenderer.pdf.ITextRenderer renderer = new ITextRenderer();
		renderer.setDocument(url);

		// step 3 解决中文支持
		org.xhtmlrenderer.pdf.ITextFontResolver fontResolver = renderer
				.getFontResolver();
		fontResolver.addFont("c:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H,   
				BaseFont.NOT_EMBEDDED);

		renderer.layout();
		renderer.createPDF(os);
		os.close();
		
		System.out.println("create pdf done!!");
	}
        

	public static void main(String[] args) throws Exception {
		App app = new App();
		app.createPdf();
	}

}

注意指定中文字体

要转换的HTML

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">     
<html xmlns="http://www.w3.org/1999/xhtml ">     
<head>     
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />     
<title>itext-zh-cn</title>     
<style type="text/css">         
body {     
			font-family: SimSun;
}     
</style></head>     
     
<body>
<p align="left" >OK,支持中文了:)</p>

</body>     
</html> 

 同样也要指定中文字体,区分大小写

 运行程序,转换结果:



(字体样式和大家熟知的宋体不同,因为我替换了系统默认的宋体,pdf查看工具推荐PDF-XChange Viewer) 

 

 

pdf样式修改为A4 ( Document doc = new Document(PageSize.A4.rotate());)

在index.html中添加

<style type="text/css"> 
@page{ size: 11.69in 8.27in;}
...
</style>

 

 

注意:无论哪种方式的Html格式转换pdf,对于html源文件要求是语法严格的;方法二支持基本的CSS样式,可以调整出合适的HTML模板。

 

大家有更好的方法,欢迎交流{#emotions_dlg.laughing}

 

其他:itext添加图片方法:实际应用中,应该与生成pdf合成一步提升性能

public static void addImg(String fm) throws Exception {
	PdfReader reader = new PdfReader("temp.pdf");
	PdfStamper stamp = new PdfStamper(reader,new FileOutputStream("model.pdf"));
	Image img = Image.getInstance("code.png");  //使用png格式
	img.setAlignment(Image.LEFT | Image.TEXTWRAP);
	img.setBorderWidth(10);
	img.setAbsolutePosition(420, 240);
	img.scaleToFit(1000, 60);// 大小
	PdfContentByte over = stamp.getUnderContent(1); // overCount 与underCount 
	over.addImage(img);
	stamp.close();
	reader.close();
	}

  itext 版本号众多,可以在gerpcode查找其所有的版本

 

 补充:其他关于pdf生成的有帮助的文章参考:

介绍一个PDF的生成方案

使用PDF模板输出报表的实践

Itext 实现html转换成pdf

Generating PDFs for Fun and Profit with Flying Saucer and iText

itext 常用API参考

http://iaiai.iteye.com/blog/1549769

http://rensanning.iteye.com/blog/1538689

 

 

 

 

  • 大小: 17.1 KB
分享到:
评论
10 楼 willremember 2016-03-04  
问题出在模板上font-family和代码里不一致,解决啦。
9 楼 weinian_fighting 2015-07-09  
      
非常感谢楼主无私分享~~
8 楼 高军威 2014-08-05  
animo_itey 写道
SwordShadow 写道
各位出现问题的朋友,希望你们能够解决问题,不懂的可以去论坛提问,附件中有完整的代码,字体文件,导入myeclipse 可以直接使用的


楼主 我遇到一个问题 就是html比如一行文字很长 在html中可以换行
但是生成pdf后无法换行阿  。。。急求阿  8号上线 !

看看 这个吧 我们 项目也用到了,效果很不错,自己改写可以添加 页眉页脚 和第几页,自己 好好研究哦http://gaojunwei.iteye.com/blog/1996749
7 楼 animo_itey 2014-08-05  
SwordShadow 写道
各位出现问题的朋友,希望你们能够解决问题,不懂的可以去论坛提问,附件中有完整的代码,字体文件,导入myeclipse 可以直接使用的


楼主 我遇到一个问题 就是html比如一行文字很长 在html中可以换行
但是生成pdf后无法换行阿  。。。急求阿  8号上线 !
6 楼 SwordShadow 2014-08-04  
各位出现问题的朋友,希望你们能够解决问题,不懂的可以去论坛提问,附件中有完整的代码,字体文件,导入myeclipse 可以直接使用的
5 楼 animo_itey 2014-08-01  
博主 博主 博主 你在吗 ?
我遇到问题了 QQ 289224491 ! 能加一下么,我想相你咨询下.
4 楼 mbq820 2014-05-15  
楼主 为什么我的提示不支持该字体呢?
3 楼 高军威 2014-01-16  
SwordShadow 写道
高军威 写道
要是直接部署到外网,不知道直接引用字体这种能不能用,楼主有何见解啊


可以将字体文件放在外网服务器的某个文件夹内

我把字体的安装包放到项目中去,直接引用,不能用,好像是引用他安装后 的文件
2 楼 SwordShadow 2014-01-16  
高军威 写道
要是直接部署到外网,不知道直接引用字体这种能不能用,楼主有何见解啊


可以将字体文件放在外网服务器的某个文件夹内
1 楼 高军威 2014-01-16  
要是直接部署到外网,不知道直接引用字体这种能不能用,楼主有何见解啊

相关推荐

    itextpdf.zip(JavaPDF文件生成)

    JavaPDF文件生成是Java开发中一个重要的领域,主要用于创建、编辑和处理PDF文档。iTextPDF是一个流行的开源库,它提供了丰富的API...通过熟练掌握iTextPDF,开发者可以在Java应用程序中实现专业级的PDF生成和处理功能。

    itextpdf.zip

    - **事件和回调**:通过PdfWriter的事件监听机制,可以自定义PDF生成过程中的某些行为,如页眉页脚的添加。 - **版面布局**:使用ColumnText类实现多列布局,调整内容在页面上的排列方式。 - **XML到PDF转换**:...

    freemarker+itext生成PDF

    这篇博客 "freemarker+itext生成PDF" 可能详细介绍了如何结合这两者来生成PDF文件,这在报表生成、发票打印或任何需要静态化输出的场景中非常有用。 首先,让我们了解FreeMarker。FreeMarker是一个基于模板的语言,...

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

    在IT行业中,生成PDF文档是常见的需求,尤其是在Java开发中。Itext是一个广泛使用的库,它允许开发者方便地创建和编辑PDF文档。...同时,保持对PDF生成技术的深入理解和实践,是提高PDF文档质量的关键。

    itextpdf的相关jar包

    iTextPDF是iText项目的一部分,由iText Software Corp开发,它提供了丰富的API,使得开发人员可以轻松地进行PDF文档的生成、编辑和解析。iTextPDF-5.1.2.jar是这个库的一个版本,包含了核心功能,如创建PDF页面、...

    iText PDF pdf文档生成itext5.5.11.zip,itxt-asian5.20.jar,加水印,去水印代码,功能强大。

    1. iText 5.5.11:这是iText的一个稳定版本,包含了核心的PDF生成和操作功能。例如,你可以使用它来创建新的PDF文档,添加文本、图像、表格、链接等内容,也可以修改已有的PDF文档。iText5-itextpdf-5.5.11.jar是...

    itextpdf签章示例

    总结一下,iTextPDF提供了一套完整的解决方案来实现PDF签章功能。通过正确配置和使用相关依赖库,开发者可以轻松地在PDF文档上添加安全且合法的数字签名,从而确保文档的完整性和不可篡改性。在实际项目中,理解并...

    itext生成pdf所需的jar包

    在IT行业中,生成PDF文档是一项常见的任务,尤其在报表、发票和合同等场合。iText是一个流行的Java库,专门用于创建和修改PDF文档。...无论是小型项目还是大型企业应用,这种技术都能提供灵活和高效的PDF生成方案。

    利用poi+itextpdf进行word转pdf.rar

    在这个场景中,我们看到一个关于如何使用Java编程语言实现此功能的资源包:“利用poi+itextpdf进行word转pdf.rar”。这个压缩包包含源码、依赖库以及转换效果的示例,表明它提供了一种无需额外插件的解决方案。下面...

    itextpdf.rar

    但需要注意的是,虽然iTextPDF功能强大,但在处理大量数据或复杂布局时,性能可能会受到一定影响,这时可能需要优化代码或考虑其他解决方案,如PDFBox或Apache FOP。 总结来说,iTextPDF是Java开发中的PDF处理利器...

    itext-2.1.7源码包以及 解决iText生成pdf时中文标点存在行首问题的修改class

    综上所述,这个资源提供了解决iText在生成PDF时遇到的中文标点符号问题的解决方案,特别是通过修改`DefaultSplitCharacter`类。对于需要处理中文内容的开发者来说,这可能是一个重要的修复,可以避免因标点符号导致...

    itextpdf-5.4.3.jar.rar

    在IT行业中,生成和处理PDF文档是一项常见的任务,而iTextPDF库则为此提供了强大的支持。iTextPDF是一个开源Java库,专为创建、修改和管理PDF文档而设计。在这里,我们将深入探讨iTextPDF 5.4.3版本的功能、使用方法...

    itextpdf-5.5.13.jar,jacob.jar以及jacob.dll文件

    本资源提供的“itextpdf-5.5.13.jar”,“jacob.jar”以及“jacob.dll”文件是针对Java环境下的文件转PDF操作的重要组件。这些工具库允许开发者通过编程方式将不同类型的文件转换为PDF格式,从而实现自动化处理和...

    adobe pdf编辑器 java利用itextpdf根据模板导出pdf配套资源

    开发者可以根据实际需求,结合Adobe PDF编辑器的可视化编辑和iTextPDF的编程能力,实现各种自定义的PDF生成逻辑。 总之,Adobe PDF编辑器与Java的iTextPDF库结合,为企业提供了灵活且高效的PDF文档处理方案,无论是...

    itextpdf-5.5.5.jar.zip

    itext-5.5.5.jar主要用于基本的PDF生成,而itextpdf-5.5.5.jar则扩展了更多功能,如表格、列表、图像处理等,使其更适合复杂的PDF文档处理需求。 在Java项目中,将这两个JAR包导入到类路径(classpath)中,开发者...

    itext报表类库 柱形图,饼图,折线图

    在报表生成领域,iText 提供了丰富的功能,包括创建柱形图、饼图和折线图,使得开发者可以轻松地在PDF文档中嵌入各类图表,增强报告的可视化效果。 在使用iText进行报表制作时,柱形图、饼图和折线图是数据可视化的...

    PDF数字签名(ITEXT+keytool)

    PDF数字签名是确保PDF文档完整性和来源可信的重要技术,它基于公钥基础设施(PKI)。在本项目中,我们使用了Java的ITEXT库来处理...通过Java和ITEXT库,结合keytool工具,你可以构建这样的解决方案,确保PDF的安全性。

    itextpdf-5.5.13.1.tar.gz

    总的来说,iTextPDF 5.5.13.1提供了全面的PDF处理能力,适合那些需要在Java应用中生成、编辑或解析PDF的开发者。通过深入理解每个组件的功能,开发者可以构建出强大的PDF解决方案,无论是生成报表、创建符合PDF/A...

Global site tag (gtag.js) - Google Analytics