diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2024-06-04 16:14:15 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2024-06-04 17:27:40 +0200 |
commit | e42b7ab0c796f5b2a985cdac56b1c342c5501984 (patch) | |
tree | 4ee4da087868d1737c1915352ea43cb589b4db00 /bin/diff-pdf-page.py | |
parent | da4259bd7fef35185418cad7a695268add6341a2 (diff) |
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
Diffstat (limited to 'bin/diff-pdf-page.py')
-rwxr-xr-x | bin/diff-pdf-page.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/bin/diff-pdf-page.py b/bin/diff-pdf-page.py new file mode 100755 index 000000000000..153654d5d386 --- /dev/null +++ b/bin/diff-pdf-page.py @@ -0,0 +1,42 @@ +#!/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: |