Hier ist eine detaillierte Beschreibung der Voraussetzungen und der Schritte, um diese Aufgabe umzusetzen:
Voraussetzungen¶
Installierte Software:
- Python 3.x: Für die Ausführung von Jupyter Notebooks und die Skriptverarbeitung.
- Jupyter Notebook: Installierbar via
pip install notebook
. - nbconvert: Für die Ausführung von Jupyter Notebooks, installierbar via
pip install nbconvert
. - Chrome (Headless): Für den Druck des HTML-Dokuments als PDF.
- PyFTP Library: Für den Datei-Upload auf den FTP-Server, installierbar via
pip install ftplib
.
Verzeichnisstruktur:
- Notebooks:
programming/abstract/Intro.de.ipynb
Create_pdf.en.ipynb
- HTML-, WEBP- und JPG-Dateien: Müssen in einer definierten Verzeichnisstruktur gespeichert sein.
- Notebooks:
FTP-Server-Zugang:
- Server-Adresse, Benutzername und Passwort für den Upload der Dateien.
Python-Pakete:
nbformat
undnbclient
für die Notebook-Ausführung: Installierbar viapip install nbformat nbclient
.
Skripteinstellungen:
- Verzeichnisstrukturen und FTP-Zugangsdaten müssen im Skript definiert werden.
Python-Skript für den gesamten Prozess¶
Hier ist ein Python-Skript, das alle Schritte ausführt:
import os
import nbformat
from nbclient import NotebookClient
from ftplib import FTP
import subprocess
# Voraussetzungen
FTP_SERVER = "ftp.example.com"
FTP_USER = "username"
FTP_PASS = "password"
BASE_DIR = "/path/to/files" # Verzeichnis mit Dateien
def run_notebook(notebook_path):
"""Führt ein Jupyter Notebook aus."""
with open(notebook_path) as f:
nb = nbformat.read(f, as_version=4)
client = NotebookClient(nb)
client.execute()
print(f"Notebook {notebook_path} ausgeführt.")
def print_to_pdf(input_html, output_pdf):
"""Druckt ein HTML-Dokument mit Chrome Headless als PDF."""
chrome_command = [
"google-chrome",
"--headless",
"--disable-gpu",
"--print-to-pdf=" + output_pdf,
input_html
]
subprocess.run(chrome_command, check=True)
print(f"{input_html} als PDF gedruckt: {output_pdf}")
def upload_to_ftp(local_base_dir, remote_base_dir):
"""Lädt HTML-, WEBP- und JPG-Dateien auf einen FTP-Server hoch."""
ftp = FTP(FTP_SERVER)
ftp.login(FTP_USER, FTP_PASS)
for root, _, files in os.walk(local_base_dir):
remote_dir = os.path.join(remote_base_dir, os.path.relpath(root, local_base_dir))
ftp.cwd("/")
for subdir in remote_dir.split(os.sep):
if subdir not in ftp.nlst():
ftp.mkd(subdir)
ftp.cwd(subdir)
for file in files:
if file.endswith((".html", ".webp", ".jpg")):
local_path = os.path.join(root, file)
with open(local_path, "rb") as f:
ftp.storbinary(f"STOR {file}", f)
print(f"{file} hochgeladen.")
ftp.quit()
print("Alle Dateien erfolgreich hochgeladen.")
# Hauptprozess
try:
# 1. Ausführen des ersten Notebooks
run_notebook("programming/abstract/Intro.de.ipynb")
# 2. Ausführen des zweiten Notebooks und Methodenaufrufe
run_notebook("Create_pdf.en.ipynb")
from Create_pdf import breadth_first_combining, convert_to_linked_html # Funktionen importieren
breadth_first_combining()
convert_to_linked_html()
# 3. HTML-Dokument als PDF ausdrucken
input_html_path = "/path/to/output.html"
output_pdf_path = "/path/to/output.pdf"
print_to_pdf(input_html_path, output_pdf_path)
# 4. Dateien auf den FTP-Server hochladen
upload_to_ftp(BASE_DIR, "/remote/path/on/server")
except Exception as e:
print(f"Fehler: {e}")
Schritte zur Ausführung des Skripts¶
Stelle sicher, dass alle Abhängigkeiten installiert sind:
pip install nbformat nbclient ftplib
Passe die Pfade und Zugangsdaten im Skript an:
- Verzeichnis
BASE_DIR
. - FTP-Zugangsdaten
FTP_SERVER
,FTP_USER
,FTP_PASS
. - HTML-Eingabe- und PDF-Ausgabepfade.
- Verzeichnis
Führe das Skript aus:
python script.py
Ergebnis¶
- Alle Notebooks werden ausgeführt.
- Die gewünschten Methoden aus
Create_pdf.en.ipynb
werden aufgerufen. - HTML-Dokumente werden als PDFs gespeichert.
- HTML-, WEBP- und JPG-Dateien werden auf den FTP-Server hochgeladen.