iText官网图.png

接下来让我们学习一下如何用iText库来基本丰富我们所需要的PDF文件吧!
注意:示例图片都是代码运行后截图所得,可能图片会偏大,那是因为缩放比例存在不一致,不用在意。


1,文件属性

这个示例是给我们的PDF文件设置文件属性,比如标题,主题,关键字等;

  1. public static void main(String[] args) {
  2. Document document = new Document();
  3. PdfWriter pdfWriter = null;
  4. try {
  5. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  6. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase1.pdf"));
  7. // 3,打开文档[打开作文本]
  8. document.open();
  9. // 3.1 设置文档属性[作文相关属性]
  10. // 标题
  11. document.addTitle("This is title");
  12. // 主题
  13. document.addSubject("This is subject");
  14. // 关键字
  15. document.addKeywords("Keywords");
  16. // 作者
  17. document.addAuthor("JiaDuoKu");
  18. // 应用程序
  19. document.addCreator("JiaDuoKu.com");
  20. // 生产者
  21. document.addProducer();
  22. // 创建时间
  23. document.addCreationDate();
  24. // 添加文档的头信息[方法addHeader对于PDF文档无效,addHeader仅对html文档有效,用于添加文档的头信息。]
  25. document.addHeader("Hello", "HelloHelloHelloHelloHello");
  26. // 4,写入内容[写字]
  27. document.add(new Paragraph("Hello World!"));
  28. // 5,关闭文档[写完收工]
  29. document.close();
  30. // 6,关闭书写器[放下笔]
  31. pdfWriter.close();
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }
  35. }

效果如下:
PDF文档属性截图.png


2,页面调整

