AppleScript - การส่งออกหน้าเป็น PDF ล้มเหลวเนื่องจากสิทธิ์ Sandbox


4

ฉันกำลังพยายามสร้างเวิร์กโฟลว์อัตโนมัติเพื่อส่งออกเอกสารหน้าเว็บที่เลือกเป็น PDF จนถึงตอนนี้ทุกอย่างเป็นไปด้วยดียกเว้นขั้นตอนการส่งออกขั้นสุดท้าย

on run {input, parameters}
    repeat with _document in input

        tell application "Finder"
            set _directory to get container of file _document

            set _documentName to name of _document
            if _documentName ends with ".pages" then ¬
                set _documentName to text 1 thru -7 of _documentName

            set _PDFName to _documentName & ".pdf"
            set _incrementIndex to 1
            repeat until not (exists file _PDFName of _directory)
                set _PDFName to ¬
                    _documentName & "-" & (_incrementIndex as string) & ".pdf"
                set _incrementIndex to _incrementIndex + 1
            end repeat

            set _location to (_directory as string) & _PDFName
        end tell

        --set _location to (POSIX file of _location)

        tell application "Pages"

            activate
            open _document

            with timeout of 1200 seconds
                export front document to file _location as PDF
            end timeout

            close front document

        end tell

    end repeat
    return input
end run

นี่ทำให้ฉันมีข้อผิดพลาดการอนุญาต Sandbox

error   17:49:38.117966 +0100   sandboxd    SandboxViolation: Pages(3846) deny file-write-create /Users/brunoscheele/Desktop/Test.pdf
Violation:       deny file-write-create 

หลังจากอ่านเสร็จแล้ว ที่นี่ ดูเหมือนว่าฉันจะแก้ไขได้โดยเปลี่ยน _location เพื่อ POSIX file.

ดังนั้นฉันจึงเพิ่ม;

--set _location to (POSIX file _location)

อย่างไรก็ตามนั่นทำให้ฉันเกิดข้อผิดพลาด:

หน้ามีข้อผิดพลาด: "macOS: ผู้ใช้: brunoscheele: เดสก์ท็อป: Test.pdf" ไม่สามารถตีความเป็น URL ไฟล์ได้

การใช้ export front document to (POSIX file _location) as PDF ทำให้ฉันมีข้อผิดพลาดเดียวกัน

ไม่มีใครรู้วิธีการตั้งค่า _location ถูกต้องดังนั้นคุณไม่พบปัญหาเรื่องการอนุญาตหรือไม่


โปรดรวมรุ่น macOS ในคำถามของคุณ
Chris Page

@ChrisPage ล่าสุดอยู่เสมอ แต่ขอบคุณสำหรับการตีระฆัง! และมีคำตอบในระหว่างนี้ให้ตรวจสอบด้านล่าง
SpacyRicochet

คำตอบ:


1

ลองเพิ่มบรรทัดนี้ก่อนขั้นตอนการส่งออกของคุณ:

open for access file _location

ฉันเดาว่าคุณใช้ macOS Sierra นี่เป็นปัญหาที่ทราบกันดี ฉันสามารถทำให้รหัสทำงานโดยใช้ขั้นตอนข้างต้นก่อนที่การส่งออกของฉันจะเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใส่บรรทัดนั้นไว้ในบล็อกบล็อค


1

คุณสนิทกันมาก แก้ไขบรรทัดส่งออกของคุณเป็นดังนี้:

export front document to file _location as PDF

มันเป็นคำว่า "ไฟล์" ที่คุณหายไป

หมายเหตุ: ฉันลองใช้สคริปต์อีกครั้ง แต่ไม่สามารถใช้งานได้แม้ว่าจะมีคำว่า "file" เพิ่มแล้ว อย่างไรก็ตามในระหว่างการทดสอบฉันพบว่าถ้าฉันเปลี่ยนบรรทัดนี้:

set _location to (_directory as string) & _PDFName

ไปยัง

set _location to (_directory as string) 

แน่นอนว่าสคริปต์นั้นผิดพลาด แต่ถ้าฉันยกเลิกการเปลี่ยนแปลงดังนั้นสายจะมีลักษณะเช่นนี้อีกครั้ง:

set _location to (_directory as string) & _PDFName

สคริปต์เริ่มทำงาน! ฉันใช้ Pages 6.0.5, macOS 10.12.2

ฉันไม่สามารถพูดสิ่งที่ทำให้เกิดพฤติกรรมนี้


ขอบคุณสำหรับคำตอบ! น่าเศร้าจริง ๆ แล้วเป็นสิ่งที่ทำให้เกิดข้อผิดพลาดในการอนุญาตในปัจจุบัน สคริปต์ที่ฉันวางไว้เดิมคือหลังจากการทดลองสองครั้งซึ่งเป็นสาเหตุที่ฉันไม่ได้ตั้งใจ ดูต้นฉบับที่อัปเดตแล้ว ดูเหมือนว่าเป็นข้อผิดพลาดใหม่พิจารณาทวีตนี้ twitter.com/MACAUTOMATION/status/810997383672655872 . ข้อมูลเชิงลึกอื่น ๆ
SpacyRicochet

ฉันแก้ไขคำตอบของฉันเพื่อแสดงว่าฉันใช้งานสคริปต์ได้อย่างไร บางทีมันอาจจะเหมาะกับคุณในลักษณะเดียวกัน
Christian Boyce

"ไม่สามารถตีความเป็นไฟล์ URL" ได้ทั้งบน os x 10.2.2 และ 10.2.3
ina

0

ฉันมีปัญหาคล้ายกันกับสคริปต์ที่ฉันทำงานอยู่ ดูเหมือนว่าจะเป็นการอนุญาตที่เกี่ยวข้อง วิธีที่ฉันได้รอบมันก็คือการสร้าง PDF ภายในแพ็คเกจไฟล์หน้า ดังนั้นหากไฟล์หน้าของคุณอยู่ที่:

Macintosh HD:Users:Admin:Desktop:myfile.pages

... จากนั้นสร้าง PDF ของคุณที่:

Macintosh HD:Users:Admin:Desktop:myfile.pages:myfile.pdf

มีตัวอย่างรหัสของรหัสที่ฉันพบปัญหานี้และตัวอย่างของวิธีที่ฉันแก้ไขได้ที่นี่:

https://www.ghostotter.com/using-automator-convert-pages-pdf/

หวังว่าจะช่วย!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.