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


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.