চিত্রগুলিকে পিডিএফে রূপান্তর করুন: পিডিএফ পৃষ্ঠাগুলি একই আকারে কীভাবে করবেন


45

আমি এরকম কিছু করেছি

convert -page A4 -compress A4 *.png CH00.pdf

তবে 1 ম পৃষ্ঠাটি পরবর্তী পৃষ্ঠাগুলির চেয়ে অনেক বড়। চিত্রের মাত্রা একই রকম হলেও এটি ঘটে। এই চিত্রগুলি স্ক্যান করা হয়েছে এবং ক্রপ করা হয়েছে মাত্রায় কিছুটা পার্থক্য থাকতে পারে

আমি ভেবেছিলাম -page A4পৃষ্ঠাগুলির আকার ঠিক করা উচিত?

উত্তর:


60

গতবার যখন আমি এই convertজাতীয় কোনও কাজের জন্য ব্যবহার করেছি তখন আমি পুনরায় আকারের মাধ্যমে স্পষ্টভাবে গন্তব্যের আকার নির্দিষ্ট করেছি:

$ i=150; convert a.png b.png -compress jpeg -quality 70 \
      -density ${i}x${i} -units PixelsPerInch \
      -resize $((i*827/100))x$((i*1169/100)) \
      -repage $((i*827/100))x$((i*1169/100)) multipage.pdf

convertকমান্ড সবসময় ব্যবহার করে না ডিপিআই ডিফল্ট ঘনত্ব / পৃষ্ঠা বিন্যাস ইউনিট হিসাবে, এইভাবে আমরা স্পষ্টভাবে সঙ্গে ডিপিআই উল্লেখ -unitsবিকল্প (অন্যথায় আপনি বিভিন্ন সংস্করণ / ইনপুট বিন্যাস সমন্বয় সঙ্গে বিভিন্ন ফলাফল পেতে পারে)। নতুন আকার (এর মাধ্যমে নির্দিষ্ট করা -resize) পিক্সেলগুলিতে একটি ডিআইএন এ 4 পৃষ্ঠার মাত্রা । পুনরায় আকারের যুক্তি সর্বাধিক পৃষ্ঠার আকার নির্দিষ্ট করে। কোন রেজোলিউশন এবং গুণমানটি সঠিকভাবে বাছাই করা হবে তা ব্যবহারের ক্ষেত্রে নির্ভর করে - আমি কাগজে মুদ্রিত হওয়ার সময় কিছুটা জায়গা সাশ্রয় করার জন্য 150 ডিপিআই এবং গড় মানের বাছাই করি ।

নোট করুন যে convertডিফল্টরূপে পুনরায় আকারের ক্রিয়াকলাপের সাথে দিক অনুপাতটি পরিবর্তন হয় না:

পুনরায় আকার চিত্রটি অনুরোধ করা আকারে ফিট করবে। এটি পূরণ করা হয় না, অনুরোধ করা বাক্স আকার।

( চিত্রম্যাগিক ম্যানুয়াল )

ইমেজম্যাগিক সংস্করণ এবং জড়িত ইনপুট ফর্ম্যাটগুলির উপর নির্ভর করে -repageবিকল্পটি বাদ দেওয়া ঠিক হবে । তবে কখনও কখনও এটি প্রয়োজন হয় এবং সেই বিকল্প ছাড়া পিডিএফ শিরোনামে খুব ছোট মাত্রা থাকতে পারে। যাই -repageহোক না কেন, আঘাত করা উচিত নয়।

গণনাগুলি পূর্ণসংখ্যার গাণিতিক ব্যবহার করে যেহেতু bashকেবল এটিই সমর্থন করে। zshএক্সপ্রেশন সহ সরল করা যেতে পারে - অর্থাত্ প্রতিস্থাপন $((i*8.27))x$((i*11.69))

লিনিয়ার্ট চিত্র

যদি পিএনজি ফাইলগুলি দ্বি-স্তরের (কৃষ্ণ ও সাদা অ্যান্ট লাইনআর্ট) চিত্র হয় তবে img2pdfসরঞ্জামটি চিত্রম্যাগিকের চেয়ে উচ্চতর ফলাফল দেয় convert। এর অর্থ img2pdfদ্রুত এবং ছোট পিডিএফ পাওয়া যায়।

