ইমেজম্যাগিকের সাথে পিডিএফ তৈরি করতে 2 গিগাবাইটের বেশি সীমা পান


19

আমি convertপ্রায় 2,000 চিত্র থেকে পিডিএফ ফাইল তৈরি করতে ব্যবহার করছি :

convert 0001.miff 0002.miff ... 2000.miff -compress jpeg -quality 80 out.pdf

প্রক্রিয়াটি পুনরুত্পাদনযোগ্য বন্ধ করে দেয় যখন বার্তা সহ আউটপুট ফাইল 2 ^ 31-1 বাইট (2 জিবি −1) পৌঁছে যায়

convert: unknown `out.pdf'.

পিডিএফ ফাইল স্পেসিফিকেশন 10 গিগাবাইট জন্য অনুমতি দেয় । আমি এ থেকে আরও তথ্য টানতে চেষ্টা করেছি -debug all, কিন্তু লগিং আউটপুটে সহায়ক কিছু দেখিনি। ফাইল সিস্টেমটি ext3 যা কমপক্ষে 16 GiB পর্যন্ত ফাইলের (আরও বেশি হতে পারে) মঞ্জুরি দেয় । হিসাবে ulimit, file sizeহয় unlimited। /etc/security/limits.confশুধুমাত্র মন্তব্য-আউট লাইন থাকে। এর ফলে আর কী হতে পারে এবং আমি কীভাবে সীমা বাড়াতে পারি?

ইমেজম্যাগিক সংস্করণ: 6.4.3 2016-08-05 Q16 ওপেনএমপি
বিতরণ: এসইএলএস 11.4 (i586)


4
আপনার পক্ষে কি অর্ধেক চিত্র (বা যা আপনার ভাল মানায়) দিয়ে দুটি ফাইল তৈরি করা সম্ভব, এবং তারপরে সেগুলি পিডিএফটেকের সাথে একীভূত করা সম্ভব?
— গ্যালিফ্রেয়ান

1
আপনার>> 2 জিবি পিডিএফ ফাইল তৈরি করার কোনও যুক্তিসঙ্গত কারণ আছে? আমি আশঙ্কা করি যে অনেক পিডিএফ পাঠক এটি খোলার চেষ্টা করে ক্রাশ হয়ে যাবে।
— dr01

কারণ আপনার ইমেজম্যাগিকের অনুলিপি বড় ফাইল সমর্থন ছাড়াই সংকলিত হয়েছে। দয়া করে একটি বাগ ফাইল করুন - এটি 2017
— মনিকা পুনরায়

@ dr01: তাদের কেন করা উচিত? কয়েক দশক থেকে বড় ফাইল সমর্থন প্রায় কাছাকাছি ছিল।
— মনিকা পুনরায় ইনস্টল করুন - এম। শ্রাইডার

@ মার্টিনশ্রেডার এবং এখনও কিছু প্রোগ্রাম খুব বেশি বড় ফাইল হ্যান্ডেল করতে পারছে না। যাইহোক, আমি 2-জিবি (অর্থাত '150'000 এ 4 পৃষ্ঠা) পিডিএফ ফাইল তৈরি করার কারণ সম্পর্কে আগ্রহী ছিলাম।
— dr01

উত্তর:


24

আপনার সীমাবদ্ধতা প্রকৃতপক্ষে ফাইল সিস্টেম থেকে কাটছে না; বা প্যাকেজ সংস্করণগুলি থেকে আমার মনে হয় ।

আপনার 2 জিবি সীমাটি আপনার ওএসের 32-বিট সংস্করণ ব্যবহার করে আপনার কাছ থেকে আসছে।

ফাইলটি বাড়ানোর বিকল্পটি যদি একটি হার্ডওয়্যার সমর্থন করে তবে একটি 64-বিট সংস্করণ ইনস্টল করা হবে ।

দেখুন বড় ফাইল সমর্থন

Ditionতিহ্যগতভাবে, অনেক অপারেটিং সিস্টেম এবং তাদের অন্তর্নিহিত ফাইল সিস্টেম প্রয়োগগুলি ফাইলের আকার এবং অবস্থানের প্রতিনিধিত্ব করতে 32-বিট ইন্টিজার ব্যবহার করে। ফলস্বরূপ, কোনও ফাইল 2 32 - 1 বাইট (4 জিবি - 1) এর চেয়ে বড় হতে পারে না । অনেকগুলি বাস্তবায়নে, আকারগুলি স্বাক্ষরযুক্ত সংখ্যা হিসাবে চিকিত্সা করে সমস্যাটি আরও বেড়ে যায়, যা আরও সীমাটি 2 31 - 1 বাইট (2 জিবি - 1) নামিয়ে দেয়।


3
পার্শ্ব নোট: লিনাক্স প্রায় এক দশক আগে থেকে 32-বিট-তে এমনকি 64-বিট ফাইলের আকার এবং অবস্থানগুলি ব্যবহার করতে পারে। যদিও এটি নিশ্চিত নয়, যে এই পিডিএফ জেনারেটর সরঞ্জামটি এই কার্যকারিতাটি ব্যবহার করতে পারে।
— পিটারহ - মনিকা

2
off_tসফ্টওয়্যারটি পুরো ফাইলটি র‍্যামে তৈরি করার চেষ্টা করে এবং একবারে এটি ডিস্কে লেখার চেষ্টা করে তবে @ পিটারটি 64-বিটযুক্ত সাহায্য করবে না।
— দিমিত্রি গ্রিগরিএভ

2
লিনাক্স সাইজের সাথে স্বাক্ষরযুক্ত আচরণ করে না, তবে কার্নেলটি কাজ করতে কিছু ডেডিকেটেড স্পেসের প্রয়োজন, এবং পুরানো দিনগুলিতে 2 জিবি ব্যবহারকারীর দেশে রেখে যাওয়া অনেকটা মনে হয়েছিল, তাই কার্নেলটি অন্য 2 জিবি সংরক্ষণ করবে।
— দিমিত্রি গ্রিগরিয়েভ

2
@ দিমিত্রিগ্রিরিভ: আকারগুলি স্বাক্ষরিত নয়, তবে পয়েন্টার পার্থক্য ( ptrdiff_t) হ'ল , এর অর্থ কার্যকরভাবে হ'ল আকারগুলি সর্বাধিক (স্বাক্ষরিত) মানের মধ্যে সীমাবদ্ধ থাকতে হবে ptrdiff_t, অন্যথায় আপনি সত্যিই বাজে ইউবি এবং ইউবি-সম্পর্কিত বাগগুলি পাবেন যা অ্যাপ্লিকেশনগুলিতে নেই that চারপাশে কাজ করার ভাল উপায়।
— আর ..

@ দিমিত্রিগ্রিরিভ সেই ক্ষেত্রে ফাইলটিতে ঠিক 2GB-1 বাইট থাকবে না, কারণ এক্সিকিউটেবল কোডের মতো জিনিসগুলি সংরক্ষণ করার জন্য প্রোগ্রামটির আরও মেমরির প্রয়োজন।
— ব্যবহারকারী23013

12

convertউদাহরণস্বরূপ 1 জিআইবি দ্বারা ব্যবহৃত পিক্সেল ক্যাশে সীমাবদ্ধ করার চেষ্টা করুন :

convert 0001.miff ... 2000.miff -limit memory 1GiB -limit map 1GiB -compress jpeg -quality 80 out.pdf

আশা করা যায় এটি র্যাম বাফারগুলিতে 2 জিবিবি-র বেশি বাজেটের পরিবর্তে ইমেজম্যাগিককে নিয়মিত ইতিমধ্যে প্রক্রিয়াজাত ডেটা ডিস্কে ফেলে দিতে বাধ্য করবে।

বিটিডাব্লু, 32-বিট লিনাক্সের একক প্রক্রিয়াতে উপলব্ধ ভার্চুয়াল মেমরির পরিমাণ VMSPLITকার্নেল কনফিগারেশন সেটিংস দ্বারা সংজ্ঞায়িত করা হয় । এটি হয় 2 জি / 2 জি (কার্নেলের জন্য 2 জিবি 2 ব্যবহারকারীর জন্য 2 জিবি) বা 1 জি / 3 জি (কার্নেলের জন্য 1 জিবি + ব্যবহারকারীল্যান্ডের জন্য 3 জিবি) হতে পারে। একটি চলমান সিস্টেমে, সেটিংটি এর মাধ্যমে পাওয়া যাবে

zcat /proc/config.gz | grep VMSPLIT

কিছু সিস্টেমে /boot/config-$(uname -r)পরিবর্তে কার্নেল কনফিগারেশন সংরক্ষণ করা হয়।


1

যদি এটি বিশাল সংখ্যক ফটোগ্রাফের জন্য না হয় আপনি পিডিএফ তৈরি করতে টেক্স / ল্যাটেক্স ব্যবহার করতে পারেন। তারপরেও আপনি রূপান্তরকারী ক্র্যাশ সমস্যা ছাড়াই একই ফলাফল (চিত্রগুলির পিডিএফ) পেতে পারেন। টেক্সের ফাইল সীমাটি কেবলমাত্র আপনার সিস্টেম (হার্ডওয়্যার + ওএস) হওয়া উচিত

তবে আমি মনে করি আপনি টেক্সটি লিখতে শেল স্ক্রিপ্ট ব্যবহার করতে পারেন:

0)

mkdir convert
pushd convert
PATH=convert:$PATH /* keep everything in one directory for tidyness.*/

1) একটি টেম্পলেট তৈরি করুন

1.1) আমি নিশ্চিত যে একবারে এই পদক্ষেপটি করার একটি উপায় আছে, চিত্রের নামটি সংযোজনের পরিবর্তে ভেরিয়েবল এবং সন্নিবেশকরণের মাধ্যমে এবং সঠিক লিডিং 0 এর জন্য $ FOO ফর্ম্যাট করার জন্য, তবে নিম্নলিখিতটি আমি জানি ।

1.2) স্ক্রিপ্টটির জন্য ফাইলের নাম সন্নিবেশ করার জন্য টেমপ্লেটটি বিভক্ত হওয়া দরকার

1.3) ন্যানো tmplt1 / * বা আপনার পছন্দের সম্পাদক * /

/* white space line */ 
\begin{figure}[h!]
    \includegraphics[width=0.5\linewidth]{
/* at this point the script will insert $FOO, the file name variable */

১.৩.১) তবে আপনার ফাইলগুলি 0001.miff… 0010.miff… 0100.miff… 2000.miff যান। অর্থাত্ শীর্ষস্থানীয় শূন্যগুলির একটি পরিবর্তনশীল সংখ্যা। কার্যতালিকা: tmplt1 এর 4 সংস্করণ: tmplt1-9, tmplt10-99, tmplt100-999, tmplt1000-2000। Tmplt1-9 শেষ হয় "... প্রস্থ] {000" (অর্থাৎ 3 0 এর যোগ করুন); tmplt10-99 শেষ হয় "... প্রস্থ] {00" (অর্থাৎ 2 0 এর যোগ করুন)। 100-999 1 শূন্য যোগ করে এবং 1000-2000 tmplt1 এর সমান

1.4) টেমপ্লেটের পরবর্তী অংশ: ন্যানো tmplt2 / * OOYC * /

.miff}
   \caption{ /* if you want to caption, otherwise skip to  tmplt3.
Same again, script will insert $FOO here */

1.5) টেমপ্লেটের পরবর্তী অংশ: ন্যানো tmplt3 / * OEOYC * /

}
\label{f:   /*if you want them labelled which is actually
a index/reference for the text to refer to, not a caption.
Same again, the script will insert $FOO here. If you do not
want labels, skip to tmplt4*/

1.6) পরবর্তী টেমপ্লেট: ন্যানো tmplt4 / * OEOYC * /

    }
\end{figure}

2) ফাইলটির সূচনা করুন: ন্যানো হেড / * ওইওয়াইসি * /

\documentclass{article} /* Or more suitable class */
 \usepackage{graphicx}
 \begin{document}
  /* white space line*/

3) ফাইলটি শেষ করুন: ন্যানো ফুট / * ওইওয়াইসি * /

\end {document} 

৪) স্ক্রিপ্টটি তৈরি করুন: ন্যানো লোডার / * ওইওয়াইসি * /

#! /bin/bash

cat head > out.pdf

for FOO in {1...9}
do
    cat tmplt1-9 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt2 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt3 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt4 >> out.pdf
done

for FOO in {10...99}
do
    cat tmplt10-99 >> out.pdf /* this looks like a lot but
is actually copy-paste of first block, just add relevant 0's and 9's */
    echo "$FOO" | cat >> out.pdf
    cat tmplt2 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt3 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt4 >> out.pdf
done

for FOO in {100...999}
do
    cat tmplt100-999 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt2 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt3 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt4 >> out.pdf
done

for FOO in {1000...2000}
do
    cat tmplt1000-2000 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt2 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt3 >> out.pdf
    echo "$FOO" | cat >> out.pdf
    cat tmplt4 >> out.pdf
done

cat foot >> out.pdf

5) স্ক্রিপ্ট সম্পাদনযোগ্য: chmod ইউ + এক্স লোডার

5.1) এটি পরীক্ষার পরে, আমি দেখতে পেলাম যে প্রতিবার $ এফইও wasোকানো হয়েছিল, এটি 3 টি লাইনে ছড়িয়ে গেছে। আমি স্ক্রিপ্টে যাওয়া এবং ম্যানুয়ালি গাড়ীর রিটার্ন মোছা ছাড়া অন্য কোনও কাজ জানি না। কমপক্ষে সমস্ত 2000 ফটোগুলির জন্য এটি কেবল 36

6) কল স্ক্রিপ্ট: লোডার

7) TeX: pdflatex out.pdf সংকলন করুন

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