# Rogner un PDF automatiquement



## Gregoryen (6 Novembre 2022)

Bonsoir !

Je vends beaucoup sur leboncoin et j'ai une machine pour imprimer les étiquettes, c'est vraiment top !

Seulement lorsque je reçois le PDF avec l'étiquette prépayé, elle est au format A4.

Voici son format :







Seulement ce qui m'intéresse c'est uniquement la partie de gauche avec l'adresse, comme ça j'ai juste à la glisser dans mon icône d'imprimante pour que ça sorte.

J'aimerais rogner de sorte à obtenir ça :






Comment faire avec automator et peut-être un script ?

J'ai la même chose avec les étiquettes de mondial relay. Selon le script j'aurais juste à modifier les valeurs pour qu'il coupe X pixels en haut X à droite, X à gauche et X en bas.

 Merci de votre aide et bon week-end !


----------



## baron (6 Novembre 2022)

Tu verras peut-être un intérêt à ce logiciel (également présenté ici mais je ne sais plus où…)
https://forum.macbidouille.com/index.php?showtopic=417375 

Autrement, Graphic Converter peut faire ça aisément et il est assez bien scriptable…


----------



## Gregoryen (6 Novembre 2022)

Merci pour la réponse, j'ai essayé.

PDF Zone : je n'ai surement pas compris le fonctionnement mais je n'ai pas réussi faire ce que je voulais.
GraphicConverter : il propose de rogner a X de hauteur et X de largeur, mais ne dit pas à partir de quel pixel faire cela, et comment l'automatiser ?

J'aurais aimé n'ouvrir aucun logiciel et juste le glisser dans une app automator et que le travail se fasse super rapidement.


----------



## zeltron54 (7 Novembre 2022)

Bonjour,

Pour faire un script de ce que tu demandes, il y a plusieurs choses à savoir.


Je sais recadrer un JPEG mais pas un PDF, donc il faut que le script change le PDF en jpeg. Lors de ce changement le nombre de pixel du document change.
Pour obtenir les dimensions du recadrage il faut savoir si ton document pdf est horizontal (paysage) ou vertical (portrait) et calculer non pas le nombre de pixel mais un pourcentage (ou un dimension en cm)  des valeurs que tu veux supprimer(haut , bas, droite, gauche)

Avec ces infos, je peux essayer de te faire un applescript.


----------



## zeltron54 (7 Novembre 2022)

Je t'ai préparé un script pour tester
J'ai mis les valeurs de coupe par défaut au vu de ta copie d'écran.
Testé chez moi sur "Mojave"

Au lancement il demande de sélectionner le fichier à traiter
Il le transforme en un fichier du même nom en "Nom_du_fichier.JPEG" enregistré au même endroit
Il te demande d'entrer les valeurs de coupe en millimètres (bas, haut, gauche, droite) des valeurs par défaut son affichées.
il applique les coupes
Il enregistre le nouveau fichier au nom de "Nom_du_fichier-2.JPEG" enregistré au même endroit
il ouvre le fichier et demande son impression.

Il te restera à supprimer ces 2 nouveaux fichiers

Si cela fonctionne je regarderai pour en faire un "droplet"


