プレビューで複数の開いているファイルの名前を付けて保存コマンドを自動化する方法


0

私はMac OSを使用して、PDFに印刷された11個のレポートを作成し、ファイルをMacプレビューで開く毎日のビジネスユーティリティを実行します。ファイルは、「Constant.pdf」や「Estimate.pdf」などの一般的なファイル名で作成されます。適切なファイル名でこれらのファイルを保存するための「テンプレート」として使用する空のPDFファイルのあるフォルダーがあります。空の各PDFファイルには、開いている各PDFレポートに使用するファイル名があります。最初に開いたPDFを取得し、Cmd+ Option+ Shift+ S([名前を付けて保存]コマンドにアクセスする)を押して、Finderウィンドウで[保存先]を選択し、[保存]をクリックして[置換]をクリックします。 PDFファイルを閉じます。残りの10個のファイルでこの手順を繰り返します。

これらの手順を自動化する方法があることを願っています。幸いなことに、PDFファイルは特定の順序で印刷/作成され、プレビューはその順序でファイルを開き、手動で名前を付けて保存してファイルを閉じると同じ順序で表示されます。そのため、オートマトンは、各ファイル名を順番に割り当てるファイル名を知る必要があります。

助言がありますか?


うん、簡単。保存したPDFファイルはどうなりますか?彼らはそこにとどまりますか、それとも動かされますか?それでは、次の日に何が起こり、次の11がどのように命名されるのだろうと思っているので、おそらく前の11とは違うのでしょうか。また、11個のPDFファイルすべてが非常に高速で順番に開きますか?
CJK

11個のPDFが作成され、約1分または2分で開きます。開いている各ファイルを手動で保存するのが速すぎます。
davec0864

Returnキーを押してください。ファイルは一意のパス名を持つ一意のフォルダに保存されます。これらのレポートを作成する必要があるたびに複製して名前を変更する「テンプレート」フォルダーがあります。
davec0864

良い-実際、スクリプトの場合は、高速であるほど良い。そして、スクリプトは問題を解決する方法、つまりAppleScriptです。また、ファイルに名前を付ける順序をスクリプトに指示する先頭のインデックス番号でテンプレートPDFに名前を付けますか?たとえば、現在名前"some_file_name.pdf"が付けられている3番目のPDFテンプレートはになり"3-some_file_name.pdf"、処理される3番目のPDFは"some_file_name.pdf"(なしで"3-")として保存されます。
CJK

はい、各テンプレートファイルに追加できます。
davec0864

回答:


0

11個のPDFテンプレートを永続的に保存できるフォルダーを作成します。で、ファイル名の前に付け01-02-、...、 10-11-PDFファイルは、(テンプレートが1-9でリードしていることが重要である保存されます処理される順序を示すために、0前に)。

以下のスクリプトでは、プロパティの値templatesFolder(行1)を変更して、PDFテンプレートが見つかるフォルダーへのパスを反映します。

スクリプトを使用するには、11個すべてのPDFを処理してPreviewで開くことを許可してから、スクリプトを実行します。Automator サービスにスクリプトを組み込み、それにキーボードショートカットを割り当てることができます。上の手順でシステム全体のサービスにする方法Automatorには、そのリンクで見つけることができます。

スクリプトを実行すると、ファイルシステムダイアログが開き、処理されたPDFを保存するフォルダーを選択できます。 Cancelスクリプトを中止します。をクリックするChooseと、PDFファイルは、テンプレートPDFのファイル名を使用して(ただし、プレフィックスなしで)、開かれた順序で保存されます。次に、各PDFが閉じられ、プレビューが閉じられ、保存されたPDFがFinderに表示されます。

スクリプト:

property templatesFolder : "~/Documents/PDFs/Templates"

set saveFolder to POSIX path of ¬
    (choose folder with prompt ("Select a folder to save PDFs") ¬
        default location path to documents folder)

tell application "System Events" to set pdfTemplates to the ¬
    name of the files in folder templatesFolder ¬
    whose name extension is "pdf"

set filenames to sort(the result)

repeat with D in my getPreviewDocumentsInOrder()
    set filename to text 4 thru -1 of item 1 of filenames
    set fp to POSIX file ([saveFolder, filename] as text)
    tell application "Preview"
        save D in fp
        close D
    end tell
    set filenames to rest of filenames
    if filenames = {} then exit repeat
end repeat

quit application "Preview"

tell application "Finder"
    open POSIX file saveFolder
    activate
end tell
--------------------------------------------------------------------------------
###HANDLERS
#
#
to getPreviewDocumentsInOrder()
    script
        use P : application "Preview"
        property idx : sort(id of P's windows)

        on docList(IDs)
            local IDs

            if IDs = {} then return {}
            script
                property L : IDs
            end script

            tell the result to set [d0, dN] to [first item, rest] of its L
            tell P to return {document of window id (d0)} & my docList(dN)
        end docList
    end script

    tell the result to return the docList(its idx)
end getPreviewDocumentsInOrder

to sort(L as list)
    local L

    if L = {} then return {}
    if L's length = 1 then return L

    script
        property Array : L

        on minimum(L as list)
            local L

            if L is {} then return {}
            if L's length = 1 then return L's first item

            script
                property Array : L
            end script

            set [x0, xN] to [first item, rest] of the result's Array
            set min to minimum(xN)
            if x0 < min then return x0
            return min
        end minimum

        on lastIndexOf(x, L as list)
            local x, L

            if x is not in L then return {}
            if L = {} then return

            script
                property Array : L
            end script

            tell the result
                set [x0, xN] to [last item, reverse of rest of reverse] of its Array
                if x0 = x then return (xN's length) + 1
                return lastIndexOf(x, xN)
            end tell
        end lastIndexOf

        to swap(L as list, i as integer, j as integer)
            local i, j, L

            set x to item i of L
            set item i of L to item j of L
            set item j of L to x
        end swap
    end script

    tell the result
        set i to lastIndexOf(minimum(its Array), its Array)
        if i ≠ 1 then swap(its Array, 1, i)
        set [x0, xN] to [first item, rest] of its Array
        return [x0] & sort(xN)
    end tell
end sort

パーフェクト!ありがとう!次のようなデフォルトの「選択」パスを作成する方法はありますか?DaveC:Users:Dave:Documents:Company:Audits:Reports:Projects。保存パスを選択するためにドリルダウンする必要がなくなります。ありがとう!
davec0864

はい-5行目を見ると、choose folderコマンドの一部はと呼ばれるプロパティでdefault location、デフォルトの「選択」パスとして任意のフォルダーに設定できます。posixパスを使用して、次のように設定できますdefault location POSIX file "/Users/CK/Documents"。またはHFSパスを使用しますdefault location alias "Macintosh HD:Users:CK:Documents:"
CJK

このコードを追加すると、「Dave Clark:Users:dclark:Documents:Company Stuff:Project Audits:New Financial Reporting:Reports」を型定数にできません」というメッセージが表示されます。パスが長すぎますか?また、スクリプトはテストフォルダーで完全に機能しますが、実際のファイルを使用して本番環境に入れると、最初のファイルはスキップされます。何か案は???
-davec0864

default location私が説明した方法でプロパティを記述していません。で出発しましたpath to。ある場所で機能し、別の場所では機能しないように見える理由については、その理由がわかりません。テストフォルダーと本番フォルダー、またはそれらのファイルの違いについて詳しく知りたい。
CJK

謝罪します。私はApplescriptの学生ではないので、文字通りあなたの指示を受け取りました。私を許してください。あなたはとても役に立ちました。フォルダ構造のスクリーンショットを送信する方法はありますか?
-davec0864
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.