Java操作pdf的工具类itext的处理方法

作者:哪吒 时间:2023-07-14 11:51:53 

一、什么是iText?

在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题。

二、引入jar

1、项目要使用iText,必须引入jar包

<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.6</version>
</dependency>

2、输出中文,还要引入下面itext-asian.jar

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>

3、设置pdf文件密码,还要引入下面bcprov-jdk15on.jar

<dependency>
   <groupId>org.bouncycastle</groupId>
   <artifactId>bcprov-jdk15on</artifactId>
   <version>1.47</version>
</dependency>

三、iText常用类

  • com.itextpdf.text.Document:这是iText库中最常用的类,它代表了一个 pdf 实例。如果你需要从零开始生成一个pdf文件,你需要使用这个Document类。首先创建该实例,然后打开它,并添加内容,最后关闭该实例,即可生成一个pdf文件。

  • com.itextpdf.text.Paragraph:表示一个缩进的文本段落,在段落中,你可以设置对齐方式,缩进,段落前后间隔等

  • com.itextpdf.text.Chapter:表示 pdf 的一个章节,他通过一个Paragraph类型的标题和整形章数创建

  • com.itextpdf.text.Font:这个类包含了所有规范好的字体,包括family of font,大小,样式和颜色,所有这些字体都被声明为静态常量

  • com.itextpdf.text.List:表示一个列表;com.itextpdf.text.Anchor:表示一个锚,类似于HTML页面的链接。

  • com.itextpdf.text.pdf.PdfWriter:当这个PdfWriter被添加到PdfDocument后,所有添加到Document的内容将会写入到与文件或网络关联的输出流中。

  • com.itextpdf.text.pdf.PdfReader:用于读取 pdf 文件;

四、生成PDF步骤

1、创建文档

Document document = new Document();

2、通过书写器将文档写入磁盘

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFWithColor.pdf"));

3、打开文档

document.open();

4、向文档中添加内容

document.add(new Paragraph("i love CSDN"));

5、关闭文档

document.close();

五、Java操作pdf的工具类itext