```
tell application "Finder"
    set monfichier to choose file with prompt "Sélectionnez le fichier PDF à traiter"
    set nom to name of monfichier
    set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
    set elements to text items of nom
    set nomcourt to (items 1 thru -2 of elements) as string
    set ancien_nom to nomcourt
    
end tell

tell application "Image Events"
    set chemin to the container of monfichier
    set uneimage to open monfichier
    set nouveau to nomcourt & ".JPEG"
    save uneimage as "JPEG" in file nouveau of chemin
    close uneimage
end tell


tell application "Finder"
    set chemin to the container of monfichier as string
    set nouveau to nomcourt & ".JPEG"
end tell

set thePath to chemin & nouveau
set thePath to POSIX path of thePath

my padBottomOfImageAt:(thePath) byPoints:100

use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use framework "AppKit"
use scripting additions

on padBottomOfImageAt:POSIXPath byPoints:padDepth
    -- build path for new file
    set anNSString to current application's NSString's stringWithString:POSIXPath
    set newPath to anNSString's stringByDeletingPathExtension()
    set theExt to anNSString's pathExtension() as text
    set newPath to (newPath's stringByAppendingString:"-2")'s stringByAppendingPathExtension:theExt
    -- load image as bitmap and get its size
    set oldRep to current application's NSBitmapImageRep's imageRepWithContentsOfFile:POSIXPath
    set {width:theWidth, height:theHeight} to oldRep's |size|()
    set newHeight to theHeight + padDepth
    -- make new bitmapImageRep
    set newRep to (current application's NSBitmapImageRep's alloc()'s initWithBitmapDataPlanes:(missing value) pixelsWide:theWidth pixelsHigh:newHeight bitsPerSample:8 samplesPerPixel:4 hasAlpha:true isPlanar:false colorSpaceName:(current application's NSCalibratedRGBColorSpace) bitmapFormat:(current application's NSAlphaFirstBitmapFormat) bytesPerRow:0 bitsPerPixel:32)
    -- store the existing graphics context
    current application's NSGraphicsContext's saveGraphicsState()
    -- set graphics context to new context based on the new bitmapImageRep
    (current application's NSGraphicsContext's setCurrentContext:(current application's NSGraphicsContext's graphicsContextWithBitmapImageRep:newRep))
    -- set the color to black
    current application's NSColor's blackColor()'s |set|()
    -- fill the bottom area with black
    current application's NSRectFill({origin:{x:0, y:0}, |size|:{width:theWidth, height:padDepth}})
    -- draw from the original bitmapImageRep to the new one above the black area
    
    tell application "Finder"
        activate
        display dialog "Entrer la dimension a couper en bas (en milimètres)" default answer "27"
        set bas to text returned of result
        display dialog "Entrer la dimension a couper en haut (en milimètres)" default answer "0"
        set haut to text returned of result
        display dialog "Entrer la dimension a couper à gauche (en milimètres)" default answer "0"
        set gauche to text returned of result
        display dialog "Entrer la dimension a couper à droite (en milimètres)" default answer "114"
        set droite to text returned of result
        if theWidth < theHeight then
            set H to 210
            set V to 297
        else
            set H to 297
            set V to 210
        end if
    end tell
    
    set OX to theWidth / H * gauche
    set OY to theHeight / V * bas
    set SX to theWidth / H * (H - droite - gauche)
    set SY to theHeight / V * (V - haut - bas)
    
    oldRep's drawInRect:{origin:{x:0, y:padDepth}, |size|:{width:theWidth, height:theHeight}} fromRect:{origin:{x:OX, y:OY}, |size|:{width:(SX), height:(SY)}} operation:(current application's NSCompositeSourceOver) fraction:1.0 respectFlipped:true hints:(missing value)
    -- restore graphics state
    current application's NSGraphicsContext's restoreGraphicsState()
    -- save bitmapImageRep as image
    if {"tif", "tiff"} contains {theExt} then
        set theData to (newRep's representationUsingType:(current application's NSTIFFFileType) |properties|:{NSTIFFCompression:(current application's NSTIFFCompressionLZW)})
    else if {"jpg", "jpeg"} contains {theExt} then
        set theData to (newRep's representationUsingType:(current application's NSJPEGFileType) |properties|:{NSImageCompressionFactor:0.8, NSImageProgressive:true})
    else if theExt = "png" then
        set theData to (newRep's representationUsingType:(current application's NSPNGFileType) |properties|:{NSImageInterlaced:true})
    else -- unsupported type
        return false
    end if
    set theResult to (theData's writeToFile:newPath atomically:true)
    return (theResult as boolean)
end padBottomOfImageAt:byPoints:

tell application "Finder"
    set imp to chemin & nomcourt & "-2.JPEG"
    delay 2
    print imp
end tell
```


----------



## Gregoryen (7 Novembre 2022)

Merci beaucoup pour ton aide !

Lorsque j'ouvre l'app il m'affiche ce message :






Mais on ne peux pas garder le format PDF ? J'arrive à crop un PDF avec aperçu.

Voici les valeurs que je dois croper mais je ne sait pas ou les modifier :

367 à droite
44 à gauche
239 en bas
50 en haut

Est-ce qu'on peux faire en sorte que je glisse le fichier sur l'app, et que celui-ci soit automatiquement remplacé ?

Merci beaucoup en tout cas !


----------



## zeltron54 (7 Novembre 2022)

Peux-tu me détailler comment tu procèdes pour ouvrir l'application ?
et sur quel ordi et quel OS car j'ai des doute sur le procès utilisé "Image Events" qui fonctionne sans problème chez moi sur OS Mojave, mais à l'air d'avoir des soucis sur des OS plus récent, Malheureusement je ne peux pas tester.

Dans "Aperçu" je n'ai pas trouver de possibilités de le scripter pour ce que tu demandes.

Autre solution : Si tu possèdes photoshop tu as la possibilité de créer un script et d'en faire un droplet.


----------



## Gregoryen (7 Novembre 2022)

Je suis sur Ventura avec Mac Studio.

Merci pour le conseil photoshop je vais voir ça


----------



## zeltron54 (8 Novembre 2022)

Bonjour,
J'ai légèrement modifié le script pour un nouvel essai...
Dis-moi si cela fonctionne !


> Est-ce qu'on peux faire en sorte que je glisse le fichier sur l'app, et que celui-ci soit automatiquement remplacé ?


Oui , si le script fonctionne on pourra faire ça!


