मैं मूल macOS टूल का उपयोग करके पीडीएफ में सभी पृष्ठों को प्रोग्रामेटिक रूप से कैसे घुमा सकता हूं


4

एक फ़ाइल पथ को देखते हुए, मुझे उस फ़ाइल पथ पर एक पीडीएफ में सभी पृष्ठों को घुमाने की ज़रूरत है जो कि macOS के साथ शामिल नहीं है। इसके लिए रैपर AppleScript होगा, इसलिए मेरे पास कमांड लाइन तक भी पहुंच है और इसलिए सभी स्क्रिप्टिंग भाषाओं को डिफ़ॉल्ट रूप से macOS के साथ इंस्टॉल किया गया है, लेकिन कुछ भी नहीं चाहिए brew या, उदाहरण के लिए, पायथन का pip


यह पोस्टिंग SuperUser कुछ मदद प्रदान कर सकते हैं।
IconDaemon

@icondaemon को अतिरिक्त सॉफ़्टवेयर की आवश्यकता नहीं है
nohillside

क्या मैं आपको सुझाव दे सकता हूँ संपादित करें आपके सवाल में शामिल है कि macOS का कौन सा संस्करण आप चला रहे हैं? इसके अलावा, क्या आप स्पष्ट कर सकते हैं कि आपको पृष्ठों को घुमाए जाने की आवश्यकता कैसे है (जैसे 90 ° दक्षिणावर्त या ...)? अंत में, ऑटोमोटिव से जुड़ा एक समाधान स्वीकार्य होगा, या एक ऑटोमेशन (JXA) के लिए जावास्क्रिप्ट को शामिल करना होगा?
Monomeeth

@ सच - सच। मैंने पिछले साल कुछ दिन बिताए हैं ताकि कमांड लाइन से उपलब्ध देशी पीडीएफ हेरफेर टूल को खोजा जा सके और केवल 16 ऑटोमेशन / इन / सिस्टम / लाइब्रेरी / ऑटोमेकर मिले, लेकिन कोई भी ऐसा नहीं करता है जिसे ओपी की जरूरत हो, जैसा कि उसने शायद खुद ही समझ लिया है। ऑटोमेकर में पूर्वावलोकन के लिए एक रोटेट इमेज फंक्शन है, लेकिन मुझे नहीं लगता कि यह पीडीएफ फाइलों पर काम करता है।
IconDaemon

मैं ऑटोमेटर में देख रहा हूँ Split PDF, Rotate Images (या एक AppleScript मेरे पास है जो सिंगल-पेज PDF पर काम करेगा), और Combine PDF Pages। उन लोगों को काम मिल सकता है।
Chuck

जवाबों:


1

मेरी समझ से तो मैक ओ एस नहीं है किसी भी एक देशी कमांड लाइन यूनिक्स निष्पादन योग्य कर सकते हैं सभी पृष्ठों को घुमाएं में पीडीएफ (पाठ आधारित लोगों को पाठ आधारित रखते हुए)। sip एक पृष्ठ को घुमा सकते हैं पीडीएफ हालांकि परिणाम पीडीएफ है एक संकुचित छवि , नहीं टेक्स्ट यदि यह पाठ आधार के साथ शुरू किया गया था। इसके अलावा, निश्चित नहीं है कि क्या कोई रास्ता है मैदान AppleScript , अन्य तो के माध्यम से यूआई स्क्रिप्टिंग चूक पूर्वावलोकन आवेदन, बिना जाने AppleScriptObjC ( कोको-AppleScript ) और या अजगर , आदि।

का उपयोग करते हुए तृतीय-पक्ष कमांड लाइन उपयोगिताओं शायद सबसे आसान है, लेकिन आपने कहा कि यह केवल क्या का उपयोग करके किया जाना है का एक डिफ़ॉल्ट हिस्सा मैक ओ एस । तो, मैं एक की पेशकश करता हूँ AppleScript समाधान जो उपयोग करता है यूआई स्क्रिप्टिंग चूक पूर्वावलोकन आवेदन, उस घटना में इस्तेमाल किया जा सकता है जिसके साथ कोई दूसरा तरीका नहीं है AppleScriptObjC या बिना तृतीय-पक्ष उपयोगिताओं , आदि।

इस समाधान, के रूप में की पेशकश (और कोडित), मानता है कि पूर्वावलोकन है चूक के लिए आवेदन पीडीएफ दस्तावेजों और यह करने के लिए उपयोग करता है घुमाना में सभी पृष्ठों पीडीएफ दस्तावेज़। यह भी एक के रूप में सेटअप है स्वचालक कार्यप्रवाह । (हालांकि AppleScript को शामिल करने के अन्य तरीके हैं कोड नीचे दिखाया गया है।)

पहला खोजक , लक्ष्य की एक प्रति बनाएँ पीडीएफ दस्तावेज़ और उन लोगों के साथ काम करते हैं।

में स्वचालक , कोई नया बनाएं कार्यप्रवाह दस्तावेज़, निम्नलिखित जोड़ रहा है कार्रवाई :

  • निर्दिष्ट खोजक आइटम प्राप्त करें
    • जोड़ना कॉपी किया गया लक्ष्य पीडीएफ इस पर दस्तावेज़ कार्य
  • AppleScript स्क्रिप्ट चलाएँ
    • बदलने के डिफ़ॉल्ट कोड उसके साथ कोड नीचे:

