Rogner un PDF automatiquement

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:
Bloc de code:
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:

Capture d’écran 2022-11-10 à 15.03.41.png
 
Dernière édition:
si on a Pixelmator, il existe des actions automator pour rogner des images.
 
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 :

Screenshot - 10-11-2022 à 16h51 27s - Finder - temp.png

Screenshot - 10-11-2022 à 16h51 30s - Finder - temp.png

En tout cas le fichier est bien dans Temp !
 
Dernière édition:
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...
 
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.
 
Dernière édition: