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
327 lines
16 KiB
HTML
327 lines
16 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}PDF Tools - PDF Editor{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="page-header mb-4">
|
|
<h2>
|
|
<i class="fas fa-tools me-2"></i>PDF Bearbeitungstools
|
|
</h2>
|
|
<p class="text-muted">
|
|
Erweiterte Werkzeuge für die PDF-Bearbeitung: Zusammenführen, teilen, konvertieren.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tools Navigation -->
|
|
<div class="row mb-4">
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="card-body p-2">
|
|
<ul class="nav nav-pills justify-content-center" id="tools-nav" role="tablist">
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link active" id="merge-tab" data-bs-toggle="pill"
|
|
data-bs-target="#merge-panel" type="button" role="tab">
|
|
<i class="fas fa-compress-arrows-alt me-2"></i>PDFs zusammenführen
|
|
</button>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link" id="split-tab" data-bs-toggle="pill"
|
|
data-bs-target="#split-panel" type="button" role="tab">
|
|
<i class="fas fa-cut me-2"></i>PDF zu Bildern
|
|
</button>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link" id="extract-tab" data-bs-toggle="pill"
|
|
data-bs-target="#extract-panel" type="button" role="tab">
|
|
<i class="fas fa-file-export me-2"></i>Seiten extrahieren
|
|
</button>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tab-content" id="tools-content">
|
|
<!-- PDF Merge Panel -->
|
|
<div class="tab-pane fade show active" id="merge-panel" role="tabpanel" aria-labelledby="merge-tab">
|
|
<div class="row">
|
|
<div class="col-lg-8">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">
|
|
<i class="fas fa-compress-arrows-alt me-2"></i>PDFs zusammenführen
|
|
</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div id="merge-upload-area" class="upload-area border-dashed p-4 text-center mb-3">
|
|
<i class="fas fa-file-pdf fa-3x text-muted mb-3"></i>
|
|
<h5>PDF-Dateien hier hinziehen oder auswählen</h5>
|
|
<p class="text-muted mb-3">Mindestens 2 PDF-Dateien erforderlich</p>
|
|
<input type="file" id="merge-file-input" multiple accept=".pdf" class="d-none">
|
|
<button type="button" class="btn btn-primary" onclick="document.getElementById('merge-file-input').click()">
|
|
<i class="fas fa-folder-open me-2"></i>PDF-Dateien auswählen
|
|
</button>
|
|
</div>
|
|
|
|
<div id="merge-file-list" style="display: none;">
|
|
<h6>PDF-Dateien zum Zusammenführen:</h6>
|
|
<div id="merge-files-container" class="list-group sortable-list mb-3">
|
|
<!-- Files will be added here -->
|
|
</div>
|
|
|
|
<button id="merge-pdfs-btn" class="btn btn-success" disabled>
|
|
<i class="fas fa-compress-arrows-alt me-2"></i>PDFs zusammenführen
|
|
</button>
|
|
</div>
|
|
|
|
<div id="merge-result" style="display: none;" class="mt-3">
|
|
<div class="alert alert-success">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fas fa-check-circle fa-2x me-3"></i>
|
|
<div class="flex-grow-1">
|
|
<h6 class="mb-1">PDFs erfolgreich zusammengeführt!</h6>
|
|
<p class="mb-0">Die PDF-Dateien wurden zu einer Datei zusammengeführt.</p>
|
|
</div>
|
|
<a id="merge-download-link" href="#" class="btn btn-success">
|
|
<i class="fas fa-download me-2"></i>Herunterladen
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-lg-4">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h6 class="mb-0">
|
|
<i class="fas fa-cog me-2"></i>Einstellungen
|
|
</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="mb-3">
|
|
<label class="form-label">Vorschau-Größe:</label>
|
|
<select id="pdf-preview-size" class="form-select" onchange="updatePdfPreviewSize()">
|
|
<option value="small">Klein (80px)</option>
|
|
<option value="medium" selected>Mittel (120px)</option>
|
|
<option value="large">Groß (160px)</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="form-check mb-3">
|
|
<input class="form-check-input" type="checkbox" id="show-pdf-info" checked>
|
|
<label class="form-check-label">
|
|
PDF-Informationen anzeigen
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card mt-3">
|
|
<div class="card-header">
|
|
<h6 class="mb-0">
|
|
<i class="fas fa-info-circle me-2"></i>Anleitung
|
|
</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<ol class="mb-0">
|
|
<li class="mb-2">Wählen Sie mindestens 2 PDF-Dateien aus</li>
|
|
<li class="mb-2">Sortieren Sie die Reihenfolge durch Ziehen</li>
|
|
<li class="mb-2">Rotieren Sie PDFs bei Bedarf</li>
|
|
<li class="mb-2">Klicken Sie auf "PDFs zusammenführen"</li>
|
|
<li>Laden Sie die zusammengeführte PDF herunter</li>
|
|
</ol>
|
|
|
|
<div class="mt-3">
|
|
<small class="text-muted">
|
|
<i class="fas fa-lightbulb me-1"></i>
|
|
<strong>Tipp:</strong> Klicken Sie auf eine PDF-Vorschau für eine größere Ansicht der ersten Seite.
|
|
</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- PDF to Images Panel -->
|
|
<div class="tab-pane fade" id="split-panel" role="tabpanel" aria-labelledby="split-tab">
|
|
<div class="row">
|
|
<div class="col-lg-8">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">
|
|
<i class="fas fa-cut me-2"></i>PDF zu Bildern konvertieren
|
|
</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div id="split-upload-area" class="upload-area border-dashed p-4 text-center mb-3">
|
|
<i class="fas fa-file-pdf fa-3x text-muted mb-3"></i>
|
|
<h5>PDF-Datei hier hinziehen oder auswählen</h5>
|
|
<p class="text-muted mb-3">Jede Seite wird als separates Bild exportiert</p>
|
|
<input type="file" id="split-file-input" accept=".pdf" class="d-none">
|
|
<button type="button" class="btn btn-primary" onclick="document.getElementById('split-file-input').click()">
|
|
<i class="fas fa-folder-open me-2"></i>PDF-Datei auswählen
|
|
</button>
|
|
</div>
|
|
|
|
<div id="split-file-info" style="display: none;" class="mb-3">
|
|
<div class="card bg-light">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center">
|
|
<div id="split-preview-container" class="me-3">
|
|
<i class="fas fa-file-pdf fa-2x text-danger"></i>
|
|
</div>
|
|
<div class="flex-grow-1">
|
|
<h6 id="split-filename" class="mb-1"></h6>
|
|
<small id="split-file-details" class="text-muted"></small>
|
|
</div>
|
|
<button id="convert-to-images-btn" class="btn btn-warning">
|
|
<i class="fas fa-images me-2"></i>Zu Bildern konvertieren
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="split-result" style="display: none;" class="mt-3">
|
|
<div class="alert alert-success">
|
|
<div class="d-flex align-items-center">
|
|
<i class="fas fa-check-circle fa-2x me-3"></i>
|
|
<div class="flex-grow-1">
|
|
<h6 class="mb-1">PDF erfolgreich konvertiert!</h6>
|
|
<p class="mb-0">Alle Seiten wurden als PNG-Bilder exportiert und in einer ZIP-Datei verpackt.</p>
|
|
</div>
|
|
<a id="split-download-link" href="#" class="btn btn-success">
|
|
<i class="fas fa-download me-2"></i>ZIP herunterladen
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-lg-4">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h6 class="mb-0">
|
|
<i class="fas fa-cog me-2"></i>Export-Einstellungen
|
|
</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="mb-3">
|
|
<label class="form-label">Bildformat:</label>
|
|
<select id="export-format" class="form-select">
|
|
<option value="PNG">PNG (verlustfrei)</option>
|
|
<option value="JPEG">JPEG (komprimiert)</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label class="form-label">DPI (Auflösung):</label>
|
|
<select id="export-dpi" class="form-select">
|
|
<option value="150">150 DPI (Standard)</option>
|
|
<option value="200">200 DPI (Hoch)</option>
|
|
<option value="300">300 DPI (Sehr hoch)</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="alert alert-info">
|
|
<small>
|
|
<i class="fas fa-info-circle me-1"></i>
|
|
Höhere DPI-Werte ergeben bessere Qualität, aber größere Dateien.
|
|
</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Extract Pages Panel -->
|
|
<div class="tab-pane fade" id="extract-panel" role="tabpanel" aria-labelledby="extract-tab">
|
|
<div class="row">
|
|
<div class="col-lg-8">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">
|
|
<i class="fas fa-file-export me-2"></i>Seiten extrahieren
|
|
</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="alert alert-info">
|
|
<i class="fas fa-info-circle me-2"></i>
|
|
Diese Funktion wird in einer zukünftigen Version verfügbar sein.
|
|
Verwenden Sie vorerst die "PDF zu Bildern" Funktion, um einzelne Seiten zu extrahieren.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-lg-4">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h6 class="mb-0">
|
|
<i class="fas fa-roadmap me-2"></i>Geplante Features
|
|
</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<ul class="list-unstyled mb-0">
|
|
<li class="mb-2">
|
|
<i class="fas fa-clock text-muted me-2"></i>
|
|
<small>Seitenbereiche extrahieren</small>
|
|
</li>
|
|
<li class="mb-2">
|
|
<i class="fas fa-clock text-muted me-2"></i>
|
|
<small>PDF-Seiten neu ordnen</small>
|
|
</li>
|
|
<li class="mb-2">
|
|
<i class="fas fa-clock text-muted me-2"></i>
|
|
<small>Passwort-geschützte PDFs</small>
|
|
</li>
|
|
<li>
|
|
<i class="fas fa-clock text-muted me-2"></i>
|
|
<small>PDF-Metadaten bearbeiten</small>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Loading Modal -->
|
|
<div class="modal fade" id="processing-modal" tabindex="-1" aria-hidden="true">
|
|
<div class="modal-dialog modal-dialog-centered">
|
|
<div class="modal-content">
|
|
<div class="modal-body text-center p-4">
|
|
<div class="spinner-border text-primary mb-3" role="status">
|
|
<span class="visually-hidden">Verarbeitung läuft...</span>
|
|
</div>
|
|
<h5>PDF wird verarbeitet...</h5>
|
|
<p class="text-muted mb-0">Bitte warten Sie, während Ihre PDF-Datei verarbeitet wird.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Error Area -->
|
|
<div id="pdf-tools-error" style="display: none;" class="mt-4">
|
|
<div class="alert alert-danger">
|
|
<h6><i class="fas fa-exclamation-triangle me-2"></i>Fehler</h6>
|
|
<p id="pdf-tools-error-message" class="mb-0"></p>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block scripts %}
|
|
<script src="{{ url_for('static', filename='js/pdf-tools.js') }}"></script>
|
|
{% endblock %} |