PDF 產生中的字元編碼問題
在產生 PDF 時,捷克字元(如“Č”和“Ć”)顯示不正確。此問題源自於多種因素,包括字元編碼和字體選擇。
編碼注意事項
首先,區分用於中歐和東歐語言的西里爾字母和拉丁字母非常重要。代碼頁 1250 和 1251 代表這些區域的不同字元編碼。
文本編碼實務
Unicode 是現代應用程式推薦的文字編碼標準。但是,如果意外更改編碼,則以純文字儲存程式碼檔案可能會導致資料損壞。考慮使用 u 表示法表示特殊字符,而不是直接將它們包含在代碼中。
字型選擇
Helvetica 不適合渲染捷克字元。 Arial 或 FreeSans 是更好的選擇。此外,將嵌入參數設為 true 可確保字體包含在 PDF 中,以便在不同系統上保持一致的渲染效果。
字型編碼
使用內嵌字體時,您可以指定字體編碼。 Cp1250 指定代碼頁 1250 編碼,從而為每個字元產生單字節表示。或者,IDENTITY_H 表示 Unicode 編碼,它每個字元使用多個位元組。對於 PDF/A 和 PDF/UA 等現代標準,建議使用 Unicode 編碼。
範例
以下程式碼示範了在 Cp1250 和 IDENTITY_H 編碼中使用 FreeSans 字型的解決方案:
<code class="language-java">public static void createPdf(String dest) throws IOException, DocumentException { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(dest)); document.open(); // Cp1250 编码 Font f1 = FontFactory.getFont("resources/fonts/FreeSans.ttf", "Cp1250", true); Paragraph p1 = new Paragraph("测试字母 \u010c,\u0106,\u0160,\u017d,\u0110", f1); document.add(p1); // Unicode 编码 Font f2 = FontFactory.getFont("resources/fonts/FreeSans.ttf", BaseFont.IDENTITY_H, true); Paragraph p2 = new Paragraph("测试字母 \u010c,\u0106,\u0160,\u017d,\u0110", f2); document.add(p2); document.close(); }</code>
結論
在 PDF 產生中處理國際字元並非易事。正確處理字元編碼和字體選擇對於準確表示文字至關重要。
以上是產生PDF時如何正確顯示捷克語字元(Č、Ć等)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!