Serve script per esportare automaticamente PDF Skim con note incorporate

1

Ho una cartella con qualche migliaio di file PDF, la maggior parte dei quali ha annotazioni Skim (ad es. evidenziazioni e note). Se avessi meno file, li analizzerei tutti, esporterei il PDF con le note incorporate e sarei sulla buona strada, avendo la possibilità di leggere le mie annotazioni con Adobe Reader su un PC (questo è l'obiettivo).

Ma dal momento che ci sono così tanti file, ho bisogno di uno script che passerà automaticamente attraverso questa cartella, eseguirà la funzione "Esporta come PDF con note incorporate" per ogni PDF con annotazioni Skim, quindi assegna al nuovo file il nome del file originale più "con skim notes" (o qualche altra indicazione per indicare che è la versione con note incorporate). In secondo luogo, se faccio ulteriori annotazioni al PDF originale, sarebbe bello se lo script potesse aggiornare il file esportato con le note incorporate.

Suppongo che questo sia possibile, dato che Skim ha un grande supporto per i pennarelli, ma non ho idea di come crearne uno.

Grazie mille per qualsiasi aiuto tu possa offrire. WG

    
posta william 17.10.2015 - 18:50
fonte

3 risposte

0

Ho caricato uno script, che contiene un'utilità della riga di comando scaricata da skim, e usa questo codice (nota, non funzionerà senza l'utility!):

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

Puoi scaricarlo da qui . Trascina tutti i PDF (i file, non la cartella) sul droplet estratto dal file zip, e dovrebbe convertire tutto quasi istantaneamente!

Nota: dovrai fare clic con il pulsante destro del mouse sull'app e aprirla una volta dal Finder per ignorare l'avviso "sviluppatore sconosciuto" e utilizzare il droplet. Dopodiché sarai pronto!

    
risposta data 18.10.2015 - 06:31
fonte
1

Questo è il metodo che ho usato su tutta la mia libreria Zotero (~ 3GB di PDF). Si noti che le sole annotazioni che uso sono evidenziazione (colore singolo) e commenti. Se questo converte correttamente annotazioni più complicate dipende dal dettaglio dello script skimembed, di cui non so molto.

Cosa ha funzionato

Lo script skimembed originale converte un singolo PDF con annotazioni skim (che hanno la forma di "attributo esteso") a un singolo PDF con annotazioni incorporate. È uno script di shell che si esegue dalla riga di comando (terminale) usando questa notazione

sh skimembed pdf_with_skim_annotations.pdf

o più in generale

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

Qui, sh è il programma di shell che usi per interpretare lo script skimembed . Questo script è fondamentalmente un modo automatico di usare File > Export...PDF with embedded notes dal menu Skim. Tuttavia, non fa una seconda copia del pdf; la nuova versione lo sostituisce e ha lo stesso nome.

Quindi ho cercato su Google uno script di shell che ti consenta di applicare lo skimembed in modo ricorsivo a tutti i file PDF in una cartella (incluse le sottocartelle):

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

Qui, $1 indica il percorso di una cartella, il primo (e unico) argomento che questo script si aspetta di ricevere. Il comando find restituisce tutti i file normali ( -type f ) in quella cartella con il finale pdf ( name "*.pdf" ). I risultati vengono reindirizzati ( | ) a un ciclo while indicizzato da f .

Ho salvato il testo sopra in un file chiamato recursiveskiembed.sh e poi eseguito

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

Nel mio caso, la cartella che ho scelto era /Users/username/Library/Application Support/Zotero/Profiles/xxx123.default/zotero/storage . Questo prende ogni singolo PDF con annotazioni Skim nella cartella e li sostituisce con normali annotazioni PDF incorporate.

Che cosa non ha funzionato

Ho provato gli script Skim inviati dagli utenti e in particolare il script skimalot (che è un successore di skimembed) e script FilingEagle e alcuni altri . Ma non riuscivo a far funzionare nessuno di loro. (Tieni presente che i file ospitati su sugarsync.com ora sono link morti.) Allo stesso modo, il mezzo dozzina AppleScript script sempre sembrano fallire con errori completamente imperscrutabili.

Lo script clobbergaurd dovrebbe controllare una grande directory per nomi di file che differiscono solo finendo per impedirti di sovrascrivere roba usando skimalot, ma non riuscivo a farlo funzionare. (Il link sugarsync è morto, ma una ricerca di Google ha restituito questa copia di Dropbox .) Quindi ho appena sostenuto su la mia libreria zotero e ho incrociato le dita.

    
risposta data 08.05.2016 - 18:24
fonte
1

Ho avuto lo stesso problema e ho voluto inserire in batch molti PDF di skim. La sceneggiatura di mele di Jess Riedel non funzionava per me, quindi ho codificato uno script python per fare il lavoro (sono consapevole che si tratta della pagina StackExchange di applescript).

Ho usato lo script per incorporare 568 pdf sparpagliati in una cartella con varie sottocartelle. Ci sono voluti 300 secondi. Tieni presente che lo script non elaborerà i file con " nel percorso file.

# -*- 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')
    
risposta data 29.10.2018 - 23:24
fonte

Leggi altre domande sui tag