```
tell application "Finder"
    set monfichier to choose file with prompt "Sélectionnez le fichier PDF à traiter"
    set nom to name of monfichier
    set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
    set elements to text items of nom
    set nomcourt to (items 1 thru -2 of elements) as string
    set ancien_nom to nomcourt
    set chemin to the container of monfichier as alias
end tell

tell application "Image Events"
    set uneimage to open monfichier
    set nouveau to nomcourt & ".JPEG"
    save uneimage as "JPEG" in file nouveau of chemin
    close uneimage
end tell

tell application "Finder"
    set chemin to the container of monfichier as string
    set nouveau to nomcourt & ".JPEG"
end tell

set thePath to chemin & nouveau
set thePath to POSIX path of thePath

my padBottomOfImageAt:(thePath) byPoints:100

use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use framework "AppKit"
use scripting additions

on padBottomOfImageAt:POSIXPath byPoints:padDepth
    -- build path for new file
    set anNSString to current application's NSString's stringWithString:POSIXPath
    set newPath to anNSString's stringByDeletingPathExtension()
    set theExt to anNSString's pathExtension() as text
    set newPath to (newPath's stringByAppendingString:"-2")'s stringByAppendingPathExtension:theExt
    -- load image as bitmap and get its size
    set oldRep to current application's NSBitmapImageRep's imageRepWithContentsOfFile:POSIXPath
    set {width:theWidth, height:theHeight} to oldRep's |size|()
    set newHeight to theHeight + padDepth
    -- make new bitmapImageRep
    set newRep to (current application's NSBitmapImageRep's alloc()'s initWithBitmapDataPlanes:(missing value) pixelsWide:theWidth pixelsHigh:newHeight bitsPerSample:8 samplesPerPixel:4 hasAlpha:true isPlanar:false colorSpaceName:(current application's NSCalibratedRGBColorSpace) bitmapFormat:(current application's NSAlphaFirstBitmapFormat) bytesPerRow:0 bitsPerPixel:32)
    -- store the existing graphics context
    current application's NSGraphicsContext's saveGraphicsState()
    -- set graphics context to new context based on the new bitmapImageRep
    (current application's NSGraphicsContext's setCurrentContext:(current application's NSGraphicsContext's graphicsContextWithBitmapImageRep:newRep))
    -- set the color to black
    current application's NSColor's blackColor()'s |set|()
    -- fill the bottom area with black
    current application's NSRectFill({origin:{x:0, y:0}, |size|:{width:theWidth, height:padDepth}})
    -- draw from the original bitmapImageRep to the new one above the black area
    
    tell application "Finder"
        activate
        display dialog "Entrer la dimension a couper en bas (en milimètres)" default answer "27"
        set bas to text returned of result
        display dialog "Entrer la dimension a couper en haut (en milimètres)" default answer "0"
        set haut to text returned of result
        display dialog "Entrer la dimension a couper à gauche (en milimètres)" default answer "0"
        set gauche to text returned of result
        display dialog "Entrer la dimension a couper à droite (en milimètres)" default answer "114"
        set droite to text returned of result
        if theWidth < theHeight then
            set H to 210
            set V to 297
        else
            set H to 297
            set V to 210
        end if
    end tell
    
    set OX to theWidth / H * gauche
    set OY to theHeight / V * bas
    set SX to theWidth / H * (H - droite - gauche)
    set SY to theHeight / V * (V - haut - bas)
    
    oldRep's drawInRect:{origin:{x:0, y:padDepth}, |size|:{width:theWidth, height:theHeight}} fromRect:{origin:{x:OX, y:OY}, |size|:{width:(SX), height:(SY)}} operation:(current application's NSCompositeSourceOver) fraction:1.0 respectFlipped:true hints:(missing value)
    -- restore graphics state
    current application's NSGraphicsContext's restoreGraphicsState()
    -- save bitmapImageRep as image
    if {"tif", "tiff"} contains {theExt} then
        set theData to (newRep's representationUsingType:(current application's NSTIFFFileType) |properties|:{NSTIFFCompression:(current application's NSTIFFCompressionLZW)})
    else if {"jpg", "jpeg"} contains {theExt} then
        set theData to (newRep's representationUsingType:(current application's NSJPEGFileType) |properties|:{NSImageCompressionFactor:0.8, NSImageProgressive:true})
    else if theExt = "png" then
        set theData to (newRep's representationUsingType:(current application's NSPNGFileType) |properties|:{NSImageInterlaced:true})
    else -- unsupported type
        return false
    end if
    set theResult to (theData's writeToFile:newPath atomically:true)
    return (theResult as boolean)
end padBottomOfImageAt:byPoints:

tell application "Finder"
    set imp to chemin & nomcourt & "-2.JPEG"
    delay 2
    print imp
end tell
```


----------



