পিএইচপি / পার্লের মাধ্যমে ব্যবহারকারীদের ব্রাউজারে একটি পিডিএফ ফাইলগুলি দেখান


121

আমি আমার ব্যবহারকারীদের পিডিএফ ফাইলগুলি দেখাতে চাই। আমি পিডিএফ প্রদর্শনের জন্য সিজি ব্যবহার করার কারণটি হ'ল আমি পিডিএফের জন্য ক্লিকগুলি ট্র্যাক করতে এবং সংরক্ষিত পিডিএফের আসল অবস্থানটি ঘনিয়ে নিতে চাই।

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

আমি যা চেয়েছিলাম তা হল ব্যবহারকারীদের আমার পিডিএফ ফাইলগুলি দেখানো , পিডিএফ তৈরি বা ডাউনলোড নয় । আমি এখানে অফিসিয়াল পিএইচপি ডকুমেন্টেশন গঠন করেছি:

<?php
header('Content-type: application/pdf');
readfile('the.pdf');
?>

এছাড়াও আমার গুগল-অনুসন্ধান-ফলাফল পার্ল কোড:

open(PDF, "the.pdf") or die "could not open PDF [$!]";
binmode PDF;
my $output = do { local $/; <PDF> };
close (PDF);

print "Content-Type: application/pdf\n";
print "Content-Length: " .length($output) . "\n\n";
print $output

আপনি যদি এটি রুবিতে করেন তবে দয়া করে আমাকে বলুন। তবে আমি নিশ্চিত নই যে আমার সার্ভারটি রেল সমর্থন করে if

দুঃখিত, যদি আমার কোডটি পিডিএফ প্রদর্শন করার পদ্ধতি থেকে খুব বেশি দূরে থাকে, যেহেতু আমি পিডিএফ প্রসেসিং এবং এই সমস্যাটি কীভাবে বাস্তবায়ন করব সে সম্পর্কে কিছুই জানি না।

ধরে নেওয়া যাক ব্যবহারকারীদের অ্যাডোব রিডার প্লাগ-ইন রয়েছে। তাহলে, আমার সমস্যা কীভাবে সমাধান করবেন?

সম্পাদনা : আমি সরল পিডিএফ ফাইলটি দেখাতে চাই। আমার প্রাথমিক উদ্দেশ্য: আমার পিডিএফ ফাইলগুলি ট্র্যাক করুন এবং কিছু অভিনব url ব্যবহার করুন।

সম্পাদনা করুন : এখানে আমার মূল পিএইচপি কোড:

<?php
$file='/files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
@readfile($file);
?>

সম্পাদনা : এখন কোড কাজ করছে। তবে লোডিং অগ্রগতি বার (অ্যাডোব রিডার এক্স প্লাগইনে) প্রদর্শিত হবে না। কেন? কেউ আমাকে সাহায্য করতে পারেন? আমার মূল কোডটি এখানে:

<?php
$file='./files/the.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
@readfile($file);
?>

সম্পাদনা : আমার সমস্ত সমস্যার সমাধান। এখানে চূড়ান্ত কোড:

<?php
$file = './path/to/the.pdf';
$filename = 'Custom file name for the.pdf'; /* Note: Always use .pdf at the end. */

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');

@readfile($file);
?>

ধন্যবাদ! :)


4
"শো" কেবল তখনই সম্ভব যখন ক্লায়েন্টের কাছে অ্যাক্রোব্যাট রিডার প্লাগ-ইন ইনস্টল রয়েছে। অন্যথায়, এটি সর্বদা ডাউনলোড ফাইল হিসাবে পরিবেশন করা হবে, এটি সম্পর্কে আপনি কিছুই করতে পারবেন না। পিডিএফের পথটিকে অস্পষ্ট করা অসম্ভব, এটি খুঁজে পাওয়া তুচ্ছ। কি করার চেষ্টা করছেন? আপনার লক্ষ্যগুলি সম্পর্কে আমরা আরও জানতে
পারলে

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

1
অ্যাডোব রিডার কেবল তখনই প্রয়োজন হয় যদি ব্যবহারকারী এমন কোনও ব্রাউজার ব্যবহার করছেন যা পিডিএফ স্থানীয়ভাবে পরিচালনা করে না ...
GolezTrol

@ স্টিফেন অবশ্যই সত্যিকারের পথটিকে অস্পষ্ট করা সম্ভব, কিন্তু ওপি যা মনে করে তা চুরি রোধ করার জন্য ইউআরএলকে অস্পষ্ট করা।
পেক্কা

আসুন ধরে নেওয়া যাক যে ব্যবহারকারীদের অ্যাডোব রিডার প্লাগ-ইন রয়েছে। তাহলে, আমার সমস্যা কীভাবে সমাধান করবেন?
ডিমাসনি

উত্তর:


49

আমি ধরে নিয়েছি যে আপনি পিডিএফটি ডাউনলোড ডাউনলোডের চেয়ে ব্রাউজারে প্রদর্শন করতে চান। যদি এটি হয় তবে Content-Dispositionমানটির সাথে শিরোনামটি সেট করার চেষ্টা করুনinline

