সহজ কৌতূহলের বাইরে, ক্ষুদ্রতম জিআইএফটি দেখে , সবচেয়ে ছোট সম্ভাব্য বৈধ পিডিএফ ফাইলটি কী?
সহজ কৌতূহলের বাইরে, ক্ষুদ্রতম জিআইএফটি দেখে , সবচেয়ে ছোট সম্ভাব্য বৈধ পিডিএফ ফাইলটি কী?
উত্তর:
এটি একটি আকর্ষণীয় সমস্যা। বইটি হাতে নিয়ে আপনি এটি দিয়ে শুরু করতে পারেন:
%PDF-1.0
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj
xref
0 4
0000000000 65535 f
0000000010 00000 n
0000000053 00000 n
0000000102 00000 n
trailer<</Size 4/Root 1 0 R>>
startxref
149
%EOF
যা পিডিএফ আনন্দের 291 বাইট। অ্যাক্রোব্যাট এটি খোলে, তবে এটি কিছুটা অভিযোগ করে। এটিতে একটি পৃষ্ঠা রয়েছে এবং এটি 3/72 "বর্গক্ষেত্র, অনুমিত দ্বারা অনুমোদিত সর্বনিম্ন।
যাইহোক, অ্যাক্রোব্যাট এক্স এমনকি ক্রস রেফারেন্স টেবিলটি নিয়ে আর বিরক্ত করে না, তাই আমরা এটিকে নিতে পারি:
%PDF-1.0
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj
trailer<</Size 4/Root 1 0 R>>
অ্যাক্রোব্যাট অভিযোগ করলেও তা খুলে দেয়। এখন আমরা 178 বাইটে আছি। দেখা যাচ্ছে যে ট্রেলারটিতে আপনার সেই আকার / আকারের দরকার নেই। এখন আমরা 172 এ আছি:
%PDF-1.0
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj
trailer<</Root 1 0 R>>
দেখা যাচ্ছে যে আপনার অভিধানগুলিতে আপনার সেই সমস্ত বেমানান / টাইপ উপাদানগুলির দরকার নেই:
%PDF-1.0
1 0 obj<</Pages 2 0 R>>endobj 2 0 obj<</Kids[3 0 R]/Count 1>>endobj 3 0 obj<</MediaBox[0 0 3 3]>>endobj
trailer<</Root 1 0 R>>
এখন আমরা 138 বাইটে আছি।
এটি আরও প্রমাণিত হয় যে যখন অনুমানটি "অপ্রত্যক্ষ রেফারেন্স হতে হবে" এবং / গণনার প্রয়োজন হয়, এবং শিরোনামটি "অবশ্যই" পিডিএফ -১.০ হতে হবে, তারা শিথিল পরামর্শ দিচ্ছে। এটি আমি এটিকে তৈরি করতে পারি এবং এটি অ্যাক্রোব্যাট এক্স-তে এটি খোলার উপযুক্ত:
%PDF-1.
trailer<</Root<</Pages<</Kids[<</MediaBox[0 0 3 3]>>]>>>>>>
70 বাইট।
এখন, আমার সম্পাদক উইন্ডোজ নিউলাইন শৃঙ্খলা ব্যবহার করে, তবে অ্যাক্রোব্যাট উইন্ডোজ, ম্যাক বা ইউনিক্স কনভেনশনগুলি গ্রহণ করে, তাই একটি হেক্স সম্পাদক ব্যবহার করে, আমি \ r \ n কে \ আর এর সাথে প্রতিস্থাপন করে এবং শেষের নিউলাইনটি পুরোপুরি সরিয়ে ফেললাম, যা আমাকে 67 বাইট দিয়ে ছেড়েছে
25 50 44 46 2D 31 2E 0D 74 72 61 69 6C 65 72 3C
3C 2F 52 6F 6F 74 3C 3C 2F 50 61 67 65 73 3C 3C
2F 4B 69 64 73 5B 3C 3C 2F 4D 65 64 69 61 42 6F
78 5B 30 20 30 20 33 20 33 5D 3E 3E 5D 3E 3E 3E
3E 3E 3E
আমি শেষ প্রান্তের অভিধানটি (>>) কেড়ে নেওয়ার চেষ্টা করেছি, তবে অ্যাক্রোব্যাটটি এটির নেই। গুগল ক্রোমে অন্তর্নির্মিত পিডিএফ পঠন (ফক্সআইটি) এটি খুলবে না।
পোস্টস্ক্রিপ্ট হিসাবে (এইচএ! দেখুন আমি সেখানে কী করেছি?), আপনি যদি অ্যাক্রোব্যাট ফাইলটি "মেরামত" করতে সম্মত হন তবে এটি 3550 বাইট পর্যন্ত বিস্তৃত হয়, এর বেশিরভাগটি alচ্ছিক মেটাডেটা, তবে এটি বেশ কয়েকটি স্পষ্ট স্পেস লঙ্ঘনের পিছনে ছেড়ে যায়।
minimum allowed by the spec
এবং তারপরে উপরের ওপারে যায়। দুর্দান্ত উত্তর, ধন্যবাদ! :)
\n
এমবেড হয়েছে এবং যখন বেস64-ডিকোড করা সঠিক ফাইলের সামগ্রী দেয় না।
হ্যালো ওয়ার্ল্ডের উদাহরণটি খোলার জন্য আমি পাই না।
পাঠ্য সামগ্রী সহ একটি ছোট-ইশ ফাইলের জন্য:
%PDF-1.2
9 0 obj
<<
>>
stream
BT/ 9 Tf(Test)' ET
endstream
endobj
4 0 obj
<<
/Type /Page
/Parent 5 0 R
/Contents 9 0 R
>>
endobj
5 0 obj
<<
/Kids [4 0 R ]
/Count 1
/Type /Pages
/MediaBox [ 0 0 99 9 ]
>>
endobj
3 0 obj
<<
/Pages 5 0 R
/Type /Catalog
>>
endobj
trailer
<<
/Root 3 0 R
>>
%%EOF
আমি ভেবেছিলাম আমি একটি ক্ষুদ্রতম পিডিএফ তৈরি করব যা "হ্যালো ওয়ার্ল্ড" প্রদর্শন করে। পাঠ্যটি নীচের বাম কোণে রয়েছে। 9-পয়েন্টের ফন্টের জন্য দুঃখিত, যে কোনও বড়র জন্য অতিরিক্ত বাইট লাগবে :)
অ্যাডোব রিডার এক্স এর জন্য 172 বাইট (যদি কেবল লাইনফিড-শুধুমাত্র নতুন লাইনের সাথে সংরক্ষণ করা হয় এবং কোনও পেছনের নিউলাইন বা নাল-বাইট নেই):
%PDF-1.
1 0 obj<</Kids[<</Parent 1 0 R/Resources<<>>/Contents 2 0 R>>]>>endobj 2 0 obj<<>>stream
BT/ 9 Tf(Hello World)' ET
endstream
endobj trailer<</Root<</Pages 1 0 R>>>>
Chrome এর অন্তর্নির্মিত পিডিএফ দর্শকের জন্য 120 বাইট:
%PDF 1 0 obj<</Pages<</Kids[<</Contents<<>>stream
BT 9 Tf(Hello World)' ET endstream>>]>>>>endobj trailer<</Root 1 0 R>>
এটি ক্রোমে সহজেই দেখতে, এই ইউআরআইটিকে অ্যাড্রেস বারে পেস্ট করুন (এসও আমাকে এর সাথে লিঙ্ক করতে দেয় না, এবং এটি অন্যান্য ব্রাউজারগুলিতে মোটেই কাজ করবে না):
data:application/pdf,%25PDF%201%200%20obj%3C%3C%2FPages%3C%3C%2FKids%5B%3C%3C%2FContents%3C%3C%3E%3Estream%0ABT%209%20Tf(Hello%20World)'%20ET%20endstream%3E%3E%5D%3E%3E%3E%3Eendobj%20trailer%3C%3C%2FRoot%201%200%20R%3E%3E
জাভাতে, এটি ব্যবহার করুন:
private static String samplepdf = "255044462D312E0D747261696C65723C3C2F526F6F743C3C2F50616765733C3C2F4B6964735B3C3C2F4D65646961426F785B302030203320335D3E3E5D3E3E3E3E3E3E";
এবং তারপর
byte[] bytes = hexStringToByteArray(samplepdf);
...
public byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i + 1), 16));
}
return data;
}