## Gregoryen (9 Novembre 2022)

Bonsoir, j'ai toujours le même message. Est-ce lié a Ventura ou au fait que je suis sur M1 ?

Après j'ai procédé de la sortes, j'ai ouvert automator, mis le script, et crée un .app , peut-être ai-je mal procédé aussi !


----------



## zeltron54 (9 Novembre 2022)

Bonjour,

Il ne faut pas se servir d'automator !

Tu ouvres "Editeur de script" qui est dans Applications-->Utilitaires
Dans la fenêtre qui s'ouvre tu choisis nouveau document en bas à gauche
Dans la nouvelle fenêtre qui s'ouvre tu fais un copier coller du script
Tu le lances en cliquant sur exécuter en haut à gauche.


----------



## Gregoryen (9 Novembre 2022)

Ok je l'ai fait directement depuis Script avec le bouton Play, mais j'ai le message encore une fois :


----------



## zeltron54 (9 Novembre 2022)

OK!
Ils ont du changer un truc dans le procès "image Events", et je ne peux pas vérifier le dictionnaire de l'application vu que je n'ai pas de M1 ni ventura !

Je tente un nouvel essai ...

Edit: j'y pense tu peux essayer d'autoriser "image Events" dans :

Accessibilité
Accès complet au disque
Automatisation
Cela se passe dans préférence système --> sécurité et confidentialité


```
tell application "Finder"
    set monfichier to choose file with prompt "Sélectionnez le fichier PDF à traiter"
    set nom to name of monfichier
    set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
    set elements to text items of nom
    set nomcourt to (items 1 thru -2 of elements) as string
    set ancien_nom to nomcourt
    set chemin to the container of monfichier as alias
    set nouveau to nomcourt & ".JPEG"
end tell

tell application "Image Events"
    set uneimage to open monfichier
    save uneimage as "JPEG" in file nouveau of chemin
    close uneimage
end tell

tell application "Finder"
    set chemin to the container of monfichier as string
    set nouveau to nomcourt & ".JPEG"
end tell

set thePath to chemin & nouveau
set thePath to POSIX path of thePath

my padBottomOfImageAt:(thePath) byPoints:100

use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use framework "AppKit"
use scripting additions

on padBottomOfImageAt:POSIXPath byPoints:padDepth
    -- build path for new file
    set anNSString to current application's NSString's stringWithString:POSIXPath
    set newPath to anNSString's stringByDeletingPathExtension()
    set theExt to anNSString's pathExtension() as text
    set newPath to (newPath's stringByAppendingString:"-2")'s stringByAppendingPathExtension:theExt
    -- load image as bitmap and get its size
    set oldRep to current application's NSBitmapImageRep's imageRepWithContentsOfFile:POSIXPath
    set {width:theWidth, height:theHeight} to oldRep's |size|()
    set newHeight to theHeight + padDepth
    -- make new bitmapImageRep
    set newRep to (current application's NSBitmapImageRep's alloc()'s initWithBitmapDataPlanes:(missing value) pixelsWide:theWidth pixelsHigh:newHeight bitsPerSample:8 samplesPerPixel:4 hasAlpha:true isPlanar:false colorSpaceName:(current application's NSCalibratedRGBColorSpace) bitmapFormat:(current application's NSAlphaFirstBitmapFormat) bytesPerRow:0 bitsPerPixel:32)
    -- store the existing graphics context
    current application's NSGraphicsContext's saveGraphicsState()
    -- set graphics context to new context based on the new bitmapImageRep
    (current application's NSGraphicsContext's setCurrentContext:(current application's NSGraphicsContext's graphicsContextWithBitmapImageRep:newRep))
    -- set the color to black
    current application's NSColor's blackColor()'s |set|()
    -- fill the bottom area with black
    current application's NSRectFill({origin:{x:0, y:0}, |size|:{width:theWidth, height:padDepth}})
    -- draw from the original bitmapImageRep to the new one above the black area
  
    tell application "Finder"
        activate
        display dialog "Entrer la dimension a couper en bas (en milimètres)" default answer "27"
        set bas to text returned of result
        display dialog "Entrer la dimension a couper en haut (en milimètres)" default answer "0"
        set haut to text returned of result
        display dialog "Entrer la dimension a couper à gauche (en milimètres)" default answer "0"
        set gauche to text returned of result
        display dialog "Entrer la dimension a couper à droite (en milimètres)" default answer "114"
        set droite to text returned of result
        if theWidth < theHeight then
            set H to 210
            set V to 297
        else
            set H to 297
            set V to 210
        end if
    end tell
  
    set OX to theWidth / H * gauche
    set OY to theHeight / V * bas
    set SX to theWidth / H * (H - droite - gauche)
    set SY to theHeight / V * (V - haut - bas)
  
    oldRep's drawInRect:{origin:{x:0, y:padDepth}, |size|:{width:theWidth, height:theHeight}} fromRect:{origin:{x:OX, y:OY}, |size|:{width:(SX), height:(SY)}} operation:(current application's NSCompositeSourceOver) fraction:1.0 respectFlipped:true hints:(missing value)
    -- restore graphics state
    current application's NSGraphicsContext's restoreGraphicsState()
    -- save bitmapImageRep as image
    if {"tif", "tiff"} contains {theExt} then
        set theData to (newRep's representationUsingType:(current application's NSTIFFFileType) |properties|:{NSTIFFCompression:(current application's NSTIFFCompressionLZW)})
    else if {"jpg", "jpeg"} contains {theExt} then
        set theData to (newRep's representationUsingType:(current application's NSJPEGFileType) |properties|:{NSImageCompressionFactor:0.8, NSImageProgressive:true})
    else if theExt = "png" then
        set theData to (newRep's representationUsingType:(current application's NSPNGFileType) |properties|:{NSImageInterlaced:true})
    else -- unsupported type
        return false
    end if
    set theResult to (theData's writeToFile:newPath atomically:true)
    return (theResult as boolean)
end padBottomOfImageAt:byPoints:

tell application "Finder"
    set imp to chemin & nomcourt & "-2.JPEG"
    delay 1
    --print imp
    delay 2
    set efface to POSIX path of imp
    set efface1 to POSIX path of (chemin & nomcourt & ".JPEG")
    do shell script "rm " & efface
    do shell script "rm " & efface1
end tell
```