এছাড়াও মনে রাখবেন যে এটি ব্রাউজার সেটিংস দ্বারাও প্রভাবিত হবে - কিছু ব্রাউজার সর্বদা পিডিএফ ফাইল ডাউনলোড করতে বা এগুলিকে অন্য কোনও অ্যাপ্লিকেশনে খোলার জন্য কনফিগার করা যেতে পারে (যেমন অ্যাডোব রিডার)


হ্যাঁ. তবে আমি যখন আপনার পরামর্শটি চেষ্টা করছি তখন আমি একটি ত্রুটি পেয়েছি "ফাইলটি '% পিডিএফ-' দিয়ে শুরু হয় না"। আমি 'বিষয়বস্তু-বিভাজন: ইনলাইন ব্যবহার করি; ফাইলের নাম = "the.pdf" '। আমি কি ভুল করেছি?
ডিমাসনি

4
<? পিএইচপি শিরোনাম ('বিষয়বস্তুর ধরণ: অ্যাপ্লিকেশন / পিডিএফ'); শিরোনাম ('বিষয়বস্তু-বিভাজন: ইনলাইন; ফাইলের নাম = "the.pdf" "); readfile ( '/ Dir / থেকে / the.pdf'); ?>
ডিমাসনি

মনে হচ্ছে এটি কোনও বৈধ পিডিএফ ফাইল নয়?
স্টিফেন

@ স্টেফেন যখন আমি ফাইলটিতে ডান খুলি, এটি কাজ করে। তবে আমি যখন ইনলাইন সামগ্রী বিতরণ ব্যবহার করি তখন এটি কার্যকর হয় না।
ডিমাসনি

7
শুনতে ভাল, এবং সমাধান জেনে দুর্দান্ত! আপনি যদি এই প্রশ্নটি দেখেন যে অন্য কারও জন্য, আপনি কোন শিরোনাম পাঠাচ্ছেন তা দেখিয়ে চূড়ান্ত কোড পোস্ট করতে পারলে ভাল।
স্টিফেন

18
    $url ="https://yourFile.pdf";
    $content = file_get_contents($url);

    header('Content-Type: application/pdf');
    header('Content-Length: ' . strlen($content));
    header('Content-Disposition: inline; filename="YourFileName.pdf"');
    header('Cache-Control: private, max-age=0, must-revalidate');
    header('Pragma: public');
    ini_set('zlib.output_compression','0');

    die($content);

পরীক্ষিত এবং সূক্ষ্ম কাজ করে। পরিবর্তে ফাইলটি ডাউনলোড করতে চাইলে প্রতিস্থাপন করুন

    Content-Disposition: inline

সঙ্গে

    Content-Disposition: attachment

আপনি কেন সংক্ষেপণ বন্ধ করছেন? ini_set ( 'zlib.output_compression', '0');
এনজিমা প্লাস 14

কারণ zlib সংক্ষেপণ ob_gzhandler () এর সাথে কাজ করে না এবং এটি একটি সম্পূর্ণ স্ক্রিপ্টের চেয়ে কোডের স্নিপেট। এনগনিক্স পিএইচপি করার চেয়ে কমপ্রেস পরিচালনা করে। আপনার অ্যাপ্লিকেশন এবং সার্ভারের সেটআপটি উপযুক্ত হলে আপনি zlib ব্যবহার করতে পারেন।
করিম

4

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


মূল নথির চুরি রোধ করার একমাত্র সত্যই নিরাপদ উপায়।
পেক্কা

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

তদতিরিক্ত, এটি চুরি হবে না, কারণ আসল এখনও আছে।
সোভান্তে

@ সোভান্তে - আমি সন্দেহ করি যে বৌদ্ধিক সম্পত্তির মালিকরা আপনার যুক্তির সাথে একমত হবেন।
ashleedawg

@ আশলেদাগ: আমি মনিকারকে "বৌদ্ধিক সম্পত্তি" সম্পর্কে সন্দেহ করি। তথ্য সংগ্রহের জন্য এটি কেবল শব্দ হ্যাকিংকে বৈধ ব্যবসায়ের মডেল হিসাবেই মনে হচ্ছে না, এমনকি জনগণের পক্ষে উদ্ভাবনের বিরুদ্ধে প্রতিরক্ষা করাও সার্থক।
সোভান্তে

1

ডাউনলোডের পরিবর্তে পিডিএফ ডিসপ্লে রাখার সবচেয়ে নিরাপদ উপায় এটি কোনও উপাদান objectবা iframeউপাদান ব্যবহার করে এম্বেড করছে বলে মনে হচ্ছে । গুগলের পিডিএফ দর্শকের মতো তৃতীয় পক্ষের সমাধানও রয়েছে।

সংক্ষিপ্তসার জন্য HTML এ এম্বেড করার সেরা উপায় দেখুন ।

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


0

আপনি এফপিডিএফ ক্লাস ব্যবহার করতে পারেন: http://www.fpdf.org । এটি কোনও ফাইলে আউটপুট এবং ব্রাউজারে প্রদর্শন উভয়ের জন্য বিকল্প দেয়।

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