বর্তমান ডিরেক্টরিতে প্রতিটি পিডিএফকে পিএনজিতে রূপান্তর করুন


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: এক্সটেনশানটি সরাতে শেলের ইনবিল্ট স্ট্রিং ম্যানিপুলেশন সক্ষমতা ব্যবহার করে ।

উভয় উত্তরই ভাল তবে আমি এটি একটি গ্রহণ করেছি কারণ এটি ব্যবহৃত কৌশলগুলির ব্যাখ্যা সহ আসে।
— আমি

অথবা এটি বহনযোগ্যভাবে করুন (পসিক্স) এবং এখনও কোনও বিশেষ অক্ষর পরিচালনা করুন: ব্যাখ্যা এবং ব্যাকগ্রাউন্ডের জন্য unix.stackex بدل.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
@ উইল্ডকার্ড এখানে কেবলমাত্র নন-পিক্সিক্স জিনিসটি সন্ধান করছে -printf, সুতরাং আপনার পোর্টেবিলিটির জন্য যা দরকার তা হ'ল replace-এক্সেক প্রিন্টফ '% s \ 0' {} + `দিয়ে প্রতিস্থাপন করা`
— টেরডন

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()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.