# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- # # This file is part of the LibreOffice project. # # 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/. # # Conversion watch, initially intended to detect if document layout changed since the last time it was run. # # Print a set of docs, compare the pdf against the old run and highlight the differences #
import getopt import os import subprocess import sys import time import uuid import datetime import traceback import threading try: from urllib.parse import quote except ImportError: from urllib import quote
try: import pyuno import uno import unohelper except ImportError:
print("pyuno not found: try to set PYTHONPATH and URE_BOOTSTRAP variables")
print("PYTHONPATH=/installation/opt/program")
print("URE_BOOTSTRAP=file:///installation/opt/program/fundamentalrc") raise
try: from com.sun.star.document import XDocumentEventListener except ImportError:
print("UNO API class not found: try to set URE_BOOTSTRAP variable")
print("URE_BOOTSTRAP=file:///installation/opt/program/fundamentalrc") raise
### utilities ###
def log(*args):
print(*args, flush=True)
def partition(list, pred):
left = []
right = [] for e in list: if pred(e):
left.append(e) else:
right.append(e) return (left, right)
def filelist(dir, suffix): if len(dir) == 0: raise Exception("filelist: empty directory") ifnot(dir[-1] == "/"):
dir += "/"
files = [dir + f for f in os.listdir(dir)] # log(files) return [f for f in files if os.path.isfile(f) and os.path.splitext(f)[1] == suffix]
def getFiles(dirs, suffix):
files = [] for dir in dirs:
files += filelist(dir, suffix) return files
def mkAllImages(dirs, suffix, resolution, reference, failed): if reference:
prtsuffix = ".pdf.reference" else:
prtsuffix = ".pdf" for dir in dirs:
files = filelist(dir, suffix)
log(files) for f in files: if f in failed:
log("Skipping failed: " + f) else:
mkImages(f + prtsuffix, resolution)
def identify(imagefile):
argv = ["identify", "-format", "%k", imagefile]
process = subprocess.Popen(argv, stdout=subprocess.PIPE)
result, _ = process.communicate() if process.wait() != 0: raise Exception("identify failed") if result.partition(b"\n")[0] != b"1":
log("identify result: " + result.decode('utf-8'))
log("DIFFERENCE in " + imagefile)
def compareImages(file):
allimages = [f for f in filelist(os.path.dirname(file), ".jpeg") if f.startswith(file)] # refimages = [f for f in filelist(os.path.dirname(file), ".jpeg") # if f.startswith(file + ".reference")] # log("compareImages: allimages:" + str(allimages))
(refimages, images) = partition(sorted(allimages), lambda f: f.startswith(file + ".pdf.reference")) # log("compareImages: images" + str(images)) for (image, refimage) in zip(images, refimages):
compose(image, refimage, image + ".diff")
identify(image + ".diff") if (len(images) != len(refimages)):
log("DIFFERENT NUMBER OF IMAGES FOR: " + file)
def compareAllImages(dirs, suffix):
log("compareAllImages...") for dir in dirs:
files = filelist(dir, suffix) # log("compareAllImages:" + str(files)) for f in files:
compareImages(f)
log("...compareAllImages done")
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.