# notebook_to_pdf # ---------------- # Convierte notebooks Jupyter a PDF usando nbconvert webpdf. # Requiere nbconvert y playwright con chromium instalados. # # USO (sourced): # source notebook_to_pdf.sh # notebook_to_pdf /path/to/project # notebook_to_pdf /path/to/project "notebooks/*.ipynb" "notebooks/pdf/" notebook_to_pdf() { local project_dir="$1" local pattern="${2:-notebooks/*.ipynb}" local output_dir="${3:-notebooks/pdf/}" if [ -z "$project_dir" ]; then echo "notebook_to_pdf: se requiere project_dir" >&2 return 1 fi if [ ! -d "$project_dir/.venv" ]; then echo "notebook_to_pdf: no existe .venv en $project_dir" >&2 return 1 fi # Crear directorio de salida si no existe mkdir -p "$project_dir/$output_dir" # Convertir notebooks a PDF con nbconvert webpdf # nbconvert puede retornar exit != 0 por warnings de validacion JSON # que no impiden la generacion del PDF, asi que ignoramos el exit code # y verificamos que los PDFs se hayan generado local nbconvert_output nbconvert_output=$(cd "$project_dir" && \ .venv/bin/jupyter nbconvert \ --to webpdf \ --allow-chromium-download \ --output-dir="$output_dir" \ $pattern 2>&1) || true echo "$nbconvert_output" # Listar PDFs generados echo "" echo "PDFs generados en ${project_dir}/${output_dir}:" local pdf_count=0 while IFS= read -r -d '' pdf; do echo " $pdf" pdf_count=$((pdf_count + 1)) done < <(find "$project_dir/$output_dir" -name "*.pdf" -print0 2>/dev/null) if [ "$pdf_count" -eq 0 ]; then echo " (ninguno encontrado — nbconvert pudo haber fallado)" >&2 echo "$nbconvert_output" >&2 return 1 fi echo " Total: $pdf_count PDFs" }