উদাহরণ:

$ img2pdf -o multipage.pdf a.png b.png

বা:

$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png

2
যখন -repage a4আমি একটি পাইinvalid argument for option '-repage': a4
স্কোলিটাস

1
@ স্কোলিটাস, ফেডোরা ১৯ সিস্টেমে আমি একই ধরণের সমস্যা দেখেছি - দেখে মনে হয় এটি -repageআর -4 নামকে সমর্থন করে না। আমি শেল পাটিগণিতের মাধ্যমে এর চারপাশে কাজ করেছি:-repage $((150*8.27))x$((150*11.69))
ম্যাক্সচলেপজিগ

আমি ধরে নিলাম যে যাদুগুলির সংখ্যাগুলি 150 ডিপিআই, এবং এ 4 উত্তরাধিকার ইউনিটে প্রকাশিত হয়েছে?
মাইকেল শ্যাপার

@ মিশেলশেপার, হ্যাঁ, ডিপিআই এবং ইঞ্চি
ম্যাক্সচলেপজিগ

ধন্যবাদ, আমাকে সাহায্য করুন। আসলে -density 150যুক্তি যুক্ত করা গুরুত্বপূর্ণ ছিল।
dma_k

23

আপনি যা ব্যবহার করতে চান তা হ'ল:

$ convert a.png b.png -compress jpeg -resize 1240x1753 \
                      -extent 1240x1753 -gravity center \
                      -units PixelsPerInch -density 150x150 multipage.pdf

-extentচিত্রটি আসলে 1240x1753 হতে প্রসারিত করে, যখন -resizeচিত্রের অনুপাত ধরে রাখে, এটি উভয় ক্ষেত্রেই ফিট করে 1240x...বা ...x1753

-gravityপরামিতি ঐচ্ছিক কিন্তু যখন ব্যাপ্ত ইমেজ কেন্দ্রে ব্যবহার করা যাবে।


1
ধন্যবাদ! -extentসত্যিই আমি যা ব্যবহার করতে চাই :) - দয়া করে, -মাসের সামনে বাম উদ্ধৃতি যুক্ত করুন, ধন্যবাদ!
ব্রাউনিয়ান

আপনাকে ধন্যবাদ, আমি অবশেষে হারিয়ে যাওয়া টিকটি যোগ করেছি! ;-)
সতর্ককারী

9

ছাড়াও caugner এর উত্তর :

ইনস্টল থাকার আইএম আমি খুঁজে বের করবো v6.6.9-7 -gravityপ্যারামিটার চাহিদা মধ্যে স্থাপন করা হবে -resizeএবং -extentএকটি প্রভাব আছে।

অতিরিক্তভাবে (পুরোপুরি অপশাসনের অংশ নয়) আমি একটি পৃথক ব্যাকগ্রাউন্ড-রঙ আবেদনকারীকে সেট করতে দেখতে পেলাম যার ফলশ্রুতিতে মোট আদেশটি হবে

convert in.jpg -resize 1240x1750 -background black -compose Copy\
               -gravity center -extent 1240x1750\
               -units PixelsPerInch -density 150 out.pdf

অন্য দরকারী বৈচিত্রটি আমি প্রায়শই ব্যবহার করি যখন আমি এমন চিত্রটি পুনরায় স্কেল করতে চাই না যা ইতিমধ্যে সঠিক দিক-অনুপাতে আসে তবে এর পৃথক রেজোলিউশনটি রাখতে হয়

convert in.jpg -units PixelsPerInch -set density '%[fx:w/8.27]'\
               -repage a4 out.pdf

