IRONSOFTWAREHOME

如何在C# PDF生成中添加自定义断字

Curtis Chau
Curtis Chau
Updated: 2026年3月31日

在C# PDF生成中,自定义断字有助于修复狭窄列、发票、合同和多语言报告中的尴尬间距、词语溢出和劣质文本换行。 当PDF渲染器未应用正确的断字模式时,齐行文本可能会留下大间隙或在行间分布不均。

在IronPDF中,断字是在通过Chromium引擎的HTML到PDF渲染过程中处理的,而不是通过Word风格的文档对象模型。 CSS hyphens: auto属性允许渲染器在有效的音节边界中断文字,IronPDF在生成PDF时应用这种行为。 ChromePdfRenderOptions中控制使用哪些断字模式。

模式文件使用TeX格式,可以从本地文件路径或远程URL加载。 这种方式使用户能够为不同语言和文档布局定义自定义断字规则,并在最终PDF中更好地控制单词断裂。

本指南解释了如何在C#中使用CustomHyphenationDefinitions API,包括本地和远程模式加载、回退行为、限制、错误处理以及缓存。


NuGet使用 NuGet 安装

PM > Install-Package IronPdf

Install IronPDF by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.
快速入门
  1. 1Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. 2复制并运行这段代码。

    using IronPdf;
    
    // Create renderer and assign custom hyphenation patterns from a remote URL
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.CustomHyphenation = new CustomHyphenationDefinitions
    {
        PatternSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.pat.txt",
        ExceptionSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.hyp.txt"
    };
    
    // Render HTML with CSS hyphens:auto to trigger word breaking
    var pdf = renderer.RenderHtmlAsPdf("<div style='text-align:justify; hyphens:auto; width:120px;'>Supercalifragilisticexpialidocious</div>");
    pdf.SaveAs("hyphenated.pdf");
    C#
  3. 3部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronPDF
    arrow pointer

最小化工作流程

  1. 安装IronPDF NuGet包
  2. 创建一个renderer实例
  3. PatternSource路径或URL
  4. 在HTML内容的CSS中包含hyphens
  5. 调用renderer.RenderHtmlAsPdf()并保存结果

自定义断字在PDF渲染中如何工作?

CustomHyphenationDefinitions类定义了IronPDF在渲染过程中从何处加载断字规则。 Chromium引擎读取这些模式并在HTML元素上存在CSS hyphens规则时应用它们。

CustomHyphenationDefinitions类是什么?

类公开了两个属性:

