Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Optimiser des fichiers PDF en ligne de commande

3 réponses
Avatar
HD
Bonjour,

Via le VBA Excel, je liste tous les fichiers PDF d'un répertoire et ses
sous-répertoires. Je voudrais pouvoir optimiser la taille de ces PDF
(scannés et donc PDF image) en obtenant du PDF compressé... mais quel
freeware pourrais je utiliser en ligne de commande ? Auriez vous déjà
réalisé un script dans ce genre ?

Merci d'avance pour votre aide

Cordialement,

HD

3 réponses

Avatar
MichD
Bonjour,

Voici un exemple :
comment créer un exécutable avec le logiciel "Winrar" de l'ensemble des fichiers sources.


'-------------------------------------------------
Sub ZipAvecWinrar()
Dim LeZip As String, Executable As String
Dim Arr As Variant, Elt As Variant, T As Double

'Location de l'exécutable du programme zip
'Location à vérifier...
Executable = "C:Program Files (x86)wrar390WinRAR.exe"
'Chemin et Nom que va prendre le fichier zip
LeZip = "D:Mes_Classeurs_zippés"

'Liste des chemins et fichiers à zipper
'Si ta liste est dans une plage de cellules,
'tu pourrais utiliser : Arr = Feuil1.Range("A1:A10")
Arr = Array("c:Classeur1.xlsx", "c:Classeur10.xlsm")

'création du zip
For Each Elt In Arr
ShellExecute 0, "open", Executable, _
"a " & LeZip & " " & Elt, "", vbHide
T = Timer + 0.25 'délai de 1/4 de secondes
Do While Timer <= T
DoEvents
Loop
Next

'création du fichier auto-extractable
ShellExecute 0, "open", Executable, _
"s " & LeZip & ".rar ", "", vbHide
T = Timer + 0.25 'délai de 1/4 de secondes
Do While Timer <= T
DoEvents
Loop
'suppression du fichier Zip
Kill LeZip & ".rar"

End Sub
'-------------------------------------------------



MichD
------------------------------------------
"HD" a écrit dans le message de groupe de discussion : jcvinp$2i8f$

Bonjour,

Via le VBA Excel, je liste tous les fichiers PDF d'un répertoire et ses
sous-répertoires. Je voudrais pouvoir optimiser la taille de ces PDF
(scannés et donc PDF image) en obtenant du PDF compressé... mais quel
freeware pourrais je utiliser en ligne de commande ? Auriez vous déjà
réalisé un script dans ce genre ?

Merci d'avance pour votre aide

Cordialement,

HD
Avatar
MichD
Oups, j'ai omis de copier-coller la déclaration de l'API à faire dans le haut du module standard :


Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _
As String, ByVal lpFile As String, ByVal lpParameters _
As String, ByVal lpDirectory As String, ByVal nShowCmd _
As Long) As Long



MichD
------------------------------------------
"MichD" a écrit dans le message de groupe de discussion : jcvpam$2m8$

Bonjour,

Voici un exemple :
comment créer un exécutable avec le logiciel "Winrar" de l'ensemble des fichiers sources.


'-------------------------------------------------
Sub ZipAvecWinrar()
Dim LeZip As String, Executable As String
Dim Arr As Variant, Elt As Variant, T As Double

'Location de l'exécutable du programme zip
'Location à vérifier...
Executable = "C:Program Files (x86)wrar390WinRAR.exe"
'Chemin et Nom que va prendre le fichier zip
LeZip = "D:Mes_Classeurs_zippés"

'Liste des chemins et fichiers à zipper
'Si ta liste est dans une plage de cellules,
'tu pourrais utiliser : Arr = Feuil1.Range("A1:A10")
Arr = Array("c:Classeur1.xlsx", "c:Classeur10.xlsm")

'création du zip
For Each Elt In Arr
ShellExecute 0, "open", Executable, _
"a " & LeZip & " " & Elt, "", vbHide
T = Timer + 0.25 'délai de 1/4 de secondes
Do While Timer <= T
DoEvents
Loop
Next

