当前位置: 首页 > 知识库问答 >
问题:

如何强制PDFsharp只嵌入字体的子集?

郜联
2023-03-14

更新:我使用fontforge提取嵌入的字体子组,发现从pdf派生的字体与完整的字体文件完全匹配。所以根本没有使用字体子集。:(

在PDFsharp源代码中,我发现了这个函数

public OpenTypeFontface CreateFontSubSet(Dictionary<int, object> glyphs, bool cidFont)

其注释如下:创建一个新的字体图像,该图像是仅包含指定字形的该字体图像的子集。这正是我想在这里用到的。

我不明白的是为什么这个功能似乎没有得到使用时,创建我的PDF。为了使其发挥作用,需要满足哪些标准?

共有1个答案

燕和裕
2023-03-14

刚刚找到了一个解决我的问题,不需要大量的摆弄额外的pdf框架。我能够使用ghostscript(命令行)创建字体子集。

事实上,ghostscript会获取(pdfsharp-)生成的文件并重写它(同时优化字体)。下面是命令行解决方案:

gswin64 -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dCompressFonts=true -dSubsetFonts=true -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=optimized.pdf -c ".setpdfwrite <</NeverEmbed [ ]>> setdistillerparams" -f my_pdfsharp.pdf

我的文件大小约9 MB现在下降到51 KB。伊哈!!!

 类似资料:
  • 经过多次尝试和错误,我终于设法有一些工作-除了字体子集。我这样做的方法是初始化PDFont对象一次使用 然后使用自定义外观流来显示文本。 这段代码会运行,但会创建一个带有点而不是实际字符的PDF,我想这意味着字体子集还没有嵌入。而且,我得到以下警告: 在查看了源代码之后,我发现并且我猜我在创建外观流时搞乱了一些东西--不知何故,它与PDDocument没有连接,子集也不能正常继续。注意,当字体完全

  • 我有一个Spring MVC项目,我正在尝试使用IntelliJ进行调试。 如果我在控制器代码中设置断点,调试会在适当的地方停止。该特定行在另一个bean中有更多我自己的代码。我希望能够进入代码。如果我在断点装配工后立即“介入”,它会进入Spring的AOP框架代码。 如果我立即触发相同的断点和“智能步进”,它会将我置于源文件的第1行(如上图所示)。这一行-1代表什么?如果我再次执行“smart

  • 问题内容: 我想使用某些字体,并且希望它能在客户端计算机上没有该字体的情况下工作。我已经做到了,但是没有用: 问题答案: 以下几行用于在CSS中定义字体 以下几行定义/使用CSS中的字体

  • 问题内容: 我试图找到一个体面的解决方案(尤其是从SEO方面),用于在网页中嵌入字体。第二种解决方案仅适用于标题。是否有针对全文的解决方案?我已经厌倦了网页的标准字体。 谢谢! 问题答案: *自从最初提出并回答这个问题以来,*情况已经发生了变化。对于使用@font-face嵌入来使正文文本起作用的跨浏览器字体嵌入,已经进行了大量工作。 基本上,这可以不破坏任何内容的方式提供OTF,EOT,SVG和

  • 我正在使用FOP 0.94,我也许可以升级到FOP 0.95。是否可以嵌入Bas14字体?如果可以,如何? 我试过把这个放在fop.xconf里: 那行不通。 最好的问候,莫滕

  • 我一直在使用PDFSharp来填充带有AcroForm字段的PDF。我可以使用以下代码设置表单字段的值: 我遇到的问题是,当我试图更改将进入字段的文本的字体时。我能够访问字段的font属性,它允许我像这样设置它: 然而,当我打开保存的PDF时,它默认字体返回到不同的字体。我也试过使用其他字体,比如“Arial”或“Helvetica”,以及不同的大小,但似乎没有一种字体能坚持。 如果我用Foxit