页面调整,即给文档内容设置左右上下间距,方法很简单,Document对象有个有参构造,对应给上相应的值即可。

  1. public static void main(String[] args) {
  2. //Document document = new Document();
  3. // 给文档设置左右上下间距
  4. int marginLeft = 0;
  5. int marginRight = 0;
  6. int marginTop = 0;
  7. int marginBottom = 0;
  8. //参数:A4 纸张,左,右,上,下内容间距
  9. Document document = new Document(PageSize.A4, marginLeft, marginRight, marginTop, marginBottom);
  10. PdfWriter pdfWriter = null;
  11. try {
  12. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  13. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase2.pdf"));
  14. // 3,打开文档[打开作文本]
  15. document.open();
  16. // 4,写入内容[写字]
  17. document.add(new Paragraph("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
  18. document.add(new Paragraph("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"));
  19. // 5,关闭文档[写完收工]
  20. document.close();
  21. // 6,关闭书写器[放下笔]
  22. pdfWriter.close();
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }

效果如下:
页面调整.png


3,文本处理

文件那些基本设置好后,我们就可以真正的给PDF文件里新增内容了。
在此之前,我们先解决无法给PDF里添加中文的问题。

Tip1:解决无法给PDF文件添加中文问题

取自文章评论:https://blog.csdn.net/yizezhong/article/details/48005461

  1. // 方式一:使用Windows系统字体(TrueType)
  2. BaseFont baseFont =
  3. BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
  4. // 方式二:使用资源字体(ClassPath)
  5. BaseFont baseFont = BaseFont.createFont("/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
  6. // 方式三:使用iTextAsian.jar中的字体[下面有具体示例]
  7. BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

方式三:首先,在Maven中添加输出中文支持的itext-asian.jar包

  1. <dependency>
  2. <groupId>com.itextpdf</groupId>
  3. <artifactId>itext-asian</artifactId>
  4. <version>5.2.0</version>
  5. </dependency>

其次,定义一个基本字体BaseFont对象[示例中的字体来自依赖包/外部字体],再定义基本Font,并给段落对应属性赋值。如下:

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. Font baseFont = null;
  4. Font buleBoldFont = null;
  5. Document document = new Document();
  6. PdfWriter pdfWriter = null;
  7. try {
  8. // ***解决无法给PDF文件添加中文问题***
  9. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  10. // 默认字体
  11. baseFont = new Font(bfChinese, 15, Font.NORMAL);
  12. buleBoldFont = new Font(bfChinese, 11, Font.BOLD, BaseColor.BLUE);
  13. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  14. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase3.pdf"));
  15. // 3,打开文档[打开作文本]
  16. document.open();
  17. // 4,写入内容[写字]
  18. document.add(new Paragraph("haha中文输入进来了。", baseFont));
  19. // 5,关闭文档[写完收工]
  20. document.close();
  21. // 6,关闭书写器[放下笔]
  22. pdfWriter.close();
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }

效果如下:
中文问题.png

Tip2:Chunk,Phrase,Paragraph之间的关系

文本块(Chunk)是处理文本的最小单位,短语(Phrase)由一个或多个文本块(Chunk)组成,段落(Paragraph)由一个或多个文本块(Chunk)或短语(Phrase)组成。
Chunk < Phrase < Paragraph.

3.1,Chunk【文本块】

文本块(Chunk)是处理文本的最小单位,有一串带格式(包括字体、颜色、大小)的字符串组成。

3.1.1,单一文本块示例

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. Font baseFont = null;
  4. Document document = new Document();
  5. PdfWriter pdfWriter = null;
  6. try {
  7. // ***解决无法给PDF文件添加中文问题***
  8. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  9. // 默认字体
  10. baseFont = new Font(bfChinese, 15, Font.NORMAL);
  11. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  12. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase4.pdf"));
  13. // 3,打开文档[打开作文本]
  14. document.open();
  15. // 4,写入内容[写字]
  16. // 示例一:
  17. // 定义文本块对象
  18. Chunk chunk1 = new Chunk("我是第一个Chunk,啦啦啦啦");
  19. chunk1.setFont(baseFont);
  20. // 定义段落对象
  21. Paragraph paragraph1 = new Paragraph();
  22. // 把块添加到段落中
  23. paragraph1.add(chunk1);
  24. // 把段落内容写入文档
  25. document.add(paragraph1);
  26. // 5,关闭文档[写完收工]
  27. document.close();
  28. // 6,关闭书写器[放下笔]
  29. pdfWriter.close();
  30. } catch (Exception e) {
  31. e.printStackTrace();
  32. }
  33. }

效果如下:
单个Chunk.png

3.1.2,多个文本块【写法多种

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. Font baseFont = null;
  4. Document document = new Document();
  5. PdfWriter pdfWriter = null;
  6. try {
  7. // ***解决无法给PDF文件添加中文问题***
  8. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  9. // 默认字体
  10. baseFont = new Font(bfChinese, 15, Font.NORMAL);
  11. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  12. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase5.pdf"));
  13. // 3,打开文档[打开作文本]
  14. document.open();
  15. // 4,写入内容[写字]
  16. // 示例一:
  17. Chunk chunk1 = new Chunk("我是第一个Chunk,啦啦啦啦");
  18. chunk1.setCharacterSpacing(1);
  19. chunk1.setLineHeight(20);
  20. chunk1.setFont(baseFont);
  21. // 定义段落对象
  22. Paragraph paragraph2 = new Paragraph();
  23. paragraph2.add(chunk1);
  24. document.add(paragraph2);
  25. // 示例二:
  26. document.add(new Chunk("我是第二个Chunk,啦啦啦啦"));
  27. // 5,关闭文档[写完收工]
  28. document.close();
  29. // 6,关闭书写器[放下笔]
  30. pdfWriter.close();
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. }
  34. }

效果如下:
多个Chunk.png

3.2,Phrase【短语】

3.2.1,短语示例

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. Font baseFont = null;
  4. Document document = new Document();
  5. PdfWriter pdfWriter = null;
  6. try {
  7. // ***解决无法给PDF文件添加中文问题***
  8. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  9. // 默认字体
  10. baseFont = new Font(bfChinese, 15, Font.NORMAL);
  11. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  12. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase6.pdf"));
  13. // 3,打开文档[打开作文本]
  14. document.open();
  15. // 4,写入内容[写字]
  16. // 定义短语[注:这种方式新增]
  17. document.add(new Phrase("This is sentence 1. "));
  18. document.add(new Phrase("This is sentence 2. "));
  19. document.add(new Phrase("This is sentence 3. "));
  20. document.add(new Phrase("This is sentence 4. "));
  21. document.add(new Phrase("This is sentence 5. "));
  22. // 5,关闭文档[写完收工]
  23. document.close();
  24. // 6,关闭书写器[放下笔]
  25. pdfWriter.close();
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. }

效果如下:
单个Phrase.png

3.2.2,短语与文本块同用示例

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. Font baseFont = null;
  4. Document document = new Document();
  5. PdfWriter pdfWriter = null;
  6. try {
  7. // ***解决无法给PDF文件添加中文问题***
  8. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  9. // 默认字体
  10. baseFont = new Font(bfChinese, 15, Font.NORMAL);
  11. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  12. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase7.pdf"));
  13. // 3,打开文档[打开作文本]
  14. document.open();
  15. // 4,写入内容[写字]
  16. // 定义Chunk
  17. Chunk chunk = new Chunk("This is a Chunk.");
  18. // 定义短语
  19. Phrase phrase = new Phrase();
  20. // 添加短句
  21. phrase.add(chunk);
  22. phrase.add(chunk);
  23. phrase.add(chunk);
  24. phrase.add(chunk);
  25. phrase.add(chunk);
  26. phrase.add(chunk);
  27. // 把短语添加到文档中
  28. document.add(phrase);
  29. // 5,关闭文档[写完收工]
  30. document.close();
  31. // 6,关闭书写器[放下笔]
  32. pdfWriter.close();
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. }
  36. }

效果如下:
Phrase与Chunk同用.png

3.2.3,样式优先级问题

当Chunk对象已经设置了字体时,Phrase对象再设置字体的情况下,此时,Phrase设置的字体会对Chunk无效。

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. Font baseFont = null;
  4. Font buleBoldFont = null;
  5. Document document = new Document();
  6. PdfWriter pdfWriter = null;
  7. try {
  8. // ***解决无法给PDF文件添加中文问题***
  9. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  10. // 默认字体
  11. baseFont = new Font(bfChinese, 15, Font.NORMAL);
  12. // 蓝色加粗字体
  13. buleBoldFont = new Font(bfChinese, 11, Font.BOLD, BaseColor.BLUE);
  14. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  15. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase8.pdf"));
  16. // 3,打开文档[打开作文本]
  17. document.open();
  18. // 4,写入内容[写字]
  19. // 定义Chunk
  20. Chunk chunk = new Chunk("This is a buleBoldFont Chunk.");
  21. //给Chunk设置字体
  22. chunk.setFont(buleBoldFont);
  23. // 定义短语
  24. Phrase phrase = new Phrase();
  25. // 添加短句
  26. phrase.add("This is sentence 1. ");
  27. phrase.add(chunk);
  28. phrase.add("This is sentence 1. ");
  29. //给Phrase设置字体
  30. phrase.setFont(baseFont);
  31. // 把短语添加到文档中
  32. document.add(phrase);
  33. // 5,关闭文档[写完收工]
  34. document.close();
  35. // 6,关闭书写器[放下笔]
  36. pdfWriter.close();
  37. } catch (Exception e) {
  38. e.printStackTrace();
  39. }
  40. }

