www gsview gsdnld gs922w64 gratis ghostview artifex pdf-generation ghostscript

pdf-generation - gsview - https www ghostscript com download gsdnld html



Dividiendo un PDF con Ghostscript (5)

Intento dividir un PDF multipágina con Ghostscript, y encontré la misma solución en más sitios e incluso en ghostscript.com , a saber:

gs -sDEVICE=pdfwrite -dSAFER -o outname.%d.pdf input.pdf

Pero parece que no me funciona, porque produce un archivo, con todas las páginas y con el nombre outname.1.pdf .

Cuando agrego las páginas de inicio y finalización, entonces está funcionando bien, pero quiero que funcione sin conocer esos parámetros.

En el archivo gs-devel, encontré una solución para esto: http://ghostscript.com/pipermail/gs-devel/2009-April/008310.html , pero tengo ganas de hacerlo sin pdf_info .

Cuando uso un dispositivo diferente, por ejemplo pswrite , pero los mismos parámetros, funciona correctamente, produciendo tantos archivos ps, como contiene mi input.pdf .

¿Es esto normal cuando se usa pdfwrite ? ¿Estoy haciendo algo mal?


Aquí hay un script para el símbolo del sistema de Windows (que también funciona con arrastrar y soltar) asumiendo que tiene instalado Ghostscript:

@echo off chcp 65001 setlocal enabledelayedexpansion rem Customize or remove this line if you already have Ghostscript folders in your system PATH set path=C:/Program Files/gs/gs9.22/lib;C:/Program Files/gs/gs9.22/bin;%path% :start echo Splitting "%~n1%~x1" into standalone single pages... cd %~d1%~p1 rem getting number of pages of PDF with GhostScript for /f "usebackq delims=" %%a in (`gswin64c -q -dNODISPLAY -c "(%~n1%~x1) (r) file runpdfbegin pdfpagecount = quit"`) do set "numpages=%%a" for /L %%n in (1,1,%numpages%) do ( echo Extracting page %%n of %numpages%... set "x=00%%n" set "x=!x:~-3!" gswin64c.exe -dNumRenderingThreads=2 -dBATCH -dNOPAUSE -dQUIET -dFirstPage=%%n -dLastPage=%%n -sDEVICE=pdfwrite -sOutputFile="%~d1%~p1%~n1-!x!.pdf" "%1" ) shift if NOT x%1==x goto start pause

Asigne un nombre a este script como split PDF.bat y split PDF.bat en su escritorio. Arrastre y suelte una (o incluso más) PDF multipágina en ella y creará un archivo PDF independiente para cada página de su PDF, agregando el sufijo -002 , -002 y así sucesivamente al nombre para distinguir las páginas.

Es posible que deba personalizar (con la versión relevante de Ghostscript) o eliminar la línea set path=... si ya tiene carpetas de Ghostscript en su variable de entorno PATH del sistema.

Funciona para mí en Windows 10 con Ghostscript 9.22.

Disfrutar.


Aquí hay un simple script en python que lo hace:

#!/usr/bin/python3 import os number_of_pages = 68 input_pdf = "abstracts_rev09.pdf" for i in range(1, number_of_pages +1): os.system("gs -q -dBATCH -dNOPAUSE -sOutputFile=page{page:04d}.pdf" " -dFirstPage={page} -dLastPage={page}" " -sDEVICE=pdfwrite {input_pdf}" .format(page=i, input_pdf=input_pdf))


Encontré este script escrito por el Sr. Weimer super útil:

#!/bin/sh # # pdfsplit [input.pdf] [first_page] [last_page] [output.pdf] # # Example: pdfsplit big_file.pdf 10 20 pages_ten_to_twenty.pdf # # written by: Westley Weimer, Wed Mar 19 17:58:09 EDT 2008 # # The trick: ghostscript (gs) will do PDF splitting for you, it''s just not # obvious and the required defines are not listed in the manual page. if [ $# -lt 4 ] then echo "Usage: pdfsplit input.pdf first_page last_page output.pdf" exit 1 fi yes | gs -dBATCH -sOutputFile="$4" -dFirstPage=$2 -dLastPage=$3 -sDEVICE=pdfwrite "$1" >& /dev/null

Origen desde: http://www.cs.virginia.edu/~weimer/pdfsplit/pdfsplit

pdfsplit.sh como pdfsplit.sh , mira que sucede la magia.

PDFSAM también podría hacer el trabajo. Disponible en Windows y Mac.


Lo que ve es un comportamiento "normal": la versión actual del dispositivo de salida pdfwrite de Ghostscript no admite esta función. Esto también está (es cierto, vagamente) documentado en Use.htm :

"Tenga en cuenta, sin embargo, que la característica de una página por archivo puede no ser compatible con todos los dispositivos ..."

Me parece recordar que uno de los desarrolladores de Ghostscript mencionó en IRC que podrían agregar esta característica a pdfwrite en una versión futura, pero parece que es necesario reescribir un código importante, por lo que aún no lo han hecho ...

Actualización: Como ya se indicó en el comentario de Gordon, a partir de la versión 9.06 (lanzada el 31 de julio de 2012), Ghostscript ahora admite la línea de comandos como se cita en la pregunta también para pdfwrite . (Gordon debe haber descubierto el soporte no oficial para esto ya en 9.05, o compiló su propio ejecutable de las fuentes de prelanzamiento que aún no estaban etiquetadas como 9.06).


#!/bin/bash #where $1 is the input filename ournum=`gs -q -dNODISPLAY -c "("$1") (r) file runpdfbegin pdfpagecount = quit" 2>/dev/null` echo "Processing $ournum pages" counter=1 while [ $counter -le $ournum ] ; do newname=`echo $1 | sed -e s//.pdf//g` reallynewname=$newname-$counter.pdf counterplus=$((counter+1)) # make the individual pdf page yes | gs -dBATCH -sOutputFile="$reallynewname" -dFirstPage=$counter -dLastPage=$counter -sDEVICE=pdfwrite "$1" >& /dev/null counter=$counterplus done