首页 >后端开发 >C++ >如何在 iTextSharp PDF 中正确显示中欧和东欧字符?

如何在 iTextSharp PDF 中正确显示中欧和东欧字符?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-13 21:45:49708浏览

How to Display Central and Eastern European Characters Correctly in iTextSharp PDFs?

iTextSharp PDF:处理中欧和东欧字符

本指南解决了使用 iTextSharp 生成的 PDF 中中欧和东欧字符(例如“Č”、“Ć”)显示不正确的常见问题。

问题:使用这些字符生成 PDF 通常会导致渲染错误。

根本原因:有几个因素可能导致此情况:

  • 代码页不正确:可能选择了错误的代码页。
  • 字符编码:代码中特殊字符的处理不当。
  • 字体字形支持:所选字体可能缺少这些字符所需的字形。
  • 字体嵌入:字体可能未嵌入到 PDF 中。
  • 编码定义:字体的编码可能未正确定义。

解决方案:循序渐进的方法

  1. 准确的代码页选择:针对特定语言和字符集使用正确的代码页(例如,捷克语为“Cp1250”)。

  2. Unicode 转义序列: 使用 Unicode 转义序列来实现一致的编码处理,而不是使用文字特殊字符。

  3. 字形支持字体: 选择包含所需字形的字体(如 Arial.ttf 或 FreeSans.ttf)。

  4. 字体嵌入:确保字体嵌入到 PDF 中(将“嵌入”参数设置为 true)以保证正确显示,即使该字体在收件人的系统上不可用。

  5. 字体编码定义:显式定义用于字形解释的编码。 选项包括指定代码页或使用 Unicode 进行水平书写(例如“Cp1250”BaseFont.IDENTITY_H)。

代码示例(说明性):

<code class="language-csharp">using iTextSharp.text;
using iTextSharp.text.pdf;

public class CEECharacterExample
{
    public void CreatePdf(string destination)
    {
        Document document = new Document();
        PdfWriter.GetInstance(document, new FileOutputStream(destination));
        document.Open();

        // Font with glyph support and code page
        Font fontCp1250 = FontFactory.GetFont("resources/fonts/FreeSans.ttf", "Cp1250", true);

        // Font with Unicode encoding
        Font fontUnicode = FontFactory.GetFont("resources/fonts/FreeSans.ttf", BaseFont.IDENTITY_H, true);

        // Paragraphs using different encodings
        Paragraph paragraphCp1250 = new Paragraph("Testing characters: \u010c, \u0106, \u0160, \u017d, \u0110", fontCp1250);
        Paragraph paragraphUnicode = new Paragraph("Testing characters: \u010c, \u0106, \u0160, \u017d, \u0110", fontUnicode);

        // Add paragraphs to the document
        document.Add(paragraphCp1250);
        document.Add(paragraphUnicode);

        document.Close();
    }
}</code>

通过实施这些步骤,您应该可以解决 iTextSharp PDF 中的字符显示问题。请记住将 "resources/fonts/FreeSans.ttf" 替换为字体文件的实际路径。

以上是如何在 iTextSharp PDF 中正确显示中欧和东欧字符?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn