আমি কীভাবে পিডিএফ ফাইলকে ধূসর-স্কেল থেকে কালো-সাদা রূপান্তর করতে পারি?


11

আমার ওএস হ'ল উবুন্টু 12.04। আমি কীভাবে পিডিএফ ফাইলকে ধূসর-স্কেল থেকে কালো-সাদা রূপান্তর করতে পারি? ধূসর-স্কেল পিডিএফ ফাইলটি ধূসর-স্কেল বিকল্পের সাথে স্ক্যান করে আসে এবং কালো-সাদা স্কেল পিডিএফ ওসিআর দ্বারা প্রয়োজনীয়।


হালনাগাদ:

মার্কোর জবাব অনুসরণ করে, বিডাব্লু পিডিএফ ভাল নেই এবং আসল ফাইলটি এখানে


চেষ্টা করুনscantailor
frostschutz

scantailorওসিআর-এর স্ক্যান প্রস্তুত করার ক্ষেত্রে অন্যান্য প্রচুর উপকারী বৈশিষ্ট্য রয়েছে এবং আমি
এটিকেই

আপনি খুলতে এবং রফতানি করতে পারেন, (কমপক্ষে কিছু) .পিডিএফ লাইব্রোফাইসে রয়েছে (এবং তাই আমি বেশিরভাগ আধুনিক ওয়ার্ড প্রসেসর অনুমান করব)। এটি আপনার পছন্দসই পরিবর্তনটি সম্ভব বা সহজ করে তুলবে কিনা তা জানেন না।
স্বর্ণলোকস

1
pdfimagesএর পিডিএফ ধারক থেকে স্ক্যান করা চিত্রগুলি বের করার জন্যও রয়েছে (পপ্পলার)। তাদের প্রথম স্থানে ইমেজম্যাগিকের সাহায্যে পরিচালনা করতে আরও দক্ষ হতে পারে।
frostschutz

উত্তর:


9

1) ব্যবহারের Ghostscript ব্যবহার করে একটি একবর্ণ পোস্টস্ক্রিপ্ট ফাইলে পিডিএফ রূপান্তর করতে psmono ডিভাইস:

gs -q -sDEVICE=psmono -o mono.ps input.pdf

2) তারপরে মনোক্রোম পোস্টস্ক্রিপ্টটি পিডিএফে রূপান্তর করুন:

ps2pdf mono.ps

সম্পাদনা করুন:psmono ডিভাইস একটি 1-বিট অর্ধ স্বন ইমেজ যা দৃশ্যত নয় কি আপনি চান সৃষ্টি করে। আমি ভূস্ট্রিপ্ট ব্যবহার করে একটি থ্রেশহোল্ড নির্দিষ্ট করার কোনও উপায় খুঁজে পাইনি, তাই আমি ইমেজম্যাগিকে অবলম্বন করেছি। convertঅভ্যন্তরীণভাবে পিডিএফ রূপান্তর করতে ভূস্ট্রিপ্ট ব্যবহার করে। এর পরে এটি 1-বিট চিত্র তৈরি করতে প্রান্তিক ফিল্টারিং প্রয়োগ করে এবং পিডিএফ তৈরি করতে আবার ভূতলিপি ব্যবহার করে। যেহেতু convertডিফল্ট হিসাবে 75DPI এর রেজোলিউশন ব্যবহার করে, যা আপনার প্রকৃত রেজোলিউশনের সাথে মেলে না, তাই আপনি densityযুক্তি সরবরাহ করতে পারেন । এবং thresholdসেটিংটি নিয়ে এক্সপেরিমেন্ট করুন । সর্বোত্তম মানগুলি ইনপুট ফাইলের উপর নির্ভর করে।

convert -density 150 -threshold 50% input.pdf output.pdf

