IPB

Bienvenue invité ( Connexion | Inscription )

> pdf multipage vers png(s), en mode terminal, sous MacOSX
Options
ekdmekdm
posté 24 Feb 2019, 13:09
Message #1


Nouveau Membre


Groupe : Membres
Messages : 18
Inscrit : 20 Feb 2019
Membre no 207 269



Bonjour à tous,

Je suis nouveau ici et et en même temps nouveau sous MacOSX.

Je développe une application (nativement sous GNU/Linux) et je l'ai portée sous Windows et tout dernièrement sous MacOSX (car je m'apperçois qu'il y a énormément d'utilisateurs sous ce système ... et que esthétiquement c'est très sympa !).

Pour info je développe en Python (la version 3.x), et l'application utilise entre autre PyQt5, Pillow et Numpy. Je l'ai portée sous MacOSX à l'aide de Py2app (pour la petite histoire les versions pour GNU/Linux et Windows ont été compilées avec PyInstaller, mais celui-ci m'a posé tellement de problèmes avec ma version de Mavericks virtualisée avec VirtualBox sous GNU/Linux que j'ai du me rabattre à Py2app).

L'application utilise en interne pdftoppm (une version portable de pdftoppm sous Windows, et une version installée sous GNU/Linux).
pdftoppm fait partie de Poppler qui peut être installé avec homebrew, mais je ne veux pas imposer l'installation de Poppler utilisant mon application sous MacOSX avec le terminal (pas mal d'utilisateur potentiels semblent complètement alergiques aux install utilisant le terminal).

En fait mon application, à un moment donné du processus, convertit un fichier pdf (de une à plusieurs pages) en images png. J'ai découvert sips dans MacOSX (qui peut convertir les pdf en images), ... mais je n'ai pas trouvé le moyen de convertir un pdf de plusieurs pages en autant d'images png. Voilà comment je convertis le png en image :

Code
sips -s dpiWidth 300 -s dpiHeight 300 -s format png fichier_pdf_source --out fichier_destination-1.png


Si le fichier pdf contient 2 pages, j'aimerais obtenir : fichier_destination-1.png et fichier_destination-2.png (comme on peut l'obtenir avec pdftoppm), je ne sais pas du tout si c'est possible avec sips, j'ai fait des recherches à ce sujet mais pour l'instant je n'ai rien trouvé de probant !
C'est dommage car l'avantage de sips est qu'il est installé nativement sous MacOSX.

N'ayant pas trouvé de version portable de pdftoppm (ou Poppler) sous MacOSX, ni un ImageMagick portable (en utilisant convert), je pense que la seule application qui me permette de convertir des pdf en png en ligne de commande sous MacOSX, c'est sips (je me trompe ?), mais il ne fait pas exactement ce que je veux ...

Quelqu'un sait-il si malgré tout il est possible de dire à sips ... si le fichier pdf comporte plusieurs pages, et bien tu dois le convertir en autant d'images png ?, autrement quelqu'un sait-il ici s'il existe quelque part une version portable (out of the box) de pdftoppm (ou Poppler) pour MacOSX ?, ou ImageMagick ... que je pourrais importer dans mon logiciel comme je le fais sous Windows ?

Pouvez-vous m'aider ?

Je vous remercie d'avance.

a+ wink.gif

Ce message a été modifié par ekdmekdm - 24 Feb 2019, 13:10.


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Réponse(s)
KOENIG Yvan
posté 24 Feb 2019, 17:58
Message #2


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 989
Inscrit : 22 Aug 2002
Lieu : 06220 VALLAURIS
Membre no 3 217



Oops, je n'ai pas posté la bonne version.

Pour générer des Png il faut utiliser :



CODE
use AppleScript version "2.3.1"
use scripting additions
use framework "Foundation"
use framework "Quartz" -- required for PDF stuff

#===== Handlers

-- Supposed to create a new PDF file and a new PNG for every page from the passed PDF file.
# Based upon a handler designed by Shane STANLEY

on splitPDF:thePath
set inNSURL to current application's |NSURL|'s fileURLWithPath:thePath

set thePDFDocument to current application's PDFDocument's alloc()'s initWithURL:inNSURL
# CAUTION. theList contain indexes of pages numbered starting from 1, but ASObjC number them starting from 0
set theCount to thePDFDocument's pageCount() as integer

# Build three descriptors only once
set pathNSString to (current application's NSString's stringWithString:thePath)
set tempPDFPath to POSIX path of ((path to temporary items as text) & "temp_pmet.pdf")
set tempNSURL to (current application's |NSURL|'s fileURLWithPath:tempPDFPath)

repeat with i from 1 to theCount
set newPngNSString to current application's NSString's stringWithFormat_("%@%@.%@", pathNSString's stringByDeletingPathExtension(), ("-page " & text -2 thru -1 of ((100 + i) as text)), "png")
set pngPath to newPngNSString as text

set thePDFPage to (thePDFDocument's pageAtIndex:(i - 1))
set newPDFDoc to current application's PDFDocument's alloc()'s init()
(newPDFDoc's insertPage:thePDFPage atIndex:0)
(newPDFDoc's writeToURL:tempNSURL)

set theImage to (current application's NSImage's alloc()'s initWithContentsOfURL:tempNSURL)
set theData to theImage's TIFFRepresentation()
-- make imagerep from data
set newRep to (current application's NSBitmapImageRep's imageRepWithData:theData)
set theData to (newRep's representationUsingType:(current application's NSPNGFileType) |properties|:{NSTIFFCompressionNone:1})
set theResult to (theData's writeToFile:pngPath atomically:true)
end repeat
end splitPDF:


#===== Caller

set thePath to POSIX path of (choose file with prompt "Choose a PDF file." of type {"PDF"})
its splitPDF:thePath


Yvan KOENIG running High Sierra 10.13.6 in French (VALLAURIS, France) dimanche 24 février 2019 17:58:09


Ce message a été modifié par baron - 24 Feb 2019, 19:51.
Raison de l'édition : Ajout de balises Codebox, plus lisibles
Go to the top of the page
 
+Quote Post

Les messages de ce sujet


Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 17th June 2025 - 10:26