1. 开销

1. 开销

我使用 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 文件返回选项,例如

相关内容