যেখানে লক্ষ্য ঘনত্বটি 8.27 (যা একটি A4 পৃষ্ঠার ইঞ্চি প্রস্থের) দ্বারা বিভক্ত প্রস্থ গণনা করে গতিশীলভাবে নির্ধারণ করা হয়। -repage a4পরামিতি অধিকাংশ সময় বাদ দেওয়া যেতে পারে কিন্তু আমার কিছু ক্ষেত্রে যেখানে ফলে .pdf sligtly 210x297mm এর করুন A4 মাত্রা বন্ধ একটি ভিন্ন বিন্যাস করতে পারতেন করেছি (8.27x11.6 ")


2

আমি মাইখারের কোডটি খুব দরকারী বলে খুঁজে পেয়েছি, তবে এটি পিডিএফটিকে পুরোপুরি প্রতিকৃতি বা ল্যান্ডস্কেপ হিসাবে রাখে, তাই প্রতিটি ইনপুট ফাইলের লেআউটটি পরীক্ষা করে আউটপুটটিতে এটি মেলানোর জন্য আমি এটি পরিবর্তন করেছি।

আমি আমার উবুন্টু 15.04 বাক্সে এটি ছাড়াই ইয়োটমের সম্পাদনাটি অন্তর্ভুক্ত করি নি।

$#!/bin/bash

# Resizes files to A4 (or other size - change PaperWdthMetr and PaperHghtMetr below) and merges into a PDF

export LOCALE=C

[[ "${2}x" == "x" ]] && \
 { echo "Usage: $( basename $0 ) output.pdf extension"
   echo "       merges all files (*.extension) into a single PDF"
   echo "If files z_merged.pdf, z_temp.pdf or $1 exist, they will be overwritten"
 exit 1
 } || \
 OutName="$1"
 ext="$2"

# Set basic variables
unset Debug #; Debug="yes" # print extra messages
IMBackground="white"      # what colour for paper
IMQuality="91"            # JPEG compression level
PaperHghtMetr="297"       # milimeters, 297 for ISO A4
PaperWdthMetr="210"       # milimeters, 210 for ISO A4
PaperDens="200"           # maximum (wanted) dpi for a page
PaperHInch=$( echo scale=5\; $PaperHghtMetr / 2.54 / 10      | bc -l ) # Inch
PaperWInch=$( echo scale=5\; $PaperWdthMetr / 2.54 / 10      | bc -l ) # Inch
PaperRtio=$(     echo scale=5\; $PaperWdthMetr / $PaperHghtMetr | bc -l )

# Remove temporary files from prior run
rm -rf z_merged.pdf z_temp.pdf 2>/dev/null

# Process any $ext file in the current directory
find . -maxdepth 1 -name "*.${ext}" -print0 | sort -z | while read -d '' -r FName
do
  echo "Converting $FName"
  ImgIdentify=$( identify -format "%w %h" "$FName" )
  ImgWdthOrig=$( echo $ImgIdentify | cut -d" " -f1  )
  ImgHghtOrig=$( echo $ImgIdentify | cut -d" " -f2  )
  ImgRtio=$( echo "scale=5; $ImgWdthOrig / $ImgHghtOrig"  | bc -l )


# Match output page layout - Landscape or Portrait - to input file
  if (( $(echo "$ImgRtio > 1 && $PaperRtio > 1 || $ImgRtio < 1 && $PaperRtio < 1" |bc -l) )); then
    echo "Portrait"
    PaperHghtInch=$PaperHInch
    PaperWdthInch=$PaperWInch
  else
    echo "Landscape"
    PaperHghtInch=$PaperWInch
    PaperWdthInch=$PaperHInch
  fi


  [[ $( echo $ImgRtio'>'$PaperRtio | bc -l ) == 1 ]] \
    && ImgDens=$( echo scale=0\; $ImgWdthOrig / $PaperWdthInch | bc -l ) \
    || ImgDens=$( echo scale=0\; $ImgHghtOrig / $PaperHghtInch | bc -l )
  [[ $Debug ]] && echo "ImgDens1: $ImgDens"
  [[ $( echo $ImgDens'>'$PaperDens | bc -l ) == 1 ]] \
    && ImgDens=$PaperDens
  [[ $Debug ]] && echo "ImgDens2: $ImgDens"

  ImgWdth=$( echo $PaperWdthInch \* $ImgDens | bc -l ) # pixels
  ImgHght=$( echo $PaperHghtInch \* $ImgDens | bc -l ) # pixels

  [[ $Debug ]] && echo "ImgWdth: $ImgWdth".
  [[ $Debug ]] && echo "ImgHght: $ImgHght".

  convert "${FName}"                                 \
          -resize ${ImgWdth}x${ImgHght}              \
          -background $IMBackground -gravity center  \
          -extent ${ImgWdth}x${ImgHght}              \
          -units PixelsPerInch -set density $ImgDens \
          -repage ${ImgWdth}x${ImgHght}+0+0          \
          -compress JPEG                             \
          -quality $IMQuality                        \
          "${FName%.$ext}.pdf"

  # Merge new PDF page with prior pages
  [[ -f z_merged.pdf ]] && \
   { pdftk z_merged.pdf "${FName%.$ext}.pdf" cat output z_temp.pdf
     mv z_temp.pdf z_merged.pdf
   } || \
     cp "${FName%.$ext}.pdf" z_merged.pdf
  [[ $Debug ]] || rm -rf "${FName%.$ext}.pdf"
done

[[ -f z_merged.pdf ]] && mv z_merged.pdf "$OutName"
echo "Done."

2

আমি নীচের স্ক্রিপ্টটি সুবিধাজনক বলে মনে করি যা এখানে তালিকাভুক্ত উত্তরগুলির পাশাপাশি ভাসমান পয়েন্ট গণনার সাথে আমার কিছু সমস্যা সংযুক্ত করে:

endInputArgs=$(($#-1))

quoted_args="$(printf " %q" "${@:1:$endInputArgs}")"
output_arg="$(printf " %q" "${@:$#:1}")"

ratiox=$(echo "150*8.27" | bc -l)
ratioy=$(echo "150*11.69" | bc -l)

bash -c "convert $quoted_args -compress jpeg -resize 1240x1753 \
  -units PixelsPerInch -density 150x150 -repage ${ratiox}x${ratioy} $output_arg"

স্ক্রিপ্টটি বলা হয় (ফাইল ইমেজ 2 পিডিএফ হিসাবে সংরক্ষিত)

images2pdf file\ 1.jpg file\ 2.jpg file\ 3.jpg output.pdf

/ সম্পাদনা: আরও নির্ভুলতার জন্য ট্যানিয়াসের মন্তব্য অনুযায়ী "-l" পতাকা যুক্ত হয়েছে।


সাধারণ ইঙ্গিত: $(echo "150*8.27" | bc)ভাসমান পয়েন্টের জন্য এখনও দুর্দান্ত নয়। এখানে কাজ করে কারণ এটি একটি গুণ। জন্য $(echo "150/8.27" | bc)যদিও, ফলে হয় 18(পূর্ণসংখ্যা থেকে ছেঁটে ফেলা)। পরিবর্তে, কল bcউচ্চতর সহ scale: $(echo "150/8.27" | bc -l), ফলাফল হল 18.137847…
ট্যানিয়াস

1

আমিও সেই জিনিসগুলির সাথে লড়াই করে যাচ্ছিলাম। উপরের তথ্যের উপর ভিত্তি করে, আমি একটি স্ক্রিপ্ট লিখেছিলাম যা একটি একক পিডিএফের মধ্যে বর্ণানুক্রমিকভাবে সাজানো চিত্র ফাইলগুলি যুক্ত করে।

কিছু পরিবর্তনশীল স্ক্রিপ্টের ভিতরে স্থিরযোগ্য। এটি ইমেজম্যাগিক এবং পিডিএফটকের উপর নির্ভর করে।

এনবি: যদি ইনপুট চিত্রটির আউটপুট.পিডিএফ-এর চেয়েছিলেন রেজোলিউশনের চেয়ে উচ্চতর রেজোলিউশন (ডিপিআই) থাকে, তবে চিত্রটি নিম্ন রেজোলিউশনে পুনরায় সাজানো হবে। অন্যথায়, চিত্রটি পুনরায় মডেল করা হয়নি এবং এটি কেবল পৃষ্ঠা ক্যানভাসে ফিট করার জন্য প্রসারিত।

#!/bin/bash

export LOCALE=C

[[ "${2}x" == "x" ]] && \
 { echo "Usage: $( basename $0 ) output.pdf extension"
   echo "       merges all files (*.extension) into a single PDF"
   echo "If files z_merged.pdf, z_temp.pdf or $1 exist, they will be overwritten"
 exit 1
 } || \
 OutName="$1"
 ext="$2"

# Set basic variables
unset Debug #; Debug="yes" # print extra messages
IMBackground="white"      # what colour for paper
IMQuality="91"            # JPEG compression level
PaperWdthMetr="210"       # milimeters, 210 for ISO A4
PaperHghtMetr="297"       # milimeters, 297 for ISO A4
PaperDens="200"           # maximum (wanted) dpi for a page
PaperWdthInch=$( echo scale=5\; $PaperWdthMetr / 2.54 / 10      | bc -l ) # Inch
PaperHghtInch=$( echo scale=5\; $PaperHghtMetr / 2.54 / 10      | bc -l ) # Inch
PaperRtio=$(     echo scale=5\; $PaperWdthMetr / $PaperHghtMetr | bc -l )

# Remove temporary files from prior run
rm -rf z_merged.pdf z_temp.pdf 2>/dev/null

# Process any $ext file in the current directory
find . -maxdepth 1 -name "*.${ext}" -print0 | sort -z | while read -d '' -r FName
do
  echo "Converting $FName"
  ImgIdentify=$( identify -format "%w %h" "$FName" )
  ImgWdthOrig=$( echo $ImgIdentify | cut -d" " -f1  )
  ImgHghtOrig=$( echo $ImgIdentify | cut -d" " -f2  )
  ImgRtio=$( echo "scale=5; $ImgWdthOrig / $ImgHghtOrig"  | bc -l )
  [[ $( echo $ImgRtio'>'$PaperRtio | bc -l ) == 1 ]] \
    && ImgDens=$( echo scale=0\; $ImgWdthOrig / $PaperWdthInch | bc -l ) \
    || ImgDens=$( echo scale=0\; $ImgHghtOrig / $PaperHghtInch | bc -l )
  [[ $Debug ]] && echo "ImgDens1: $ImgDens"
  [[ $( echo $ImgDens'>'$PaperDens | bc -l ) == 1 ]] \
    && ImgDens=$PaperDens
  [[ $Debug ]] && echo "ImgDens2: $ImgDens"

  ImgWdth=$( echo $PaperWdthInch \* $ImgDens | bc -l ) # pixels
  ImgHght=$( echo $PaperHghtInch \* $ImgDens | bc -l ) # pixels

  [[ $Debug ]] && echo "ImgWdth: $ImgWdth".
  [[ $Debug ]] && echo "ImgHght: $ImgHght".

  convert "${FName}"                                 \
          -resize ${ImgWdth}x${ImgHght}              \
          -background $IMBackground -gravity center  \
          -extent ${ImgWdth}x${ImgHght}              \
          -units PixelsPerInch -set density $ImgDens \
          -repage ${ImgWdth}x${ImgHght}+0+0          \
          -compress JPEG                             \
          -quality $IMQuality                        \
          "${FName%.$ext}.pdf"

  # Merge new PDF page with prior pages
  [[ -f z_merged.pdf ]] && \
   { pdftk z_merged.pdf "${FName%.$ext}.pdf" cat output z_temp.pdf
     mv z_temp.pdf z_merged.pdf
   } || \
     cp "${FName%.$ext}.pdf" z_merged.pdf
  [[ $Debug ]] || rm -rf "${FName%.$ext}.pdf"
done

[[ -f z_merged.pdf ]] && mv z_merged.pdf "$OutName"
echo "Done."

-set density $ImgDens-density $ImgDens
উপরেরগুলিতে


0

আমি স্রেফ উবুন্টু 16.04 / চিত্রম্যাগিকের অধীনে ম্যাক্সস্ক্লেপিজিগের উত্তরের অনুরূপ কিছু ব্যবহার করেছি

এটি ফলাফলকে কেন্দ্র করে

i=300; convert a.png b.png -compress jpeg -quality 100 \
      -density ${i}x${i} -units PixelsPerInch \
      -resize $((i*827/100))x$((i*1169/100)) \
      -gravity center \
      -extent $((i*827/100))x$((i*1169/100)) multipage.pdf
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.