पीएनजी के लिए मौजूदा निर्देशिका में हर पीडीएफ कन्वर्ट


16

मैं वर्तमान निर्देशिका में bashप्रत्येक .pdfफ़ाइल को एक फ़ाइल में बदलने के लिए एक स्क्रिप्ट लिखना चाहता हूं .png। उदाहरण के लिए:

$ls .
a.pdf b.pdf
$./pdf2png.sh
Converting pdfs to pngs
a.pdf -> a.png
b.pdf -> b.png

यह मेरा सर्वश्रेष्ठ प्रयास है:

#!/bin/bash
convert -verbose -density 500 -resize '800' a.pdf a.png
convert -verbose -density 500 -resize '800' b.pdf b.png

जवाबों:


17

यदि आपके पास वास्तव में अजीब नाम हैं, तो ऐसी नई या बैकस्लैश और पसंद हैं, आप ऐसा कुछ कर सकते हैं:

find . -type f -name '*.pdf' -print0 |
  while IFS= read -r -d '' file
    do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.png"
  done

कि आप इसे फेंक कुछ भी बस के बारे में निपटने में सक्षम होना चाहिए।

उपयोग की गई ट्रिक्स:

  • find ... -print0 : कारण find अशक्त चरित्र द्वारा अलग किए गए इसके परिणामों को प्रिंट करने का है, आइए हम नई खबरों से निपटते हैं।
  • IFS= : यह शब्द विभाजन को निष्क्रिय कर देगा, सफेद स्थान से निपटने के लिए आवश्यक है।
  • read -r: बैकस्लैश एस्केप वर्णों की व्याख्या करने में अक्षम करता है, बैकस्लैश वाली फ़ाइलों से निपटने के लिए।
  • read -d '': नल के चरित्र के लिए रिकॉर्ड सीमांकक सेट करता है, खोज के आउटपुट से निपटने के लिए और न्यूलाइन वर्णों के साथ फ़ाइल नामों को सही ढंग से संभालता है।
  • ${file%.*}.png: विस्तार को हटाने के लिए शेल की इनबिल्ट स्ट्रिंग हेरफेर क्षमताओं का उपयोग करता है।

दोनों उत्तर अच्छे हैं, लेकिन मैंने इसे स्वीकार कर लिया क्योंकि यह उपयोग किए गए ट्रिक्स की व्याख्या के साथ आता है।
मुझे

या इसे (POSIX) पोर्ट्रेट रूप से करें और फिर भी किसी विशेष वर्ण को संभालें : स्पष्टीकरण और पृष्ठभूमि के लिए unix.stackexchange.com/a/321753/135943find . -type f -name '*.pdf' -exec sh -c 'for f do convert -verbose -density 500 -resize 800 "$f" "${f%.pdf}.png"; done' find-sh {} + देखें ।
वाइल्डकार्ड

1
@Wildcard यहाँ केवल गैर-पॉजिक्स चीज़ है -printf, इसलिए आपको पोर्टेबिलिटी की आवश्यकता होगी, इसे '-exec printf'% s \ 0 '{} + \ _ के साथ बदलना होगा।
terdon

14

आप बैश forलूप का उपयोग इस प्रकार कर सकते हैं :

#!/bin/bash
for pdfile in *.pdf ; do
  convert -verbose -density 500 -resize '800' "${pdfile}" "${pdfile%.*}".png
done

7

आप वर्तमान निर्देशिका में mogrifyबैच को परिवर्तित और आकार बदलने के लिए उपयोग कर सकते हैं .pdf:

mogrify -verbose -density 500 -resize 800 -format png ./*.pdf

एक अलग format(इस मामले में -format png) का उपयोग करते समय मूल .pdfएस को अछूता छोड़ दिया जाता है, आउटपुट फ़ाइलों में एक्सटेंशन के अलावा एक ही नाम होता है जिसे द्वारा निर्दिष्ट एक में बदल दिया जाएगा format


1

यदि आप बैश का उपयोग करने के लिए प्रतिबंधित नहीं हैं, तो आप .pdfमौजूदा निर्देशिका में सभी फ़ाइलों को उच्च-रिज़ॉल्यूशन .pngछवियों में परिवर्तित करने के लिए एक पायथन स्क्रिप्ट का उपयोग कर सकते हैं । इसे अन्य इनपुट / आउटपुट छवि प्रकारों के लिए संशोधित किया जा सकता है, या इसके लिए विभिन्न तर्कों का उपयोग किया जा सकता है convert

#! /usr/bin/env python

import os

def main():
    dir_list = os.listdir('.')
    for full_file_name in dir_list:
        base_name, extension = os.path.splitext(full_file_name)
        if extension == '.pdf': # then .pdf file --> convert to image!
            cmd_str = ' '.join(['convert',
                                '-density 400',
                                full_file_name,
                                base_name + '.png'])
            print(cmd_str)  # echo command to terminal
            os.system(cmd_str)  # execute command

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