package com.neusoft.guor.itext;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfAction;
import com.itextpdf.text.pdf.PdfAnnotation;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfName;
import com.itextpdf.text.pdf.PdfOutline;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfString;
import com.itextpdf.text.pdf.PdfTransition;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.draw.DottedLineSeparator;
import com.itextpdf.text.pdf.draw.LineSeparator;
import com.itextpdf.text.pdf.draw.VerticalPositionMark;
/**
* itext PDF操作
*/
public class PDFInit {
   public static final String FILE_DIR = "E:\\guor\\itext\\";
   public static final String const_JPG_JAVA = FILE_DIR + "java.jpg";
   public static final String const_JPG_NGINX = FILE_DIR + "nginx.jpg";
   private static final String const_NEZHA = "哪吒编程";
   private static final String const_NEZHA_PROGRAM = "获取Java学习资料请关注公众号:哪吒编程";
   private static final String const_BIBIDONG = "比比东";
   private static final String const_YUNYUN = "云韵";
   private static final String const_BAIDU = "百度一下 你就知道";
   private static final String const_BAIDU_URL = "https://www.baidu.com";
   private static final String const_PAGE_FIRST = "第一页";
   private static final String const_PAGE_SECOND = "第二页";
   private static final String const_PAGE_THIRD = "第三页";
   private static final String const_PAGE_FOUR = "第四页";
   private static final String const_PAGE_FIVE = "第五页";
   private static final String const_TITLE_FIRST = "一级标题";
   private static final String const_TITLE_SECOND = "二级标题";
   private static final String const_CONTENT = "内容";
   // 普通中文字体
   public static Font static_FONT_CHINESE = null;
   // 超链字体
   public static Font static_FONT_LINK = null;
   private static void pdfFontInit() throws IOException, DocumentException {
       // 微软雅黑
       BaseFont chinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
       // 普通中文字体
       static_FONT_CHINESE = new Font(chinese, 12, Font.NORMAL);// Font.BOLD为加粗
       // 超链字体
       static_FONT_LINK = new Font(chinese, 12, Font.NORMAL, BaseColor.BLUE);
   }
   public static Document document;
   public static void main(String[] args) throws Exception {
       pdfFontInit();
       //createPDF();// 生成一个 PDF 文件
       //createPDFWithColor();// 设置PDF的页面大小和背景颜色
       //createPDFWithPassWord();// 创建带密码的PDF
       //createPDFWithNewPages();// 为PDF添加页
       //createPDFWithWaterMark();// 为PDF文件添加水印,背景图
       //createPDFWithContent();//插入块Chunk, 内容Phrase, 段落Paragraph, List
       //createPDFWithExtraContent();//插入Anchor, Image, Chapter, Section
       //draw();//画图
       //createPDFWithAlignment();//设置段落
       //createPDFToDeletePage();//删除 page
       //insertPage();// 插入 page
       //splitPDF();//分割 page
       //mergePDF();// 合并 PDF 文件
       //sortpage();// 排序page
       //setHeaderFooter();// 页眉,页脚
       //addColumnText();// 左右文字
       //setView();// 文档视图
       //pdfToZip();// 压缩PDF到Zip
       addAnnotation();// 注释
   /**
    * 创建一个 PDF 文件,并添加文本
    */
   public static void createPDF() throws IOException, DocumentException {
       // 实例化 document
       document = new Document();
       // 生成文件
       String path = FILE_DIR + "createPDF.pdf";
       File file = new File(path);
       if(!file.exists()){
           file.createNewFile();
       }
       PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDF.pdf"));
       // 打开 document
       document.open();
       // 添加文本 此处无法写入中文 TODO
       document.add(new Paragraph(const_NEZHA));
       document.add(new Paragraph(const_NEZHA, static_FONT_CHINESE));
       // 关闭 document
       document.close();
    * 创建PDF文件,修改文件的属性
   public static void createPDFWithColor() throws FileNotFoundException, DocumentException {
       // 页面大小
       Rectangle rect = new Rectangle(PageSize.A5.rotate());
       // 页面背景色
       rect.setBackgroundColor(BaseColor.YELLOW);
       document = new Document(rect);
       PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFWithColor.pdf"));
       // PDF版本(默认1.4)
       writer.setPdfVersion(PdfWriter.VERSION_1_6);
       // 文档属性
       document.addAuthor(const_NEZHA);
       document.addTitle("我的第一个pdf");
       // 页边空白
       document.setMargins(10, 10, 10, 10);
       // 打开
       // 关闭
    * 创建带密码的PDF
   public static void createPDFWithPassWord() throws FileNotFoundException, DocumentException {
       PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFWithPassWord.pdf"));
       // userPassword打开密码:"123"
       // ownerPassword编辑密码: "123456"
       writer.setEncryption("123".getBytes(), "123456".getBytes(), PdfWriter.ALLOW_SCREENREADERS, PdfWriter.STANDARD_ENCRYPTION_128);
    * 为PDF添加页
   public static void createPDFWithNewPages() throws FileNotFoundException, DocumentException {
       PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFAddNewPages.pdf"));
       document.add(new Paragraph(const_PAGE_FIRST, static_FONT_CHINESE));
       document.newPage();
       document.add(new Paragraph(const_PAGE_SECOND, static_FONT_CHINESE));
       writer.setPageEmpty(true);
       document.add(new Paragraph(const_PAGE_THIRD, static_FONT_CHINESE));
    * 为PDF文件添加水印,背景图
   public static void createPDFWithWaterMark() throws IOException, DocumentException {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFWithWaterMark.pdf");
       PdfWriter.getInstance(document, out);
       // 图片水印
       PdfReader reader = new PdfReader(FILE_DIR + "createPDFWithWaterMark.pdf");
       PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR + "createPDFWithWaterMark2.pdf"));
       Image img = Image.getInstance(const_JPG_JAVA);
       img.setAbsolutePosition(200, 200);
       PdfContentByte under = stamp.getUnderContent(1);
       under.addImage(img);
       // 文字水印
       PdfContentByte over = stamp.getOverContent(2);
       // 加载字库来完成对字体的创建
       BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
       over.beginText();
       // 设置颜色 默认为蓝色
       over.setColorFill(BaseColor.RED);
       // 设置字体字号
       over.setFontAndSize(bf, 50);
       // 设置起始位置
       over.setTextMatrix(30, 30);
       // 开始写入水印 左-下-倾斜度
       over.showTextAligned(Element.ALIGN_LEFT, "nezha", 245, 400, 30);
       over.endText();
       // 背景图
       Image img2 = Image.getInstance(const_JPG_NGINX);
       img2.setAbsolutePosition(0, 0);
       PdfContentByte under2 = stamp.getUnderContent(3);
       under2.addImage(img2);
       stamp.close();
       reader.close();
    * 插入Chunk, Phrase, Paragraph, List
    * Chunk : 块,PDF文档中描述的最小原子元素
    * Phrase : 短语,Chunk的集合
    * Paragraph : 段落,一个有序的Phrase集合
   public static void createPDFWithContent() throws DocumentException, FileNotFoundException {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFWithContent.pdf");
       // 添加块
       document.add(new Chunk(const_NEZHA, static_FONT_CHINESE));
       Font font = new Font(Font.FontFamily.HELVETICA, 8, Font.BOLD, BaseColor.WHITE);
       Chunk id = new Chunk("springboot", font);
       id.setBackground(BaseColor.BLACK, 1f, 0.5f, 1f, 1.5f);
       id.setTextRise(7);
       document.add(id);
       Font font2 = new Font(Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE);
       Chunk id2 = new Chunk("springcloud", font2);
       id2.setBackground(BaseColor.BLACK, 1f, 0.5f, 1f, 1.5f);
       id2.setTextRise(3);
       id2.setUnderline(0.2f, -2f);
       document.add(id2);
       document.add(Chunk.NEWLINE);
       // 添加一页,添加短语
       document.add(new Phrase("Phrase page"));
       // 添加短语
       Phrase director = new Phrase();
       Chunk name = new Chunk(const_BIBIDONG, static_FONT_CHINESE);
       // 添加下划线(thickness:下划线的粗细,yPosition:下划线离字的距离)
       name.setUnderline(0.5f, -1f);
       director.add(name);
       director.add(new Chunk(","));
       director.add(new Chunk(" "));
       director.add(new Chunk(const_YUNYUN, static_FONT_CHINESE));
       director.setLeading(24);
       document.add(director);
       // 添加一页
       Phrase director2 = new Phrase();
       Chunk name2 = new Chunk(const_BIBIDONG, static_FONT_CHINESE);
       name2.setUnderline(0.2f, -2f);
       director2.add(name2);
       director2.add(new Chunk(","));
       director2.add(new Chunk(" "));
       director2.add(new Chunk(const_YUNYUN, static_FONT_CHINESE));
       director2.setLeading(24);
       document.add(director2);
       // 添加段落
       document.add(new Paragraph("Paragraph page"));
       Paragraph info = new Paragraph();
       info.add(new Chunk(const_NEZHA));
       info.add(new Chunk(const_BIBIDONG));
       info.add(Chunk.NEWLINE);
       info.add(new Phrase(const_NEZHA));
       document.add(info);
       // 通过循环添加段落信息
       List list = new List(List.ORDERED);
       for (int i = 0; i < 5; i++) {
           ListItem item = new ListItem(String.format("%s: %d "+const_NEZHA, const_YUNYUN + (i + 1), (i + 1) * 100), new Font(Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE));
           List girllist = new List(List.ORDERED, List.ALPHABETICAL);
           girllist.setLowercase(List.LOWERCASE);
           for (int j = 0; j < 3; j++) {
               ListItem girlitem = new ListItem("girls" + (j + 1));
               List rolelist = new List(List.UNORDERED);
               for (int k = 0; k < 2; k++) {
                   rolelist.add(String.format("%s, %s", const_NEZHA + (k + 1), const_BIBIDONG + (k + 1)));
               }
               girlitem.add(rolelist);
               girllist.add(girlitem);
           }
           item.add(girllist);
           list.add(item);
       document.add(list);
    * 插入锚Anchor, Image, 章节Chapter, 子列表Section
   public static void createPDFWithExtraContent() throws DocumentException, MalformedURLException, IOException {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFWithExtraContent.pdf");
       String content = "you can get anything from : ";
       Paragraph paragraph = new Paragraph(content);
       // 创建一个链接到外部网站的新锚点
       // 并将此锚点添加到段落中。
       Anchor anchor = new Anchor(const_BAIDU, static_FONT_LINK);
       anchor.setReference(const_BAIDU_URL);
       paragraph.add(anchor);
       document.add(paragraph);
       // Image对象
       Image img = Image.getInstance(const_JPG_NGINX);
       img.setAlignment(Image.LEFT | Image.TEXTWRAP);
       img.setBorder(Image.BOX);
       img.setBorderWidth(10);
       img.setBorderColor(BaseColor.WHITE);
       img.scaleToFit(800, 50);// 大小
       img.setRotationDegrees(-50);// 旋转
       document.add(img);
       // 章节Chapter -- 目录
       Paragraph title = new Paragraph(const_TITLE_FIRST,static_FONT_CHINESE);
       // 标题和序号
       Chapter chapter = new Chapter(title, 1);
       // 子列表Section
       title = new Paragraph(const_TITLE_SECOND,static_FONT_CHINESE);
       Section section = chapter.addSection(title);
       section.setBookmarkTitle(const_NEZHA);
       section.setIndentation(10);
       section.setBookmarkOpen(false);
       section.setNumberStyle(Section.NUMBERSTYLE_DOTTED_WITHOUT_FINAL_DOT);
       Section subsection1 = section.addSection(new Paragraph(const_CONTENT,static_FONT_CHINESE));
       subsection1.setIndentationLeft(10);
       subsection1.setNumberDepth(1);
       document.add(chapter);
    * 画图
   public static void draw() throws Exception {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "draw.pdf");
       // 左右箭头
       document.add(new VerticalPositionMark() {
           public void draw(PdfContentByte canvas, float llx, float lly, float urx, float ury, float y) {
           canvas.beginText();
           BaseFont bf = null;
           try {
               bf = BaseFont.createFont(BaseFont.ZAPFDINGBATS, "", BaseFont.EMBEDDED);
           } catch (Exception e) {
               e.printStackTrace();
           canvas.setFontAndSize(bf, 12);
           // LEFT
           canvas.showTextAligned(Element.ALIGN_CENTER, String.valueOf((char) 220), llx - 10, y, 0);
           // RIGHT
           canvas.showTextAligned(Element.ALIGN_CENTER, String.valueOf((char) 220), urx + 10, y + 8, 180);
           canvas.endText();
       });
       // 直线
       Paragraph p1 = new Paragraph(const_NEZHA ,static_FONT_CHINESE);
       p1.add(new Chunk(new LineSeparator()));
       p1.add(const_BIBIDONG);
       document.add(p1);
       // 点线
       Paragraph p2 = new Paragraph(const_NEZHA ,static_FONT_CHINESE);
       p2.add(new Chunk(new DottedLineSeparator()));
       p2.add(const_BIBIDONG);
       document.add(p2);
       // 下滑线
       LineSeparator UNDERLINE = new LineSeparator(1, 100, null, Element.ALIGN_CENTER, -2);
       Paragraph p3 = new Paragraph(const_NEZHA_PROGRAM ,static_FONT_CHINESE);
       p3.add(UNDERLINE);
       document.add(p3);
    * 设置段落
   public static void createPDFWithAlignment() throws Exception {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFWithAlignment.pdf");
       Paragraph p = new Paragraph("Never frown, even when you are sad, because you never know who is falling in love with your smile;" +
               "You will see exactly what life is worth, when all the rest has gone;" +
               "It is very simple to be happy, but it is very difficult to be simple.");
       // 默认
       p.setAlignment(Element.ALIGN_JUSTIFIED);
       document.add(p);
       // 慢慢的向右移动
       p.setIndentationLeft(1 * 15f);
       p.setIndentationRight((5 - 1) * 15f);
       // 居右
       p.setAlignment(Element.ALIGN_RIGHT);
       p.setSpacingAfter(15f);
       // 居左
       p.setAlignment(Element.ALIGN_LEFT);
       p.setSpacingBefore(15f);
       // 居中
       p.setAlignment(Element.ALIGN_CENTER);
    * 删除页
   public static void createPDFToDeletePage() throws Exception {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFToDeletePage.pdf");
       PdfWriter writer = PdfWriter.getInstance(document, out);
       PdfReader reader = new PdfReader(FILE_DIR + "createPDFToDeletePage.pdf");
       reader.selectPages("1,3");
       PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR + "createPDFToDeletePage2.pdf"));
    * 插入 page
   public static void insertPage() throws Exception {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "insertPage.pdf");
       PdfReader reader = new PdfReader(FILE_DIR + "insertPage.pdf");
       PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR + "insertPage2.pdf"));
       stamp.insertPage(2, reader.getPageSize(1));
       ColumnText ct = new ColumnText(null);
       ct.addElement(new Paragraph(24, new Chunk("INSERT PAGE")));
       ct.setCanvas(stamp.getOverContent(2));
       ct.setSimpleColumn(36, 36, 559, 770);
    * 分割 page
   public static void splitPDF() throws Exception {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "splitPDF.pdf");
       document.add(new Paragraph(const_PAGE_FOUR, static_FONT_CHINESE));
       PdfReader reader = new PdfReader(FILE_DIR + "splitPDF.pdf");
       Document dd = new Document();
       PdfWriter writer = PdfWriter.getInstance(dd, new FileOutputStream(FILE_DIR + "splitPDF1.pdf"));
       dd.open();
       PdfContentByte cb = writer.getDirectContent();
       dd.newPage();
       cb.addTemplate(writer.getImportedPage(reader, 1), 0, 0);
       cb.addTemplate(writer.getImportedPage(reader, 2), 0, 0);
       dd.close();
       writer.close();
       Document dd2 = new Document();
       PdfWriter writer2 = PdfWriter.getInstance(dd2, new FileOutputStream(FILE_DIR + "splitPDF2.pdf"));
       dd2.open();
       PdfContentByte cb2 = writer2.getDirectContent();
       dd2.newPage();
       cb2.addTemplate(writer2.getImportedPage(reader, 3), 0, 0);
       cb2.addTemplate(writer2.getImportedPage(reader, 4), 0, 0);
       dd2.close();
       writer2.close();
    * 合并 PDF 文件
   public static void mergePDF() throws Exception {
       PdfReader reader1 = new PdfReader(FILE_DIR + "splitPDF1.pdf");
       PdfReader reader2 = new PdfReader(FILE_DIR + "splitPDF2.pdf");
       FileOutputStream out = new FileOutputStream(FILE_DIR + "mergePDF.pdf");
       Document document = new Document();
       java.util.List<PdfReader> readers = new ArrayList<PdfReader>();
       readers.add(reader1);
       readers.add(reader2);
       int pageOfCurrentReaderPDF = 0;
       Iterator<PdfReader> iteratorPDFReader = readers.iterator();
       while (iteratorPDFReader.hasNext()) {
           PdfReader pdfReader = iteratorPDFReader.next();
           // 在目标中为每个源页面创建一个新页面
           while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
               document.newPage();
               pageOfCurrentReaderPDF++;
               PdfImportedPage page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
               cb.addTemplate(page, 0, 0);
           pageOfCurrentReaderPDF = 0;
       out.flush();
       out.close();
    * 排序page
   public static void sortpage() throws Exception {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "sortpage.pdf");
       writer.setLinearPageMode();
       document.add(new Paragraph(const_PAGE_FIVE, static_FONT_CHINESE));
       int[] order = { 4, 3, 2, 1 };
       writer.reorderPages(order);
    * 页眉页脚
   public static void setHeaderFooter() throws Exception {
       PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "setHeaderFooter.pdf"));
       writer.setPageEvent(new PdfPageEventHelper() {
           public void onEndPage(PdfWriter writer, Document document) {
               PdfContentByte cb = writer.getDirectContent();
               cb.saveState();
               cb.beginText();
               BaseFont bf = null;
               try {
                   bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
               } catch (Exception e) {
                   e.printStackTrace();
               cb.setFontAndSize(bf, 10);
               // Header
               float x = document.top(-20);
               // 左
               cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "H-Left", document.left(), x, 0);
               // 中
               cb.showTextAligned(PdfContentByte.ALIGN_CENTER, writer.getPageNumber() + " page", (document.right() + document.left()) / 2, x, 0);
               // 右
               cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "H-Right", document.right(), x, 0);
               // Footer
               float y = document.bottom(-20);
               cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "F-Left", document.left(), y, 0);
               cb.showTextAligned(PdfContentByte.ALIGN_CENTER, writer.getPageNumber() + " page", (document.right() + document.left()) / 2, y, 0);
               cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, "F-Right", document.right(), y, 0);
               cb.endText();
               cb.restoreState();
       document.add(new Paragraph("1 page"));
       document.add(new Paragraph("2 page"));
       document.add(new Paragraph("3 page"));
       document.add(new Paragraph("4 page"));
   public static void addColumnText() throws Exception {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "addColumnText.pdf");
       PdfContentByte canvas = writer.getDirectContent();
       Phrase phrase1 = new Phrase(const_BIBIDONG + " is a beauty!left", static_FONT_CHINESE);
       Phrase phrase2 = new Phrase(const_BIBIDONG + " is a beauty!right", static_FONT_CHINESE);
       Phrase phrase3 = new Phrase(const_BIBIDONG + " is a beauty!center", static_FONT_CHINESE);
       ColumnText.showTextAligned(canvas, Element.ALIGN_LEFT, phrase1, 200, 700, 0);
       ColumnText.showTextAligned(canvas, Element.ALIGN_RIGHT, phrase2, 200, 600, 0);
       ColumnText.showTextAligned(canvas, Element.ALIGN_CENTER, phrase3, 200, 500, 0);
    * 文档视图
   public static void setView() throws Exception {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "setView.pdf");
       writer.setPdfVersion(PdfWriter.VERSION_1_5);
       writer.setViewerPreferences(PdfWriter.PageModeFullScreen);// 全屏
           public void onStartPage(PdfWriter writer, Document document) {
               writer.setTransition(new PdfTransition(PdfTransition.DISSOLVE, 3));
               writer.setDuration(5);// 间隔时间
    * 压缩PDF到Zip
   public static void pdfToZip() throws Exception {
       ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(FILE_DIR + "pdfToZip.zip"));
       for (int i = 1; i <= 3; i++) {
           ZipEntry entry = new ZipEntry(const_NEZHA + i + ".pdf");
           zip.putNextEntry(entry);
           document = new Document();
           PdfWriter writer = PdfWriter.getInstance(document, zip);
           writer.setCloseStream(false);
           document.open();
           document.add(new Paragraph(const_NEZHA + i, static_FONT_CHINESE));
           document.close();
           zip.closeEntry();
       zip.close();
    * 添加注释
   public static void addAnnotation() throws Exception {
       FileOutputStream out = new FileOutputStream(FILE_DIR + "addAnnotation.pdf");
       Document doc = new Document();
       PdfWriter writer = PdfWriter.getInstance(doc, out);
       doc.open();
       doc.add(new Paragraph(const_PAGE_FIRST, static_FONT_CHINESE));
       doc.add(new Annotation("title", "this is a annotation!"));
       doc.newPage();
       doc.add(new Paragraph(const_PAGE_SECOND, static_FONT_CHINESE));
       Chunk chunk = new Chunk(const_NEZHA);
       chunk.setAnnotation(PdfAnnotation.createText(writer, null, "Title", "this is a another annotation!", false, "Comment"));
       doc.add(chunk);
       // 添加附件
       //doc.newPage();
       //doc.add(new Paragraph(const_PAGE_THIRD, static_FONT_CHINESE));
       //Chunk chunk2 = new Chunk(const_BIBIDONG, static_FONT_CHINESE);
       //PdfAnnotation annotation = PdfAnnotation.createFileAttachment(writer, null, "Title", null, const_JPG_JAVA, const_JPG_NGINX);
       //annotation.put(PdfName.NAME, new PdfString("Paperclip"));
       //chunk2.setAnnotation(annotation);
       //doc.add(chunk2);
       doc.close();
}

六、更多的Java代码实例

【Java 代码实例 1】java反射三种方法
&hellip;
【Java 代码实例 4】javacompiler编译多java文件
&hellip;
【Java 代码实例 6】FileUtils、StringUtil、CollectionUtils、ArrayUtils(附代码示例)
【Java 代码实例 7】jsoup解析html
【Java 代码实例 8】qrcode生成二维码
【Java 代码实例 9】Java通过Process执行C# exe程序
&hellip;

来源:https://blog.csdn.net/guorui_java/article/details/124229103

标签:Java,pdf,工具类,itext
0
投稿

猜你喜欢

  • Android中Volley框架下保持会话方法

    2022-09-11 00:44:12
  • Spring AOP中的JDK和CGLib动态代理哪个效率更高?

    2023-07-02 18:42:50
  • Unity实现本地文本多语言化

    2023-05-19 21:58:50
  • Java常用类之System类的使用指南

    2021-09-20 07:54:46
  • 基于Hadoop实现Knn算法

    2023-11-27 04:01:20
  • AndroidStudio修改Code Style来格式化自定义标签的xml文件方式

    2023-08-07 00:43:21
  • IDEA java出现无效的源发行版14解决方案

    2021-06-25 08:50:33
  • C#泛型实例详解

    2021-09-11 04:21:35
  • Android通过自定义View实现随机验证码

    2022-10-24 07:16:19
  • Java编译器用maven打war包出错解决办法

    2022-01-18 06:13:29
  • Unity3D实现旋钮控制灯光效果

    2021-09-05 21:16:58
  • SpringBoot @CompentScan excludeFilters配置无效的解决方案

    2022-08-01 09:06:42
  • Spring高阶用法之自定义业务对象组件化

    2022-02-18 07:48:55
  • C#实现自由组合本地缓存、分布式缓存和数据查询

    2021-06-13 00:56:11
  • Android开发中ProgressDialog简单用法示例

    2021-11-03 10:17:37
  • dotnet core链接mongodb代码实例

    2023-07-20 14:26:09
  • SpringMVC+EasyUI实现页面左侧导航菜单功能

    2022-09-30 17:11:01
  • 浅谈Java并发中的内存模型

    2022-09-07 17:54:47
  • Java关于含有继承类的成员初始化过程讲解

    2022-09-24 23:25:45
  • 关于Maven的使用,这些你都真的了解么

    2022-01-02 14:19:08
  • asp之家 软件编程 m.aspxhome.com