Download the PHP package ren1244/pdfwriter without Composer
On this page you can find all versions of the php package ren1244/pdfwriter. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package pdfwriter
PDFWriter
這是一個 2020 年底新開發的 PHP PDF Library
*注意:這是預覽版本,非正式發布,有些東西可能還會變動*
專案的方向
- 支援全範圍 unicode(現在很多 PHP PDF 函式庫只支援到基本多文種平面)
- 至少支援 TTF 與 OTF 字型,或是更多種。
- 當字型缺字時,自動切換為候補字型。這個可以達到英數與中文字採用不同字型的效果。
- 提供擴充的介面,讓其他開發者依需求擴充自己需要的模組。
安裝
使用
以下是最簡單的程式碼,只產生一個空白頁面
透過呼叫 addPage 方法可以不斷地增加新的頁面
※以下均以 $pdf
代表建立好的 PDFWriter 物件
新增頁面
指定新增的頁面大小,可以直接給予長寬
或是輸入預先設定的紙張種類,目前可設定的值有:
- A 系列:
"A0"
到"A10"
- B 系列:
"B0"
到"B10"
- C 系列:
"C0"
到"C10"
- JIS-B 系列:
"JIS-B0"
到"JIS-B10"
如果希望紙張是橫向的,可以在預設的紙張種類後面加上 "L"
或 "H"
,意思分別是 Landscape 與 Horizontal
輸出 PDF
預設是把 pdf 直接回應給使用者 如果想先儲存在伺服器內的檔案 可以給予在 output 時指定一個 file pointer resource
單位
當涉及到長度的參數時,若沒有特別提及,都是指「目前選用的單位」(後面以「目前單位」簡稱)
預設狀態下,「目前單位」被設定為 "mm"
,可以設定 PageMetrics::$unit
來改變它
允許設定的值為 "cm"
, "mm"
, "pt"
,設定其他值的話都會視為 "pt"
如果臨時要把 pt 轉換為「目前單位」
如果臨時要把「目前單位」轉換為 pt
文字
內建字型
上面的範例中的 $pdf->font->addFont('Times-Roman');
就是使用內建字型。
目前內建的字型有,包含一般的英數字元
Times-Roman
,Times-Bold
,Times-Italic
,Times-BoldItalic
Helvetica
,Helvetica-Bold
,Helvetica-Oblique
,Helvetica-BoldOblique
Courier
,Courier-Bold
,Courier-Oblique
,Courier-BoldOblique
自訂字型
透過 script/addFont.php 添加字型(產生的結果放在 font 資料夾)
filename
: 字型檔outname
: 提供addFont
與setFont
使用的名稱,若省略會自動根據字型檔產生
字型替代
這個功能是在字型缺字的狀況下,允許自動切換替代的字型。
透過這個功能,可以讓我們在英數字自動使用 Times-Roman
,而遇到中文自動使用 Noto-Sans
。
範例如下
文字的排版
- 文字必須在由
setRect
指定的文字框內,如果空間不夠會截斷 - 目前不支援跨頁,也就是每頁的狀態是獨立的
addText
的第二個參數是一個選擇性的參數,為一個關聯陣列,可以有以下選擇
KEY | 值的資料類型 | 預設值 | 說明 |
---|---|---|---|
lineHeight | number | 1.2 | 行高,相對於該行字型大小,預設值為1.2 |
wordBreak | bool | false | 英數是否強制換行 |
color | string|false | false | 文字顏色,RRGGBB,例如 "FFCC00" 若為 false 則視環境設定而不同 |
textAlign | string | "left" | 多行文字對齊,可能的值有:"left", "center", "right" |
cellAlign | integer | 7 | 文字要對齊文字框的何處,允許的數值是 1~9,對應數字鍵的位置 |
underline | number | 0 | 底線寬,單位是 pt,如果為 0 則不添加底線 |
直書
此功能開發中,目前處理英文、數字與中文,其他語言會當作中文處理。
用 addTextV
寫入直書文字
addTextV
的第二個參數是一個選擇性的參數,為一個關聯陣列,可以有以下選擇
KEY | 值的資料類型 | 預設值 | 說明 |
---|---|---|---|
lineSpace | float | 0 | 額外的行距 |
wordSpace | float | 0 | 額外的字距 |
mode | string | "RL" | 從左到右或是從右到左,可能的值有:"RL", "LR" |
color | string|false | false | 文字顏色,RRGGBB,例如 "FFCC00" 若為 false 則視環境設定而不同 |
textAlign | string | "start" | 多行文字對齊,可能的值有:"start", "middle", "end" |
cellAlign | integer | 7 | 文字要對齊文字框的何處,允許的數值是 1~9,對應數字鍵的位置 |
圖形
向量圖(線條)
目前只能用 postScript 語言來畫線條(跟 svg 有點像)
點陣圖
目前支援的格式有 png
跟 jpeg
,其他格式要先轉換一下
若是已經取得圖檔內容,可以使用 addImageRaw
方法,使用方法與 addImage
相同。
書籤
簡易書籤
多層級書籤
加密
目前支援 Aes256、Aes128、Rc4_128 三種加密,可參考 examples/ex3_encryption.php
擴充功能
在架構上,PDFWriter 分為三層:
- PDFWriter 核心:管理字型、頁面等,並把字型跟頁面提供給 Cntent Module 開發使用。
- Cntent Module:透過 PDFWriter 提供的物件,負責產生頁面的內容。
- 一般使用者:使用 PDFWriter + Cntent Module(s) 產生 PDF
關於如何建立 Cntent Module 可以參考:如何加入新的模組。
這邊只介紹自帶的基本功能:字型、文字、線條、內嵌點陣圖 如果只是產生報表應該還堪用
PS. 文字、線條的功能都是由 Cntent Module 實現,現階段不會太過深入高級功能的開發,而是透過提供介面給予增加功能的彈性。所以只提供最基礎的功能。