iText 7 基础
PDF轉換常識:PDF/X、PDF/E和PDF/A三者區別
https://github.com/itext/i7js-examples
https://github.com/itext/i7js-jumpstart
iText是著名的開放源碼的站點sourceforge一個項目,是用于生成PDF文檔的一個java類庫。通過iText不僅可以生成PDF或rtf的文檔,而且可以將XML、Html文件轉化為PDF文件。 iText的安裝非常方便,下載iText.jar文件后,只需要在系統的CLASSPATH中加入iText.jar的路徑,在程序中就可以使用iText類庫了。
iText 的需求分析
一般情況下,iText使用在有以下一個要求的項目中:
內容無法提前利用:取決于用戶的輸入或實時的數據庫信息。
由于內容,頁面過多,PDF文檔不能手動生成。
文檔需在無人參與,批處理模式下自動創建。
內容被定制或個性化;例如,終端客戶的名字需要標記在大量的頁面上。
依賴:
<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><itext.version>7.1.11</itext.version></properties><dependencies><!-- itext7 --><dependency><groupId>com.itextpdf</groupId><artifactId>kernel</artifactId><version>${itext.version}</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>io</artifactId><version>${itext.version}</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>layout</artifactId><version>${itext.version}</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>forms</artifactId><version>${itext.version}</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>pdfa</artifactId><version>${itext.version}</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>pdftest</artifactId><version>${itext.version}</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>font-asian</artifactId><version>${itext.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.18</version></dependency><!--itext7 html轉pdf用到的包--><dependency><groupId>com.itextpdf</groupId><artifactId>html2pdf</artifactId><version>3.0.0</version></dependency></dependencies>解決中文不顯示的問題
PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);PdfWriter
PdfWriter 構造方法
//創建一個pdfrwriter寫入傳遞的文件名 使用默認的屬性。 public PdfWriter(String filename) throws FileNotFoundException//使用傳遞的屬性 public PdfWriter(String filename, WriterProperties properties) throws FileNotFoundExceptionPdfWriter常用方法
WriterProperties
PdfDocument
PDF文檔的主要輸入點
在 PDF 中,所有測量均以用戶單位完成。默認情況下,一個用戶單位對應一個點。這意味著一英寸中有 72 個用戶單位。
如果使用PageSize對象創建頁面大小,則坐標系的原點位于頁面的左下角。
PdfDocument 構造方法
//以寫入模式打開PDF文檔。文檔初始化時沒有頁面。 public PdfDocument(PdfWriter writer)public PdfDocument(PdfWriter writer, DocumentProperties properties)PdfDocument 常用方法
// 按頁獲取頁號 public int getPageNumber(PdfPage page)//創建并添加具有指定頁面大小的新頁面 public PdfPage addNewPage(PageSize pageSize)PdfPage
// 獲取由媒體框對象定義的頁面大小。這個方法沒有考慮頁面旋轉 public Rectangle getPageSize()//獲取此頁面資源的PdfResources包裝器對象。如果頁面沒有資源對象,那么它將從 //頁面的父節點繼承。如果父類和頁面都沒有資源對象,則創建新的資源對象并將其添加到頁面字典中 public PdfResources getResources()// 獲取由頁面的媒體框指定的Rectangle對象,該對象定義顯示或打印頁面的物理媒體的邊界 public Rectangle getMediaBox()PdfDictionary
PDF規范中描述的Dictionary的表示。Dictionary是鍵和值之間的映射。鍵是 PdfNames,值是 PdfObjects。每個鍵只能與一個值關聯,向現有鍵添加新值將覆蓋之前的值。當PdfDocument關閉時,null值應該被忽略。
PdfResources
表示資源字典的包裝器類——定義內容流操作符使用的命名資源。(ISO 32000-1, 7.8.3資源字典)
Document
在創建自給自足的PDF時,Document是默認的根元素。它主要操作高級的操作,如設置頁面大小和旋轉,添加元素,在特定的坐標寫文本。它不了解實際的PDF概念和語法。
文檔的渲染行為可以通過擴展 DocumentRenderer 和使用setRenderer(DocumentRenderer)設置一個新創建的實例來修改。
Document 構造方法
//從PdfDocument創建文檔。使用PdfDocument的當前默認PageSize初始化第一頁。 //默認頁面大小為 A4,默認情況下該頁面用于縱向 public Document(PdfDocument pdfDoc)public Document(PdfDocument pdfDoc, PageSize pageSize)Document 常用方法
// 在運行時更改DocumentRenderer。使用它來定制文檔的IRenderer行為。 public void setRenderer(DocumentRenderer documentRenderer)PdfFont 類
PdfFontFactory 類
提供了一些有用的方法來創建準備在PdfDocument中使用的字體
注意,剛創建的PdfFont在刷新之前幾乎是空的,因為在刷新之前不可能實現字體數據。
PdfFontFactory 常用方法
//根據字體程序文件的路徑創建一個PdfFont實例 //fontProgram 字體程序文件 //encoding 要創建的字體的編碼 //embedded 指示是否將字體嵌入到目標文檔中 public static PdfFont createFont(String fontProgram, String encoding, boolean embedded)public static PdfFont createFont(String fontProgram)StandardFonts 類
BlockElement
BlockElement會盡量在畫布或頁面上占用盡可能多的水平空間。這個概念類似于HTML中的塊元素。與HTML一樣,對象的可視表示也可以通過填充、邊框和/或邊距來分隔(padding, a border, and/or a margin)
Table
public class Table extends BlockElement<Table> implements ILargeElement
Table是一個布局元素,它表示二維網格中的數據。它充滿了按行和列排序的單元格。
它是ILargeElement的一個實現,這意味著它可以被刷新到畫布上,以便回收被鎖定的內存。
Table 構造函數
//構造一個具有最佳列寬的表 //從7.0.2開始,介紹了表布局算法。自動布局是默認設置。 //注意,最終的列寬度取決于所選布局、表寬度、單元格寬度、單元格最小寬度和單元 //格最大寬度。表布局算法具有與CSS表布局屬性相同的行為,其中columnwidth是 //<colgroup>' width。更多信息請參見setAutoLayout()和setFixedLayout()。 public Table(float[] pointColumnWidths)Table 常用方法
//設置自動布局。類似于CSS屬性 autotable-layout:auto 。注意,大表不支持自動布局。 //算法的原則。 //1. 列寬度不能小于列中任何單元格的最小寬度(按布局計算)。 //2. 指定的表寬度優先級高于列和單元格寬度的和。 //3. 單元格和列寬的百分比值優先級高于點值。 //4. 單元格寬度比列寬度具有更高的優先級。 //5. 如果列沒有寬度,它將嘗試達到max-value(根據布局計算)。 public Table setAutoLayout()//設置固定布局。類似的CSS屬性 table-layout:fixed 。注意,表格必須有寬度屬性,否則將使用自動布局。 public Table setFixedLayout()//向表的標題中添加一個新單元格。標題將顯示在該表的每個區域的頂部。參見 //setSkipFirstHeader(boolean) public Table addHeaderCell(Cell headerCell)//跳過第一個標題的打印。當連續打印屬于同一打印表方面的表時使用 public Table setSkipFirstHeader(boolean skipFirstHeader)UnitValue
保存值和度量值的單位的專門化類。
UnitValue 常用方法
// 創建一個指定值的UnitValue PERCENT對象。 public static UnitValue createPercentValue(float value)Cell
單元格是一個封閉網格(Table)中的一段數據。這個對象是一個BlockElement,賦予它許多視覺布局屬性。一個單元格可以作為許多布局元素的容器;它只能包含其他BlockElement對象或圖像。其他類型的布局元素必須包裝在一個BlockElement。
Cell 常用方法
// 將任何塊元素添加到單元格的內容 public Cell add(IBlockElement element)Paragraph
表示文本和圖形信息的自包含塊的布局元素。它是一個BlockElement,本質上是一個葉子元素的容器。
Paragraph 構造方法
//創建一個段落,初始化為一段文本 public Paragraph(String text)public Paragraph(Text text)Paragraph 常用方法
IElement
這個類代表了一個布局元素,即在畫布或文檔中占據“物理”空間的內容塊。它的存在和定位可能會影響其他ielement在布局表面上的位置。
IElement 常用方法
// 覆蓋下一次調用getRenderer()將返回的IRenderer實例。 void setNextRenderer(IRenderer renderer)//獲取此元素的渲染器。注意,這個方法可以被多次調用。默認情況下,每個元素都應 //該定義自己的渲染器,但是這個渲染器可以被setNextRenderer(IRenderer)方法調用覆蓋。 IRenderer getRenderer();//在當前元素中創建一個帶有根的渲染器子樹。 //與getRenderer()相比,此方法返回的渲染器應該包含當前元素的子元素的所有子渲染器。 IRenderer createRendererSubTree()ILeafElement
public interface ILeafElement extends IElement
IElement的標記子接口,它指定布局對象定義在對象層次結構的最低層上。葉子元素不能作為其他元素的容器。
RootElement
PDF布局對象層次結構的通用抽象根元素。
RootElement 常用方法
//方便的方法來編寫圍繞指定點對齊的文本 public T showTextAligned(Paragraph p, float x, float y, int pageNumber, TextAlignment textAlign, VerticalAlignment vertAlign, float radAngle)Text
文本是一段任意長度的文本。作為一個葉子元素,它是包含特定布局屬性的最小內容塊
Text 構造方法
Text 常用方法
IAccessibleElement
布局元素具有可訪問性屬性。它們定義元素的角色(AccessibilityProperties.getRole())——如果元素被添加到Tagged PDF文檔中,將使用這個名稱來標記元素。它們還可以為標記定義其他元數據。
Image
一個布局元素,它表示要包含在文檔模型中的圖像。
Image 構造方法
//使用iText I/O模塊從一個文件中讀取圖像資源,創建一個圖像。 public Image(ImageData img)Image 常用方法
ImageDataFactory
ImageDataFactory 常用方法
//創建一個代表指定文件中的圖像的ImageData實例。 public static ImageData create(String filename)List
com.itextpdf.layout.element
List是一個布局元素,它表示一系列具有相同或非常相似布局屬性的垂直輪廓對象,使其具有一種統一性。它包含ListItem對象,可以選擇使用符號和/或編號作為前綴。
List 構造方法
// 創建一個以DEFAULT_LIST_SYMBOL為前綴的List。 public List()List 常用方法
// 將一個新的列表項添加到列表的底部 public List add(ListItem listItem)// 設置ListItem符號的縮進偏移量 默認為39 public List setSymbolIndent(float symbolIndent)//設置要使用的列表符號。這將創建一個無序列表,即所有列表項目將顯示相同的前綴。 public List setListSymbol(String symbol)https://www.htmlsymbols.xyz/unicode/U+2022
ListItem
列表項是一個布局元素,它是list中的一個條目。list對象控制列表項的前綴、后綴和編號。
Property
屬性名的枚舉,用于布局元素的圖形屬性。IPropertyContainer執行與 java.util.Map,相同的功能。,使用Property的值作為它的潛在鍵。
IPropertyContainer 接口
一個類似map的通用接口,它定義了通過Property類型的enum鍵來存儲和檢索對象的方法。
IPropertyContainer 常用方法
// 設置此實體的屬性 void setProperty(int property, Object value)ElementPropertyContainer
是一個抽象類,適用于PDF布局對象層次結構的通用抽象元素。所有布局對象實現的超類。
ElementPropertyContainer 常用方法
//設置該元素的字體 //此屬性將覆蓋setFontFamily設置的值。字體可以通過精確的PdfFont實例設置, //也可以通過與FontProvider中的字體相對應的字體家族名稱設置,但不能同時設置。 public T setFont(PdfFont font)//設置該元素的文本對齊方式。 public T setTextAlignment(TextAlignment alignment)//設置此元素的水平對齊方式。 public T setHorizontalAlignment(HorizontalAlignment horizontalAlignment)// 設置該元素的字體大小,以點為單位 public T setFontSize(float fontSize) //為該元素的所有四條邊設置邊框,可自定義顏色、寬度和模式類型。 public T setBorder(Border border)FontProvider
字體選擇器邏輯的主要入口點。包含可重用的FontSet和PdfFonts集合。由于PdfFont, FontProvider依賴于PdfDocument,所以它不能用于不同的文檔,除非使用reset()重置或使用getFontSet()重新創建。在前一種情況下,FontSelectorCache被重用,而在后者中,它被重新初始化。FontProvider是創建PdfFont的唯一終點。
每個文檔只允許使用一個FontProvider。如果每個元素需要額外的字體,則可以使用FontSet的另一個實例。. For more details see com.itextpdf.layout.property.Property.FONT_SET, getPdfFont(FontInfo, FontSet), getStrategy(String, List, FontCharacteristics, FontSet).
AbstractElement
定義大多數IElement實現共享的最常見的屬性。
Canvas
Canvas 構造方法
// 創建一個新的畫布來操作一個特定的內容流,例如一個頁面或PdfFormXObject流 public Canvas(PdfCanvas pdfCanvas, Rectangle rootArea)Canvas 常用方法
public PdfCanvas concatMatrix(double a, double b, double c, double d, double e, double f)PdfCanvas
PdfCanvas類表示將數據寫入內容流的算法。要寫入頁面內容,請從頁面實例創建PdfCanvas。要寫入表單XObject,從表單XObject實例創建PdfCanvas。確保在完成對畫布的寫入后調用PdfCanvas.release()。這樣會節省一些內存
當前變換矩陣是頁面圖形狀態的一部分。在圖形狀態中定義的其他值是線寬、描邊顏色(對于線條)、填充顏色(對于形狀)等
默認線寬是 1 個用戶單位并且默認筆觸顏色是黑色
PdfCanvas 構造方法
// 快速創建PdfCanvas特定的頁面 public PdfCanvas(PdfPage page)// 從內容流的頁面,表單XObject,模式等 創建PdfCanvas // resources 資源,一個可由內容流中的PDF指令使用的專用字典 public PdfCanvas(PdfStream contentStream, PdfResources resources, PdfDocument document)PdfCanvas 常用方法
// 移動當前點到(x, y),忽略任何連接線段。 1、public PdfCanvas moveTo(double x, double y)//將從當前點開始的Bêzier曲線追加到路徑 2、public PdfCanvas curveTo(double x1, double y1, double x2, double y2, double x3, double y3)// 保存圖形狀態 3、public PdfCanvas saveState()// 更改填充路徑的當前顏色。 4、public PdfCanvas setFillColor(Color color)//Draws a rectangle. 5、public PdfCanvas rectangle(double x, double y, double width, double height) // 填充當前路徑 6、public PdfCanvas fill()//恢復圖像的狀態 7、public PdfCanvas restoreState()// 開始文本塊(PDF BT操作符) 8、public PdfCanvas beginText()//結束文本塊(PDF ET操作符) 9、public PdfCanvas endText() // 通過移動文本行矩陣移動文本(PDF Td操作符)。 10、public PdfCanvas moveText(double x, double y)//顯示文本(操作符Tj)。 11、public PdfCanvas showText(String text)//移動到下一行并顯示文本 12、public PdfCanvas newlineShowText(String text)//將2x3仿射變換矩陣連接到由畫布管理的內容流中的當前矩陣。對比setTextMatrix //在第三列的元素的值總是固定的(0,0,和1) //值a,b,c,和d可用于縮放,旋轉和傾斜的坐標系。沒有理由將我們限制在軸正交或 //X 方向的進度需要與 Y 方向的進度相同的坐標系中。 13、public PdfCanvas concatMatrix(double a, double b, double c, double d, double e, double f) 14、public PdfCanvas setTextMatrix(float a, float b, float c, float d, float x, float y)Rectangle
表示矩形對象
Rectangle 構造方法
public Rectangle(float x, float y, float width, float height)Rectangle 常用方法
// 獲取矩形左邊緣的X坐標。和getX()一樣 public float getLeft() public float getX()// 獲取矩形下邊緣的Y坐標。一樣:getY()。 public float getBottom()// 獲取矩形的高度。 public float getHeight()// 獲取矩形的寬度 public float getWidth()IRenderer
渲染器對象負責在文檔或畫布上繪制相應的布局對象。每個布局對象都有一個渲染器,默認情況下是對應的類型之一,例如,你可以向com.itextpdf.layout.element.Image請求其ImageRenderer。渲染器被設計成可擴展的,自定義實現可以在運行時被播種到布局對象(或它們的自定義子類)中。
IRenderer 常用方法
AbstractRenderer
定義了大多數IRenderer實現共享的最常見的屬性和行為。所有的默認渲染器都是這個默認實現的子類。
// 獲取包含此IRenderer寫入DrawContext的所有內容的包圍框。 public Rectangle getOccupiedAreaBBox()BlockRenderer
IEventDispatcher
事件調度器接口
// 添加新的事件處理程序 void addEventHandler(String type, IEventHandler handler)IEventHandler
處理事件的接口。EventHandlers 被添加到 EventDispatcher 中。
只有一個方法
// 用于處理事件的鉤子。實現可以訪問與指定事件關聯的PdfDocument實例, // 如果可用,也可以訪問PdfPage實例 void handleEvent(Event event);PdfDocumentEvent
PdfDocumentEvent 常用方法
//在頁面刷新到文檔之前發送。當創建了一個連續的頁面時,不一定會分派這個事件。//在使用高級iText API時,請記住這一點 public static final String END_PAGE = "EndPdfPage"// 返回與此事件關聯的PdfDocument public PdfDocument getDocument()// 返回與此事件關聯的PdfPage。警告:該值可以為空。 public PdfPage getPage()SolidBorder
在被設置的元素周圍繪制實邊。
SolidBorder 構造方法
// 創建具有指定寬度和指定顏色的SolidBorder。 public SolidBorder(Color color, float width)// 創建指定寬度、顏色和不透明度的SolidBorder。 public SolidBorder(Color color, float width, float opacity)public SolidBorder(float width)總結
以上是生活随笔為你收集整理的iText 7 基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python程序设计基础电子书_pyth
- 下一篇: lqr控制和模糊控制三级倒立摆