Closed MY1L closed 12 months ago
可以考虑在导出信息文件的界面增加导出流对象的功能,不难,但是文件命名要想想怎么处理才好(暂时可能会考虑将流对象按类型分文件夹存储,文件名采用流对象的编号命名)。
PDF嵌入的字体一般是TTF子集,即使将流提取出来,也不能直接为操作系统所用。 阁下有办法做二次处理吗?
但是文件命名要想想怎么处理才好
其它流不清楚,但字体可以考虑加上PS名,或者说被剥离掉字体信息后仅剩的那个被文字调用的字体名称,方便识别。
PDF嵌入的字体一般是TTF子集,即使将流提取出来,也不能直接为操作系统所用。有办法做二次处理吗?
这个一般人可能用不了,但对我而言没问题,已经试过多次了(毕竟我也是做字体的)
其实以前是有代码可以导内嵌数据流的,由于一直没有人提这样的需求,我个人又用不上这些数据流,所以就注释掉了。 现在把这些注释掉的这部分拿回来,再改改就可以了。 主要就是文件命名的事情,得重构上面的代码,增加给数据流命名的部分。
请下载新的测试版。 在“工具箱”的“导出导入信息文件”处,点击“信息文件配置”。 选中如下选项: 关闭对话框, 回到“导出导入信息文件”页面,指定输出信息文件的目录,再点击“导出信息文件”。
在输出信息文件的目录处会找到一个“数据流”文件夹,里面以FontFile2开头的文件就是嵌入到PDF的字体子集数据。
太好了。只是必须勾选“导出字典”,能否仅“导出流”?如果仅导出字体流就更好了,有时会导出一大堆不用的图片流。
用 https://www.unicode.org/charts/PDF/U2F00.pdf 试验:
发现导出许多0KB的流,这些是否可以跳过?
还发现有许多CIDSet.*.dat文件内容在16进制的80
之后全是00
,也可以跳过。
话说pdf里的字体通常会保留一个PostScript名以备调用,是否可以考虑在数字后附加PS名来命名字体流?PDF有时能导出几十个字体流,导致需要逐一打开检查名称。
同时还发现,如果字体流后缀名改为用ttf
,有些较完整的字体就可以直接阅览字体缩略图了,而且也能迅速找到不完整的字体。
啊,刚才发现补丁丁可以查看字体名的,这个名称就可以:
是的,要勾选“导出字典”。 下个版本不导出0KB的流。 CIDSet文件,在80后面很多00之类的暂时别纠结了。 附加PS名是可行的,稍麻烦一点,改改代码就可以。 后缀改TTF是可行的。等我看看是否可判别哪些是完整字体,哪些是字体子集,可按具体情况处理,那就更完善了。
报告一个pdf:https://www.unicode.org/L2/L2022/22046-myanmar-numerals.pdf 目标是提取Myanmarnumerals这个字体。但补丁丁导出的字体流似乎都损坏了,字体软件无法打开。 但别人能使用 https://mupdf.readthedocs.io/en/latest/mutool-extract.html 这个功能从中提取出可以打开的 Myanmarnumerals-Regular.otf(三次曲线) 不清楚问题在哪里。
我查了 mutool 的代码,纯粹就是解压字体流,没什么特殊处理的。 PDF补丁丁也是这样处理。
查 VVSDUS+Myanmarnumerals-Regular 在 PDF 字典里的 Type,可见它是一个 Type1C 字体(CFF 格式)。 试用支持 CFF 格式的字体软件来打开它。 你也可以用字体转换工具(例如:https://convertio.co/cff-ttf ),把它转换成 TTF 或其它形式的字体。
可能是CFF的问题,报错为“字体 head table 缺失”。 不过别人发给我的(.otf)相比补丁丁导出的(.dat,改otf)多出2KB(或别人有修复过?我再问一下对方细节),软件能正常打开前者,是三次曲线的。压缩包附上这2个文件以便研究:22046-myanmar-numerals.zip 一般来说无转换的三次曲线,比二次曲线质量更好,所以我想尽可能不用cff2ttf。呃,发现convertio.co把原始的字形名改了。
继续报告位于Roadmap to the SMP的PDF。用1.0.0.4182版导出字体,
https://www.unicode.org/L2/L2023/23122-kashmiri-sharada.pdf 未能输出目标字体“SatisarSharada”,只有各种微软Calibri字体,不过这些字体都能打开。
我更新了1.0.0.4200版继续,但这次输出的字体流就都打不开了。 重新测试,前述问题未能复现,不过还是未能输出“…Sharada”
https://www.unicode.org/L2/L2023/23019-sidetic.pdf 目标是sidetic字体,但打开检查字体名时报错,强制退出,没能看见字体名。2个版本都是,报错信息如下:
System.ArgumentOutOfRangeException:
有效的 UTF32 值介于 0x000000 和 0x10ffff 之间(包括这两者),而且不能包含代理项码位值(0x00d800 ~ 0x00dfff)。
参数名: utf32
这2个PDF兴许各有什么特别的问题。
未能输出目标字体“SatisarSharada”
有这个字体
用 BabelMap 加载并分析该字体库可见目标字符。
如果导出信息文件时提示编码错误,可以更改输出文档的编码规则。
先前所述的并非“Satisar Sharada”,其实是“S…Sharada Proposal”,不过关键问题已解决。
sidetic仍有一点问题如下。
继续报告PDF,这次只用1.0.0.4200版。
1.有个界面逻辑问题:在PDF补丁丁打开某个PDF(此时位于编辑器界面),点击工具栏“导入导出信息文件”按钮,打开的是一个空白窗口提示导入PDF,没有像预期的那样将已打开的PDF置入,印象中以前版本是可以的。
2.前段时间有新的统一码减字谱提案(IRGN2645,提案文件巨大,因此提取第19页给你:19.pdf。 在编辑器页面,只要鼠标移到减字(应该都是位于私用区增乙的字符,19.pdf亦可复现)上立即报错:
************** 异常文本 **************
System.ArgumentOutOfRangeException: 有效的 UTF32 值介于 0x000000 和 0x10ffff 之间(包括这两者),而且不能包含代理项码位值(0x00d800 ~ 0x00dfff)。
参数名: utf32
……
这就没法操作了,由于先前sidetic那个文档也是这样(鼠标移到塞德文字上立即报错),想了解是什么原因。
看见你用的BabelMap似乎没有汉化完全?恰好我做了统一码各种名词翻译,译名经过考据,可用于汉化:https://github.com/MY1L/Unicode/tree/main/Blocks
先前所述的并非“Satisar Sharada”,其实是“S…Sharada Proposal”,不过关键问题已解决。
sidetic仍有一点问题如下。
继续报告PDF,这次只用1.0.0.4200版。
1.有个界面逻辑问题:在PDF补丁丁打开某个PDF(此时位于编辑器界面),点击工具栏“导入导出信息文件”按钮,打开的是一个空白窗口提示导入PDF,没有像预期的那样将已打开的PDF置入,印象中以前版本是可以的。
那个界面没有那种设计。带有批量处理列表的功能都没有那种设计。
2.前段时间有新的统一码减字谱提案(IRGN2645,提案文件巨大,因此提取第19页给你:19.pdf。 在编辑器页面,只要鼠标移到减字(应该都是位于私用区增乙的字符,19.pdf亦可复现)上立即报错:
************** 异常文本 ************** System.ArgumentOutOfRangeException: 有效的 UTF32 值介于 0x000000 和 0x10ffff 之间(包括这两者),而且不能包含代理项码位值(0x00d800 ~ 0x00dfff)。 参数名: utf32 ……
这就没法操作了,由于先前sidetic那个文档也是这样(鼠标移到塞德文字上立即报错),想了解是什么原因。
属于缺陷。下个版本将其修复。
看见你用的BabelMap似乎没有汉化完全?恰好我做了统一码各种名词翻译,译名经过考据,可用于汉化:https://github.com/MY1L/Unicode/tree/main/Blocks
谢谢告知。是我特意没汉化不常用的语种区块(保留英文)。这样常用的中日韩等汉语言体系、拉丁语种和通用区块就会比较明显。
使用场景 出于文字学术研究的目的,在 这 些 页 面 中有上百个PDF需要提取字体,只因这些PDF必须自定义字体以显示通常系统字体不支持的文字(不然就不成学术问题了)
功能应该怎样实现 界面、操作方式均同“提取图片”,仅无损导出stream即可,能批量导出就更好了,剩余(如判断文件真实格式加后缀名等等)我自己解决。
类似软件 我只用过PDF补丁丁1.0.0.4172版提取字体,但用的是探查器功能,非常艰苦。