ধন্যবাদ! প্রথম কমান্ডটি চালানোর একটি সমস্যা: মূল ধূসর-স্কেল পিডিএফটি প্রায় 25MB, এবং 15 মিনিটের পরে দৌড় এখনও শেষ হয়নি, এবং আউটপুট ফাইল mono.ps ইতিমধ্যে 150MB এবং এখনও বাড়ছে। আমি এটা নিয়ে উদ্বিগ্ন। অন্যান্য উপায় আছে, উদাহরণস্বরূপ, BW পিডিএফ ফাইল মুদ্রণ?
টিম

@ টিম এটি অস্বাভাবিক নয়। পোস্টস্ক্রিপ্ট ফাইলগুলি সঙ্কুচিত করা হয়েছে, ফলাফল পিডিএফ আরও ছোট হবে।
মার্কো

ধন্যবাদ। এটি প্রায় 20 মিনিট সময় নিয়েছে। বিডাব্লু পিডিএফ ভাল না। এবং মূল ফাইলটি এখানে রয়েছে
টিম

@ টিম ভয়ঙ্কর মানের, আপনি যা-ই করুন না কেন ওসিআরের পক্ষে উপযুক্ত নয়।
frostschutz

4

মানহীন ক্ষতি ছাড়াই আমি ওখানে সবচেয়ে ভাল উপায় খুঁজে পেয়েছি, পরের পৃষ্ঠা থেকে ছায়া, গোলমাল, পাঠ্যকে রক্তপাত ইত্যাদি সরিয়ে দেয়:

1) প্রথমে পিডিএফকে পৃথক চিত্রগুলিতে রূপান্তর করুন

pdfimages combined_ocr.pdf page

2) দ্বিতীয় পৃষ্ঠার দ্বিতীয়টি ছায়া, গোলমাল, পাঠ্য অপসারণের মাধ্যমে রক্তপাত হয় ( এই ব্লগের ক্রেডিট )

ls ./p*.ppm | xargs -L1 -I {} convert {}  -quality 100 -density 300 -fill white -fuzz 80% +opaque "#000000" {}.jpg

এটি অতিরিক্ত দুটি পদক্ষেপ হিসাবে বা কেবলমাত্র দুটি রঙ পেতে উপরের কমান্ডের পরিবর্তে যুক্ত করা যেতে পারে:

ls ./p*.ppm | xargs -L1 -I {} convert {} +dither -colors 2 -type bilevel -density 300 -fill white -fuzz 40% +opaque "#000000" -density 300 {}.jpg

3) রেজোলিউশন বা গুণমানের ক্ষতি ছাড়াই প্রতিটি jpg চিত্রের বাইরে পিডিএফ ফাইল তৈরি করতে:

ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf

4) এটি পিডিএফপেজকে একের সাথে যুক্ত করতে:

pdftk *.pdf cat output combined.pdf

5) এবং সর্বশেষে আমি একটি ওসিআরড পাঠ্য স্তর যুক্ত করেছি যা পিডিএফগুলিতে স্ক্যানের মান পরিবর্তন করে না যাতে তারা অনুসন্ধানযোগ্য হতে পারে:

pypdfocr combined.pdf 

3

আমার কাছে কিছু স্ক্যান করা রঙিন পিডিএফ এবং গ্রেস্কেল পিডিএফ ছিল যা আমি বিডব্লিউতে রূপান্তর করতে চেয়েছিলাম। আমি ব্যবহার করার চেষ্টা gsসঙ্গে এখানে তালিকাভুক্ত কোড , এবং ইমেজ মানের এখনও আছে পিডিএফ পাঠ্য সহ ভাল। তবে, সেই জিএস কোডটি কেবল গ্রেস্কেলে রূপান্তরিত হয় (প্রশ্নে জিজ্ঞাসা করা হয়েছে) এবং তারপরেও বড় আকারের ফাইল আকার রয়েছে। convertসরাসরি ব্যবহার করা হলে খুব খারাপ ফলাফল দেয়।

