「TheArtOfDev.HtmlRenderer.PdfSharp」的踩雷歷程
TLDR
- 若遇到
PdfGenerator.GeneratePdf執行錯誤,請將PDFsharp版本降級至1.32.3057。 - 若專案編譯失敗,請檢查並移除舊版 NuGet 還原設定(
NuGet.targets)。 - 中文顯示異常時,請在 CSS 中明確指定
font-family為「標楷體」或「DFKai-SB」(視作業系統環境而定)。 - 巢狀表格框線被截斷時,可透過在表格內新增一個高度極小的
<tr>並微調height屬性來修正。
套件初始化與版本衝突
在 .NET Framework 專案中使用 TheArtOfDev.HtmlRenderer.PdfSharp 時,若直接執行範例程式碼,可能會遇到執行時期錯誤。
什麼情況下會遇到這個問題: 初次安裝套件並執行 PdfGenerator.GeneratePdf 方法時。
解決方案:
- 降級相依套件:將
PDFsharp版本降級至1.32.3057。 - 清理 NuGet 設定:若專案檔(
.csproj)中包含舊版的NuGet.targets引用,請將其移除,否則會導致編譯失敗。
csharp
// 成功執行範例
PdfDocument pdf = PdfGenerator.GeneratePdf("<p><h1>Hello World</h1>This is html rendered text</p>", PageSize.A4);
pdf.Save("document.pdf");中文字型顯示異常
預設情況下,該套件對中文字元的支援度有限,若未指定字型,中文將無法正確渲染。
什麼情況下會遇到這個問題: 在 HTML 內容中包含中文字元,且未設定 CSS 字型屬性時。
解決方案: 在 HTML 的 <style> 區塊中強制指定 font-family。
csharp
string html = @"
<style>
* {
font-family: 標楷體;
}
</style>
<p>中文</p>
";TIP
- 在 Windows 中文環境下請使用「標楷體」,英文環境下請改用「DFKai-SB」。
- 目前測試僅「標楷體」與「Malgun Gothic」能穩定顯示中文。
表格框線被截斷
當使用巢狀表格(Nested Table)且內部 <td> 設定了固定的 height 屬性時,容易發生底部框線被截斷的問題。
什麼情況下會遇到這個問題: 當巢狀表格的 <td> 元素高度計算不精確,導致內容溢出或邊框渲染範圍錯誤時。
解決方案: 目前無直接修復參數,建議採取「補丁」策略:在表格末尾手動加入一個高度極小的 <tr>,並透過微調 height 屬性(以 0.5px 為單位)來校正框線位置。
html
<!-- 範例:透過額外 tr 修正框線 -->
<table>
<tr>
<td>
<table class="list">
<tr><td>內容</td></tr>
<!-- 額外增加的 tr 用於校正高度 -->
<tr>
<td colspan="3" style="height: 9px;"></td>
</tr>
</table>
</td>
</tr>
</table>使用心得
TheArtOfDev.HtmlRenderer.PdfSharp 對 CSS 的支援度較 iTextSharp 更為完整,許多在 iTextSharp 無法生效的樣式在此套件中會正常運作,這可能導致原本的排版需要重新調整。但在處理非標準 HTML 結構(如在 <td> 中放置 <hr />)時,其渲染結果可能與現代瀏覽器(如 Chrome)存在差異,建議在開發時針對複雜排版進行多次測試。
異動歷程
- 2023-12-05 初版文件建立。
