4

wkhtmltopdf から生成されたコンテンツが実行ごとに同じであることを確認しようとしていますが、wkhtmltopdf を実行するたびに、同じページに対して異なるハッシュ/チェックサム値が取得されます。次のような html ページを使用するような、本当に基本的なことを話しています。

<html>
<body>
<p> This is some text</p>
</body
</html>

次の驚くべき行を使用して wkhtmltopdf を実行するたびに、異なる md5 または sha256 ハッシュを取得します。

./wkhtmltopdf example.html ~/Documents/a.pdf

そして、次の python ハッシュを使用します。

def shasum(filename):
    sha = hashlib.sha256()
    with open(filename,'rb') as f: 
        for chunk in iter(lambda: f.read(128*sha.block_size), b''): 
            sha.update(chunk)
    return sha.hexdigest()

または、sha256 を md5 と交換するだけの md5 バージョン

wkhtmltopdf が別のチェックサムを引き起こすのに十分な別のファイルを生成するのはなぜですか?それを行わない方法はありますか? これを防ぐために渡すことができるコマンドラインはありますか?

--default-header、--no-pdf-compression、--disable-smart-shrinking を試しました

これはMAC osx上にありますが、これらのpdfを他のマシンで生成し、同じ結果でダウンロードしました。

wkhtmltopdf バージョン = 0.10.0 rc2

4

4 に答える 4

0

単純な正規表現で作成日を削除することで、この問題を解決しました。

preg_replace("/\\/CreationDate \\(D:.*\\)\\n/uim", "", $file_contents, 1);

これを行うと、毎回一貫したチェックサムを取得できます。

于 2016-01-28T04:18:45.937 に答える
0

私のドキュメントでは、インデックスが Carlos の 74 とは異なっていたので、Carlos に触発されて、ハードコーディングされたインデックスを使用しないソリューションを作成しました。

また、ファイルをまだ開いていません。また、無かった場合の早期返却も承ってCreationDateおります。

def copy_wkhtmltopdf_creation_date(to, from)
  index, date = File.foreach(from).reduce(0) do |acc, line|
    if line.index("CreationDate")
      break [acc + line.index(/\d{14}/), $~[0]]
    else
      acc + line.bytesize
    end
  end

  if date # IE, yes this is a wkhtmltopdf document
    File.open(to, "r+") do |to|
      to.pos = index
      to.write(date)
    end
  end
end
于 2015-06-30T00:46:50.830 に答える