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:
78
app.py
78
app.py
@@ -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"""
|
||||
|
||||
Reference in New Issue
Block a user