效果如下:
Phrase与Chunk优先级问题.png

3.3,Paragraph【段落】

参考文章:https://blog.csdn.net/yizezhong/article/details/48005461

3.3.1,段落示例

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. Font baseFont = null;
  4. Font buleBoldFont = null;
  5. Document document = new Document();
  6. PdfWriter pdfWriter = null;
  7. try {
  8. // ***解决无法给PDF文件添加中文问题***
  9. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  10. // 默认字体
  11. baseFont = new Font(bfChinese, 15, Font.NORMAL);
  12. buleBoldFont = new Font(bfChinese, 11, Font.BOLD, BaseColor.BLUE);
  13. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  14. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase9.pdf"));
  15. // 3,打开文档[打开作文本]
  16. document.open();
  17. // 4,写入内容[写字]
  18. //段落活用
  19. Paragraph paragraph1 = new Paragraph("The Paragraph is No.1.", baseFont);
  20. document.add(paragraph1);
  21. //此处的50,为该Paragraph与上一行的间距
  22. Paragraph paragraph2 = new Paragraph(50,"The Paragraph is No.2.", baseFont);
  23. document.add(paragraph2);
  24. Paragraph paragraph3 = new Paragraph("The Paragraph is No.3.", baseFont);
  25. document.add(paragraph3);
  26. Paragraph paragraph4 = new Paragraph(50,"The Paragraph is No.4.", baseFont);
  27. document.add(paragraph4);
  28. // 5,关闭文档[写完收工]
  29. document.close();
  30. // 6,关闭书写器[放下笔]
  31. pdfWriter.close();
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }
  35. }

效果如下:
Paragraph示例.png

3.3.2,段落其他属性设置

3.3.2.1,设置段落之间的间距

  1. Paragraph paragraph5 = new Paragraph("The Paragraph is No.5.");
  2. //设置段落的上下间距
  3. paragraph5.setSpacingBefore(20);
  4. paragraph5.setSpacingAfter(20);
  5. document.add(paragraph5);