----------



## Gregoryen (9 Novembre 2022)

zeltron54 a dit:


> OK!
> Ils ont du changer un truc dans le procès "image Events", et je ne peux pas vérifier le dictionnaire de l'application vu que je n'ai pas de M1 ni ventura !
> 
> Je tente un nouvel essai ...
> ...


Dans "Automatisation", Image Events est bien coché.
Dans "Accès complet au disque" je ne peux rajouter que des .app alors j'ai autorisé Éditeur de script mais ça n'a rien donné hélas.
Il est également activé dans "Accessibilité".

J'ai essayé de sélectionner une image à la place du PDF mais j'ai le même message.


----------



## zeltron54 (9 Novembre 2022)

le nouveau script provoque toujours l’erreur?

Alors je n’ai plus rien à tester, reste Photoshop…


----------



## Gregoryen (9 Novembre 2022)

Pour photoshop j'ai essayé le droplet mais il ne me propose que de redimensionner une image.

Je ne peux pas lui dire de croper X pixel en haut, X en bas etc... Ou alors je n'ai pas trouvé les options !


----------



## zeltron54 (9 Novembre 2022)

Je pense avoir trouver une solution !
Encore une question:
Après l'impression veux-tu conserver le fichier "croper " ou j'efface ce fichier ?


----------



## zeltron54 (9 Novembre 2022)

La solution
Tu ouvres Editeur de script, dans une nouvelle fenêtre tu fais un copier-coller de ce script.

Tu enregistres :  menu—> fichier—> enregistrer sous  et dans la fenêtre , dans format de fichier tu choisis —> Application tu enregistres cette application avec le nom de ton choix à un endroit à ta convenance.

Tu peux quitter.

Tu glisses ton fichier PDF à traiter sur l’ icone de cette nouvelle application
Lors de la première utilisation il va te demander d’autoriser cette application…
Le fichier imprimé sera dans le même dossier que le PDF et s'appelle : Nom_du_fichier-2.JPEG
Rappel les dimensions demandées sont à renseigner en millimètres …


