Perlu skrip untuk mengekspor Skim PDF secara otomatis dengan catatan yang disematkan

2

Saya memiliki folder dengan beberapa ribu file PDF, yang sebagian besar memiliki anotasi Skim (mis. Sorotan dan catatan). Jika saya memiliki lebih sedikit file, saya hanya akan melalui masing-masing, mengekspor PDF dengan catatan tertanam, dan berada di jalan merry saya, memiliki kemampuan untuk membaca anotasi saya dengan Adobe Reader pada PC (ini tujuannya).

Tetapi karena ada begitu banyak file, saya memerlukan skrip yang secara otomatis akan pergi melalui folder ini, melakukan fungsi "ekspor sebagai PDF dengan catatan yang tertanam" untuk setiap PDF yang memiliki skim anotasi, dan kemudian berikan file baru nama asli file plus "dengan skim notes" (atau sebutan lain untuk menunjukkan itu versi dengan catatan tertanam). Kedua, jika saya membuat anotasi lebih lanjut ke PDF asli, alangkah baiknya jika skrip dapat memperbarui file yang diekspor dengan catatan yang tertanam.

Saya menganggap ini mungkin, karena Skim tampaknya memiliki dukungan applescript yang hebat, tetapi saya tidak tahu cara membuatnya.

Terima kasih banyak atas bantuan yang bisa Anda tawarkan. WG

william
sumber

Jawaban:

1

Saya telah mengunggah skrip, yang berisi utilitas baris perintah yang diunduh dari skim, dan menggunakan kode ini (perhatikan, itu tidak akan berfungsi tanpa utilitas!):

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

Anda dapat mengunduhnya dari sini . Seret semua PDF (file, bukan folder) ke tetesan yang diekstrak dari file zip, dan itu akan mengubah segalanya hampir secara instan!

Catatan: Anda harus mengklik kanan aplikasi dan membukanya sekali dari Finder, untuk memotong peringatan "pengembang tidak dikenal", dan menggunakan tetesan. Setelah itu, Anda akan siap!

William T Froggard
sumber
Tautan ("Anda dapat mengunduhnya dari sini") sudah mati.
Jess Riedel
Saya tidak bisa membuat AppleScript ini berfungsi seumur hidup saya. Solusi saya di bawah ini kurang elegan, tetapi dijamin berfungsi dan memungkinkan Anda membiarkan PDF diatur dalam hierarki folder.
Jess Riedel
Permintaan maaf. Saya tidak sengaja menghapusnya. Saya memperbarui tautan, dan sekarang seharusnya berfungsi lagi.
William T Froggard
2

Ini adalah metode yang saya gunakan di seluruh perpustakaan Zotero saya (~ 3GB PDF). Perhatikan bahwa satu-satunya anotasi yang saya gunakan adalah menyoroti (satu warna) dan komentar. Apakah ini berhasil mengubah anotasi yang lebih rumit tergantung pada detail skimembed script, yang saya tidak tahu banyak tentang.

Apa yang berhasil

Asli skim skimembed mengkonversi satu PDF dengan anotasi skim (yang dalam bentuk "atribusi yang diperluas") ke PDF tunggal dengan anotasi tersemat. Ini adalah skrip shell yang Anda jalankan dari baris perintah (terminal) menggunakan notasi ini

sh skimembed pdf_with_skim_annotations.pdf

atau lebih umum

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

Sini, sh adalah program shell yang Anda gunakan untuk menafsirkan skrip skimembed. Skrip ini pada dasarnya hanya cara penggunaan otomatis File > Export...PDF with embedded notes dari menu Skim. Namun, itu tidak membuat salinan pdf kedua; versi baru menggantikannya dan memiliki nama yang sama.

Saya kemudian mencari-cari skrip shell yang memungkinkan Anda menerapkan skimembed secara rekursif ke semua file pdf dalam folder (termasuk subfolder):

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

Sini, $1 menunjukkan path ke folder, argumen pertama (dan satu-satunya) yang diharapkan diterima oleh skrip ini. Itu find perintah mengembalikan semua normal ( -type f ) file dalam folder itu dengan akhiran pdf ( name "*.pdf" ). Hasilnya disalurkan ( | ) ke a while loop diindeks oleh f.

Saya menyimpan teks di atas dalam file yang disebut recursiveskiembed.sh dan kemudian berlari

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

Dalam kasus saya, folder yang saya pilih adalah /Users/username/Library/Application Support/Zotero/Profiles/xxx123.default/zotero/storage. Ini mengambil setiap PDF dengan anotasi Skim di folder dan menggantinya dengan anotasi PDF yang tertanam dan normal.

Apa yang tidak berhasil

Saya mencoba skim skim yang dikirimkan pengguna dan khususnya naskah skimalot (yang merupakan penerus skimembed) dan Script FilingEagle dan beberapa yang lain . Tapi saya tidak bisa membuat mereka bekerja. (Perhatikan bahwa file yang di-host sugarsync.com adalah tautan mati sekarang.) Demikian juga, itu setengah lusin AppleScript skrip selalu tampaknya gagal dengan kesalahan yang sama sekali tidak dapat dipahami.

Itu clobbergaurd script seharusnya memeriksa direktori besar untuk nama file yang berbeda hanya pada akhirnya untuk mencegah Anda menimpa barang menggunakan skimalot, tapi saya tidak bisa membuatnya berfungsi. (Tautan sugarsync sudah mati, tetapi pencarian Google muncul salinan Dropbox ini .) Jadi saya baru saja mencadangkan perpustakaan zotero saya dan saya menyilangkan jari saya.

Jess Riedel
sumber
tidak yakin mengapa, tetapi ini tampaknya tidak berfungsi (lebih lama). Script dijalankan, tetapi catatan tidak benar-benar tertanam dalam pdf yang dihasilkan.
maxheld
1

Saya memiliki masalah yang sama dan ingin menanamkan banyak skim pdf. Skrip apel oleh Jess Riedel tidak berfungsi untuk saya, jadi saya membuat kode skrip python untuk melakukan pekerjaan itu (saya tahu ini adalah halaman StackExchange applescript).

Saya menggunakan script untuk menanamkan 568 pdf yang tersebar di folder dengan berbagai subfolder. Butuh 300 detik. Perlu diketahui, bahwa skrip tidak akan memproses file dengan " di filepath-nya.

# -*- 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')
Alexander Gogl
sumber
Anda dapat mengunduh skrip dan menemukan informasi lebih lanjut di github.com/alexandergogl/SkimPDF .
Alexander Gogl