Ghostscript - 后记代码的缩进
Posted
技术标签:
【中文标题】Ghostscript - 后记代码的缩进【英文标题】:Ghostscript - Indentation of postscript code 【发布时间】:2020-08-29 20:25:52 【问题描述】:我是否可以选择让 Ghostscript 缩进它创建的 Postscript?
一切都从一行的开头开始,我觉得很难理解。
另外,我正在使用 Emacs 和 ps-mode。
如果有人知道如何在这种模式下缩进代码,我将不胜感激(道歉,因为这可能与此 StackExchange 无关)
【问题讨论】:
【参考方案1】:不,没有缩进输出的选项。
无论如何,PostScript 几乎都被认为是一种只写语言,而 ps2write 的输出(虽然你没有说,但我假设你正在使用它)特别困难,因为它从根本上用 PostScript 程序输出 PDF 语法将其解析为 PostScript 操作。
你为什么要读它?
[编辑]
您可以随时编辑您的问题,无需发布新答案。
恐怕你想做的事情并没有你想的那么简单。
如果您收到的 PDF 文件始终以相同的方式创建,则此用例可能是可能的,但存在重大问题。
您用来替代缺失字体的字体必须以相同的方式编码。例如,PDF 文件中的字体被编码为 0x41 为“A”,您需要确保替换字体也被编码为 0x41 为“A”。所以仅仅 findfont、scalefont、setfont 序列并不总是足够的,有时你需要重新编码字体。
CIDFonts 将是一个主要的绊脚石。首先是因为 ps2write 根本不发出 CIDFonts。这些不是 2 级 PostScript 的一部分。因此,CIDFont 中的所有文本都将嵌入为位图。如果您的原始文件不包含 CIDFont,那么您将获得后备 CIDFont 位图。
其次,CIDFonts 可以使用可变长度的多字节字符代码。您不能简单地将 CIDFont 替换为 Font,它是行不通的。
显然,最好的解决方案是在创建的 PDF 文件中嵌入所需的字体。这是最佳实践。如果您无法做到这一点,那么我建议您使用 Ghostscript 用来查找字体的 fontmap.GS 和 cidfmap 文件,而不是尝试手动编辑 PostScript。
Ghostscript 已经有大量代码可以自动进行字体替换,同时使用 Fonts 和 CIDFonts 作为替代品,并且它会根据需要完成重新编码字体或构建 CMap 的所有艰苦工作。如果您在 Windows 上,可能已经为您完成了大部分操作,当您安装 Ghostscript 时,它会询问您是否要创建字体映射。如果你说是,那么它会
在这些文件中添加您要使用的字体替换(它们有解释布局的 cmets),然后使用 pdfwrite 设备制作一个新的 PDF 文件。将EmbedAllFonts
设置为true(您可能还需要添加一个AlwayEmbed
字体数组,具体列出字体)并将SubsetFonts
设置为false。
这应该创建一个新的 PDF 文件,其中缺少的字体已被您定义的替代品替换,这些替代品将嵌入到新的 PDF 文件中并且它们不会是子集(Acrobat 通常会拒绝在子集字体)。
我上面提到的开关是标准的 Adobe Distiller 参数,但它们是为 pdfwrite here 记录的。有一些关于添加字体 here 和 here 的文档,专门针对 CIDFonts here。
基本上我建议你定义你的替换并让 Ghostscript 为你完成工作。
【讨论】:
请看下面的答案。评论字段太短,我无法回答您的问题“您为什么要阅读它?”【参考方案2】:这不是对问题的回答,而是对 KenS 关于“你为什么要阅读它?”的问题的回答
我试着把它放在评论框中,但它太长了。
我是一名退休工程师,拥有强大的编程背景。
我想阅读和理解后记代码,原因如下。
我把玩重复桥牌作为一种爱好。我收到了一个 PDF 文件,其中包含所谓的公约卡(桥接协议的单页文档)。
我经常想编辑这些文件。
当我使用 Adobe Illustrator 打开时,我必须花费大量时间将系统上不存在的字体替换为我拥有的字体。
我可以使用 Ghostscript 将 PDF 导出为 postscript 文件。
我打算编写一个小程序,将嵌入的字体替换为我用来替换它们的字体。
我打算保持 postscript 文件不变并插入类似的东西
/HelveticaMonospacedPro-RG findfont
12 scalefont setfont
就在文字的上方。
我计划使用我系统上的字体(例如 HelveticaMonospacedPro-RG)。
【讨论】:
以上是关于Ghostscript - 后记代码的缩进的主要内容,如果未能解决你的问题,请参考以下文章