ব্রাউজারে পিডিএফ ফাইলগুলি খুলতে বাধ্য করার কোনও উপায় কি যখন "ব্রাউজারে পিডিএফ প্রদর্শন" অপশনটি চেক করা হয়?
আমি এমবেড ট্যাগ এবং একটি আইফ্রেম ব্যবহার করার চেষ্টা করেছি, তবে কেবলমাত্র সেই বিকল্পটি চেক করা হলে এটি কাজ করে।
আমি কি করতে পারি?
ব্রাউজারে পিডিএফ ফাইলগুলি খুলতে বাধ্য করার কোনও উপায় কি যখন "ব্রাউজারে পিডিএফ প্রদর্শন" অপশনটি চেক করা হয়?
আমি এমবেড ট্যাগ এবং একটি আইফ্রেম ব্যবহার করার চেষ্টা করেছি, তবে কেবলমাত্র সেই বিকল্পটি চেক করা হলে এটি কাজ করে।
আমি কি করতে পারি?
উত্তর:
ব্রাউজারে ফাইলটি দেখতে হবে তা ব্রাউজারকে বোঝাতে, এইচটিটিপি প্রতিক্রিয়াতে এই শিরোনামগুলি অন্তর্ভুক্ত করা উচিত:
Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"
দেখার চেয়ে ফাইলটি ডাউনলোড করার জন্য:
Content-Type: application/pdf
Content-Disposition: attachment; filename="filename.pdf"
ফাইলনামের চারপাশে উদ্ধৃতি আবশ্যক যদি ফাইলনামে এমন বিশেষ অক্ষর থাকে filename[1].pdf
যা অন্যথায় প্রতিক্রিয়াটি পরিচালনা করার জন্য ব্রাউজারের ক্ষমতা ভঙ্গ করতে পারে।
আপনি HTTP প্রতিক্রিয়া শিরোনাম কীভাবে সেট করবেন তা নির্ভর করে আপনার HTTP সার্ভারের উপর (বা, আপনি যদি সার্ভার-সাইড কোড থেকে পিডিএফ প্রতিক্রিয়া তৈরি করছেন: আপনার সার্ভার-সাইড প্রোগ্রামিং ভাষা) side
আপনি যদি এইচটিএমএল 5 ব্যবহার করেন (এবং আমার ধারণা আজকাল প্রত্যেকে এটি ব্যবহার করে), সেখানে একটি বৈশিষ্ট্য বলা হয় download
।
উদাহরণ স্বরূপ,
<a href="somepathto.pdf" download="filename">
এখানে filename
alচ্ছিক, তবে সরবরাহ করা থাকলে এটি ডাউনলোড করা ফাইলটির জন্য এই নামটি নেবে।
সঠিক প্রকারটি application/pdf
পিডিএফ-এর জন্য, নয় application/force-download
। এটি কিছু লিগ্যাসি ব্রাউজারগুলির জন্য হ্যাকের মতো দেখাচ্ছে। আপনি যদি পারেন তবে সর্বদা সঠিক মাইমটাইপ ব্যবহার করুন।
আপনার যদি সার্ভার কোডের উপর নিয়ন্ত্রণ থাকে:
header("Content-Disposition", "attachment; filename=myfilename.myextension");
header("Content-Disposition", "inline; filename=myfilename.myextension");
সার্ভার কোডের উপর কোনও নিয়ন্ত্রণ নেই:
দ্রষ্টব্য: আমি সার্ভার সাইডে ফাইলের নামটি সেট করতে পছন্দ করি কারণ আপনার আরও তথ্য থাকতে পারে এবং সাধারণ কোড ব্যবহার করতে পারেন।
আপনার যদি অ্যাপাচি থাকে তবে এটি .htaccess
ফাইলটিতে যুক্ত করুন:
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
ওহো, আমার আগের পোস্টে টাইপ করার ত্রুটি ছিল।
header("Content-Type: application/force-download");
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=\"".$name."\";");
আপনি যদি ব্রাউজারটি ব্যবহারকারীকে অনুরোধ না করতে চান তবে "সংযুক্তি" এর পরিবর্তে তৃতীয় স্ট্রিংয়ের জন্য "ইনলাইন" ব্যবহার করুন। ইনলাইন খুব ভাল কাজ করে। ব্যবহারকারীকে ওপেনে ক্লিক করতে না বলেই পিডিএফ প্রদর্শন করুন। আমি "সংযুক্তি" ব্যবহার করেছি এবং এটি ব্যবহারকারীকে ওপেন, সংরক্ষণের অনুরোধ জানাবে। আমি ব্রাউজার সেটিংস বাদাম পরিবর্তন করার চেষ্টা করেছি এটি প্রম্পটটি প্রতিরোধ করে না।
এটি এএসপি.এনইটি এমভিসির জন্য
আপনার সিএসটিএমএল পৃষ্ঠায়:
<section>
<h4><a href="@Url.Action("Download", "Document", new { id = @Model.GUID })"><i class="fa fa-download"></i> @Model.Name</a></h4>
<object data="@Url.Action("View", "Document", new { id = @Model.GUID })" type="application/pdf" width="100%" height="800" class="col-md-12">
<h2>Your browser does not support viewing PDFs, click on the link above to download the document.</h2>
</object>
</section>
আপনার নিয়ামক মধ্যে:
public ActionResult Download(Guid id)
{
if (id == Guid.Empty)
return null;
var model = GetModel(id);
return File(model.FilePath, "application/pdf", model.FileName);
}
public FileStreamResult View(Guid id)
{
if (id == Guid.Empty)
return null;
var model = GetModel(id);
FileStream fs = new FileStream(model.FilePath, FileMode.Open, FileAccess.Read);
return File(fs, "application/pdf");
}
নিম্নলিখিত ফায়ারফক্সে ভাল কাজ করার সময় এটি ক্রোম এবং মোবাইল ব্রাউজারগুলিতে কাজ করে না।
Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"
ক্রোম এবং মোবাইল ব্রাউজারগুলির ত্রুটিটি ঠিক করতে, নিম্নলিখিতগুলি করুন:
গুগল পিডিএফ ভিউয়ারটিকে তাই ব্যবহার করা যেতে পারে:
<iframe src="http://docs.google.com/gview?url=http://example.com/path/to/my/directory/pdffile.pdf&embedded=true" frameborder="0"></iframe>
রুট ফাইল থেকে ডাউনলোডস.এফপি খুলুন।
তারপরে 186 লাইনে যান এবং এটি নিম্নলিখিতটিতে পরিবর্তন করুন:
if(preg_match("/\.jpg|\.gif|\.png|\.jpeg/i", $name)){
$mime = getimagesize($download_location);
if(!empty($mime)) {
header("Content-Type: {$mime['mime']}");
}
}
elseif(preg_match("/\.pdf/i", $name)){
header("Content-Type: application/force-download");
header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=\"".$name."\";");
}
else{
header("Content-Type: application/force-download");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$name."\";");
}
আপনি নিম্নলিখিত পদ্ধতিতে এটি করতে পারেন:
<a href="path to PDF file">Open PDF</a>
যদি পিডিএফ ফাইলটি কোনও ফোল্ডারের ভিতরে থাকে এবং সেই ফোল্ডারে সেই ফোল্ডারে সরাসরি ফাইল অ্যাক্সেসের অনুমতি না থাকে তবে আপনাকে .htaccess
এইভাবে ফাইল সেটিং ব্যবহার করে কিছু ফাইল অ্যাক্সেস বিধিনিষেধকে বাইপাস করতে হবে :
<FilesMatch ".*\.(jpe?g|JPE?G|gif|GIF|png|PNG|swf|SWF|pdf|PDF)$" >
Order Allow,Deny
Allow from all
</FilesMatch>
তবে এখন কিছু নির্দিষ্ট ফাইলের অনুমতি দিন ।
আমি এই কোডটি ব্যবহার করেছি এবং এটি পুরোপুরি কার্যকর হয়েছে।
হয় ব্যবহার
<embed src="file.pdf" />
যদি এম্বেডিং কোনও বিকল্প বা আমার নতুন প্লাগইন হয়, পিআইএফএফ: https://github.com/terrasoftlabs/piff
পিএইচপি-তে ব্রাউজারে একটি ফাইল দেখতে বাধ্য করার আরও একটি পদ্ধতি এখানে রয়েছে:
$extension = pathinfo($file_name, PATHINFO_EXTENSION);
$url = 'uploads/'.$file_name;
echo '<html>'
.header('Content-Type: application/'.$extension).'<br>'
.header('Content-Disposition: inline; filename="'.$file_name.'"').'<br>'
.'<body>'
.'<object style="overflow: hidden; height: 100%;
width: 100%; position: absolute;" height="100%" width="100%" data="'.$url.'" type="application/'.$extension.'">
<embed src="'.$url.'" type="application/'.$extension.'" />
</object>'
.'</body>'
. '</html>';
header
আপনি অনুরোধের বডি আউটপুট করা শুরু করার পরে কাজ করে না (এবং এটি কোনও HTML ডকুমেন্টে
কেবলমাত্র অ্যাডোব রিডার খুলুন, মেনু → সম্পাদনা → পছন্দসমূহ → ইন্টারনেট , তারপরে ব্রাউজার মোডে পরিবর্তন করুন বা বিভিন্ন ব্রাউজারে বিস্তারিত নির্দেশাবলীর জন্য ব্রাউজারে পিডিএফ প্রদর্শন করুন | অ্যাক্রোব্যাট, অ্যাক্রোব্যাট রিডার ।
আপনি যদি একটি .PDF এ লিঙ্ক করেন তবে এটি ব্রাউজারে খুলবে।
বাক্সটি যদি চেক না করা থাকে তবে ডাউনলোডটি জোর করার জন্য একটি .zip এর সাথে লিঙ্ক করা উচিত।
যদি .zip কোনও বিকল্প না হয়, তবে ডাউনলোডটি জোর করে পিএইচপিতে শিরোনাম ব্যবহার করুন
header('Content-Type: application/force-download');
header('Content-Description: File Transfer');