使输出的pdf文件二进制相同

使输出的pdf文件二进制相同,pdf,matplotlib,pdf-generation,diff,Pdf,Matplotlib,Pdf Generation,Diff,我正在使用Matplotlib生成大量绘图(数千个)。我会经常调整生成绘图的代码中的一些次要内容,但这些更改通常只会影响少数绘图 当我将新的绘图推送到一个公共存储库时,我希望使用类似于rsync或diff的方法来确定哪些绘图已经实际更改。不幸的是,运行diff new_plot.pdf old_plot.pdf总是将文件标识为不同的,即使打印脚本没有任何更改 当我输出到.png时,文件是相同的。当我输出到.eps时,输出几乎相同,但运行diff显示有几行已交换。我怀疑造成这种差异的原因有两个:

我正在使用Matplotlib生成大量绘图(数千个)。我会经常调整生成绘图的代码中的一些次要内容,但这些更改通常只会影响少数绘图

当我将新的绘图推送到一个公共存储库时,我希望使用类似于
rsync
diff
的方法来确定哪些绘图已经实际更改。不幸的是,运行
diff new_plot.pdf old_plot.pdf
总是将文件标识为不同的,即使打印脚本没有任何更改

当我输出到
.png
时,文件是相同的。当我输出到
.eps
时,输出几乎相同,但运行diff显示有几行已交换。我怀疑造成这种差异的原因有两个:

  • pdf存储元数据,包括时间戳
  • 即使没有相同的描述,某些矢量图形也可能看起来相同(即,可以从右向左或从左向右绘制直线)。我希望matplotlib是确定性的,但它在
    .eps
    实例中的工作方式显然略有不同,所以我想不是
  • 是否有某种方法可以关闭
    .pdf
    元数据,或者强制matplotlib使用更具确定性的绘图方法,或者将文件提供给一个可以将其视为相同的diff工具?

    这包含如何使用设置创建和修改日期。 我已经尝试了代码并执行了
    diff
    ,我的pdf数据之间没有任何差异

    PS:最后两行会影响文件中的差异,因此请尝试使用所需的固定值附加它们:

    d['CreationDate'] = datetime.datetime(2009, 11, 13)
    d['ModDate'] = datetime.datetime.today()
    


    你用什么把matplotlib图形转换成pdf格式?@Joop,我用的是类似于
    FigureCanvasAgg(图)。print_figure(名称)
    (尽管在更复杂的脚本中可能会被分成几行)
    d['CreationDate'] = datetime.datetime(2014, 9, 6)
    d['ModDate'] = datetime.datetime(2014, 9, 6)