首页 > 编程知识 正文

itextpdf自动换页,pdf使用教程

时间:2023-05-05 07:24:04 阅读:27552 作者:3067

要随时随地阅读更多技术实战干货,获取项目源代码、学习资料,请关注源代码社区公众号(ydmsq666 )

由于pdf是一种非常好的阅读体验文件格式,因此实际项目中也经常涉及处理pdf文件。 以下系列介绍pdf文件操作的实战干货。 这里使用的是开源项目itextpdf。 我想很多人已经在使用了,itextpdf可以免费用于非商务用途。 这是一个非常强大的开源库。 官方地址: https://itextpdf.com,此处使用的是iText-5.0.6版本。

第一篇文章介绍了基本的使用步骤和常用的使用方法。 一般分为五个步骤。

一.需要创建文档实例。

有三种结构方法

公共文档(; 公共文档(恢复页面; 公共文档(rectangle pagesize,int marginLeft,int marginRight,int marginTop,int marginBottom ); 第一个构造函数以A4页为参数调用第二个构造函数,第二个构造函数以每边的36磅边距为参数调用第三个构造函数。

可以自定义页面的大小、颜色。 例如:

//大小rectangle pagesize=new rectangle (300,500 ); //背景色pagesize.setbackgroundcolor (new base color ) (0xFF,0xFF,0xDE ) ); //边框颜色pagesize.set border color (新基本颜色)0xFF、0xFF、0xDE ) ); 文档文档=新文档(pagesize; 但是,通常不需要我们设定。 系统有很多大小,在PageSize类下

我们最常用的是A4。 由于没有参数结构时是缺省使用的A4大小放置,因此通常不需要创建页面大小。 大多数情况下,我们使用的是纵向页面。 如果在特殊情况下需要使用横向页面,只需将其翻转即可

文档文档=new document (pagesize.a4.rotate (); 如果需要指定边距,也可以定义边距

文档文档=新文档(pagesize.a5,40,70,100,200 ); 毛利默认以磅为单位,默认毛利为36英镑。 关于与厘米、英寸等其他单位的换算,在此不详细说明。 注意,边距对整个文件有效,因此请小心使用,如果没有特别要求,请使用缺省边距。

在中,在第一步创建了一个Document实例,基本使用方法是这样做,然后进入下一步

二.创建Writer实例

由于是这里介绍的pdf,所以这里关于直接使用的DocWriter的实现类PdfWriter,常用的使用方法如下。

创建PdfWriter对象pdf writer writer=pdf writer.getinstance (document,newfileoutputstream ) outpath ); 第二个参数可以是任何流,但在此只是典型地使用。

也可以设定行距

//每行间隔writer.setinitialleading(30 ); 三.打开文档

在写入实际内容之前,通常需要设置文件的属性,如作者、标题和摘要。 直接输入以下代码:

//作者Document.addauthor('Feng ); //创建日期document.addCreationDate (; //创建关键字document.addKeywords (测试)//制造商并自动创建iTextdocument.addProducer (; //创建程序document.add creator (www.ydc 51.com); //标题document.addTitle ('测试标题); //主题document.add subject (测试在' pdf中创建的主题); 上面有详细的注释,所以不太说明

然后打开文档,一句代码

//文档document.open (; 四.增加内容

上面准备充分后,接下来添加实际内容。 在添加内容之前,需要理解字体。 这是内容的基础。 为了支持中文,需要对字体进行一些处理。 有三种方法可以支持中文。

1、使用Windows系统字体(TrueType ),引用Window系统附带的字体

//方式Windows系统字体(TrueType ) base 2 font base font=base font.create font ) ) c :/windows/fonts/simyou.TTF ),base

//方式2 :使用“资源字体”BaseFont baseFont=Base

Font.createFont("/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

3、使用iTextAsian.jar中的字体

// 方式三:使用iTextAsian.jar中的字体BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

在这个库中有很多字体可以使用,需要注意的是这里有一个坑,在itext5.x版本对font和encoding文件都是从 RESOURCE_PATH = “com/itextpdf/text/pdf/fonts/”加载的,而itextasian1.5.x.jar的包名是com.lowagie.text.pdf.fonts, 包名不一致,导致路径错误

这里可以将itextasian1.5.x.jar解压,找到里面itextasian1.5.x/com里的lowagie文件,将lowagie该名为:itextpdf

然后重新打包,网上有很多解决办法,这里随便贴一个地址:解决"STSong-Light' with 'UniGB-UCS2-H' is not recognized"问题_sanqima的专栏-CSDN博客_stsong-light-unigb-ucs2-h

好,使用上面其中任意一种作为基本字体就可以解决中文问题,然后我们可以对自己使用的字体进行一些设置颜色,字体大小、类型等等

Font font = new Font(baseFont);// 设置字体大小font.setSize(13);// 设置字体颜色font.setColor(new BaseColor(255, 0, 0));// 设置类型,为正常font.setStyle(Font.NORMAL);// 设置类型,加粗font.setStyle(Font.BOLD);// 设置类型,倾斜font.setStyle(Font.ITALIC);// 设置类型,下划线font.setStyle(Font.UNDERLINE);// 设置类型,可组合,倾斜+删除线font.setStyle(Font.ITALIC | Font.STRIKETHRU);

上面有非常详细的注释,到目前字体设置基本够用了

添加内容

Paragraph paragraph = new Paragraph(content, font);

Paragraph是段落,段落是一系列块和(或)短句。同短句一样,段落有确定的间距。用户还可以指定缩排;在边和(或)右边保留一定空白,段落可以左对齐、右对齐和居中对齐。添加到文档中的每一个段落将自动另起一行。

上面有提到一种块Chunk,块(Chunk)是能被添加到文档的文本的最小单位,块可以用于构建其他基础元素如短句、段落、锚点等,块是一个有确定字体的字符串,要添加块到文档中时,其他所有布局变量均要被定义。使用方法如下:

// 块Chunk chunk = new Chunk("语句块");// 设置字体,字体定宽chunk.setFont(font);// 设置背景颜色chunk.setBackground(new BaseColor(0xFF, 0xFF, 0x00));//使用块来构造段落Paragraph paragraph = new Paragraph(chunk);

Chunk还有一些常用作用,使用块来换行,设置上标下标

// 设置上标下标chunk.setTextRise(6f);// 使用Chunk换行document.add(Chunk.NEWLINE);

还有一种叫短句Phrase,短句(Phrases)是一系列以特定间距(两行之间的距离)作为参数的块,一个短句有一个主字体,但短句中的一些块具有不同于主字体的字体,你有更多的选择去创建短句,使用方式如下:

// 短句Phrase phrase = new Phrase(content);// 设置字体phrase.setFont(font);// 设置间距phrase.setLeading(30f);// 使用短句来构造段落Paragraph paragraph2 = new Paragraph(phrase);

段落还有个设置方法,作用是尽可能将一个段落放在同一页中,该方法并不是始终有效

// 试图将一个段落放在同一页中,该方法并不是始终有效paragraph.setKeepTogether(true);

那么,段落的构造就差不多了,然后就是将段落加载到Document中:

document.add(paragraph);

五、第五步就是关闭文档了,关闭 document 非常重要, 因为它将关闭正在运行的Writer并将内容写入文件,该方法在最后被调用,你应该总是要关闭文档。

// 关闭文档document.close();

到目前为止,itextpdf的最基本的使用讲解完了。

下面贴一个完整的简单例子

public static void createTextPDF(String outPath, String content) {// 创建文件及相关目录File file = FileUtil.createNewFile(outPath, true);if (!file.exists()) {logger.error("创建文件失败");return;}Document document = new Document();try {// 创建PdfWriter对象PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outPath));// 设置每行的间距writer.setInitialLeading(30);// 设置文档属性// 作者document.addAuthor("feng");// 创建日期document.addCreationDate();// 创建关键字document.addKeywords("测试");// 创建生产商,自动使用iTextdocument.addProducer();// 创建程序document.addCreator("www.ydc51.com");// 标题document.addTitle("测试标题");// 主题document.addSubject("测试PDF创建的主题");// 打开文档document.open();// 方式三:使用iTextAsian.jar中的字体BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font font = new Font(baseFont);// 设置字体大小font.setSize(13);// 设置字体颜色font.setColor(new BaseColor(255, 0, 0));// 设置类型,加粗font.setStyle(Font.BOLD);// 设置类型,倾斜font.setStyle(Font.ITALIC);// 设置类型,下划线font.setStyle(Font.UNDERLINE);// 设置类型,可组合,倾斜+删除线font.setStyle(Font.ITALIC | Font.STRIKETHRU);// 设置类型,为正常font.setStyle(Font.NORMAL);// 块Chunk chunk = new Chunk("下标");// 设置字体,字体定宽chunk.setFont(new Font(baseFont, 4));// 设置背景颜色chunk.setBackground(new BaseColor(0xFF, 0xFF, 0x00));// 设置上表下标chunk.setTextRise(-3f);Paragraph paragraph = new Paragraph(content, font);// 试图将一个段落放在同一页中,该方法并不是始终有效paragraph.setKeepTogether(true);paragraph.add(chunk);document.add(paragraph);// low levelPdfContentByte cb = writer.getDirectContent();cb.fill();cb.sanityCheck();} catch (Exception e) {logger.error("", e);} finally {// 关闭文档document.close();}}

效果图:

itextpdf还有很多高级功能的使用,后面将会给出,本文也会同步发表在源代码社区公众号上,想随时随地了解更多实战干货,请关注顶部的源代码社区公众号

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。