首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

iText 在 PdfTemplate 中實現文字粗體與斜體效果(Matrix 變換法)

     編輯:Java 相關知識

iText 的 PdfTemplate(繼承 PdfContentByte)沒有直接提供「設定粗體/斜體」的 API。本文揭示利用文字矩陣(setTextMatrix)進行幾何變換,模擬粗體(水平擴展)與斜體(傾斜切變)效果的實用技巧。

核心概念:文字矩陣

PDF 文字渲染使用 6 參數矩陣 [a, b, c, d, e, f] 對應 3x3 仿射變換矩陣:

[ a  b  0 ]
[ c  d  0 ]
[ e  f  1 ]
  • a:水平縮放(預設 1)
  • d:垂直縮放(預設 1)
  • c:切變(傾斜)因子
  • e, f:位移

模擬粗體:水平微幅放大 + 垂直微調

float ta = 1f, tb = 0f, tc = 0f, td = 1f, tx = 0f, ty = 0f;
ta += 0.15f;   // 水平放大 15%
td += 0.05f;   // 垂直微放大 5%
ty -= 0.15f;   // 向下微移修正基線

模擬斜體:切變變換

tc += 0.3f;  // 正值向右傾斜(約 16.7 度)

完整程式碼片段

PdfTemplate template = cb.createTemplate(width, height);
cb.addTemplate(template, 1f, 0f, 0f, 1f, 0f, 0f);  // 單位矩陣放置

// 一般文字
template.saveState();
template.beginText();
template.moveText(5f, 5f);
template.showText("Normal Text");
template.endText();
template.restoreState();

// 粗體 + 斜體文字
float ta = 1f, tb = 0f, tc = 0.3f, td = 1f, tx = 0f, ty = 0f;
ta += 0.15f; td += 0.05f; ty -= 0.15f;  // 粗體參數
// tc = 0.3f 已設為斜體

template.saveState();
template.beginText();
template.moveText(5f, 5f);
template.setTextMatrix(ta, tb, tc, td, tx, ty);  // 套用變換
template.showText("Bold & Italic Text");
template.endText();
template.restoreState();

注意事項

  1. 參數需經實測微調,字體、字號不同最佳值不同。
  2. 此法為幾何變形,非真正字體切換,PDF 檔案不攜帶字體風格資訊,搜尋/複製文字不受影響。
  3. 若需真正粗體/斜體,請載入對應字體檔(如 SimSun-Bold.ttf、SimSun-Italic.ttf)並用 BaseFont.createFont 註冊。

矩陣變換速查表

效果調整參數方向
放大/縮小a, d>1 放大,<1 縮小
水平鏡像a = -1左右翻轉
垂直鏡像d = -1上下翻轉
順時針旋轉 90°a=0, b=1, c=-1, d=0旋轉
斜體(切變)c (或 b)正值右傾/左傾
位移e (tx), f (ty)移動基線位置

參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved