我能够成功地使用PDFsharp和MigraDoc创建PDF文件。两种专用字体(OTF格式)用于创建单个页面PDF。创建的PDF包含完全嵌入的两种字体。不幸的是,每种字体都包含中文字母,因此每种字体的大小约为4MB,导致PDF文件大小约为9 MB (仅包含一页文字!)*震惊:
是否可以使用这些字体的子集来节省宝贵的空间。问题是,我需要创建一些思想发送PDF文件,因此文件大小是至关重要的。
有什么特别的设置我可以用吗?能给我指明正确的方向吗?
更新:我使用fontforge提取嵌入式字体子组,并发现从pdf派生的字体与完整的字体文件完全匹配。因此,实际上根本没有使用任何字体子集。:(
查看一下PDFsharp源代码,我发现了这个函数
public OpenTypeFontface CreateFontSubSet(Dictionary<int, object> glyphs, bool cidFont)它的注释如下:创建一个新的字体映像,它是此字体映像的子集,仅包含指定的象形文字。这正是我想在这里使用的。
我不明白的是为什么这个函数在创建我的PDF时似乎没有被使用。需要满足哪些标准才能使其正常工作?
发布于 2018-07-31 15:49:37
刚刚找到了一个解决我的问题,不需要广泛摆弄额外的pdf框架。我能够创建字体子集使用鬼方脚本(命令行)。
实际上,鬼怪脚本接受生成的(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。伊哈!
发布于 2018-07-31 15:35:18
有些字体有"loca表“,有些则没有。loca表将偏移量存储到字体中的象形文字位置。
CreateFontSubSet是而且只能对字体调用,其中包含一个loca表,该表提供创建子集所需的信息。
https://stackoverflow.com/questions/51595903
复制相似问题