4 votes

Besoin d'un script pour exporter automatiquement des PDF Skim avec des notes incorporées

J'ai un dossier contenant quelques milliers de fichiers PDF, dont la plupart comportent des annotations Skim (par exemple, des surlignements et des notes). Si j'avais moins de fichiers, je passerais en revue chacun d'entre eux, j'exporterais le PDF avec les notes intégrées et je poursuivrais mon chemin en ayant la possibilité de lire mes annotations avec Adobe Reader sur un PC (c'est l'objectif).

Mais comme il y a beaucoup de fichiers, j'ai besoin d'un script qui va automatiquement parcourir ce dossier, exécuter la fonction "exporter en PDF avec notes intégrées" pour chaque PDF qui a des annotations Skim, et ensuite donner au nouveau fichier le nom du fichier original plus "avec notes Skim" (ou une autre désignation pour indiquer qu'il s'agit de la version avec notes intégrées). Deuxièmement, si je fais d'autres annotations sur le PDF original, ce serait génial si le script pouvait mettre à jour le fichier exporté avec les notes incorporées.

Je suppose que c'est possible, car il semble que Skim supporte très bien les applescript, mais je n'ai aucune idée de comment en créer un.

Merci beaucoup pour toute aide que vous pourrez m'apporter. GT

3voto

Alexander Gogl Points 46

J'ai eu le même problème et j'ai voulu incorporer par lot un grand nombre de pdf. Le script de Jess Riedel ne fonctionnait pas pour moi, alors j'ai codé un script en Python pour faire le travail.

J'ai utilisé le script pour intégrer 568 pdfs dispersés dans un dossier avec différents sous-dossiers. Cela a pris 300 secondes. Sachez que le script ne traitera pas les fichiers ayant une extension " dans son chemin d'accès.

Il est possible de créer une action de dossier osx qui exécute le script sur les fichiers modifiés dans un dossier automatiquement, chaque fois qu'un fichier est modifié. Je n'ai pas encore développé cette action car je n'en ai pas encore trouvé l'utilité.

Vous pouvez télécharger le script en tant que service osx et en tant que flux de travail alfred à l'adresse suivante https://github.com/alexandergogl/SkimPDF .

# -*- coding: utf-8 -*-

from os import system, walk, path

class SkimPDF(object):
    """docstring for SkimPDF."""
    def __init__(self):
        self.skimpdf_path = '/Applications/Skim.app/Contents/SharedSupport/skimpdf'
        self.embed_suffix = '_embeded'
        self.replace = False
        pass

    def embed_notes(self, in_pdf):
        """Embed skim notes to PDF."""
        if self.replace is False:
            out_pdf = "%s%s.pdf" % (in_pdf[:-4], self.embed_suffix)
        else:
            out_pdf = in_pdf

        # Embed notes
        cmd = '%s embed "%s" "%s"' % (self.skimpdf_path, in_pdf, out_pdf)
        result = system(cmd)

        # Compose message
        if result == 0:
            message = "Embeded notes to '%s'" % in_pdf
        else:
            message = result

        return message

    def embed_notes_batch(self, folder):
        """Loop through directories in given folder and embed notes."""
        messages = []
        i = 0
        for path, subdirs, files in walk(folder):
            for name in files:
                if name.endswith(".pdf"):
                    i += 1
                    # embed notes to pdf
                    pdf_file = "%s/%s" % (path, name)
                    result = skim.embed_notes(pdf_file)
                    # add result message to report
                    messages.append(result)
                    # report current state
                    print(i)

        self.report(messages)
        pass

    def report(self, messages):
        """Print list of processed pdfs."""
        print("\n\nProcessing PDFs done:")

        for i in range(len(messages)):
            message = "%s: %s" % (i + 1, messages[i])
            print(message)
        pass

skim = SkimPDF()
skim.replace = True  # set to false if you want a copy in place instead
# skim.embed_suffix = '_embeded'  # uncomment and enter your own suffix if necessary

# embed notes of a single pdf
skim.embed_notes('../path/to/pdf file.pdf')

# batch embeding process with path to folder with literature
skim.embed_notes_batch('../path/to/Literature folder')

2voto

Jess Riedel Points 121