3.3.2.2,设置段落左右缩进

  1. Paragraph paragraph6 = new Paragraph("The Paragraph is No.6.");
  2. //设置段落的上下间距
  3. paragraph6.setIndentationLeft(30);
  4. paragraph6.setIndentationRight(30);
  5. //对指定段落的进一步缩进
  6. paragraph6.setFirstLineIndent(50);
  7. document.add(paragraph6);

3.3.2.2,设置段落的对齐方式

  1. //居左
  2. paragraph.setAlignment(Element.ALIGN_LEFT);
  3. //居中
  4. paragraph.setAlignment(Element.ALIGN_CENTER);
  5. //居右
  6. paragraph.setAlignment(Element.ALIGN_RIGHT);

3.4,Chapter【章节】

参考文章:http://www.itkeyword.com/doc/7243119081081445191/chapter-itext-pdfsection

3.4.1,章节示例

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. Font baseFont = null;
  4. Font buleBoldFont = null;
  5. Document document = new Document();
  6. PdfWriter pdfWriter = null;
  7. try {
  8. // ***解决无法给PDF文件添加中文问题***
  9. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  10. // 默认字体
  11. baseFont = new Font(bfChinese, 15, Font.NORMAL);
  12. buleBoldFont = new Font(bfChinese, 11, Font.BOLD, BaseColor.BLUE);
  13. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  14. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase11.pdf"));
  15. // 3,打开文档[打开作文本]
  16. document.open();
  17. // 4,写入内容[写字]
  18. // 定义段落对象
  19. Paragraph paragraph1 = new Paragraph("The Paragraph is No.1.", baseFont);
  20. // 定义章节对象,1 表示级别
  21. Chapter chapter1 = new Chapter(paragraph1, 1);
  22. // 定义章节内容,
  23. //写法1
  24. chapter1.addSection("This is a section 1.");
  25. //写法2
  26. Section section2 = chapter1.addSection("This is a section 2.");
  27. //写法3,此处的2表示级别,其他的自测
  28. chapter1.addSection("This is a section 3.", 2);
  29. document.add(chapter1);
  30. // 5,关闭文档[写完收工]
  31. document.close();
  32. // 6,关闭书写器[放下笔]
  33. pdfWriter.close();
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }

效果如下:
Chapter示例.png

3.4.2,多个章节示例

文档添加俩个章节时,会形成新的章节,即相当于写作文时,这面写完,换面写。

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. Font baseFont = null;
  4. Font buleBoldFont = null;
  5. Document document = new Document();
  6. PdfWriter pdfWriter = null;
  7. try {
  8. // ***解决无法给PDF文件添加中文问题***
  9. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  10. // 默认字体
  11. baseFont = new Font(bfChinese, 15, Font.NORMAL);
  12. buleBoldFont = new Font(bfChinese, 11, Font.BOLD, BaseColor.BLUE);
  13. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  14. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase12.pdf"));
  15. // 3,打开文档[打开作文本]
  16. document.open();
  17. // 4,写入内容[写字]
  18. // 定义段落对象
  19. Paragraph paragraph1 = new Paragraph("The Paragraph is No.1.", baseFont);
  20. // 定义章节对象,1 表示级别
  21. Chapter chapter1 = new Chapter(paragraph1, 1);
  22. // 定义章节内容,
  23. //写法1
  24. chapter1.addSection("This is a section 1.");
  25. //写法2
  26. chapter1.addSection("This is a section 2.");
  27. //把章节添加到文档中
  28. document.add(chapter1);
  29. // 定义段落对象
  30. Paragraph paragraph2 = new Paragraph("The Paragraph is No.2.", baseFont);
  31. // 定义章节对象,1 表示级别
  32. Chapter chapter2 = new Chapter(paragraph2, 1);
  33. // 定义章节内容,
  34. //写法1
  35. chapter2.addSection("This is a section 1.");
  36. //写法2
  37. chapter2.addSection("This is a section 2.");
  38. //把章节添加到文档中
  39. document.add(chapter2);
  40. // 5,关闭文档[写完收工]
  41. document.close();
  42. // 6,关闭书写器[放下笔]
  43. pdfWriter.close();
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. }

效果如下:
Chapter多个示例.png

3.5,Font【字体】

