কয়েক দিন আগে আমি আপনাকে দেখিয়েছিলাম কীভাবে অকুলারে (প্লাজমা ডেস্কটপের ডিফল্ট পিডিএফ ভিউয়ার) তথ্য রিড্যাক্ট করতে হয়। কাজটি করা তুলনামূলকভাবে সহজ, কিন্তু এটি কার্যকরভাবে রিড্যাক্ট করা তথ্যগুলো নষ্ট করে না, বরং সেগুলো শুধু দর্শকের চোখ থেকে লুকিয়ে রাখে।
আজ আমি আপনাকে পازلটির দ্বিতীয় অংশ দেখাতে চাই—পিডিএফ ডকুমেন্ট ফ্ল্যাটেনিং। একটি ছবি কল্পনা করুন যার একাধিক লেয়ার রয়েছে, এবং তারপর আপনি সেটিকে একটি নন-লেয়ারড ফরম্যাটে সংরক্ষণ করেন। তথ্যটি তারপর একটি একক লেয়ারে ফ্ল্যাট হয়ে যায়—সभी উল্লম্বভাবে স্ট্যাক করা পিক্সেলের মান গাণিতিকভাবে যোগ/বিয়োগ/যে-কোনো অপারেশন করেই একটি একক নিশ্চিত ফলাফল হিসেবে উপস্থাপিত হয়। পিডিএফ-এর ক্ষেত্রেও একই কথা, শুধু এর কাঠামো কিছুটা জটিল। চলুন শুরু করি।
কাজের সরঞ্জাম—গোস্টস্ক্রিপ্ট
আপনি হয়তো গোস্টস্ক্রিপ্ট (gs) সম্পর্কে শুনেছেন—বিতর্কের বছরের μέσαয় আমি আমার ল্যাটেক্স এবং লাইএক্স সংক্রান্ত নিবন্ধগুলোর মধ্যে এর কথা বলেছি। এখন আমরা gs ইঞ্জিন ব্যবহার করে একটি বিদ্যমান "বহু-লেয়ারড" পিডিএফকে একটি ফ্ল্যাটেন্ড পিডিএফে রূপান্তর করব, যাতে তথ্যগুলো সঠিকভাবে রিড্যাক্ট হয়। আমরা এটি লিনাক্সে করব, কারণ লিনাক্স একটি কাজে অন্য অপারেটিং সিস্টেমের চেয়ে ভালো করে—ফাইল ফরম্যাট প্রসেসিং-এর মতো নির্দিষ্ট, ফোকাসড টাস্ক। তাই গোস্টস্ক্রিপ্ট আপনার ডিস্ট্রিবিউশনে উপলব্ধ থাকা উচিত, এবং না থাকলে আর্কাইভে পাওয়া যাবে।
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile=flattened.pdf input.pdf
এই কমান্ডটিই জাদু করে। এটি আপনার পিডিএফ ফাইলে থাকা চিত্রগুলোর কোনো অতিরিক্ত প্রসেসিং করে না—তাই আকারে বড় कमी আশা করবেন না। সেই আমাদের উদ্দেশ্য ও নয়। কিন্তু কার্যকরভাবে, এটিই সব।
বিকল্প পদ্ধতি—ইমেজম্যাজিক এবং pdf2ps
যদি উপরের পদ্ধতিটি আপনাকে সন্তুষ্ট না করে, তবে আপনি আরও দুটি পদ্ধতি চেষ্টা করতে পারেন। তবে মনে রাখবেন, আমি গোস্টস্ক্রিপ্টের চেয়ে এদের কম কার্যকর পেলাম। তাই নিচের পরামর্শগুলো মেনে চলার আগে এই কথা মনে রাখুন।
আপনি ইমেজম্যাজিকের কনভার্ট ইউটিলিটি চেষ্টা করতে পারেন। কিন্তু একমুহূর্ত প্রত্যাশা করুন।
convert -density 300 original.pdf flattened.pdf
ডিফল্টরূপে, গোস্টস্ক্রিপ্ট ইঞ্জিনে একটি সিকিউরিটি ভালনারেবিলিটির কারণে, ইমেজম্যাজিক কনফিগার করা থাকে যাতে সেটি বিভিন্ন ফাইল প্রসেস করতে না পারে, যার মধ্যে রয়েছে PS, PDF, EPS, XPS এবং অন্যান্য। তাই যদি আপনি ইমেজম্যাজিক পলিসি এডিট ছাড়া চেষ্টা করেন, তবে নিচের এররটি দেখবেন:
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert-im6.q16: no images defined `flattened.pdf' @ error/convert.c/ConvertImageCommand/3258.
এটি সমাধান করতে আপনাকে নিচের ফাইলটি এডিট করতে হবে—[NUMBER] এর জায়গায় প্রাসঙ্গিক ভার্সনের জন্য 6 বা 7 বসান:
/etc/ImageMagick-[NUMBER]/policy.xml
এই ফাইলে সিকিউরিটি পলিসির একটি তালিকা থাকবে:
...
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
</policymap>
PDF-এর জন্য rights="none" কে rights="read|write" এ পরিবর্তন করুন। আপনি যদি সিকিউরিটি নিয়ে চিন্তিত হন, তবে শুধু ফ্ল্যাটেনিং করার সময় অস্থায়ীভাবে পরিবর্তন করে بعدে আবার স্ট্রিক্ট সেটিংসে ফিরে যান।
...
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="read|write" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
</policymap>
এখন আপনি ফাইলটি প্রসেস করতে পারেন। সাধারণত, এটি গোস্টস্ক্রিপ্টের চেয়ে বেশি সময় নেয়। علاৱে, খুব বড় ফাইল নিয়ে কাজ করলে মেমরি শেষ হয়ে যেতে পারে এবং কনভার্সন ব্যর্থ হতে পারে। উদাহরণস্বরূপ:
convert-im6.q16: cache resources exhausted `flattened.pdf' @ error/cache.c/OpenPixelCache/4083 `flattened.pdf' @ error/pdf.c/WritePDFImage/2341.
আপনাকে একবার আবার XML কনফিগারেশন ফাইল পরিবর্তন করে মেমরি লিমিট বাড়াতে হবে। তবে ডকুমেন্টটি আপনার সিস্টেমের উপলব্ধ মেমরির চেয়ে বড় হতে পারে। আমার কাছে কোনো ম্যাজিক সেটিংস নেই:
...
<policy domain="resource" name="memory" value="2048MiB"/>
<policy domain="resource" name="map" value="4096MiB"/>
<policy domain="resource" name="width" value="256KP"/>
<policy domain="resource" name="height" value="256KP"/>
<policy domain="resource" name="area" value="1024MB"/>
<policy domain="resource" name="disk" value="4GiB"/>
...
দ্বিতীয় টুলটি হলো pdf2ps এবং ps2pdf জোড়া। মূলত, আপনি পিডিএফকে PS ফাইলে কনভার্ট করবেন এবং তারপর আবার পিডিএফে ফিরিয়ে আনবেন, যা কার্যকরভাবে ডকুমেন্টটি ফ্ল্যাট করবে। জাদুর কমান্ডটি:
pdf2ps original.pdf - | ps2pdf - flattened.pdf
এটি ভালো কাজ করে এবং দ্রুত—তবে, ডিফল্ট সেটিংস আক্রমণাত্মক কম্প্রেশনের কারণে লো-রেজ চিত্র ফলাফল দেয়। এটি ধ্যায়ে রেখে আপনাকে টুলগুলোর বিভিন্ন অপশন এক্সপেরিমেন্ট করতে হবে, যাতে আপনার প্রয়োজনীয় ডকুমেন্ট ফিডেলিটি বজায় থাকে।
উপসংহার
ব্যাস, এখন আপনি পিডিএফ ফাইল ফ্ল্যাটেনিং শিখে গেলেন। এর পিছনের টেকনিক্যাল জটিলতা এই নিবন্ধের সুযোগের বাইরে, কিন্তু কমপক্ষে আপনার কাছে কাজ করার সরঞ্জাম আছে। আমার অভিজ্ঞতায় গোস্টস্ক্রিপ্ট সবচেয়ে দ্রুত এবং কার্যকর, এবং সেটি সেরা ফলাফল দেয়।
আপনি উপরে উল্লেখ করা অন্যান্য দুটি ইউটিলিটিও চেষ্টা করতে পারেন—ইমেজম্যাজিক এবং pdf2ps/ps2pdf কম্বো। কিন্তু আমি তাদের ফলাফল देखकर কম সন্তুষ্ট ছিলাম। যাইহোক, আপনি যদি অন্যদের সাথে পিডিএফ ফাইল শেয়ার করতে চান, এবং সেখানে থাকা তথ্যের অংশ রিড্যাক্ট করতে চান, তবে এখন আপনার কাছে একটি দুই-টিউটোরিয়াল প্রসেস আছে। এই দ্বিতীয় গাইড ছবিটি সম্পূর্ণ করে দিল। বিদায়!
চিয়ার্স।