gpt4 book ai didi

pdf - 更改嵌入的 TrueType 字体,以便 Windows GDI 可以使用它

转载 作者:行者123 更新时间:2023-12-04 00:03:08 25 4
gpt4 key购买 nike

我正在尝试将 PDF 内容呈现到 GDI 设备上下文(准确地说是 24 位位图)。将 PDF 流解析为 PDF 对象并从内容字典渲染 PDF 命令效果很好,包括字体渲染。

嵌入字体从它们的 FontFile 流中解压并使用 AddFontMemResourceEx“加载”。 .现在,一些嵌入字体删除了 GDI 需要的一些 TrueType 表,例如“名称”表。正因为如此,我尝试通过将 TrueType 子集字体解析到它的表中来修改字体,并修改那些具有数据丢失/丢失表的表,并使用尽可能正确的信息重新生成。

我使用 Microsoft Font Validator查看生成的字体“正确”程度的工具。我仍然遇到一些错误,例如 maxp 表的最大值通常太大(它是一个子集)或 xAvgCharWidth字段不等于 'OS/2' 表的计算值不正确,但这不会阻止其他嵌入字体可用。使用 PDFCreator 嵌入的字体是有问题的。

问题:

  • 我如何确定我需要什么
    更改为字体文件,以便
    GDI能用吗?
  • 有没有其他字体验证
    可能会给我洞察力的工具
    仍然有什么问题
    字体文件?

  • 如果需要:我可以制作原始字体文件和更改后的字体文件以供在某处下载。

    目前做了哪些修改:
  • 确保有“head”、“hhea”、“maxp”和“OS/2”部分。
  • 如果我们有符号字体,请清除“OS/2”部分中的 Panose 和 Unicode 字段
  • 如果 WInAscent/Desc 和 TypoAsc/Desc 为零,请填写正确的值。
  • 为上标/下标/下划线位置和大小填写可接受的值。
  • 扫描剩余的所有字形,然后在头部填充 X/Y 最小值/最大值。
  • 使用它来自的 PDF 文件中的信息重建名称部分。
  • 最佳答案

    差不多晚了一年,但我找到了答案:

    'cmap' 表和 'name' 表的字体种类(符号与否)应该相同。因此,如果 cmap 具有 3,0,4 cmap(MS、符号、段增量编码)并且名称表包含 3,1,$0409(MS、Unicode、enUS)条目,则不会加载字体。

    看起来“符号 cmap”的存在决定了该字体是否被 Windows 视为符号字体; “OS/2”中的标志似乎无关紧要。

    因此,如果使用“Microsoft Font Validator”字体看起来正确,请检查符号/unicode 字段是否在“cmap”和“name”表中对齐。

    关于pdf - 更改嵌入的 TrueType 字体,以便 Windows GDI 可以使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3036373/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com