पीडीएफ के एक समूह के अंतिम पृष्ठ को हटाते हुए स्वचालित करें


1

मेरे पास एक फ़ोल्डर है जिसमें सैकड़ों PDF हैं, और मैं हर एक के अंतिम पृष्ठ को त्वरित तरीके से निकालना चाहूंगा। मैं अपने मैक को इस कार्य को कैसे करने दे सकता हूं? क्या मुझे ऐसा करने के लिए अतिरिक्त सॉफ़्टवेयर की आवश्यकता है?

जवाबों:


1

मैंने सुसंगत पीडीएफ कमांड लाइन टूल कम्युनिटी रिलीज़ का उपयोग करके ऐसा किया है ।

आप बाद में संकलित करने के लिए पूर्व-निर्मित उपकरण या स्रोत कोड डाउनलोड कर सकते हैं, हालांकि बाद में संकलन करते समय OCaml स्थापित करने की आवश्यकता होती है। तो पूर्व निर्मित उपकरण जाने का सबसे आसान तरीका है। डाउनलोड की गई वितरण फ़ाइल, उदाहरण के लिए cpdf-binaries-master.zip , में Linux, OS X / macOS और Windows के लिए बायनेरी और ~ 5 MB आकार में है।

एक बार डाउनलोड करने और निकाले जाने के बाद (.zip फ़ाइल को डबल-क्लिक करें), आप कॉपी करेंगे, जैसे ~ / डाउनलोड / cpdf-binaries-master / OSX-Intel / cpdf , फ़ाइल को उस स्थान पर फ़ाइल करें जो PATH पर्यावरण चर में परिभाषित है , जैसे /usr/local/bin/। टर्मिनल में कमांड लाइन पर इसे विश्व स्तर पर उपलब्ध कराएं। यदि यह PATHतब नहीं है, तो आपको निष्पादन योग्य के लिए पूरी तरह से योग्य पथनाम का उपयोग करना होगा cpdfया ./cpdfयदि यह वर्तमान कार्यशील निर्देशिका ( pwd) में है। टर्मिनल में, टाइप echo $PATHकरें PATH

पीडीएफ फाइल के 3 या अधिक पेज होने पर अंतिम पेज को हटाने का सिंटैक्स है:

cpdf in.pdf 1-~2 -o out.pdf

जब पीडीएफ फाइल में 2 पेज होते हैं तो आखिरी पेज को हटाने का सिंटैक्स है:

cpdf in.pdf 1 -o out.pdf

क्योंकि cpdfमूल फ़ाइल (पढ़ता in.pdf ) और एक नई फ़ाइल (करने के लिए लिखते हैं out.pdf ) out.pdf फ़ाइल नाम अगर रूप में एक ही स्थान पर सहेजी अलग होने की जरूरत है in.pdf फ़ाइल, या एक अलग स्थान में सहेजें एक ही साथ in.pdf के रूप में फ़ाइल नाम out.pdf फ़ाइल नाम, या जो कुछ भी out.pdf फ़ाइल नाम आप चाहते हैं।

नीचे, मैं cpdfपीडीएफ फाइल के अंतिम पृष्ठ को हटाने के लिए स्वचालन के दो उदाहरण दिखाऊंगा , यह मानते हुए कि इसके दो या अधिक पृष्ठ हैं। एक एक का उपयोग कर स्वचालक कार्यप्रवाह एक के रूप में सेवा में उपलब्ध खोजक पर सेवाएं संदर्भ मेनू और एक के रूप में अन्य bash स्क्रिप्ट , टर्मिनल में उपयोग करने के लिए।


सेवा प्रसंग मेनू पर खोजक में उपलब्ध एक स्वचालित सेवा वर्कफ़्लो के रूप में:


ऑटोमेटर में नीचे दी गई इमेज में दिखाए गए सेटिंग्स का उपयोग करके एक नया सर्विस वर्कफ़्लो बनाएं और रन शेल स्क्रिप्ट एक्शन में इमेज के नीचे दिए गए कोड को कॉपी और पेस्ट करें और जैसे सेव करें: पीडीएफ से लास्ट पेज निकालें

