180 lines
5.2 KiB
Python
180 lines
5.2 KiB
Python
import json
|
|
import subprocess
|
|
import sys
|
|
from PIL import Image
|
|
import os
|
|
|
|
from pdf2image import convert_from_path
|
|
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
|
|
|
|
from libs.utils import utils
|
|
|
|
json_object = json.loads(sys.argv[1])
|
|
shipping_label_url = json_object["shipping_label_url"]
|
|
customer_first_name = json_object["customer_first_name"]
|
|
package_size = json_object["package_size"]
|
|
|
|
if shipping_label_url is None or customer_first_name is None or package_size is None:
|
|
print("Missing required parameters")
|
|
sys.exit(1)
|
|
|
|
shipping_label_url = shipping_label_url["value"]
|
|
customer_first_name = customer_first_name["value"]
|
|
package_size = package_size["value"]
|
|
|
|
# define which html to use
|
|
package_label_html = "indexStandardPackage.html"
|
|
|
|
if package_size.startswith("#2"):
|
|
package_label_html = "indexLargePackage.html"
|
|
|
|
|
|
def createHighDpiPng(sourceHtml, outputPng):
|
|
# Calculate scaled dimensions
|
|
scale_factor = 2
|
|
width = int(2192 * scale_factor) # Original width in pixels multiplied by the scale factor
|
|
height = int(386 * scale_factor) # Original height in pixels multiplied by the scale factor
|
|
|
|
command = [
|
|
"google-chrome-stable",
|
|
"--headless",
|
|
"--no-sandbox",
|
|
"--disable-gpu",
|
|
"--screenshot=" + outputPng,
|
|
"--window-size={},{}".format(width, height), # Set window size to scaled dimensions
|
|
"--force-device-scale-factor={}".format(scale_factor), # Set device scale factor
|
|
sourceHtml,
|
|
]
|
|
|
|
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
_, stderr = process.communicate()
|
|
|
|
if process.returncode != 0:
|
|
print("Error creating PNG")
|
|
print(stderr.decode()) # Decoding the stderr for better readability
|
|
sys.exit(1)
|
|
|
|
def downloadFilePNG(url, filename):
|
|
command = [
|
|
"curl",
|
|
"-o",
|
|
filename,
|
|
url,
|
|
]
|
|
|
|
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
_, stderr = process.communicate()
|
|
|
|
if process.returncode != 0:
|
|
print("Error downloading file")
|
|
print(stderr.decode()) # Decoding the stderr for better readability
|
|
sys.exit(1)
|
|
|
|
# use PIL to rotate the image by 90 degrees
|
|
|
|
image = Image.open(filename)
|
|
|
|
# Rotate the image by 90 degrees
|
|
|
|
rotated_image = image.rotate(90, expand=True)
|
|
|
|
# Save the rotated image
|
|
|
|
rotated_image.save(filename)
|
|
|
|
def downloadFilePDF(url, filename):
|
|
pdf_filename = filename + ".pdf"
|
|
|
|
command = [
|
|
"curl",
|
|
"-L", # Follow redirects
|
|
"-o",
|
|
pdf_filename,
|
|
url,
|
|
]
|
|
|
|
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
stdout, stderr = process.communicate()
|
|
|
|
if process.returncode != 0:
|
|
print("Error downloading file")
|
|
print("STDOUT:")
|
|
print(stdout.decode()) # Decoding the stdout for better readability
|
|
print("STDERR:")
|
|
print(stderr.decode()) # Decoding the stderr for better readability
|
|
sys.exit(1)
|
|
|
|
# Convert the PDF to a PNG
|
|
images = convert_from_path(pdf_filename, dpi=300)
|
|
|
|
page = images[0]
|
|
|
|
h = page.height/2
|
|
spacing = 250
|
|
|
|
# box=(left, upper, right, lower)
|
|
page.crop((0, spacing, page.width, h-spacing)
|
|
).save(filename, 'PNG')
|
|
|
|
def downloadFilePDFDHL(url, filename):
|
|
pdf_filename = filename + ".pdf"
|
|
|
|
command = [
|
|
"curl",
|
|
"-L", # Follow redirects
|
|
"-o",
|
|
pdf_filename,
|
|
url,
|
|
]
|
|
|
|
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
stdout, stderr = process.communicate()
|
|
|
|
if process.returncode != 0:
|
|
print("Error downloading file")
|
|
print("STDOUT:")
|
|
print(stdout.decode()) # Decoding the stdout for better readability
|
|
print("STDERR:")
|
|
print(stderr.decode()) # Decoding the stderr for better readability
|
|
sys.exit(1)
|
|
|
|
# Convert the PDF to a PNG
|
|
images = convert_from_path(pdf_filename, dpi=300)
|
|
|
|
page = images[0]
|
|
|
|
# box=(left, upper, right, lower)
|
|
#page.crop((0, spacing, page.width, h-spacing)).save(filename, 'PNG')
|
|
page.rotate(90, expand=1).save(filename, 'PNG')
|
|
|
|
|
|
def replacePlaceholder():
|
|
with open(package_label_html, "r") as file:
|
|
index_html = file.read()
|
|
|
|
index_html = index_html.replace("{{CUSTOMER_FIRST_NAME}}", customer_first_name)
|
|
|
|
with open(package_label_html, "w") as file:
|
|
file.write(index_html)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
utils.move_files_back_from_old_files()
|
|
|
|
print(f"Creating package label for {customer_first_name}")
|
|
|
|
#if shipping_label_url contains .pdf, download the file and convert it to a PNG
|
|
if "247f81-22.myshopify.com" in shipping_label_url:
|
|
downloadFilePDFDHL(shipping_label_url, "label.png")
|
|
elif ".pdf" in shipping_label_url or "https://cloud.umbach.dev/" in shipping_label_url:
|
|
downloadFilePDF(shipping_label_url, "label.png")
|
|
else:
|
|
downloadFilePNG(shipping_label_url, "label.png")
|
|
|
|
replacePlaceholder()
|
|
|
|
createHighDpiPng(package_label_html, "Versandlabel.png")
|
|
|
|
utils.clear_workspace(["indexStandardPackage.html", "indexLargePackage.html", "label.png.pdf", "label.png"])
|