আমি ভাল ইমেজ মানের এবং ছোট ফাইল আকার সঙ্গে bw পিডিএফস চেয়েছিলেন। আমার সলিউশন gsপিডিএফ থেকে গ্রেস্কেল বিএমপি ফাইলগুলি এক্সট্র্যাক্ট convertকরতে, বিডাব্লুথ্রিফোল্ড ফাইল হিসাবে সেভ করার জন্য এই বিএমপিগুলিকে প্রসারিত করতে এবং তারপরে টিফ চিত্রগুলি সংকুচিত করতে এবং সেগুলি সমস্তকে একটি পিডিএফ- তে মিশ্রিত করতে img2pdf ব্যবহার করে।

আমি পিডিএফ থেকে সরাসরি ঝুঁকির দিকে যাওয়ার চেষ্টা করেছি তবে মানেরটি এক নয় তাই আমি প্রতিটি পৃষ্ঠাকে বিএমপি-তে সংরক্ষণ করি। এক পৃষ্ঠার পিডিএফ ফাইলের জন্য, convertবিএমপি থেকে পিডিএফ পর্যন্ত দুর্দান্ত কাজ করে। উদাহরণ:

gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
   -sOutputFile=./pdf_image.bmp ./input.pdf

convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf

একাধিক পৃষ্ঠাগুলির জন্য একাধিক gsপিডিএফ ফাইল এক সাথে মার্জ করতে পারে তবে img2pdfজিএস এর চেয়ে ছোট ফাইলের আকার দেয়। টিফ ফাইলগুলি img2pdf ইনপুট হিসাবে সঙ্কুচিত করা আবশ্যক। বিপুল সংখ্যক পৃষ্ঠার জন্য মনে রাখবেন, মধ্যবর্তী বিএমপি এবং টিফ ফাইলগুলি আকারে বড় হতে থাকে। pdftkবা joinpdfতারা যদি সংকুচিত পিডিএফ ফাইলগুলি মার্জ করতে পারে তবে আরও ভাল convert

আমি আরও একটি মার্জিত সমাধান আছে ধারণা। যাইহোক, আমার পদ্ধতিটি খুব ভাল চিত্রের মানের এবং অনেক ছোট ফাইল আকারের ফলাফল তৈরি করে। বিডব্লিউ পিডিএফটিতে পাঠ্য ফিরে পেতে, আবার ওসিআর চালান।