'création du fichier auto-extractable
ShellExecute 0, "open", Executable, _
"s " & LeZip & ".rar ", "", vbHide
T = Timer + 0.25 'délai de 1/4 de secondes
Do While Timer <= T
DoEvents
Loop
'suppression du fichier Zip
Kill LeZip & ".rar"

End Sub
'-------------------------------------------------



MichD
------------------------------------------
"HD" a écrit dans le message de groupe de discussion : jcvinp$2i8f$

Bonjour,

Via le VBA Excel, je liste tous les fichiers PDF d'un répertoire et ses
sous-répertoires. Je voudrais pouvoir optimiser la taille de ces PDF
(scannés et donc PDF image) en obtenant du PDF compressé... mais quel
freeware pourrais je utiliser en ligne de commande ? Auriez vous déjà
réalisé un script dans ce genre ?

Merci d'avance pour votre aide

Cordialement,

HD
Avatar
HD
Merci MichD pour ces explications (je vais me mettre de côté ces scripts qui
me seront toujours utiles). Mais en fait la compression dont je parlais
était une compression des données PDF car pour un même PDF l'on peut obtenir
différente taille du document (suivant le nombre de couleurs, la résolution,
le type de PDF image ou texte, etc...).

Voici le résultat de mes tests...

Via les infos que j'ai trouvé ici:
http://www.cuk.ch/articles/2503
et ici:
http://www.astucesinternet.com/forum/topic1525.html

La problèmatique est ici reformulé:
"En compressant un document PDF avec un algorithme de compression comme
celui de zip ou celui de StuffIt, on parvient à obtenir un gain sur la
partie "texte" du document, mais cette partie-là n'occupe de toute façon
qu'une très petite proportion de la taille du fichier. Mais qu'en est-il des
images ? Les images sont stockées dans le document au format JPEG, en bitmap
zippé ou éventuellement en bitmap brut. Dans ce dernier cas (qui est rare),
on peut effectivement gagner de la place en "zippant" ou en "stuffant" le
document. Mais dans la plupart des cas, l'image est incluse dans le document
dans un format déjà compressé (JPEG ou zip). Or, en compactant le document,
il est impossible de compresser à nouveau ce qui l'est déjà. Si vous n'êtes
pas convaincus, prenez une image JPEG, compressez là (zip ou sit) et
comparez la taille du fichier compressé à celle de l'image. Le gain est
quasi inexistant. [...]
Un écran d'ordinateur possède une résolution typique d'une centaine de DPI
(pixels par pouces). Ce qui signifie que sur un pouce de largeur (ou de
hauteur) il y a une centaine de pixels. Traditionnellement, la résolution
utilisée pour des images destinées à l'écran est de 72 DPI. Or, vous
comprendrez aisément que si votre image est à 300 DPI, c'est complètement
inutile ! Pour un pouce, vous aurez 228 pixels en trop, et chacun de ces
pixels prendra de la place sur votre disque. De même, pour une impression de
bonne qualité, votre image devrait être entre 150 et 200 DPI. Là encore,
votre image à 300 DPI est beaucoup trop grande."

En utilisant le programme GhostScript (gswin32 en version windows) et la
commande suivante:
gswin32 -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/printer
-sOUTPUTFILE=NouveauPDF.pdf -f MonPDF.pdf

Avec GS6.01 un fichier PDF de 20888ko se retrouve à. 31952ko avec l'option
/screen.
Mais avec une version GS8.70 un fichier PDF de 20888ko se retrouve à :
- 1386ko avec l'option /screen (réduit de 15 fois)
- 4714ko avec l'option /ebook (réduit de 4,4 fois)
- 22564ko avec l'option /printer
J'ai put voir que l'utilisation d'ancienne version de GhostScript ne
m'apporte aucun gain de taille... au contraire... Mais avec la dernière
version 8.70 je peux gagner pas mal de place. L'option screen me donne par
contre un document flou... je pense donc plutôt me faire un script VBA qui
utiliserait l'option ebook.

@+
HD