Skip to content

Instantly share code, notes, and snippets.

@angelbladex
Last active November 13, 2025 14:44
Show Gist options
  • Select an option

  • Save angelbladex/913aaa00461683f383ad81b62f5dfde3 to your computer and use it in GitHub Desktop.

Select an option

Save angelbladex/913aaa00461683f383ad81b62f5dfde3 to your computer and use it in GitHub Desktop.
Un script para generar un libro en pdf desde archivos swf
#!/bin/bash
# Primero extraer imágenes, luego crear PDF
#requiere uso del paquete img2pdf y del paquete swftools
mkdir extracted_images
for swf in pages/swf/*.swf; do
filename=$(basename "$swf" .swf)
swfrender "$swf" -o "extracted_images/${filename}.png" 2>/dev/null
done
# Combinar imágenes en PDF ORDENADAS numéricamente
img2pdf $(ls -1v extracted_images/*.png) -o libro_completo.pdf
#magick $(ls -1v extracted_images/*.png) libro_completo.pdf
#convert $(ls extracted_images/page_*.png) libro_completo.pdf
#!/bin/bash
# Configuración
DPI=200
WIDTH=$(( 85 * DPI / 10 )) # 8.5" * DPI → 1700 px si DPI=200
HEIGHT=$(( 11 * DPI )) # 11" * DPI → 2200 px
mkdir -p extracted_images_jpg
mkdir -p extracted_images_png
#EN mi caso , hay una página blanca en pages/swf/page1.swf
if [ -f "pages/swf/page1.swf" ]; then
rm "pages/swf/page1.swf"
for swf in $(ls pages/swf/page*.swf | sort -V); do
base=$(basename "$swf" .swf)
echo "Procesando $swf ..."
# Renderizar a PNG temporal (solo una imagen en RAM a la vez)
swfrender "$swf" -X "$WIDTH" -Y "$HEIGHT" -o "extracted_images_png/${base}.png" 2>/dev/null
done
echo " -- * --"
for png in $(ls extracted_images_png/*.png | sort -V); do
base=$(basename "$png" .png)
echo "Procesando $png ..."
# Convertir a JPEG de alta calidad (liviano)
magick "extracted_images_png/${base}.png" -quality 92 -background white -alpha remove "extracted_images_jpg/${base}.jpg"
done
# Generar PDF con img2pdf (mínimo uso de RAM)
echo "Creando PDF optimizado..."
img2pdf $(ls -1v extracted_images_jpg/*.jpg) -o libro_completo.pdf
echo " Listo: libro_ligero.pdf"
#!/bin/bash
# Paleta sin azul, alta legibilidad
RESET='\033[0m'
BOLD='\033[1m'
# Colores nuevos
BLACK=$'\e[30m' # opcional para fondos claros
WHITE=$'\e[97m' # brillante para títulos
GREEN=$'\e[92m' # verde claro
LIME=$'\e[38;5;154m' # lima neón
GOLD=$'\e[38;5;214m' # dorado/ámbar
ORANGE=$'\e[38;5;208m'
MAGENTA=$'\e[95m'
PINK=$'\e[38;5;205m'
GRAY=$'\e[38;5;244m'
# Configuración
DPI=150
WIDTH=$(( 85 * DPI / 10 )) # 1275 px
HEIGHT=$(( 11 * DPI )) # 1650 px
OUTPUT_FILE="YourFilename_v2.pdf"
mkdir -p extracted_images_jpg extracted_images_png
# Eliminar posible página vacía
[ -f "pages/swf/page1.swf" ] && rm "pages/swf/page1.swf"
echo -e "${BOLD}${WHITE}🚀 Iniciando procesamiento de libro digital${RESET}"
echo -e "${GRAY}DPI:${RESET} ${GREEN}$DPI${RESET} ${GRAY}Resolución:${RESET} ${GREEN}${WIDTH}x${HEIGHT}${RESET}"
echo -e "${GRAY}Salida:${RESET} ${GOLD}$OUTPUT_FILE${RESET}\n"
echo -e "${LIME}📖 Extrayendo páginas SWF…${RESET}"
for swf in $(ls pages/swf/page*.swf | sort -V); do
base=$(basename "$swf" .swf)
echo -e "${ORANGE}Procesando:${RESET} ${PINK}$base${RESET}"
swfrender "$swf" -X "$WIDTH" -Y "$HEIGHT" -o "extracted_images_png/${base}.png" 2>/dev/null
done
echo -e "${GOLD}🔄 Convirtiendo a JPEG…${RESET}"
for png in $(ls extracted_images_png/*.png | sort -V); do
base=$(basename "$png" .png)
echo -e "${ORANGE}Optimizando:${RESET} ${PINK}$base${RESET}"
magick "extracted_images_png/${base}.png" -quality 85 -background white -alpha remove "extracted_images_jpg/${base}.jpg"
done
echo -e "${MAGENTA}📄 Creando PDF optimizado…${RESET}"
img2pdf $(ls -1v extracted_images_jpg/*.jpg) -o libro_ligero.pdf
echo -e "${GOLD}✂️ Eliminando última página…${RESET}"
qpdf libro_ligero.pdf --pages . 1-$(($(qpdf --show-npages libro_ligero.pdf)-1)) -- "$OUTPUT_FILE"
final_pages=$(qpdf --show-npages "$OUTPUT_FILE")
final_size=$(du -h "$OUTPUT_FILE" | cut -f1)
rm libro_ligero.pdf
echo -e "\n${BOLD}${WHITE}✅ ¡Proceso completado!${RESET}"
echo -e "${WHITE}📊 Resumen:${RESET}"
echo -e " ${GRAY}Archivo:${RESET} ${GOLD}$OUTPUT_FILE${RESET}"
echo -e " ${GRAY}Páginas:${RESET} ${GREEN}$final_pages${RESET}"
echo -e " ${GRAY}Tamaño:${RESET} ${GREEN}$final_size${RESET}\n"
echo -e "${LIME}🎉 ¡Libro digital listo para usar!${RESET}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment