Python 用脚本取消设置PDF字体
我正在使用xhtml2pdf库自动创建PDF。几个月前,我有(我没有使用库中嵌入的字体,所以打印公司无法打印PDF),我没有找到解决方案。因此,我将PDF下载到我的电脑上,并使用Adobe Acrobat Pro删除未使用的字体。但是有没有办法用脚本来实现这一点?不管是什么语言 我在互联网上找到的唯一想法是:。但我不知道如何使用它。(我认为这将删除所有字体,而不是未使用的字体) 非常感谢Java 它可以通过iText库等工具完成;看这里。但这是用Java实现的 (事实上,我已经尝试并构建了一个非常简单的JAR来完成上述操作(即,打开一个压模并调用unused object remove。TFM说这将删除未使用的字体,因此如果您的麻烦字体确实未使用,它应该可以做到这一点)。如果您有一个PDF文件要测试它,我可以试一试——或者我可以给您发送.java和.jar文件。它们是基于iText 5.4.2构建的,您可以): 其他语言(理论上甚至是Python 用脚本取消设置PDF字体,python,c,linux,pdf,fonts,Python,C,Linux,Pdf,Fonts,我正在使用xhtml2pdf库自动创建PDF。几个月前,我有(我没有使用库中嵌入的字体,所以打印公司无法打印PDF),我没有找到解决方案。因此,我将PDF下载到我的电脑上,并使用Adobe Acrobat Pro删除未使用的字体。但是有没有办法用脚本来实现这一点?不管是什么语言 我在互联网上找到的唯一想法是:。但我不知道如何使用它。(我认为这将删除所有字体,而不是未使用的字体) 非常感谢Java 它可以通过iText库等工具完成;看这里。但这是用Java实现的 (事实上,我已经尝试并构建了一个非
bash
script)
在Python、C或shell中,据我所知,还没有任何工具能够做到这一点。但自己写一本也不是不可能的
作为第一步,您需要使用pdftk
解压PDF文件(并非偶然,它是由iText
组成的)。生成的PDF是一个文本文件(好吧,除了第一行和多字节的注意事项…),可以随意检查<例如,代码>grep将起作用
要检测字体使用情况,需要检查格式中的所有行
/Font NNNNNN 0 R
这将告诉您字体引用对象NNNNNN正被某些文本使用。字体引用列表(不是字体)由
grep "^\/Font " $PDFFILE | sort -n -k2.1 | uniq
现在,我们在文件中查找这样的项
NNNNNN 0 obj
<<
/F0 XXXXXX 0 R
/F1 YYYYYY 0 R
>>
pdftk
然后可用于重新压缩生成的PDF文件
我也尝试过使用一些工具,例如,但很少成功。通常,如果文件中使用了字体的某些字符,则该文件中会包含字体。更安全的方法是在pdf文件中嵌入所有字体。假设output.pdf需要印前质量,您可以使用
gswin64c -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dCompressFonts=true -dSubsetFonts=true -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf -f input.pdf
您需要安装ghostscript(),这里给出了选项的描述这与
python
或c
没有任何关系。我知道,语言不重要,但我认为python或c在这方面是最好的。我已经在使用python创建PDFW了,为什么不简单地用你首先需要的字体来制作字体呢?你能给我发送Java文件吗?我已经尝试了很多,但我不能得到这份工作。谢谢!
XXXXXX 0 obj
<<
/Encoding /WinAnsiEncoding
/ToUnicode AAAAAA 0 R
/FontDescriptor BBBBBB 0 R
/Widths [...]
/Subtype /TrueType
/Type /Font
/FirstChar 32
/LastChar 121
/BaseFont /Whatever+Font+Name
>>
xref -- start of XREF (NOT NECESSARILY AT A NEWLINE)
0 3315 -- there are 3315 objects
0000000000 65535 f -- not an object; flags
0000000015 00000 n -- first object is 15 bytes past the beginning of the file
0000033003 00000 n
...
0010169101 00000 n
trailer
<<
/Info 3314 0 R -- the info table, usually just before the XREF (needs renumbering)
/Root 3259 0 R -- the root object ID (needs renumbering)
/Size 3315 -- number of objects, again
>>
startxref
10169367 -- file offset of XREF table above.
%%EOF
gswin64c -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dCompressFonts=true -dSubsetFonts=true -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf -f input.pdf