表1:CustomHyphenationDefinitions属性
属性翻译类型必需的说明
PatternSource字符串断字模式文件的路径或URL(例如,hyph-en-us.pat.txt
ExceptionSource字符串断字例外文件的路径或URL(例如,hyph-en-us.hyp.txt

模式文件遵循tex-hyphen项目在GitHub上的页面维护的TeX断字格式。 每种语言在存储库中有两个文件:https://raw.githubusercontent.com/开头)—标准GitHub页面URL返回HTML而非模式文本。

自定义断字如何覆盖内置的语言设置?

HyphenationLanguageChromePdfRenderOptions上为英语(美国)、英语(英国)和俄语提供内置的预设。 当同时设置时,CustomHyphenation属性优先于此枚举,遵循清晰的优先级链:

  1. CustomHyphenation — 如果使用有效的PatternSource设置,则使用自定义模式
  2. HyphenationLanguage—如果未配置自定义模式,则应用内置语言预设
  3. 无ne—如果两者都未设置,则不进行断字

自定义模式加载失败会发生什么?

模式加载期间的错误会被记录,但不会抛出异常。 渲染操作将继续但没有断字而不是失败。 如果还配置了HyphenationLanguage值,则渲染器将退回到该内置预设。

这种静默失败行为是为生产环境的故意设计选择。 网络超时获取远程模式文件、无效文件路径、DNS解析失败或格式错误的模式内容不会导致渲染管道崩溃。PDF仍会生成,只是缺少断字分隔符。

权衡在于可见性。 首次加载时的坏模式文件或无法访问的URL会对以后每次使用这些相同源值的渲染产生静默影响(因为缓存也会存储失败状态)。 建议在应用程序启动或CI/CD部署检查期间验证模式文件并确认对远程URL的网络访问,而不是在渲染时。


如何从远程URL加载模式文件?

PatternSource指向远程URL是应用自定义断字的最快方式,而无需将文件捆绑到项目中。 以下示例加载美国 从tex-hyphen存储库加载英文模式,并呈现一个齐行文本块:

using IronPdf;

var renderer = new ChromePdfRenderer();

// Load custom patterns from a remote TeX hyphenation repository
renderer.RenderingOptions.CustomHyphenation = new CustomHyphenationDefinitions
{
    PatternSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.pat.txt",
    ExceptionSource = "https://raw.githubusercontent.com/hyphenation/tex-hyphen/master/hyph-utf8/tex/generic/hyph-utf8/patterns/txt/hyph-en-us.hyp.txt"
};

string html = @"
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; }
        .narrow-column {
            width: 150px;
            text-align: justify;
            hyphens: auto;
            -webkit-hyphens: auto;
            border: 1px solid #ccc;
            padding: 10px;
        }
    </style>
</head>
<body>
    <div class='narrow-column'>
        The extraordinarily sophisticated implementation demonstrates
        how hyphenation significantly improves the typographical quality
        of justified text in constrained column widths.
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("remote-hyphenation.pdf");

输出

渲染的PDF显示了在音节边界上干净的单词分隔的齐行段落。 没有断字,同一段文本会产生大的词间间隙或溢出列。

Chromium兼容性需要同时使用hyphenate-limit-chars CSS声明。 hyphens规则使得断字最为明显。 如果目标HTML元素上没有CSS声明,自定义模式将被加载但不会被应用。

请注意: URL必须指向原始文本内容。 像https://github.com/hyphenation/tex-hyphen/blob/master/...这样的标准GitHub URL返回的是HTML页面包装,这将导致模式验证失败。 使用https://raw.githubusercontent.com/...格式,或点击GitHub上的"原始"按钮以获取正确的URL。

远程资源约束是什么?

表2:远程URL约束
约束Value
协议HTTP和HTTPS(推荐使用HTTPS)
允许的内容类型text/plain, application/octet-stream
最大响应大小5 MB
请求超时10秒
安全请求到私有/本地IP(10.x.x.x192.168.x.xlocalhost)被阻止,以防止SSRF攻击
拒绝的内容二进制文件、包含空字节的文件、包含<script>标签的文件

容器和云环境(Docker,Azure,AWS)必须具备到模式文件主机的HTTPS出站访问权限,以便远程加载成功。


我最喜欢的这种库是 IronPDF。它允许快速高效地操作 PDF 文件。它还具有许多有价值的功能,比如导出为 PDF/A 格式和数字签名 PDF 文档。

Milan Jovanovic

微软MVP

查看案例研究

IronOCR 意味着我们每年可以节省 $40,000 的人工处理成本,同时提高生产力,并释放资源用于高影响任务。我强烈推荐它。

Brent Matzelle

首席技术官,OPYN

查看案例研究

Iron Suite 在我们的运营中起着至关重要的作用。这些工具提高了业务各方面的效率,包括创建平面图和改善库存管理。

David Jones

首席软件工程师,Agorus Build

查看案例研究

如何从本地文件加载模式文件?

对于外部网络访问受限或构建时捆绑优先的环境,PatternSource还接受本地文件系统路径:

请注意: 运行之前,模式文件必须存在于磁盘上。 从tex-hyphen存储库下载hyph-en-us.hyp.txt并将它们放置在代码引用的路径中。
using IronPdf;

var renderer = new ChromePdfRenderer();

// Load English hyphenation patterns from local files
renderer.RenderingOptions.CustomHyphenation = new CustomHyphenationDefinitions
{
    PatternSource = @"C:\patterns\hyph-en-us.pat.txt",
    ExceptionSource = @"C:\patterns\hyph-en-us.hyp.txt"
};

string html = @"
<html>
<head>
    <style>
        .invoice-container {
            width: 220px;
            text-align: justify;
            hyphens: auto;
            -webkit-hyphens: auto;
            font-family: Georgia, serif;
            font-size: 11px;
            line-height: 1.5;
            border: 1px solid #ddd;
            padding: 12px;
        }
        h3 { font-size: 13px; margin-top: 0; }
        .terms { color: #555; margin-top: 10px; font-size: 9px; }
    </style>
</head>
<body>
    <div class='invoice-container'>
        <h3>Invoice #20260331</h3>
        <p>Nondiscrimination acknowledgement: The undersigned 
        representative hereby confirms that all pharmaceutical 
        reimbursement documentation has been independently 
        verified and cross-referenced against the applicable 
        regulatory framework established by the appropriate 
        governmental oversight authority.</p>
        <p class='terms'>Notwithstanding any indemnification 
        provisions, the counterparty's disproportionate 
        liability shall not exceed the predetermined 
        recharacterization threshold established under the 
        intergovernmental cooperation agreement.</p>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("local-hyphenation.pdf");

输出

如下所示,长单词自动在音节边界处断开,否则会溢出或产生过多空格。 引擎仅在需要时连字符化——适合于一行的单词保持完整。

切换到另一种语言仅需要改变文件路径:

// Switch to French hyphenation — just change the file paths
renderer.RenderingOptions.CustomHyphenation = new CustomHyphenationDefinitions
{
    PatternSource = @"C:\patterns\hyph-fr.pat.txt",
    ExceptionSource = @"C:\patterns\hyph-fr.hyp.txt"
};

这使得PdfHyphenationLanguage枚举涵盖的语言特别有用,该枚举目前仅支持英语(美国)、英语(英国)和俄语。

本地文件约束是什么?

表3:本地文件约束
约束Value
允许的扩展名.txt, .pat
最大文件大小5 MB
编码UTF-8
内容规则仅有效的连字符模式——无评论、元数据、标题、TeX指令或编码说明
拒绝的内容二进制文件、包含空字节的文件、包含<script>标签的文件

缓存如何影响批量渲染的性能?

自定义的断字模式在第一次加载后会在内存中缓存,通过ExceptionSource值进行键控。 引用相同源路径或URL的后续渲染重新使用缓存模式,而无需重新下载或重新读取文件。

这种行为有两个对高容量PDF渲染工作流的实际影响:

**性能:**第一次渲染承担I/O成本(网络请求或磁盘读取)。 从那时起的每次渲染在模式加载方面都实际上是免费的。 对于使用相同连字符配置生成数百个PDF的批量作业,开销可忽略不计。

**静默失败持久性:**由于模式加载期间的错误不会抛出异常,并且渲染器在没有连字符化的情况下继续运行,因此第一个加载时出现的错误模式文件或网络故障将在整个批处理中静默地持续存在。 每次后续渲染也将缺乏连字符化,没有额外的错误信号。 在应用程序启动或部署期间验证模式文件并确认URL可访问性——而不是在渲染时。

**缓存键身份:**缓存键是ExceptionSource则也是如此)。 指向同一URL或文件路径的两个渲染器实例共享相同的缓存模式。 更改URL——即使是同一文件的不同版本——强制重新加载。

在生产部署之前预验证文件内容。 模式文件必须仅包含有效的连字符文本。 存在评论、TeX指令、编码声明或任何非模式内容都会导致集成失败。 tex-hyphen仓库提供为几十种语言预制的干净模式文件。

推荐使用HTTPS作为远程模式源。 支持HTTP,但不提供文件内容的传输层保护。


下一步是什么?

PdfHyphenationLanguage提供的三个内置预设之外。 模式文件从远程URL或本地路径加载,在首次使用后缓存到内存中,若加载失败则退回到HyphenationLanguage设置。 错误被记录但从不抛出,因此模式验证应在部署期间而不是在渲染时进行。

有关相关的IronPDF渲染配置,请参见:

获得IronPDF的30天免费试用以在实际项目中测试自定义连字符,或查看生产部署的许可选项

ChromePdfRenderer PatternSource CustomHyphenationDefinitions string hyphens: auto RenderHtmlAsPdf CustomHyphenationDefinitions hyphens: auto HyphenationLanguage ChromePdfRenderOptions hyph-en-us.pat.txt -webkit-hyphens: auto text-align: justify PdfHyphenationLanguage ChromePdfRenderOptions

常见问题解答

如何在PDF生成中使用C#实现自定义断字?

您可以通过从URL或本地文件加载TeX断字符样来在PDF生成中使用 IronPDF 实现自定义断字。这允许您在使用 C# 生成 PDF 时控制单词断字。

什么是TeX断字符样,它们如何在IronPDF中使用?

TeX断字符样是用于在合适的断字点断开单词的规则集。IronPDF允许您加载这些模式,以管理您的生成PDF中单词的断字方式。

我可以在IronPDF中从URL加载断字符样吗?

是的,IronPDF支持直接从URL加载断字符样,从而实现灵活的动态单词断字配置,适用于您的C# PDF项目。

使用IronPDF可以使用本地文件来加载断字符样吗?

当然,IronPDF允许您从本地文件加载自定义断字符样,从而对PDF中的单词断字进行精确控制。

在IronPDF中使用自定义断字有哪些限制?

在IronPDF中使用自定义断字时,需要确保模式格式正确,并与预期的语言和文档布局要求一致。

为什么我的PDF文件需要自定义断字?

自定义断字有助于提高PDF文件的可读性和确保一致的格式化,特别是在处理针对特定语言的复杂单词断字时。

IronPDF是否提供用于实现自定义断字的代码示例?

是的,IronPDF提供代码示例以帮助您在C#项目中实现自定义断字,使您更容易将此功能集成到PDF生成过程中。

自定义断字如何改进PDF生成?

自定义断字通过允许对单词断字进行精确控制,进而在不同语言和格式下提高文档外观和可读性,从而改进PDF生成。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

准备开始了吗?

Nuget Downloads 20,667,543版本:2026.7刚刚发布

立即获取您的免费30 天试用密钥
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.7

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.7

立即下载

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999

Key in blue circle

立即获取免费的 30 天试用版密钥

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户