![1. 开销](https://linux22.com/image/1622519/1.%20%E5%BC%80%E9%94%80.png)
我使用 PyPDF2 创建了一个 PDF 分割器。它将大小超过 20Mb 的 PDF 分割成多个较小的 PDF。
我使用的逻辑是将所有页面拆分为单页 PDF,找出每个页面的大小。将大小相加,直到达到 20 Mb,然后拆分。
我面临的问题是 PDF 中的某些页面几乎与原始 PDF 大小相同。虽然当我手动提取页面时,大小约为 500Kb。
不确定为什么尺寸会增加。请帮我解决这些问题。
for i in range(pdf_reader.numPages):
# New PDF with each page
outputpdf = newpath + '\\' + pp.split('.pdf')[0] + 'page' + str(i+1) +'.pdf'
#PDF Writer
output = PyPDF2.PdfFileWriter()
#Writing each page to PDF Writer
output.addPage(pdf_reader.getPage(i))
#Write into the new PDF
with open(outputpdf, "wb") as outputStream:
output.write(outputStream)
答案1
我使用的逻辑是将所有页面拆分为单页 PDF,找出每个页面的大小。将大小相加,直到达到 20 Mb,然后拆分。
...
不确定为什么 [...] 尺寸会增加。
1. 开销
任何文档格式(例如 PDF)都可能包含大量由许多或所有页面共享的开销材料。一个例子就是一组嵌入字体。
如果您将 100 页的 PDF 拆分为 100 个单独的 PDF 文件,则每个文件都将包含该页面所需的所有开销(如果您的页面拆分库未对此进行优化,则开销会更多) - 因此您最终会得到一组包含 100 份嵌入字体的 PDF。
对于其他共享资源(例如图像和其他更深奥的 PDF 资源)来说,同样的情况也是如此。
您可以使用将单独页面合并回两个 PDF 的功能,例如,合并成两个 50 页的 PDF。如果这些功能无法识别注释元素,则生成的 PDF 文件现在将包含 50 份嵌入字体,而不是一份。
另一个问题可能是字体子集和重新合并。或者缺乏优化的重新合并。
2.压平等
有多种方法可以在打印页面上产生相同的输出。由于您的工具读取一个 PDF 文件并写入另一个,因此其 PDF 写入选项可能与用于创建原始文件的工具不同。
例如,文本可以作为文本和相关字体或一组扁平的曲线轮廓存储在 PDF 中。这样做可以避免使用商业许可字体时出现版权问题。轮廓可能占用更多空间,因为文本中的每个字母“a”都表示为相同曲线的重复,而不是对嵌入字体或标准外部字体中单个常见字形的引用。
PDF 内容的其他部分或类型中可能还存在许多其他类似的差异。
3. 分析
我并不是说这就是正在发生的事情,只是说这种事情是有可能发生的。您可以使用一些分析 PDF 文件内容的工具或使用其他方法或工具来发现更多信息。
搜寻分析 PDF 文件返回选项,例如