3.5.1,字体示例

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. // Font baseFont = null;
  4. // Font buleBoldFont = null;
  5. Document document = new Document();
  6. PdfWriter pdfWriter = null;
  7. try {
  8. // ***解决无法给PDF文件添加中文问题***
  9. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  10. // // 默认字体
  11. // baseFont = new Font(bfChinese, 15, Font.NORMAL);
  12. // //蓝色加粗字体样式
  13. // buleBoldFont = new Font(bfChinese, 15, Font.BOLD, BaseColor.BLUE);
  14. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  15. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase14.pdf"));
  16. // 3,打开文档[打开作文本]
  17. document.open();
  18. // 4,写入内容[写字]
  19. // Font 字体[常用]
  20. // 默认字体[bfChinese:基本/外部字体,15:字体大小size,Font.NORMAL:字体样式]
  21. Font baseFont = new Font(bfChinese, 15, Font.NORMAL);
  22. Paragraph paragraph1 = new Paragraph("默认字体", baseFont);
  23. document.add(paragraph1);
  24. // 下划线字体
  25. Font underlineFont = new Font(bfChinese, 15, Font.UNDERLINE);
  26. Paragraph paragraph2 = new Paragraph("下划线字体", underlineFont);
  27. document.add(paragraph2);
  28. // 加粗字体
  29. Font boldFont = new Font(bfChinese, 15, Font.BOLD);
  30. Paragraph paragraph3 = new Paragraph("加粗字体", boldFont);
  31. document.add(paragraph3);
  32. // 字体加颜色
  33. Font colorFont = new Font(bfChinese, 15, Font.NORMAL, BaseColor.BLUE);
  34. Paragraph paragraph4 = new Paragraph("加了颜色的字体", colorFont);
  35. document.add(paragraph4);
  36. // 字体加粗,加颜色
  37. Font colorFont2 = new Font(bfChinese, 15, Font.BOLD, BaseColor.RED);
  38. Paragraph paragraph7 = new Paragraph("加了颜色,加粗的字体", colorFont2);
  39. document.add(paragraph7);
  40. // 5,关闭文档[写完收工]
  41. document.close();
  42. // 6,关闭书写器[放下笔]
  43. pdfWriter.close();
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. }

效果如下:
Fon基本示例.png

3.6,Anchor【超链接】

3.6.1,跳转到外部站点

3.6.1,跳转到文档的特定位置

示例代码:

  1. public static void main(String[] args) {
  2. BaseFont bfChinese = null;
  3. Font baseFont = null;
  4. // Font buleBoldFont = null;
  5. Document document = new Document();
  6. PdfWriter pdfWriter = null;
  7. try {
  8. // ***解决无法给PDF文件添加中文问题***
  9. bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  10. // 默认字体
  11. baseFont = new Font(bfChinese, 15, Font.NORMAL);
  12. // //蓝色加粗字体样式
  13. // buleBoldFont = new Font(bfChinese, 15, Font.BOLD, BaseColor.BLUE);
  14. // 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
  15. pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("E:/PDFDemo/demo/pdfBase15.pdf"));
  16. // 3,打开文档[打开作文本]
  17. document.open();
  18. // 4,写入内容[写字]
  19. // 定义Anchor对象
  20. // 1,跳转到外部站点,只需要设置Reference属性即可
  21. Anchor anchor1 = new Anchor("跳转到百度页。\n", baseFont);
  22. anchor1.setReference("https://www.baidu.com");
  23. document.add(anchor1);
  24. // 2,跳转到文档的特定位置,先创建Anchor对象,并给属性name赋值,
  25. Anchor anchor2 = new Anchor("About Us!!!");
  26. // 这个是点击后跳转到的位置
  27. anchor2.setName("aboutUs");
  28. document.add(anchor2);
  29. // 循环新增段落
  30. for (int i = 0; i < 100; i++) {
  31. document.add(new Paragraph("This is " + i + " line."));
  32. }
  33. // 设置需要触发点击的位置,点击后跳转到文档指定位置
  34. Anchor anchor3 = new Anchor("goTop!!!");
  35. anchor3.setReference("#aboutUs");
  36. document.add(anchor3);
  37. // 5,关闭文档[写完收工]
  38. document.close();
  39. // 6,关闭书写器[放下笔]
  40. pdfWriter.close();
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }
  44. }

效果如下【自测效果更佳】:
Anchor示例.png

4,小结

该文章内容为本人所作,之前在做PDF生成这块时,发现很多资料都比较零散,于是我汇集了一些其他文章的内容加上自己的理解,尽量写得很详细,方便大家学习。如有不足之处,还望指出!