खोजकर्ता से निकालें अंतिम पृष्ठ का उपयोग करने के लिए , खोजक में उन पीडीएफ फाइलों का चयन करें जिन्हें आप अंतिम पृष्ठ से हटाना चाहते हैं और फिर दाईं ओर क्लिक करें या नियंत्रण-क्लिक के माध्यम से संदर्भ मेनू से पीडीएफ से अंतिम पृष्ठ को निकालें , या खोजक > सेवा > निकालें से चुनें पीडीएफ से अंतिम पृष्ठ

स्वचालित सेवा वर्कफ़्लो


for f in "$@"; do
        # Get Page Count.
    p="$(/usr/local/bin/cpdf -info "$f" | awk '/Pages:/{print $2}')"
        # Get file extension.
    ext="${f##*.}"
        # Get filename without extension.
    fn="${f%.*}"
        # Rename original file to "filename (original).pdf".
        # Use '-n' to not overwrite an existing file.
    mv -n "$f" "${fn} (original).${ext}"
        # If page count is greater than 2, set 'p' to '3' as any
        # PDF with more than 2 pages the command will be the same.
    if [[ $p -gt 2 ]]; then
        p="3"
    fi
    case "$p" in
        3)
                # PDF file has 3 or more pages.
            /usr/local/bin/cpdf "${fn} (original).${ext}" 1-~2 -o "$f" 
            ;;
        2)
                # PDF file has 2 pages.
            /usr/local/bin/cpdf "${fn} (original).${ext}" 1 -o "$f"
            ;;
        1)
                # PDF file has 1 page. Make a copy to the
                # original name for consistency of output.
                # Use '-n' to not overwrite an existing file.
            cp -n "${fn} (original).${ext}" "$f"
            ;;      
    esac
        # If you don't want to keep the original
        # file, remove '#' from the next line.
    # rm "${fn} (original).${ext}"
done

ध्यान दें कि ऑटोमेटर में PATHएक रन शैल स्क्रिप्ट कार्रवाई पारित की गई है ,। तो कोड ऊपर उपयोग कर रहा है पूरी तरह से योग्य पथ नाम करने के लिए निष्पादन योग्य , के रूप में यह है कि जहां मैं इसे रखा इतनी के रूप में उपलब्ध में होना टर्मिनल जैसा कि इसके नाम का उपयोग कर के माध्यम से , केवल।/usr/bin:/bin:/usr/sbin:/sbincpdf /usr/local/bin/cpdfcpdf

