modified: QUICKSTART.md

modified:   app.py
	deleted:    output/.gitkeep
	modified:   static/css/style.css
	modified:   static/js/pdf-tools.js
	modified:   templates/pdf_tools.html
	deleted:    uploads/.gitkeep
This commit is contained in:
SimolZimol
2025-10-12 23:50:26 +02:00
parent a01a5c1274
commit 1097fa0c64
7 changed files with 359 additions and 20 deletions

78
app.py
View File

@@ -204,12 +204,17 @@ def upload_pdf():
pdf_reader = PyPDF2.PdfReader(pdf_file)
page_count = len(pdf_reader.pages)
# PDF Vorschau erstellen
preview_filename = create_pdf_preview(unique_filename)
return jsonify({
'success': True,
'filename': unique_filename,
'original_name': filename,
'page_count': page_count,
'size': os.path.getsize(file_path)
'size': os.path.getsize(file_path),
'preview': preview_filename,
'rotation': 0 # Standardrotation
})
return jsonify({'error': 'Nur PDF-Dateien sind erlaubt'}), 400
@@ -217,6 +222,29 @@ def upload_pdf():
except Exception as e:
return jsonify({'error': f'Fehler beim Upload: {str(e)}'}), 500
def create_pdf_preview(pdf_filename):
"""Erstellt eine Vorschau der ersten PDF-Seite"""
try:
pdf_path = os.path.join(UPLOAD_FOLDER, pdf_filename)
# PDF zu Bild konvertieren (nur erste Seite)
images = pdf2image.convert_from_path(pdf_path, first_page=1, last_page=1, dpi=150)
if images:
# Vorschau-Dateiname generieren
preview_filename = f"preview_{pdf_filename.rsplit('.', 1)[0]}.png"
preview_path = os.path.join(UPLOAD_FOLDER, preview_filename)
# Bild speichern
images[0].save(preview_path, 'PNG')
return preview_filename
return None
except Exception as e:
print(f"Fehler beim Erstellen der PDF-Vorschau: {str(e)}")
return None
@app.route('/api/pdf-to-images', methods=['POST'])
def pdf_to_images():
"""Konvertiert PDF zu Bildern"""
@@ -262,18 +290,31 @@ def merge_pdfs():
"""Fügt mehrere PDFs zusammen"""
try:
data = request.get_json()
filenames = data.get('filenames', [])
files_data = data.get('files', [])
if len(filenames) < 2:
if len(files_data) < 2:
return jsonify({'error': 'Mindestens 2 PDF-Dateien erforderlich'}), 400
# PDF Merger erstellen
merger = PyPDF2.PdfMerger()
for filename in filenames:
for file_data in files_data:
filename = file_data.get('filename')
rotation = file_data.get('rotation', 0)
file_path = os.path.join(UPLOAD_FOLDER, filename)
if os.path.exists(file_path):
merger.append(file_path)
if rotation != 0:
# PDF mit Rotation erstellen
rotated_pdf_path = create_rotated_pdf(file_path, rotation)
if rotated_pdf_path:
merger.append(rotated_pdf_path)
# Temporäre rotierte PDF löschen nach dem Hinzufügen
os.remove(rotated_pdf_path)
else:
merger.append(file_path) # Fallback ohne Rotation
else:
merger.append(file_path)
# Zusammengeführte PDF speichern
output_filename = f"merged_pdf_{str(uuid.uuid4())[:8]}.pdf"
@@ -287,12 +328,37 @@ def merge_pdfs():
return jsonify({
'success': True,
'filename': output_filename,
'message': f'{len(filenames)} PDFs erfolgreich zusammengeführt'
'message': f'{len(files_data)} PDFs erfolgreich zusammengeführt'
})
except Exception as e:
return jsonify({'error': f'Fehler beim Zusammenführen: {str(e)}'}), 500
def create_rotated_pdf(pdf_path, rotation):
"""Erstellt eine rotierte Version der PDF"""
try:
# Temporären Dateinamen für rotierte PDF erstellen
temp_filename = f"temp_rotated_{str(uuid.uuid4())[:8]}.pdf"
temp_path = os.path.join(UPLOAD_FOLDER, temp_filename)
with open(pdf_path, 'rb') as input_file:
pdf_reader = PyPDF2.PdfReader(input_file)
pdf_writer = PyPDF2.PdfWriter()
for page in pdf_reader.pages:
# Seite rotieren
rotated_page = page.rotate(rotation)
pdf_writer.add_page(rotated_page)
with open(temp_path, 'wb') as output_file:
pdf_writer.write(output_file)
return temp_path
except Exception as e:
print(f"Fehler beim Rotieren der PDF: {str(e)}")
return None
@app.route('/uploads/<filename>')
def serve_uploaded_file(filename):
"""Serviert hochgeladene Dateien für die Vorschau"""