C'est la méthode que j'ai utilisée pour l'ensemble de ma bibliothèque Zotero (~3GB de PDF). Notez que les seules annotations que j'utilise sont le surlignage (une seule couleur) et les commentaires. La réussite ou non de la conversion d'annotations plus complexes dépend des détails du script, que je ne connais pas bien.

Ce qui a fonctionné

L'original skimembed script convertit un PDF unique avec des annotations superficielles (qui se présentent sous la forme d'"attributions étendues") en un PDF unique avec des annotations intégrées. Il s'agit d'un script shell que vous exécutez à partir de la ligne de commande (terminal) en utilisant la notation suivante

sh skimembed pdf_with_skim_annotations.pdf

ou plus généralement

sh /path/to/scripts/folder/skimembed /path/to/pdf/folder/pdf_with_skim_annotations.pdf

Ici, sh est le programme shell que vous utilisez pour interpréter le script. skimembed . Ce script n'est en fait qu'un moyen automatisé d'utiliser la fonction File > Export...PDF with embedded notes dans le menu Écrémage. Cependant, cela ne crée pas une deuxième copie du pdf ; la nouvelle version le remplace et porte le même nom.

J'ai ensuite cherché sur Google un shell script qui vous permet d'appliquer skimembed de manière récursive à tous les fichiers pdf d'un dossier (y compris les sous-dossiers) :

#!/bin/bash 
find $1 -type f -name "*.pdf" | while read f ; do
 sh /path/to/scripts/filder/skimembed "$f"
done

Ici, $1 indique le chemin vers un dossier, le premier (et le seul) argument que ce script s'attend à recevoir. L'argument find La commande renvoie toutes les données normales ( -type f ) dans ce dossier avec la terminaison pdf ( name "*.pdf" ). Les résultats sont acheminés ( | ) à un while boucle indexée par f .

J'ai enregistré le texte ci-dessus dans un fichier appelé recursiveskiembed.sh et j'ai ensuite exécuté la commande suivante

sh recursiveskiembed.sh /path/to/pdfs/folder

Dans mon cas, le dossier choisi était /Users/username/Library/Application Support/Zotero/Profiles/xxx123.default/zotero/storage . Cette fonction prend tous les PDF contenant des annotations Skim dans le dossier et les remplace par des annotations PDF normales et intégrées.

Ce qui n'a pas fonctionné

J'ai essayé le Skim scripts soumis par les utilisateurs et en particulier la skimalot script (qui a succédé à skimembed) et le programme FilingEagle script et d'autres . Mais je n'ai pu faire fonctionner aucun d'entre eux. (Il est à noter que les fichiers hébergés sur sugarsync.com sont désormais des liens morts). De même, les moitié douzaine AppleScript scripts toujours semblent échouer avec des erreurs totalement impénétrables.

Les clobbergaurd script est censé vérifier dans un grand répertoire les noms de fichiers qui ne diffèrent que par leur terminaison afin d'éviter d'écraser des choses en utilisant skimalot, mais je n'ai pas réussi à le faire fonctionner. (Le lien sugarsync est mort, mais une recherche sur Google a permis de trouver cette copie Dropbox .) J'ai donc sauvegardé ma bibliothèque zotero et croisé les doigts.

1voto

William T Froggard Points 5321

J'ai téléchargé un script, qui contient un utilitaire de ligne de commande téléchargé de skim, et qui utilise ce code (attention, il ne fonctionnera pas sans l'utilitaire !):

on open dropped_files
    set app_path to POSIX path of (path to me)
    repeat with current_file in dropped_files
        do shell script quoted form of (app_path & "Contents/Resources/skimpdf") & " embed " & quoted form of POSIX path of current_file & " " & quoted form of (((characters 1 through -5 of (POSIX path of current_file as string)) as string) & " with skim notes.pdf")
    end repeat
end open

Vous pouvez le télécharger à partir de ici . Faites glisser tous les PDF (les fichiers, pas le dossier) sur le droplet extrait du fichier zip, et tout devrait être converti presque instantanément !

Note : Vous devrez faire un clic droit sur l'application et l'ouvrir une fois depuis le Finder, afin de contourner l'avertissement "développeur inconnu" et d'utiliser le droplet. Après cela, vous serez prêt !

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X