यह भी ध्यान दें कि यदि आप मूल फ़ाइलों को नहीं रखना चाहते हैं, तो कोड के अंतिम पंक्ति के ऊपर कमांड ( #सामने से हटाएं ) को # rm "${fn} (original).${ext}" अनफिल्ट करें done



टर्मिनल में उपयोग करने के लिए एक bash स्क्रिप्ट के रूप में:


निम्नलिखित तरीके से bash स्क्रिप्ट बनाएं :

टर्मिनल में:

touch rlpfpdf
open rlpfpdf

कोड दस्तावेज़ की प्रतिलिपि बनाएँ , शुरू किए #!/bin/bashगए rlpfpdfदस्तावेज़ में नीचे के साथ शुरू करें और फिर इसे सहेजें।

वापस टर्मिनल में:

स्क्रिप्ट को निष्पादन योग्य बनाएं :

chmod u+x rlpfpdf

अब rlpfpdf स्क्रिप्ट को उदाहरण के लिए स्थानांतरित करें :/usr/local/bin/

sudo mv rlpfpdf /usr/local/bin/

फिर आप निर्देशिका cd ...को एक निर्देशिका में बदल सकते हैं जिसमें पीडीएफ फाइलें हैं जिन्हें आप अंतिम पृष्ठ से हटाना चाहते हैं और फिर बस टाइप करें rlpfpdfऔर दबाएं enter

मूल फ़ाइलों को " फ़ाइल नाम (मूल) .pdf " में ले जाया जाएगा और नई बनाने वाली पीडीएफ फाइल में अंतिम पृष्ठ होगा, यदि 2 या अधिक पृष्ठ हैं, तो मूल filename.pdfनाम होगा।


#!/bin/bash

for f in *.pdf *.PDF; do
    if [[ -f $f ]]; then
            # Get Page Count.
        p="$(cpdf -info "$f" | awk '/Pages:/{print $2}')"
            # Get file extension.
        ext="${f##*.}"
            # Get filename without extension.
        fn="${f%.*}"
            # Rename original file to "filename (original).pdf".
            # Use '-n' to not overwrite an existing file.
        mv -n "$f" "${fn} (original).${ext}"
            # If page count is greater than 2, set 'p' to '3' as any
            # PDF with more than 2 pages the command will be the same.
        if [[ $p -gt 2 ]]; then
            p="3"
        fi
        case "$p" in
            3)
                    # PDF file has 3 or more pages.
                cpdf "${fn} (original).${ext}" 1-~2 -o "$f" 
                ;;
            2)
                    # PDF file has 2 pages.
                cpdf "${fn} (original).${ext}" 1 -o "$f"
                ;;
            1)
                    # PDF file has 1 page. Make a copy to the
                    # original name for consistency of output.
                    # Use '-n' to not overwrite an existing file.
                cp -n "${fn} (original).${ext}" "$f"
                ;;      
        esac
            # If you don't want to keep the original
            #  file, remove '#' from the next line.
        # rm "${fn} (original).${ext}"
    fi
done

ध्यान दें कि उपर्युक्त कोड cpdf निष्पादन योग्य मानता है जो एक निर्देशिका में है जो PATH पर्यावरण चर के भीतर है , जैसे:/usr/local/bin/

यह भी ध्यान दें कि यदि आप मूल फ़ाइलों को नहीं रखना चाहते हैं, तो कोड के अंतिम पंक्ति के ऊपर कमांड ( #सामने से हटाएं ) को # rm "${fn} (original).${ext}" अनफिल्ट करें done


मेरे पास सिर्फ 1 सरल जांच है। मैं आखिरी के बजाय पहले पृष्ठ को हटाने के लिए कोड ब्लॉक को कैसे संशोधित कर सकता हूं?
इच्छुक

@InterestedLearner, डाउनलोड की गई वितरण फ़ाइल के भीतर, उदाहरण के लिए cpdf-binaries-master.zip , cpdfmanual.pdf फ़ाइल है और "1.2 इनपुट रेंज" के तहत, पृष्ठ 2 पर शुरू होता है, यह इस पर चर्चा करता है। पहले पृष्ठ को हटाने के लिए वाक्यविन्यास है cpdf in.pdf 2-end out.pdf। आपके ओपी के जवाब में दिया गया कोड अंतिम पृष्ठ को हटाने के लिए विशिष्ट है और आप बस स्क्रिप्ट के2-end स्थान पर 1-~2या उसके 1भीतर उपयोग नहीं कर सकते हैं जैसा कि लिखा गया है। शर्तों से मेल खाने के लिए आपको इसे फिर से बनाना होगा। यदि आप एक नया प्रश्न पोस्ट करते हैं तो मैं एक स्क्रिप्ट पोस्ट करूंगा जो शर्तों के अनुकूल है।
user3439894


अरे, @ user3439894, बहुत अच्छी प्रतिक्रिया। सिंटैक्स cpdf in.pdf 1-~2 -o out.pdfअब 2-पेज के दस्तावेज़ों के लिए भी काम करता है। यदि आप अपने उत्तर को तदनुसार संपादित कर सकते हैं तो यह बहुत अच्छा होगा। यह स्क्रिप्ट को बहुत सरल करेगा।
retrography
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.