```
on open monfichier
    tell application "Finder"
        set a to monfichier as string
        set monfichier to a as alias
        set nom to name of monfichier
        set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
        set elements to text items of nom
        set nomcourt to (items 1 thru -2 of elements) as string
        set ancien_nom to nomcourt
        set chemin to the container of monfichier as string
        set nouveau to nomcourt & ".JPEG"
        set enrg to chemin & nouveau as string
        set chemin to the container of monfichier as string
        set nouveau to nomcourt & ".JPEG"
    end tell
    
    set enrg to quoted form of POSIX path of enrg
    set lefichier to quoted form of POSIX path of monfichier
    set commande to "sips -s format JPEG " & lefichier & " --out " & enrg
    do shell script "sips -s format JPEG " & lefichier & " --out " & enrg
    
    set thePath to chemin & nouveau
    set thePath to POSIX path of thePath
    
    my padBottomOfImageAt:(thePath) byPoints:100
    
    tell application "Finder"
        set imp to chemin & nomcourt & "-2.JPEG"
        delay 1
        print imp
        delay 2
        --set efface to quoted form of POSIX path of imp
        set efface1 to quoted form of POSIX path of (chemin & nomcourt & ".JPEG")
        --do shell script "rm " & efface
        do shell script "rm " & efface1
    end tell
    
end open
use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use framework "AppKit"
use scripting additions

on padBottomOfImageAt:POSIXPath byPoints:padDepth
    -- build path for new file
    set anNSString to current application's NSString's stringWithString:POSIXPath
    set newPath to anNSString's stringByDeletingPathExtension()
    set theExt to anNSString's pathExtension() as text
    set newPath to (newPath's stringByAppendingString:"-2")'s stringByAppendingPathExtension:theExt
    -- load image as bitmap and get its size
    set oldRep to current application's NSBitmapImageRep's imageRepWithContentsOfFile:POSIXPath
    set {width:theWidth, height:theHeight} to oldRep's |size|()
    set newHeight to theHeight + padDepth
    -- make new bitmapImageRep
    set newRep to (current application's NSBitmapImageRep's alloc()'s initWithBitmapDataPlanes:(missing value) pixelsWide:theWidth pixelsHigh:newHeight bitsPerSample:8 samplesPerPixel:4 hasAlpha:true isPlanar:false colorSpaceName:(current application's NSCalibratedRGBColorSpace) bitmapFormat:(current application's NSAlphaFirstBitmapFormat) bytesPerRow:0 bitsPerPixel:32)
    -- store the existing graphics context
    current application's NSGraphicsContext's saveGraphicsState()
    -- set graphics context to new context based on the new bitmapImageRep
    (current application's NSGraphicsContext's setCurrentContext:(current application's NSGraphicsContext's graphicsContextWithBitmapImageRep:newRep))
    -- set the color to black
    current application's NSColor's blackColor()'s |set|()
    -- fill the bottom area with black
    current application's NSRectFill({origin:{x:0, y:0}, |size|:{width:theWidth, height:padDepth}})
    -- draw from the original bitmapImageRep to the new one above the black area
    
    tell application "Finder"
        activate
        display dialog "Entrer la dimension a couper en bas (en milimètres)" default answer "27"
        set bas to text returned of result
        display dialog "Entrer la dimension a couper en haut (en milimètres)" default answer "0"
        set haut to text returned of result
        display dialog "Entrer la dimension a couper à gauche (en milimètres)" default answer "0"
        set gauche to text returned of result
        display dialog "Entrer la dimension a couper à droite (en milimètres)" default answer "114"
        set droite to text returned of result
        if theWidth < theHeight then
            set H to 210
            set V to 297
        else
            set H to 297
            set V to 210
        end if
    end tell
    
    set OX to theWidth / H * gauche
    set OY to theHeight / V * bas
    set SX to theWidth / H * (H - droite - gauche)
    set SY to theHeight / V * (V - haut - bas)
    
    oldRep's drawInRect:{origin:{x:0, y:padDepth}, |size|:{width:theWidth, height:theHeight}} fromRect:{origin:{x:OX, y:OY}, |size|:{width:(SX), height:(SY)}} operation:(current application's NSCompositeSourceOver) fraction:1.0 respectFlipped:true hints:(missing value)
    -- restore graphics state
    current application's NSGraphicsContext's restoreGraphicsState()
    -- save bitmapImageRep as image
    if {"tif", "tiff"} contains {theExt} then
        set theData to (newRep's representationUsingType:(current application's NSTIFFFileType) |properties|:{NSTIFFCompression:(current application's NSTIFFCompressionLZW)})
    else if {"jpg", "jpeg"} contains {theExt} then
        set theData to (newRep's representationUsingType:(current application's NSJPEGFileType) |properties|:{NSImageCompressionFactor:0.8, NSImageProgressive:true})
    else if theExt = "png" then
        set theData to (newRep's representationUsingType:(current application's NSPNGFileType) |properties|:{NSImageInterlaced:true})
    else -- unsupported type
        return false
    end if
    set theResult to (theData's writeToFile:newPath atomically:true)
    return (theResult as boolean)
end padBottomOfImageAt:byPoints:
```


----------



## Gregoryen (9 Novembre 2022)

Après l'impression oui je veux garder le format cropé, qu'il remplace l'original.

Alors j'ai crée le .app avec Editeur de script, et j'ai ce message.






La résolution de mon fichier initial fait 595x420, j'ai essayé avec un png mais j'ai le même message.


----------



## zeltron54 (9 Novembre 2022)

Le message dit que ton Shell (terminal) ne supporte pas la commande « sips » avec le format tel que je l’ écrit .

Mon Shell est bash et date de Mojave , et chez moi tout fonctionne. Du coup je ne peux pas tester…
désolé !


----------



## Gregoryen (9 Novembre 2022)

zeltron54 a dit:


> Le message dit que ton Shell (terminal) ne supporte pas la commande « sips » avec le format tel que je l’ écrit .
> 
> Mon Shell est bash et date de Mojave , et chez moi tout fonctionne. Du coup je ne peux pas tester…
> désolé !