আমার শেল স্ক্রিপ্টটি জিএস, রূপান্তর এবং ইমজি 2 পিডিএফ ব্যবহার করে। মাপদণ্ডগুলি (পৃষ্ঠাগুলির #, DPI স্ক্যান, থ্রেশহোল্ড%, ইত্যাদি) শুরুতে প্রয়োজন নেই, এবং রান তালিকাভুক্ত পরিবর্তন chmod +x ./pdf2bw.sh। এখানে পূর্ণ স্ক্রিপ্ট (pdf2bw.sh):

#!/bin/bash

num_pages=12
dpi_res=300
input_pdf_name=color_or_grayscale.pdf
bw_threshold=40%
output_pdf_name=out_bw.pdf
#-------------------------------------------------------------------------
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -q -r$dpi_res \
   -sOutputFile=./%d.bmp ./$input_pdf_name
#-------------------------------------------------------------------------
for file_num in `seq 1 $num_pages`
do
  convert ./$file_num.bmp -threshold $bw_threshold \
          ./$file_num.tif
done
#-------------------------------------------------------------------------
input_files=""

for file_num in `seq 1 $num_pages`
do
  input_files+="./$file_num.tif "
done

img2pdf -o ./$output_pdf_name --dpi $dpi_res $input_files
#-------------------------------------------------------------------------
# clean up bmp and tif files used in conversion

for file_num in `seq 1 $num_pages`
do
  rm ./$file_num.bmp
  rm ./$file_num.tif
done

2

আসলে, যদি এটি কোনও স্ক্যান থেকে আসে তবে একমাত্র যুক্তিযুক্ত উপায় হ'ল পিডিফাইমেজগুলি ব্যবহার করা এবং অন্তর্নিহিত গ্রাফিকগুলি রূপান্তর করা। আমি রূপান্তর করতে এই স্ক্রিপ্টটি ব্যবহার করেছি:

#!/bin/sh
if [ -z "$1" -o -z "$2" ]; then
    echo "Syntax: $0 <input.pdf> <output.pdf>"
    exit 1
fi

pdfimages "$1" scan
for a in scan*.ppm; do 
   convert -white-threshold 85% -monochrome $a `basename $a .ppm`.tiff
done
tiffcp scan*.tiff output.tiff
tiff2pdf output.tiff -o "$2" -p A4 -F
rm scan*.ppm scan*.tiff output.tiff

2

তাঁর স্ক্রিপ্টের জন্য ওকামস রেজারকে ধন্যবাদ, যা রঙ এবং গ্রেস্কেল পিডিএফ উভয়কে একটি কমপ্যাক্ট এবং সুগঠিত একরঙা সংস্করণে রূপান্তরিত করতে দুর্দান্ত কাজ করে। এটি সত্যই অকামসাজার পোস্টে একটি মন্তব্য, তবে আমার মন্তব্য করার মতো পর্যাপ্ত পয়েন্ট নেই।

স্ক্রিপ্টটি ব্যর্থ হবে img2pdf -o ./$output_pdf_name --dpi $dpi_res $input_files কারণ --dpiএখন আর img2pdf- এর কোনও স্বীকৃত যুক্তি নেই। পরিবর্তে, এটি ইনপুট ফাইল থেকে রেজোলিউশন পায়, তাই আপনি কেবল এটি ছেড়ে দিতে পারেন।

এখানে আমার স্ক্রিপ্ট সংস্করণ। আমি প্রতিটি ফাইলের জন্য স্ক্রিপ্টটি সম্পাদনা করতে চাইনি, তাই আমি যখন এটি চালিত করি তখন পৃষ্ঠা সংখ্যা এবং ইনপুট ফাইলের নামটি পাস করি। আমি আউটপুট নাম সেট আছে 200 DPI, যা আমার কর্মপ্রবাহ জন্য কাজ করে এবং রেজল্যুশন সেট, কিন্তু আপনি এটিকে পরিবর্তন করতে পারেন, অথবা তাদের পরিণত এবং তাদের মধ্যে পাস।00input_name$3$4

চালানোর জন্য , যেমন, ব্যবহার করুন ।./pdf2bw.sh <number_of_pages> <input_name>./pdf2bw.sh 55 input.pdf

#!/bin/bash

num_pages=$1
input_pdf_name=$2
output_pdf_name="00$2"
bw_threshold=40%
dpi_res=200
#-------------------------------------------------------------------------
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -q -r$dpi_res \
   -sOutputFile=./%d.bmp ./$input_pdf_name
#-------------------------------------------------------------------------
for file_num in `seq 1 $num_pages`
do
  convert ./$file_num.bmp -threshold $bw_threshold \
          ./$file_num.tif
done
#-------------------------------------------------------------------------
input_files=""

for file_num in `seq 1 $num_pages`
do
  input_files+="./$file_num.tif "
done

img2pdf -o ./$output_pdf_name $input_files
#-------------------------------------------------------------------------
# clean up bmp and tif files used in conversion

for file_num in `seq 1 $num_pages`
do
  rm ./$file_num.bmp
  rm ./$file_num.tif
done

আপনার শেল ভেরিয়েবলগুলি উদ্ধৃত করা উচিত; বিশেষত যুক্তি বা অন্যান্য ব্যবহারকারীর ইনপুট থেকে আসা: যেমন "./$input_pdf_name"এবং এমনকি seq 1 "$num_pages"। এছাড়াও, আপনি পরিবর্তন করতে চান পারে `…`থেকে $(…)- দেখুন এই , এই , এবং এই
জি-ম্যান

আমি উল্লিখিত পরিবর্তনগুলি বাদে এটি ওকামাসর'র স্ক্রিপ্ট। আমি কোনও শেল প্রোগ্রামার নই, তাই আমি কাজ করে এমন কিছু নিয়ে গণ্ডগোল করতে চাই না। তবে যদি কেউ এটি পরিষ্কার করতে চান তবে আপনাকে ধন্যবাদ জানাই।
লুওয়াল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.