Logo nach y=5 verschoben, Hoehe via image_dimensions() berechnet, Text darunter
This commit is contained in:
43
app.py
43
app.py
@@ -12,6 +12,41 @@ from datetime import datetime
|
|||||||
from flask import Flask, render_template, request, jsonify, redirect, url_for, send_file
|
from flask import Flask, render_template, request, jsonify, redirect, url_for, send_file
|
||||||
from fpdf import FPDF
|
from fpdf import FPDF
|
||||||
|
|
||||||
|
def image_dimensions(filepath):
|
||||||
|
"""Liest Pixelmasse aus PNG/JPEG/WebP ohne externe Libs.""" # noqa: E501
|
||||||
|
with open(filepath, 'rb') as f:
|
||||||
|
head = f.read(24)
|
||||||
|
if head[:8] == b'\x89PNG\r\n\x1a\n':
|
||||||
|
import struct
|
||||||
|
return struct.unpack('>II', head[16:24])
|
||||||
|
if head[:2] == b'\xff\xd8':
|
||||||
|
import struct
|
||||||
|
with open(filepath, 'rb') as f:
|
||||||
|
data = f.read(8192)
|
||||||
|
i = 2
|
||||||
|
while i < len(data) - 1:
|
||||||
|
if data[i] != 0xFF:
|
||||||
|
i += 1
|
||||||
|
continue
|
||||||
|
marker = data[i+1]
|
||||||
|
if marker in (0xC0, 0xC1, 0xC2):
|
||||||
|
h, w = struct.unpack('>HH', data[i+5:i+9])
|
||||||
|
return w, h
|
||||||
|
length = struct.unpack('>H', data[i+2:i+4])[0]
|
||||||
|
i += 2 + length
|
||||||
|
if head[:4] == b'RIFF' and head[8:12] == b'WEBP':
|
||||||
|
import struct
|
||||||
|
with open(filepath, 'rb') as f:
|
||||||
|
data = f.read(64)
|
||||||
|
if data[12:16] == b'VP8 ' and len(data) >= 30:
|
||||||
|
w, h = struct.unpack('<HH', data[26:30])
|
||||||
|
return (w & 0x3FFF) * 2, (h & 0x3FFF) * 2
|
||||||
|
if data[12:16] == b'VP8L' and len(data) >= 25:
|
||||||
|
bits = struct.unpack('<I', data[21:25])[0]
|
||||||
|
return (bits & 0x3FFF) + 1, ((bits >> 14) & 0x3FFF) + 1
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config['MAX_CONTENT_LENGTH'] = 5 * 1024 * 1024
|
app.config['MAX_CONTENT_LENGTH'] = 5 * 1024 * 1024
|
||||||
CONFIG_FILE = 'druckkalkulation_config.yaml'
|
CONFIG_FILE = 'druckkalkulation_config.yaml'
|
||||||
@@ -256,8 +291,12 @@ def invoice_pdf():
|
|||||||
logo_name = config.get('logo', '')
|
logo_name = config.get('logo', '')
|
||||||
logo_path = os.path.join('static', logo_name) if logo_name else ''
|
logo_path = os.path.join('static', logo_name) if logo_name else ''
|
||||||
if logo_name and os.path.exists(logo_path):
|
if logo_name and os.path.exists(logo_path):
|
||||||
pdf.image(logo_path, x=155, y=8, w=40)
|
pdf.image(logo_path, x=155, y=5, w=40)
|
||||||
logo_bottom = 50
|
img_w, img_h = image_dimensions(logo_path)
|
||||||
|
if img_w and img_h:
|
||||||
|
logo_bottom = 5 + 40 * (img_h / img_w) + 3
|
||||||
|
else:
|
||||||
|
logo_bottom = 5 + 25 + 3
|
||||||
else:
|
else:
|
||||||
pdf.set_font("Arial", "B", 18)
|
pdf.set_font("Arial", "B", 18)
|
||||||
pdf.set_xy(150, 15)
|
pdf.set_xy(150, 15)
|
||||||
|
|||||||
Reference in New Issue
Block a user