【问题标题】:CFDOCUMENT creates PDF with different MD5 hashes for same inputCFDOCUMENT 为相同的输入创建具有不同 MD5 哈希的 PDF
【发布时间】:2011-09-27 18:12:30
【问题描述】:

我正在使用 CFDOCUMENT 在 CF9.0.1 中创建 PDF。但是,每次我使用 CFDOCUMENT 生成新 PDF 时使用相同的输入,MD5 哈希值似乎不同。

测试代码很简单:

<cfdocument name=FileData1 format="PDF" localurl="yes" pagetype="A4"><h3>I am happy!</h3></cfdocument>
<cfdocument name=FileData2 format="PDF" localurl="yes" pagetype="A4"><h3>I am happy!</h3></cfdocument>
<cffile ACTION="write" FILE="C:\happy1.pdf" OUTPUT=#FileData1# ADDNEWLINE=NO NAMECONFLICT="Override">
<cffile ACTION="write" FILE="C:\happy2.pdf" OUTPUT=#FileData2# ADDNEWLINE=NO NAMECONFLICT="Override">

虽然两个 PDF 看起来完全相同,但生成的两个文件都有不同的 MD5 文件哈希。我有一个用户要求,如果文件相同,则忽略 PDF 的重新生成,那么如果给定相同的输入,有谁知道如何强制 CF9 生成具有相同 MD5 哈希(位相似性)的相同 PDF?

我运行了一个 HxD Hex File Compare,发现文件在三个部分有所不同:

  • 字体名称,例如62176/FontName/OJSSWJ+TimesNewRomanPS(OJSSWJ是随机的)
  • 时间戳 /CreationDate(D:20110927152929+08'00')
  • 末尾的某种键:>

提前感谢您的帮助!

【问题讨论】:

    标签: coldfusion coldfusion-9 cfdocument


    【解决方案1】:

    它们永远不会相同。

    时间戳/CreationDate(D:20110927152929+08'00')

    creationDate 是创建时间的时间戳,因此除非您每次都在同一秒创建它,否则它不会相同。

    您也许可以修改 pdf 并删除或修改此位。

    或者使用不同的方法来确定是否应该创建 pdf,创建它与 md5 比较结果似乎是在浪费处理能力。

    【讨论】:

    • 感谢您的 cmets,但我希望有一种方法可以实际强制 PDF 在相同的 HTML 内容上生成相同的 PDF(例如,如果可能,指定一个固定的创建日期)。我的示例大大简化了要求,这是因为正在发生的情况是文件是在多方之间即时生成的,我们需要跟踪传入的文件以确保它不是重复的。
    • 当文件传入时,删除 PDF 中更改的部分,然后 MD5 其余部分并以这种方式检查重复项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2015-02-25
    • 1970-01-01
    相关资源
    最近更新 更多