Il n'y a pas moyen de modifier le terminal ?


----------



## zeltron54 (10 Novembre 2022)

J'ai fait un truc qui fonctionne mais un peu dur à mettre en place.
Cela consiste à avoir un droplet automator qui appelle un script applescript (enregistré comme application)

1- ouvrir Editeur de script et y faire un copie coller du script ci-dessous
2- enregistrer comme application sous le nom "script croper"
3- Ouvrir automator --> choisir application
4- Mettre les 3 actions comme copie écran ci-dessous
5- Dans la deuxième action mettre le nom temp
6- Dans la troisième action sélectionner l'application "script croper" (en la choisissant --> autre... et choisir dans l'arborescence)
7- enregistrer cette application automator sous le nom de ton choix (je l'ai appelé "crop et imprime pdf". Cette application sera le droplet à utiliser.

Pour utiliser:
Tu fais un glisser déposer de ton fichier PDF à traiter sur le droplet automator
Cela te demande d'autoriser cette application, puis d' entrer les valeurs à croper. et va envoyer sur l'imprimante
Un dossier "temp" est créé sur le bureau, qui contiendra le fichier imprimé.

le script:

```
tell application "Finder"
  
    set mondossier to (path to desktop folder as text) & "temp:"
    set mondossier to mondossier as alias
    set monfichier to files of mondossier as alias
  
    set nom to name of monfichier
    set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
    set elements to text items of nom
    set nomcourt to (items 1 thru -2 of elements) as string
    set ancien_nom to nomcourt
    set chemin to the container of monfichier as string
    set nouveau to nomcourt & ".JPEG"
    set enrg to chemin & nouveau as string
    set chemin to the container of monfichier as string
    set nouveau to nomcourt & ".JPEG"
end tell

set thePath to chemin & nouveau
set thePath to POSIX path of thePath

my padBottomOfImageAt:(thePath) byPoints:100

use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use framework "AppKit"
use scripting additions

on padBottomOfImageAt:POSIXPath byPoints:padDepth
    -- build path for new file
    set anNSString to current application's NSString's stringWithString:POSIXPath
    set newPath to anNSString's stringByDeletingPathExtension()
    set theExt to anNSString's pathExtension() as text
    set newPath to (newPath's stringByAppendingString:"-2")'s stringByAppendingPathExtension:theExt
    -- load image as bitmap and get its size
    set oldRep to current application's NSBitmapImageRep's imageRepWithContentsOfFile:POSIXPath
    set {width:theWidth, height:theHeight} to oldRep's |size|()
    set newHeight to theHeight + padDepth
    -- make new bitmapImageRep
    set newRep to (current application's NSBitmapImageRep's alloc()'s initWithBitmapDataPlanes:(missing value) pixelsWide:theWidth pixelsHigh:newHeight bitsPerSample:8 samplesPerPixel:4 hasAlpha:true isPlanar:false colorSpaceName:(current application's NSCalibratedRGBColorSpace) bitmapFormat:(current application's NSAlphaFirstBitmapFormat) bytesPerRow:0 bitsPerPixel:32)
    -- store the existing graphics context
    current application's NSGraphicsContext's saveGraphicsState()
    -- set graphics context to new context based on the new bitmapImageRep
    (current application's NSGraphicsContext's setCurrentContext:(current application's NSGraphicsContext's graphicsContextWithBitmapImageRep:newRep))
    -- set the color to black
    current application's NSColor's blackColor()'s |set|()
    -- fill the bottom area with black
    current application's NSRectFill({origin:{x:0, y:0}, |size|:{width:theWidth, height:padDepth}})
    -- draw from the original bitmapImageRep to the new one above the black area
  
    tell application "Finder"
        activate
        display dialog "Entrer la dimension a couper en bas (en milimètres)" default answer "27"
        set bas to text returned of result
        display dialog "Entrer la dimension a couper en haut (en milimètres)" default answer "0"
        set haut to text returned of result
        display dialog "Entrer la dimension a couper à gauche (en milimètres)" default answer "0"
        set gauche to text returned of result
        display dialog "Entrer la dimension a couper à droite (en milimètres)" default answer "114"
        set droite to text returned of result
        if theWidth < theHeight then
            set H to 210
            set V to 297
        else
            set H to 297
            set V to 210
        end if
    end tell
  
    set OX to theWidth / H * gauche
    set OY to theHeight / V * bas
    set SX to theWidth / H * (H - droite - gauche)
    set SY to theHeight / V * (V - haut - bas)
  
    oldRep's drawInRect:{origin:{x:0, y:padDepth}, |size|:{width:theWidth, height:theHeight}} fromRect:{origin:{x:OX, y:OY}, |size|:{width:(SX), height:(SY)}} operation:(current application's NSCompositeSourceOver) fraction:1.0 respectFlipped:true hints:(missing value)
    -- restore graphics state
    current application's NSGraphicsContext's restoreGraphicsState()
    -- save bitmapImageRep as image
    if {"tif", "tiff"} contains {theExt} then
        set theData to (newRep's representationUsingType:(current application's NSTIFFFileType) |properties|:{NSTIFFCompression:(current application's NSTIFFCompressionLZW)})
    else if {"jpg", "jpeg"} contains {theExt} then
        set theData to (newRep's representationUsingType:(current application's NSJPEGFileType) |properties|:{NSImageCompressionFactor:0.8, NSImageProgressive:true})
    else if theExt = "png" then
        set theData to (newRep's representationUsingType:(current application's NSPNGFileType) |properties|:{NSImageInterlaced:true})
    else -- unsupported type
        return false
    end if
    set theResult to (theData's writeToFile:newPath atomically:true)
    return (theResult as boolean)
end padBottomOfImageAt:byPoints:

tell application "Finder"
    set imp to chemin & nomcourt & "-2.JPEG"
    delay 1
    print imp
    delay 2
    set efface1 to quoted form of POSIX path of (chemin & nomcourt & ".JPEG")
    do shell script "rm " & efface1
end tell
```

les actions automator:


----------



## daffyb (10 Novembre 2022)

si on a Pixelmator, il existe des actions automator pour rogner des images.


----------



## Gregoryen (10 Novembre 2022)

Niquel ! Ça à marché, il me propose combien de mm à couper puis il me le mets dans le dossier.
Par contre je sais combien de pixel couper, comment je le convertis en mm ? En fait j'ai les valeurs à croire qui correspondent à la résolution.

Lorsque je fais "Lire les informations" la résolution fait 595x420, avec Wondershare PDF ou autre logiciel il me dit 1089x770, je suppose que c'est les valeurs en pixel ? Du coup quand je crop le haut je passe de 770 à 700 donc je dois enlever 70 px en haut, etc etc...

Donc j'ai bien un crop effectué mais l'image n'est pas cropé aux bonnes proportions il me faut trouver les bonnes valeurs, et l'image est étiré.

Après j'ai eu ces deux alertes :











En tout cas le fichier est bien dans Temp !


----------



## zeltron54 (10 Novembre 2022)

Pour les autorisations je ne sais plus cela à tellement changé depuis quelques OS et sur les M1 ...

Par contre n' oublie pas de supprimer le dossier temp du bureau avant de lancer un nouveau crop !
Au lancement , il ne doit pas  y avoir de dossier temp sur le bureau ! sinon erreur lorsqu'il va essayé d'en créer un et lorqu'il va essayer de récupérer le fichier.

Pour le calcul, le nombre de pixels de la feuille diviser par la taille de la feuille en mm donne le nombre de pixels par mm !

Je ne comprend pas bien pourquoi tu veux entrer les dimensions en pixels, ce qui t'oblige à connaitre la taille de ton document en pixel et faire le ratio ! La définition du document original risque de changer à chaque fois et t'oblige à refaire tous tes calculs...
Alors que la dimension en millimètres est standard 210 x 297...


----------



## baron (10 Novembre 2022)

Une feuille A4 (210 × 297 mm) mesure 595 × 842 points typographiques Adobe (PostScript) : il y a exactement 72 points par pouce et un pouce fait 25,4 mm.

_(dimension en points / 72) × 25,4 = dimension en millimètres_​
Quand les écrans des Mac avaient tous une résolution de 72 ppi (pixels par pouce), c'était facile : un point typo égalait un pixel d'affichage (et les documents à l'écran avaient la même taille que sur papier).
Aujourd'hui que les écrans ont des résolutions variables – voire des pixels rectangulaires ! –, certains logiciels travaillent comme si c'était toujours vrai alors que d'autres utilisent la résolution réelle (quoique quelques-uns, comme Adobe Acrobat, qu'il soit Reader ou Pro, laissent  le choix). Ça n'a bien sûr rien facilité.

Il est en tout cas préférable d'utiliser des mesures de longueur réelle (points typo, pouces ou millimètres) plutôt que les pixels, par nature changeants selon les circonstances d'affichage.
(Et je conseillerais même plutôt les pouces ou les points, qui sont les valeurs utilisées dans le système, afin d'éviter toute erreur d'arrondi – mais c'est aussi se compliquer la vie lorsqu'on n'est pas familier avec ces unités. Le problème ne s'est de toute façon pas souvent posé.)


Bref.
Je ne sais pas comment tu mesures ton document mais si ton outil logiciel te donne 595 × 840 pour un A4, ou 595 × 421 pour un A5, etc. tu as désormais les éléments pour calculer une fois pour toutes les mesures voulues.
​


----------

