iText创建一个含有中文的pdf文档

有朋友问我pdfbox支不支持向pdf文档中写入中文。然后试了好多遍都是有乱码,也找了好多资料没有找到解决办法。

但是在查找资料的过程中发现了另一个处理pdf的开源库iText.官方介绍 http://itextpdf.com/

在这参考了两篇博客

博客1.pdfbox&iText生成PDF文件格式及读取PDF资料内容的小示例-完美支持中文版

博客2.iText生成pdf

iText的功能很强大,用起来也很灵活,我这里只是简单的了解了一下创建一个包含中文的pdf的方法。以后有时间在深入了解。

废话不多说,正题!

下载jar包,官网没找到o(╯□╰)o,jarfire上收录了一些jar包,下载jar包  我下载的是itext-2.0.6.jar.zip

上代码

 1 package pdf.itext;
 2 
 3 import java.awt.Color;
 4 import java.io.File;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 
 8 import com.lowagie.text.Document;
 9 import com.lowagie.text.DocumentException;
10 import com.lowagie.text.Font;
11 import com.lowagie.text.PageSize;
12 import com.lowagie.text.Paragraph;
13 import com.lowagie.text.Rectangle;
14 import com.lowagie.text.pdf.BaseFont;
15 import com.lowagie.text.pdf.PdfWriter;
16 
17 public class Handler {
18     private static String CHINESE_FONT = "SIMFANG.TTF";//仿宋字体,在C:/Windows/fonts里找的font文件放到src目录下,参见 博客1
19     public static final Rectangle PAGE_SIZE = PageSize.A4;
20     public static final float MARGIN_LEFT = 50;
21     public static final float MARGIN_RIGHT = 50;
22     public static final float MARGIN_TOP = 50;
23     public static final float MARGIN_BOTTOM = 50;
24     public static final float SPACING = 20;
25 
26     public static void  createPDF(String fileName,String content) throws DocumentException, IOException {
27         File file = new File(fileName);//生成的文件
28         FileOutputStream fout = new FileOutputStream(file);//输出流
29         Document document = new Document(PAGE_SIZE, MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM);//页面大小以及布局
30         PdfWriter.getInstance(document, fout);//将文档添加的输出流
31         document.open();//打开文档准备写入
32         BaseFont baseFont = BaseFont.createFont(CHINESE_FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//创建一个支持中文的字体
33         Font chinese = new Font(baseFont, 20, Font.BOLDITALIC, Color.red);//博客1里的BaseColor在我下载的jar包中没有就用java.awt.color代替了
34         document.add(new Paragraph(content, chinese));//写入内容      
35         document.close();//关闭文档
36     }
37     public static void main(String[] args) throws DocumentException, IOException {
38         createPDF("apdf.pdf", "正在使用iText创建一个包含中文的pdf文档!");
39     }
40 }

 

不同版本的jar包,差异应该还挺大的,我的代码中包结构还有方法等和博客1的差异比较大,和博客2的基本一致。
相关信息官网肯定,由于时间问题没有仔细查看。留后吧(*^__^*) 。

 写入内容 方法比较多,创建pdf也很具体详细,很灵活。

TO BE CONTINUED……

 

转载于:https://www.cnblogs.com/erbin/p/4163108.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万字长文 - 解读功能开关 | IDCF

原文:https://martinfowler.com/articles/feature-toggles.html作者:Pete Hodgson译者:冬哥功能开关Feature Toggle(通常也称为功能标志Feature Flag)是一种强大的技术,允许团队在不更改代码的情况下修改系…

linux c之gdb常用断点调试总结

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程 1 、安装GDB sudo apt-get install gdb 2 、怎么打断点 1 、源文件的某一行设置断点 break 行号 2、一个特定的函数设置断点 break 函数名 3、设置条件断点 break 行号 i…

2000多一件的大牌T恤,真实成本有多少?

▲ 点击查看喜大普奔,2021年度T恤大战总算是要在全国范围揭幕了。夏天的T恤永远不嫌多,基础款、印花款,从入春以来我们商城也陆陆续续上架了不少。但始终还有一些空白尚未填补,例如我们一直想给大家再找一些看起来上档次、穿起来显…

监控cacti中的RRDtool用法详解

RRDtool作为一个合格的运维工程师,监控技能必须是要掌握的,当然监控的软件很多很多(cacti,nagios,zabbix...)。而生产环境中一般只运用1、2种而已。所以全部掌握这些有点不靠谱。所以选择其中一种掌握之即可,当工作环境变化后还可以以之为跳板…

PHP学习第二天

今天,在昨天原有的代码基础上,经理讲述了一些新的东西,如果说昨天所讲的知识量是1,那么今天所讲的知识量便是3,其中还涉及到了一些变化,如将四个方格子变成一个居中的田字格。私以为,这便涉及到…

python生成静态库_使用boost.python静态库

编译脚本为:bjam stage toolsetmsvc linkstatic runtime-linkshared threadingmulti variantdebug,release --build-typecomplete --with-python注意这两个选项: linkstatic runtime-linkshared即:生成静态链接库,而运行时库链接C…

linux之使用indent格式化代码总结

1、介绍indent indent是一个整理代码的工具,不管你的代码写得多乱,你用indent工具都会把你的代码风格和linux 内核代码一致,基本上每个linux 发布都可以找到或者自己安装 sudo apt-get install indent 2、indent具体详细地址 比如在我的电脑上地址图片如下 所以地址在 /us…

cudaMalloc和cudaMallocPitch

原文链接 偶有兴趣测试了一下题目中提到的这两个函数,为了满足对齐访问数据,咱们平时可能会用到cudamallocPitch,以为它会带来更高的效率。呵呵,这里给出一段测试程序,大家可以在自己的机器上跑跑,你会发现…

使用 Dapr 缩短软件开发周期

Microsoft DevOps 文档里的文章(https://docs.microsoft.com/zh-cn/azure/devops/report/dashboards/cycle-time-and-lead-time?viewazure-devops)中的这张图片在给我们介绍了 什么是周期时间 以及它如何影响我的项目流时非常有影响力。第一次输入 &quo…

linux之写C代码出现warning: format not a string literal and no format arguments [-Wformat-security]

今天编写c语言代码的时候出现下面错误 解决办法: 把printf("length is %d" length);改成 printf("length is %d", length); 以后特么不要 像傻逼换这种错误,日来狗,写java代码写习惯了,不能动不动就是。

ppt变成了图片不能编辑文字怎么办_谁说水印一定要去掉?用到PPT里贼好看好吗!...

嗨,各位木友们好呀,我是小木。作为一个男生…我有一万个理由相信,很多人入坑PS,就是从“想要去除图片上的水印”开始的…不过,今天我不是来教大家怎么开车的…相反,我是要来教大家怎么在PPT里添加“水印”的…

网络化沟通及协作的人机交互编程语言-机器人语言2

对这于这编程语言,要把概念理清也不是件很容易的事情,先是想到叫云语言,就是一种可以聚合工作,社交,人机交互的语言,但是感觉不太明确,百度下有个云语言的百科,是个假大空的东西。 又…

补充一点地理知识(以洲来划分各个国家(240个))

一个博客上看到的,不错: http://statisticstimes.com/geography/countries-by-continents.php List of Countries by Continent This list is devised by the United Nations Statistics Division (UNSD) for statistical purpose. This is a list of 24…

Windows socket之最简单的socket程序

Windows socket之最简单的socket程序 原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用。 2. socket(); 获得一个socket。 3. bind(); 把获得的socket绑定到一个ip 和端口。既然作为服务…

开源与自由 | 商业自由:从边缘到核心贡献

文 | 肖滢策划 | h4cd出品 | OSC开源社区(ID:oschina2013)当我们谈论开源时,很少谈论自由,尽管开源与自由同行。从 1998 年开源兴起时,我们就无法把开源和自由分割开来。因为它孕育于自由软件运动&#xff…

表面上在帮女朋友拍照,其实镜头瞄准的是......

1 哈哈哈哈哈(素材来源网络,侵删)▼2 永远喝不完的牛奶(素材来源网络,侵删)▼3 我的电动车不见了(素材来源网络,侵删)▼4 这次的事就拜托了(素材来源网络&…

用递归实现字符数组的反转

用递归实现字符数组的反转 比如 char a[10] {a, b, c}; 用递归实现后打印为 ‘c’, b, a 代码实现&#xff1a; #include<stdio.h> #include<string.h>void reverse(int length, char a[]);int main(){char a[10] {a, b, c, d, e};int length strlen(a);reve…

pandas添加一行数据_恨晚,Python探索性数据分析神器pandas-profiling,一行代码搞定...

我们使用Pandas进行数据分析时&#xff0c;首先要先对数据集进行探索性数据分析(Exploratory data analysis)&#xff0c;以便有一个大体的了解&#xff0c;明确后续数据处理、分析方向&#xff0c;数据EDA大致包含如下内容&#xff1a;感知数据的直观表现 挖掘潜在的结构 提取…

建立简单的套接字

最近发现学计算机的真的要好好做笔记啊。。。前两天有个学长的聊天工具我是知道没有初始化套接字&#xff0c;可是一时竟然忘记了加载版本库的那几行代码&#xff0c;真是汗。。。硬是回来看自己的程序才知道。。。 今晚复习了一下套接字的建立 有服务端和客服端两个部分 服务端…