pdf - 如何强制 PDFsharp 仅嵌入字体的子集?
问题描述
我能够使用 PDFsharp 和 MigraDoc 成功创建 PDF 文件。两种私有字体(OTF 格式)用于创建单页 PDF。创建的 PDF 包含完全嵌入的两种字体。不幸的是,每种字体也包含中文字母,因此每个字体大小约为 4 MB,导致 PDF 文件大小约为 9 MB(仅包含一页和一点文本!)。:震惊:
是否可以使用这些字体的子集来节省宝贵的空间。问题是我需要创建几千个 PDF 文件,因此文件大小至关重要。
有我可以使用的特殊设置吗? 谁能指出我正确的方向?
更新:我使用 fontforge 提取嵌入的字体子组,发现从 pdf 派生的字体与完整的字体文件完全匹配。所以实际上根本没有使用字体子集。:(
查看 PDFsharp 资源,我发现了该功能
public OpenTypeFontface CreateFontSubSet(Dictionary<int, object> glyphs, bool cidFont)
注释如下:创建一个新的字体图像,它是该字体图像的子集,仅包含指定的字形。 这正是我想在这里使用的。
我不明白的是为什么在创建我的 PDF 时似乎没有使用此功能。 需要满足哪些标准才能使其发挥作用?
解决方案
刚刚找到了一个解决我的问题的方法,不需要大量摆弄额外的 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。哈哈!!!
推荐阅读
- c# - 如何在通用 JSON 中获取所有孩子和孩子的孩子和其他大孩子的总数
- react-native - react-native facebook注销
- javascript - 为什么 slice(0,-1) 不只删除数组上的一个数字
- python-2.7 - 如何在子图中添加刻度
- java - 如何使用硒驱动程序减少表格中的列宽
- excel - Excel 列表框出现在其他隐藏的工作表上
- java - 如何在 Android 中显示 HDR 图片?
- apache - apache将url重定向到默认端口
- ruby-on-rails - 我们最近从 sprockets 更新到 webpack,但我正在努力更新 bootstrap-tokenfield 库
- android - CameraKit 无法按预期工作 v1.0.0 beta 3.11。单击按钮时不拍照