1

给定一个具有以下标头的 postscript 文件

%!PS-Adobe-3.0

我想列出文件中使用的所有字体。输出不一定是完美的,但我需要确保我获得了对正在使用的任何字体的所有引用。我知道有不同类型的字体,并且字体可能会或可能不会嵌入到 postscript 文件中。

我目前最好的想法是不区分大小写地 grep/搜索单词 Font 并从那里开始。

  • 这会给我所有的字体参考吗?
  • 有更好的方法来实现这一点吗?

我倾向于将 .NET/C# 用于开发目的,但任何解决方案都值得赞赏。

谢谢,

伯纳德

更新:lhf 的回答解决了这个问题,由于格式和长度限制,我正在根据他的建议添加一个工作使用示例。

可以保存到 .cmd 文件并从命令提示符运行的 Windows 批处理文件:

REM Prerequisites: 
REM - GPL Ghostscript 8.64 @ http://pages.cs.wisc.edu/~ghost/doc/GPL/gpl864.htm
REM - pdffonts @ 3.02pl4 win32 download @ http://www.foolabs.com/xpdf/download.html

REM Add directories to path, contains ps2pdf and its dependency gswin32c.exe
SET PATH=%PATH%;C:\Program Files\gs\gs8.64\lib;C:\Program Files\gs\gs8.64\bin
REM Add pdffonts directory to path
SET PATH=%PATH%;c:\temp\path-toxpdf-3.02pl4-win32

REM Convert postscript file to pdf file
call ps2pdf input.ps temp.pdf

REM list pdf file fonts
call pdffonts temp.pdf

样本输出:

name                                 type              emb sub uni object ID 
------------------------------------ ----------------- --- --- --- ---------
DQRDAA+BCC128Medium-Identity-H       CID TrueType      yes yes no      21  0
MIAVUG+Verdana-Identity-H            CID TrueType      yes yes no      13  0
BKNKQN+Verdana-Identity-H            CID TrueType      yes yes no      10  0
4

3 回答 3

2

将文件转换为 pdf,然后使用 pdffonts(如果有)。

如果您从事 PS 编程,您可以运行一个模拟 PS 解释器(在 PS 中),它会忽略除 findfont 之外的大多数内容。

于 2010-04-26T01:12:05.053 回答
1

如果 PostScript 文件符合PostScript 语言文档结构约定规范,您可以查找以字符串开头的 PostScript 注释:

%%DocumentNeededResources:
%%DocumentSuppliedResources:
%%DocumentFonts:
%%DocumentNeededFonts:
%%DocumentSuppliedFonts:
于 2010-04-27T13:01:15.443 回答
0

尝试以下正则表达式:

@"/.*?\sfindfont"

它会给你一些额外的东西,但你可以从那里玩它。

于 2010-07-08T19:24:53.427 回答