AppleScript कोड :

on run {input}
    set thisLong to 0.25 -- # The value of 'thisLong' is decimal seconds delay between keystrokes, adjust as necessary.
    set theRotation to "r" -- # Valid values are 'l' or 'r' for Rotate Left or Rotate Right.
    set theViewMenuCheckedList to {}
    set theMenuItemChecked to missing value
    repeat with thisItem in input
        tell application "Finder" to open file thisItem -- # By default, in this use case, the PDF file will open in Preview.
        delay 1 --  # Adjust as necessary. This is the only 'delay' not defined by the value of 'thisLong'.
        tell application "System Events"
            perform action "AXRaise" of window 1 of application process "Preview" -- # Just to make sure 'window 1' is front-most.
            delay thisLong
            --  # Ascertain which of the first six 'View' menu items is checked.
            set theViewMenuCheckedList to (value of attribute "AXMenuItemMarkChar" of menu items 1 thru 6 of menu 1 of menu bar item 5 of menu bar 1 of application process "Preview")
            repeat with i from 1 to 6
                if item i in theViewMenuCheckedList is not missing value then
                    set theMenuItemChecked to i as integer
                    exit repeat
                end if
            end repeat
            --  # Process keystrokes based on which 'View' menu item is checked.
            --  # This is being done so the subsequent keystroke ⌘A 'Select All' 
            --  # occurs on the 'Thumbnails', not the body of the document.
            if theMenuItemChecked is not 2 then
                repeat with thisKey in {"2", "1", "2"}
                    keystroke thisKey using {option down, command down}
                    delay thisLong
                end repeat
            else
                repeat with thisKey in {"1", "2"}
                    keystroke thisKey using {option down, command down}
                    delay thisLong
                end repeat
            end if
            repeat with thisKey in {"a", theRotation as text, "s"} -- # {Select All, Rotate Direction, Save}
                keystroke thisKey using {command down}
                delay thisLong
            end repeat
            keystroke theMenuItemChecked as text using {option down, command down} -- # Resets the 'View' menu to the original view.
            delay thisLong
            keystroke "w" using {command down} -- # Close Window.
        end tell
    end repeat
end run

टिप्पणियाँ:

  • इस प्रकार लिपि का उपयोग करता है यूआई स्क्रिप्टिंग , जब से चला स्वचालक (या स्क्रिप्ट एडिटर ), रनिंग ऐप को जोड़ना होगा सिस्टम प्रेफरेंसेज & Gt; सुरक्षा & Amp; एकांत & Gt; सरल उपयोग के लिए रन ढंग से। के रूप में सहेजा गया आवेदन सहेजे गए एप्लिकेशन को जोड़ना होगा।
  • के साथ भी यूआई स्क्रिप्टिंग के मूल्य delay आदेशों आपके सिस्टम (और अतिरिक्त) पर उपयोग के लिए बदलना पड़ सकता है delay आदेशों उपयुक्त के रूप में जोड़ा, हालांकि अतिरिक्त मामले में delay आदेशों की जरूरत नहीं होनी चाहिए)। हालांकि यह कहे बिना जाना चाहिए कि पहले कुछ दस्तावेज़ के सेट पर यह परीक्षण करें कि यह सुनिश्चित करने के लिए कि मूल्य निर्धारित करना है thisLong आपके सिस्टम पर काम करता है। मेरे सिस्टम पर यह कोडित के रूप में काम करता है।
  • उपयोग करते समय यूआई स्क्रिप्टिंग इस तरीके से, एक बार कार्य शुरू हो जाने के बाद, किसी को सिस्टम को अकेला छोड़ देना चाहिए और फाइलों को संसाधित करने देना चाहिए। बहु-कार्य के लिए प्रयास केवल हाथ से काम से ध्यान हटाने और असफल होने का कारण होगा।
  • यदि आपको अधिक घुमाने की आवश्यकता है तो एक बार, अतिरिक्त जोड़ें theRotation as text, सेवा मेरे:

      repeat with thisKey in {"a", theRotation as text, "s"} -- # {Select All, Rotate Direction, Save}
    

    उदाहरण:

      repeat with thisKey in {"a", theRotation as text, theRotation as text, "s"}
    

1

यह पाइथन स्क्रिप्ट 90º दक्षिणावर्त घुमाएगी, जो किसी भी पीडीएफ के सभी पृष्ठों पर तर्क के रूप में दी जाएगी, जिसके परिणामस्वरूप फ़ाइल नाम में संलग्न "+90" के साथ एक नई फ़ाइल प्राप्त होगी।

#!/usr/bin/python
# coding=utf-8
# Produces new PDF file with all pages rotated by 90 degrees.

import sys
import os
from Quartz import PDFDocument
from CoreFoundation import NSURL

if __name__ == '__main__':

    for filename in sys.argv[1:]:
        filename = filename.decode('utf-8')
        shortName = os.path.splitext(filename)[0]
        outFilename = shortName + "+90.pdf"
        pdfURL = NSURL.fileURLWithPath_(filename)
        pdfDoc = PDFDocument.alloc().initWithURL_(pdfURL)
        if pdfDoc:
            pages = pdfDoc.pageCount()
            for p in range(0, pages):
                page = pdfDoc.pageAtIndex_(p)
                existingRotation = page.rotation()
                newRotation = existingRotation + 90
                page.setRotation_(newRotation)

            pdfDoc.writeToFile_(outFilename)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.