
Tengo un archivo PDF grande que contiene cientos de páginas. CadanorteLa página contiene las mismas palabras específicas y la misma imagen. Los llamaré los"paginas especiales".
La posición de estospaginas especialesno es predecible. Eso significa que mi PDF puede tener, por ejemplo, 5 páginas normales, luego la página 6 es unapagina especialluego 2 páginas normales, luego nuevamente unapagina especial, luego 12 normales, luego 2paginas especiales, etcétera etcétera.
Necesitaría una forma de automatizar la impresión de estos archivos PDF para que todas las páginas normales se impriman en la bandeja de papel 1 de mi impresora y todaspaginas especialesen la bandeja de papel 2 (porque necesito papel específico para normal y otro diferente parapaginas especiales).
¿Alguien sabe si hay una manera de imprimir el archivo PDF completo de una vez y enrutar elpaginas especialesa una bandeja de impresora específica según
- una búsqueda de texto para las palabras específicas que contienen
- o el hecho de que hay una imagen
- o incluso el número de colores de la página (elpaginas especialescon las imágenes contienen muchos más colores que las otras páginas)
Tendré que hacer esto con regularidad (una vez al mes).
Estoy abierto a cualquier sugerencia. Software específico, Powershell u otros lenguajes de programación. ¿Algunas ideas?
Las soluciones de código abierto serían las mejores. Windows, Mac o Linux son opciones viables para mí.
He encontrado una solución hasta ahora, que esRicoh imprime y compartepero una licencia única con 5 años de mantenimiento cuesta alrededor de USD 2500. Sería bueno encontrar una solución más barata o de código abierto.
Respuesta1
Podrías echarle un vistazoQPDFque es una herramienta de código abierto para manipular archivos PDF. Con él, puede dividir el archivo en páginas, aislar páginas particulares y luego recombinar esas páginas antes de enviar los archivos separados a una impresora específica. O puede aislar páginas en función de propiedades particulares (por ejemplo, si contienen imágenes), o por archivo o longitud de página, etc. También puede generar una representación JSON de las características del archivo para que pueda crear un algoritmo para dividir el archivo en función de esas características utilizando otro programa.
La herramienta puede ejecutarse en máquinas Windows o Linux.
En respuesta al comentario de @MrUpsidown sobre mi sugerencia, proporciono aquí un script de shell de ejemplo que toma un archivo de entrada y lo divide temporalmente solo para evaluar el tamaño en bytes de cada página. Las páginas divididas se utilizan luego para crear listas de páginas de "páginas especiales" que son grandes y "páginas normales" que son pequeñas, y luego para crear los comandos cups lpr para enviar esas páginas a una impresora. El script podría modificarse para examinar cada página en busca de una cadena de texto (usando, por ejemplo, pdftotext) o algún otro atributo único. De todos modos, una lista se envía a la bandeja Superior y la otra a la bandeja Inferior. Luego se limpia solo. El guión necesitará ajustes para satisfacer sus necesidades y prepararse para uso en producción, pero creo que debería describir el método básico que estaba sugiriendo.
Después de instalar qpdf en una máquina Linux (o Mac), ejecuta el script creando un archivo (llamémoslo "splitpages"), luego lo hace ejecutable a través de chmod 755
, y luego ejecuta el script invocando splitpages filename.pdf
. Actualmente solo imprimirá los comandos que podrían activarse reemplazando "echo" con "eval" en el script. Un ejemplo de ejecución del script como este,
splitpages samplefile.pdf
donde samplefile.pdf tiene 4 páginas (3 normales y la cuarta especial) sería imprimir estas cadenas.
lpr -o media=Upper -o page-ranges=1,2,3, samplefile.pdf
lpr -o media=Lower -o page-ranges=4, samplefile.pdf
Por supuesto, es necesario modificar otras cosas para adaptarlas a sus necesidades.
#!/bin/bash
# print pages based on page size
# greater than minimumsize goes to tray1
# else goes to tray2
minimumsize=500000
infile=$1
if [ ! -f "$infile" ]; then
echo "no input file"
exit
fi
# location of temporary files used to identify page characteristics
outfile=/tmp/test
rm -f ${outfile}*
# split the file so we can assess lengths
qpdf $infile --split-pages $outfile
pnum=0
bigpage=
smallpage=
for page in ${outfile}*
do
((pnum++))
actualsize=$(wc -c <"$page")
if [ $actualsize -ge $minimumsize ]; then
#echo size is over $minimumsize bytes
bigpage="${bigpage}${pnum},"
else
#echo size is under $minimumsize bytes
smallpage="${smallpage}${pnum},"
fi
done
# replace the echo command with the eval command to actually execute the strings
lprc1="lpr -o media=Upper -o page-ranges=$bigpage $infile"
echo $lprc1
lprc2="lpr -o media=Lower -o page-ranges=$smallpage $infile"
echo $lprc2
rm -f ${outfile}*
Respuesta2
Adobe Acrobat Pro junto con el Complemento AutoSplit Pro ($149) puede hacerlo. Más información en el artículo. Extraer páginas de un documento PDF mediante una búsqueda de texto.
También puede automatizar esto usted mismo utilizando JavaScript a nivel de documento instalado en una de las carpetas de JavaScript de Acrobat y creando una acción que ejecute JavaScript.
Para ver un ejemplo, consulte el artículo. Extraiga páginas PDF según el contenido.