office-gobmx/bin/diff-pdf-page.py
Miklos Vajna e42b7ab0c7 bin: add a diff-pdf-page.py script to diff reference vs our rendering via PDF
Thanks László Németh for the idea, the mechanism used in the tool was
also used to generate the visual diff visible at
<https://wiki.documentfoundation.org/ReleaseNotes/24.2#New_line_break_algorithm_for_interoperability>.

Change-Id: I51afb08c60c7134f75a54acdb94b49d2ff94befd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168404
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
2024-06-04 17:27:40 +02:00

42 lines
1.7 KiB
Python
Executable file

#!/usr/bin/env python3
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# Diffs two PDF pages: a reference and our own output. Red output means some to fix: the amount of
# red is meant to reduce as fixing progresses. Sample usage:
#
# bin/diff-pdf-page.py reference.pdf test.pdf diff.png
import argparse
import tempfile
import subprocess
def run(argv):
print(" ".join(argv))
subprocess.run(argv, check=True)
def main():
parser = argparse.ArgumentParser(description="Diffs two PDF pages, first is painted red instead of black, the second is painted on top of the first.")
parser.add_argument("-d", "--density", default="384")
parser.add_argument("-p", "--page", default="0")
parser.add_argument("a_pdf")
parser.add_argument("b_pdf")
parser.add_argument("diff_png")
args = parser.parse_args()
a_png = tempfile.NamedTemporaryFile(suffix=".png")
a_pdf = args.a_pdf + "[" + args.page + "]"
run(["convert", "-density", args.density, a_pdf, "-colorspace", "RGB", "-fuzz", "95%", "-fill", "red", "-opaque", "black", a_png.name])
b_png = tempfile.NamedTemporaryFile(suffix=".png")
b_pdf = args.b_pdf + "[" + args.page + "]"
run(["convert", "-density", args.density, b_pdf, "-colorspace", "RGB", b_png.name])
composite_png = tempfile.NamedTemporaryFile(suffix=".png")
run(["convert", "-composite", a_png.name, b_png.name, composite_png.name])
run(["convert", composite_png.name, "-background", "white", "-flatten", args.diff_png])
if __name__ == "__main__":
main()
# vim:set shiftwidth=4 softtabstop=4 expandtab: