Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用脚本取消设置PDF字体_Python_C_Linux_Pdf_Fonts - Fatal编程技术网

Python 用脚本取消设置PDF字体

Python 用脚本取消设置PDF字体,python,c,linux,pdf,fonts,Python,C,Linux,Pdf,Fonts,我正在使用xhtml2pdf库自动创建PDF。几个月前,我有(我没有使用库中嵌入的字体,所以打印公司无法打印PDF),我没有找到解决方案。因此,我将PDF下载到我的电脑上,并使用Adobe Acrobat Pro删除未使用的字体。但是有没有办法用脚本来实现这一点?不管是什么语言 我在互联网上找到的唯一想法是:。但我不知道如何使用它。(我认为这将删除所有字体,而不是未使用的字体) 非常感谢Java 它可以通过iText库等工具完成;看这里。但这是用Java实现的 (事实上,我已经尝试并构建了一个非

我正在使用xhtml2pdf库自动创建PDF。几个月前,我有(我没有使用库中嵌入的字体,所以打印公司无法打印PDF),我没有找到解决方案。因此,我将PDF下载到我的电脑上,并使用Adobe Acrobat Pro删除未使用的字体。但是有没有办法用脚本来实现这一点?不管是什么语言

我在互联网上找到的唯一想法是:。但我不知道如何使用它。(我认为这将删除所有字体,而不是未使用的字体)

非常感谢

Java 它可以通过iText库等工具完成;看这里。但这是用Java实现的

(事实上,我已经尝试并构建了一个非常简单的JAR来完成上述操作(即,打开一个压模并调用unused object remove。TFM说这将删除未使用的字体,因此如果您的麻烦字体确实未使用,它应该可以做到这一点)。如果您有一个PDF文件要测试它,我可以试一试——或者我可以给您发送.java和.jar文件。它们是基于iText 5.4.2构建的,您可以):

其他语言(理论上甚至是
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