J'essaie de scinder une page PDF de plusieurs pages avec Ghostscript et j'ai trouvé la même solution sur plusieurs sites et même sur ghostscript.com , à savoir:
gs -sDEVICE=pdfwrite -dSAFER -o outname.%d.pdf input.pdf
Mais cela ne semble pas fonctionner pour moi, car il produit un fichier, avec Toutes les pages, et nommé outname.1.pdf.
Lorsque j'ajoute les pages de début et de fin, cela fonctionne bien, mais je veux que cela fonctionne sans connaître ces paramètres.
Dans l'archive gs-devel, j'ai trouvé une solution à cela: http://ghostscript.com/pipermail/gs-devel/2009-avril/008310.html -- aime le faire sans pdf_info
.
Lorsque j'utilise un périphérique différent, par exemple pswrite
, mais que les mêmes paramètres Fonctionnent correctement, ils produisent autant de fichiers ps que le contient mon input.pdf.
Est-ce normal lorsque vous utilisez pdfwrite
? Est-ce que je fais quelque chose de mal?
Ce que vous voyez est un comportement "normal": la version actuelle du périphérique de sortie pdfwrite
de Ghostscript ne prend pas en charge cette fonctionnalité. Ceci est également (certes, vaguement) documenté dans Use.htm :
"Notez cependant que la fonctionnalité d'une page par fichier peut ne pas être prise en charge par tous les périphériques ...."
Je crois me souvenir que l’un des développeurs de Ghostscript a mentionné sur IRC qu’ils pourraient ajouter cette fonctionnalité à pdfwrite dans une version ultérieure, mais qu’il semble nécessiter une réécriture majeure du code, raison pour laquelle ils n'ont pas encore fait ...
Mise à jour: Comme l'indiquait déjà le commentaire de Gordon, à partir de version 9.06 (publié le 31 juillet 2012), Ghostscript prend désormais en charge la ligne de commande citée dans la question, également pour pdfwrite
. (Gordon doit avoir découvert le support non officiel de cela déjà dans 9.05, ou il a compilé son propre exécutable à partir des sources de pré-release qui n’avaient pas encore été étiquetées comme 9.06).
J'ai trouvé ce script écrit par M. Weimer super utile:
#!/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
Origine de: http://www.cs.virginia.edu/~weimer/pdfsplit/pdfsplit
enregistrez-le sous le nom pdfsplit.sh
, voyez que la magie se produit.
PDFSAM pourrait également faire le travail. Disponible sur Windows et Mac.
#!/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
Voici un script pour la commande Windows Invite (fonctionnant également avec le glisser-déposer) en supposant que Ghostscript soit installé:
@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
Nommez ce script quelque chose comme split PDF.bat
et mettez-le sur votre bureau. Glissez-déposez un (ou plusieurs) multipage PDF dessus pour créer un fichier autonome PDF pour chaque page de votre PDF, en ajoutant le suffixe -001
, -002
, etc. au nom à distinguer. les pages.
Vous devrez peut-être personnaliser (avec la version appropriée de Ghostscript) ou supprimer la ligne set path=...
si vous avez déjà des dossiers Ghostscript dans la variable d’environnement PATH de votre système.
Cela fonctionne pour moi sous Windows 10 avec Ghostscript 9.22.
Prendre plaisir.
Voici un script python simple qui le fait:
#!/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))