https://github.com/itext/itextpdf
您可以在此处找到最新版本:
http://github.com/itext/itextpdf/releases/latest
http://jump-pilot.sourceforge.net/repository/org/apache/commons/commons-imaging/1.0-SNAPSHOT/
依赖加入:
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<itext.version>5.5.1</itext.version>
</properties>
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-pdfa</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-xtra</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>${itext.version}</version>
</dependency>
</dependencies>
PdfWriter
PDF的DocWriter类。
当这个PdfWriter被添加到一个特定的PdfDocument时,添加到这个文档的每个元素的PDF表示将被写入输出流。
PdfWriter 构造方法
public static PdfWriter getInstance(final Document document, final OutputStream os)
PdfWriter 常用方法
// 获取此文档的页码。如果您之前(重新)设置了页码,那么这个页码可以与实际的页码不同。
public int getPageNumber()
public int getCurrentPageNumber()
// 使用此方法获取此文档下的直接内容。只有一个直接内容,对该方法的多次调用将始终检索相同的对象。
public PdfContentByte getDirectContentUnder()
// 使用此方法获取本文档的直接内容。只有一个直接内容,对该方法的多次调用将始终检索相同的对象。
public PdfContentByte getDirectContent()
// 使用此方法可从其他PDF文档获取页面。该页面可以用作任何其他PdfTemplate。请注意,使用相同的参数多次调用此方法将检索相同的对象。
public PdfImportedPage getImportedPage(final PdfReader reader, final int pageNumber)
PdfDocument
Document
一个通用的Document类。
所有类型的文本元素都可以添加到HTMLDocument中。当添加元素时,Document向所有监听器发出信号。
备注:
创建文档之后,您可以添加一些元信息。
您还可以设置页眉/页脚。
你必须先打开文档才能写内容。
一旦打开文档,就只能写入内容(不能再写入元格式了!)
当你改变某一页的页眉/页脚时,这将从下一页开始生效。
关闭文档后,每个监听器(以及它的OutputStream)都被关闭
Document 常用方法
//打开文档。
//一旦文档被打开,您就不能再编写任何头信息或元信息了。在开始向文档主体添加内容之前,必须先打开文档。
public void open()
//关闭文档。
//一旦所有的内容都写入了body,就必须关闭body。在那之后,任何东西都不能写入body
public void close()
//向文档添加用户定义的标头
public boolean addHeader(String name, String content)
public boolean addTitle(String title)
public boolean addSubject(String subject)
public boolean addKeywords(String keywords)
public boolean addAuthor(String author)
public boolean addCreator(String creator)
public boolean addCreationDate()
PdfContentByte
PdfContentByte是一个包含用户定位的页面文本和图形内容的对象。它知道如何应用正确的字体编码。
在PDF中当涉及到布局问题时(不再是自动地添加文本、图片等等,对元素在页面上的位置有一定的要求),有时我们希望将一些图像或者文本放置在某页的指定位置,为实现该功能,我们将使用PdfContentByte类。
PdfContent对象可以通过在使用Writer对象中使用getDirectContent()方法来得到该对象
//向页面添加图像。图像必须有绝对定位。
public void addImage(final Image image)
public void saveState()
public void restoreState()
//设置图形状态
public void setGState(final PdfGState gstate)
//创建一个新模板,它只不过是一个表单XObject。这个模板可以包含在这个PdfContentByte或其他模板中。
//只有当文档关闭,模板才写入输出。允许在第一页显示仅在最后一页定义的文本
public PdfTemplate createTemplate(final float width, final float height)
//向页面添加图像。图像的定位是通过变换矩阵完成的。使用addImage(image, image_width, 0,0, image_height, x,y)将图像定位在(x,y)处。
public void addImage(final Image image, final float a, final float b, final float c, final float d, final float e, final float f)
PdfTemplate
实现表单XObject
创建一个新模板,它只不过是一个表单XObject。这个模板可以包含在这个PdfContentByte或其他模板中。只有当文档关闭,允许在第一页显示仅在最后一页定义的文本时,模板才写入输出。
PdfPage
PdfPage是PDF page对象。
Page对象是一个字典,它的键描述了包含文本、图形和图像的单个页面。Page对象是Pages树的一个叶节点。该节点在“便携式文档格式参考手册1.3版”6.4节中描述(73-81页)
PdfName
PdfName是一个可以在pdf文件中用作名称的对象
一个名字,就像一个字符串,是一个字符序列。它必须以斜杠开头,后面跟一个32到136的ASCII字符序列(%,(,),[,],<,>,{,},/和#除外)。除了0x00之外的任何字符都可以通过将其前面带有#的两个字符的十六进制代码包含在名称中。名称的最大字符数为127。该节点在’Portable Document Format Reference Manual version 1.7’章节3.2.4 (page 56-58)中有描述。
PdfObject
PdfObject是所有PDF对象的抽象超类。
PDF支持七种基本类型的对象:布尔值、数字、字符串、名称、数组、字典和流。此外,PDF还提供了一个空对象。对象可以被标记,以便它们可以被其他对象引用。所有这些基本的PDF对象都在“便携式文档格式参考手册1.3版”第4章(37-54页)中进行了描述。
Rectangle
矩形是几何图形的表示法。矩形使用setBorderWidth(float)和setBorder(int)来支持固定宽度的边框。它们还支持使用setBorderWidthLeft(float)或setBorderColorLeft(BaseColor)等方法在每边改变宽度/颜色的边框。
//显示矩形边框的一边 可用于PdfPCell
public static final int TOP = 1
//设置左边框的宽度
public void setBorderWidthLeft(final float borderWidthLeft)
//设置矩形的背景颜色
public void setBackgroundColor(final BaseColor backgroundColor)
public Rectangle rotate()
//设置矩形的旋转。有效值为0、90、180和270。
public void setRotation(final int rotation)
//左下角的x坐标
public float getLeft()
public void setLeft(final float llx)
//启用/禁用指定边的边框。边界被指定为常量LEFT, RIGHT, TOP, BOTTOM的整数位组合 可用于PdfPCell
public void setBorder(final int border)
// 设置矩形的背景颜色 可用于PdfPCell
sn.setBackgroundColor(BaseColor.YELLOW)
BaseColor
BaseColor 构造方法
public BaseColor(final int red, final int green, final int blue)
public BaseColor(final float red, final float green, final float blue)
//alpha是指的透明度,这个词还出现在元件的色彩效果里,以及代码属性中。
public BaseColor(final int red, final int green, final int blue, final int alpha)
public BaseColor(final float red, final float green, final float blue, final float alpha)
public BaseColor(final int argb)
public static final BaseColor WHITE
GrayColor
public static final GrayColor GRAYBLACK = new GrayColor(0f)
public static final GrayColor GRAYWHITE = new GrayColor(1f)
FontFactory
如果使用True Type字体,可以先将不同ttf和ttc文件的路径声明到这个静态类,然后使用一个静态getfont方法在代码中创建字体,而不必将路径作为参数输入。
add:
TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式。
"系统盘\WINDOWS\Fonts”
字库
public static Font getFont(final String fontname, final String encoding,
final boolean embedded, final float size,
final int style, final BaseColor color)
public static Font getFont(final String fontname, final String encoding, final boolean embedded)
//在一个目录中注册所有字体
public static int registerDirectory(final String dir)
public static Set<String> getRegisteredFonts()
BaseFont
支持的几种字体类型的基类
Font
包含字体的所有规格:fontfamily, size, style和color。
Font 构造方法
public Font(final FontFamily family, final float size, final int style, final BaseColor color)
//采用水平书写的Unicode编码
public static final String IDENTITY_H = "Identity-H";
public static final String IDENTITY_V = "Identity-V"
//获取Postscript字体名称
public abstract String getPostscriptFontName()
Image
Image是插入到文档中的图形元素(JPEG、PNG或GIF)的表示形式
Image 构造方法
public static Image getInstance(final String filename)
public static Image getInstance(final URL url)
public Image(final URL url)
//复制建构函数
protected Image(final Image image)
public static Image getInstance(final PdfTemplate template)
Image 常用方法
//将图像按矩形的尺寸缩放
public void scaleAbsolute(final Rectangle rectangle)
// 设置图像的绝对位置
public void setAbsolutePosition(final float absoluteX, final float absoluteY)
//缩放图像,使其适合特定的宽度和高度
public void scaleToFit(final float fitWidth, final float fitHeight)
// 获取图像的缩放宽度 这是考虑到旋转的图像的缩放宽度。
public float getScaledWidth()
public float getScaledHeight()
PdfGState
图形状态字典
//设置当前描边alpha常数,指定透明成像模型中用于非描边操作的常数形状或常数不透明度值。
public void setFillOpacity(float ca)
ColumnText
以列形式格式化文本。文本由一系列行在左右两侧绑定。这使得柱可以有任何形状,而不仅仅是矩形。
可以设置几个参数,如第一段行缩进和段落之间的额外空格。
对go方法的调用将返回以下情况之一:列结束或文本结束。
如果列结束,可以用setColumns方法加载一个新的列定义,并且可以再次调用go方法。
如果文本结束,更多的文本可以加载与addText和方法go可以被再次调用。唯一的限制是每次必须加载一个或多个完整的段落。
支持完全的双向重排序。如果运行方向为pdfrwriter。RUN_DIRECTION_RTL水平对齐和边距的含义被镜像。
ColumnText 构造方法
//canvas 文本将被写入的地方。可以是模板
public ColumnText(final PdfContentByte canvas)
ColumnText 常用方法
// 将行输出到文档中。它等同于go(false)。
public int go()
//设置列的边界。每个列的边界由一个float[]描述,其线点为[x1,y1,x2,y2,…]。数组必须至少有4个元素。
public void setColumns(final float leftLine[], final float rightLine[])
//显示一行文本。只写了第一行
public static void showTextAligned(final PdfContentByte canvas, final int alignment,
final Phrase phrase, final float x, final float y,
final float rotation)
//矩形柱的简化方法
public void setSimpleColumn(Rectangle rect)
//将短语添加到当前文本数组。如果addElement()之前被调用,则不会有任何效果。
public void addText(final Phrase phrase)
// 添加一个元素。支持的元素是段落,列表,PdfPTable和图像。
//也接受一个Chunk和一个短语,它们被放置在一个新的段落中。
//它删除所有使用addText()放置的文本。
public void addElement(Element element)
Element 接口
文本元素的接口。
// 段落对齐的可能值。这指定文本对齐到左缩进,额外的空白应该放在右边
public static final int ALIGN_LEFT = 0
//垂直对齐的可能值
public static final int ALIGN_TOP = 4;
Chunk
这是可以添加到文档中的最小文本重要部分。
大多数元素可以分成一个或多个Chunks。chunk是一个具有特定字体的字符串。所有其他的布局参数都应该在添加文本块的对象中定义
Chunk 构造方法
public Chunk(final String content, final Font font)
public Chunk(final String content)
public Chunk(final char c, final Font font)
public Chunk(final char c)
public Chunk(final Image image, final float offsetX, final float offsetY,
final boolean changeLeading)
//构造一个包含图像的块
//offsetX 图像在x方向上的偏移量
public Chunk(final Image image, final float offsetX, final float offsetY)
public Chunk(final Image image, final float offsetX, final float offsetY,
final boolean changeLeading)
Chunk 常用方法
//设置一个水平线,它可以是下划线或删除线。实际上,这条线可以在任何垂直的地
// 方,并且始终具有Chunk宽度。多次调用此方法将产生多行。
public Chunk setUnderline(final float thickness, final float yPosition)
Phrase
短语是一系列的Chunk
一个短语有一个主字体,但是短语中的一些块可以有一个不同于主字体的字体。一个短语中的所有块都有相同的引导
// 向这个短语添加一个字符串
public boolean add(final String s)
Paragraph
public void setIndentationLeft(float indentation)
PdfPTable
这个表可以放在绝对位置,也可以作为 Table 类添加到文档中
PdfPTableEvent可以与表关联,在表被渲染时进行自定义绘制。
PdfPTable 构造方法
// 用numColumns列构造一个PdfPTable
public PdfPTable(final int numColumns)
PdfPTable 常用方法
// 添加一个单元格元素。
public void addCell(final String text)
public void addCell(final Phrase phrase)
public void addCell(final Image image)
// 添加嵌套表
public void addCell(final PdfPTable table)
)
// 设置表格在页面中所占的宽度百分比
public void setWidthPercentage(final float widthPercentage)
//设置表的全宽度
public void setTotalWidth(final float totalWidth)
从绝对列宽度设置表的全宽度
public void setTotalWidth(final float columnWidth[])
//设置组成标题的顶部行数。这个标题只有当表被添加到Document并且表跨越页面时才有意义
public void setHeaderRows(int headerRows)
//设置要用于页脚的行数。从标题行中减去页脚行数。
public void setFooterRows(int footerRows)
//跳过第一个标题的打印。当连续打印属于同一打印表方面的表时使用。
public void setSkipFirstHeader(final boolean skipFirstHeader)
public void setSkipLastFooter(final boolean skipLastFooter)
//设置表的相对宽度
public void setWidths(final int relativeWidths[])
//设置此表前的间距
public void setSpacingBefore(final float spacing)
//获取默认的PdfPCell,该PdfPCell将用作除addCell(PdfPCell)外的所有addCell方法的引用。
public PdfPCell getDefaultCell()
PdfPCell
PdfPTable中的单元格。
PdfPCell 构造方法
// 使用短语构造PdfPCell。默认 padding 为2
public PdfPCell(Phrase phrase)
//用图像构造一个PdfPCell。对于0.5的边框宽度,默认padding为0.25。
//fit True,以使图像适合单元格
public PdfPCell(Image image, boolean fit)
//The default padding is 0.
public PdfPCell(Image image)
//构造一个PdfPCell的深层副本。
public PdfPCell(PdfPCell cell)
//用PdfPtable构造一个PdfPCell。这个构造函数允许嵌套表。默认填充为0。
public PdfPCell(PdfPTable table)
// 应用于单元格的样式(可以使用getDefaultCell())
public PdfPCell(PdfPTable table, PdfPCell style)
PdfPCell 常用方法
// 属性rowspan的Setter
public void setRowspan(int rowspan)
//设置表的全宽度
public void setTotalWidth(final float totalWidth)
// 在Document.add()中使用setTotalWidth()中的值。
public void setLockedWidth(final boolean lockedWidth)
//colspan的Setter。
public void setColspan(int colspan)
// 向单元格添加iText元素
public void addElement(Element element)
//设置单元格的水平对齐方式。它可以是Element.ALIGN_CENTER为例。
public void setHorizontalAlignment(int horizontalAlignment)
public int getVerticalAlignment()
List
List包含多个 ListItem
List 构造方法
//在生成pdf文档时,缩进是很重要的,它指示列表符号的缩进。这对于html文档并不重要
public List(final boolean numbered, final float symbolIndent)
// 创建一个列表
public List(final boolean numbered, final boolean lettered, final float symbolIndent)
List 常用方法
PdfReader
读取PDF文档
PdfReader 构造方法
//读取和解析PDF文档。
public PdfReader(final String filename)