【问题标题】:How to create and use custom fonts for PDF document generation如何为 PDF 文档生成创建和使用自定义字体
【发布时间】:2016-08-06 01:03:05
【问题描述】:

我想用附加符号扩展位于传统 MS Windows 字体包中的 truetype 字体,并使用它生成新的 pdf 文档。有可能吗?

【问题讨论】:

  • 是的。如果您创建符合 TrueType 格式的新 TrueType 字体,则可以将其用于 PDF 文档生成,例如使用 iTextSharp。但是,您需要字体软件来创建这样的字体。你确定这是一个 iTextSharp 问题吗?
  • @BrunoLowagie 尽管为了增加该评论的技术正确性,TrueType 格式已经过时了几十年,不久前已被 OpenType相当 取代。话虽如此:修改 Microsoft 的字体是非法,因为它们的许可证禁止修改,所以:是的,你可以,但是:不,你不应该。相反,格式化您的源代码以使用字体堆栈,以便为您在文档中使用的字母(或实际上是字形)使用正确的字体
  • @Mike'Pomax'Kamermans 这就是我写“If you create a new TrueType”字体的原因。当你告诉他们由于许可证问题他们不能做某事时,他们可能会非常讨厌。看看我对iTextSharp license 的回答。答案是正确的,并被接受。然而,它有 26 票反对票和 22 票赞成票。如果你告诉他们他们不想听到的真相,人们可能会非常刻薄。
  • @Malhotra 你问过“这可能吗?”并得到了答案(是的,但很可能是非法的)。考虑到您的编辑(添加标签),您似乎仍在等待更多。那到底是什么?
  • 我对不同的产品进行了小调查,并为我的案件找到了法律解决方案。第一种方法是基于自定义符号图像(字形)的 Type3 字体,另一种是使用 EUDC 符号扩展所选字体(借助 Windows 的标准 eudcedit 工具)。

标签: pdf fonts pdf-generation itextsharp apitron


【解决方案1】:

使用内置 EUDC 编辑器 (Windows) 设计自定义 TrueType 字体

您可以使用任何能够处理 TrueTypeOpenType 字体的字体编辑器,最简单和可用的是 Microsoft 提供并随 Windows 提供的最终用户字符编辑器。它被称为 eudcedit,可以通过在运行窗口中执行 eudcedit 命令来运行它(可以通过按 Windows 键 + R 调用)。编辑器启动,您现在可以设计使用其图形工具您自己的角色,并定义他们的代码。当您完成字符设计后,您可以通过选择文件 -> 字体链接...并在调用的对话框中按 OK 来保存它们。

从现在开始,如果这些最终用户定义的字符实现了 EUDC 支持,则它们可以被许多文本编辑和查看应用程序使用。如果他们使用 Windows API 来显示文本,它将自动工作。

我们将设计一些简单的字符,并在 PDF 生成例程中使用生成的字体。请参阅下图,显示字符编辑器窗口、代码分配和字体保存过程。

指定的字符代码在上图中突出显示,我们使用默认指定的字符代码,但可以使用任何允许的代码。我们可以使用设计和保存的字符并创建一个包含它的 PDF 文件。 为了让它工作,让我们从 windows 字体目录复制生成的字体,并通过将其扩展名从 tte 更改为 ttf 来重命名生成的文件。

假设操作系统安装在“C:\Windows”,我们要将文件复制到“C:\customfonts\eudc.ttf”,它看起来如下(使用命令提示符)。以下代码生成包含我们创建的字符的 PDF 文件(使用 Apitron.PDF.Kit 的 API for .NET):

// create document
FlowDocument document = new FlowDocument() { Margin = new Thickness(5) };
           
// lets create the village, using \uE000 charcode for each symbol
document.Add(new TextBlock("\uE000\uE000\uE000\uE000\uE000\uE000\uE000\uE000")
                { Font = new Font(@"c:\customfonts\eudc.ttf", 20) });

// generate PDF document
using (Stream stream = File.Create("CustomFontsUsageSample.pdf"))
{               
    document.Write(stream, new ResourceManager(), new PageBoundary(Boundaries.A4));
}

下图展示了结果:

此外,此自定义字体将嵌入到生成的文档中,使其可以在其他显然没有安装我们的自定义字体的设备上查看。

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 2015-08-23
    • 2017-07-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    相关资源
    最近更新 更多