(এইচটিএমএল) ক্লিক করার সময় ব্রাউজারে সেগুলি খোলার পরিবর্তে একটি পিডিএফ ফাইল ডাউনলোড করুন


115

আমি ভাবছিলাম কীভাবে পিডিএফ ফাইলের লিঙ্কটি ব্রাউজারে না খোলার পরিবর্তে ডাউনলোডযোগ্য? এইচটিএমএলে এটি কীভাবে হয়? (আমি ধরে নিলাম এটি জাভাস্ক্রিপ্ট বা কোনও কিছুর মাধ্যমে সম্পন্ন হয়েছে)।


3
এটি আমার জ্ঞানের পক্ষে স্ক্রিপ্টযোগ্য আচরণ নয়। ডাউনলোডের ক্ষেত্রে নির্দিষ্ট ফাইল ধরণের সাথে কী করা উচিত তার আচরণের জন্য বেশিরভাগ ব্রাউজারের নিজস্ব সেটিংস থাকবে।
বার্ট

1
এইচটিএমএল 5 হিসাবে, ওপি-তে সারিমের উত্তরের সঠিক উত্তরটি আপডেট করা উচিত।
ওমর তারিক


এই প্রশ্নেরও এখানে উত্তর দেওয়া হয়েছে: stackoverflow.com/a/30714824/847235
ইন্ট্রিপিডিস

উত্তর:


38

আপনি এইচটিএমএল দিয়ে এটি করতে পারবেন না। এটি একটি সার্ভার-ভিত্তিক সমাধান। আপনাকে ফাইলটি স্ট্রিম করতে হবে যাতে ব্রাউজারটি সেভ ডায়ালগের চেয়ে ট্রিগার করে।

আমি এটি না করার পরামর্শ দিই। কোনও ব্যবহারকারী কীভাবে পিডিএফের সাথে ইন্টারঅ্যাক্ট করে তা ব্যবহারকারীর উপর ছেড়ে দেওয়া উচিত।

আপডেট (2014):

সুতরাং ... এই উত্তরটি এখনও প্রচুর ডাউনওয়েট পায়। এর একটি অংশ আমি ধরে নিই যে এটির উত্তর 4 বছর আগে দেওয়া হয়েছিল এবং যেমন সরিম উল্লেখ করেছেন, এখন এইচটিএমএল 5 downloadবৈশিষ্ট্য রয়েছে যা এটি পরিচালনা করতে পারে।

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

http://caniuse.com/#feat=download


18
আমি জানি এটি এক বছরের পুরানো - তবে আমি একমত নই। এমন পরিস্থিতি রয়েছে যা প্রয়োগের প্রবাহের জন্য এই আচরণটি বাধ্য করা অত্যন্ত গুরুত্বপূর্ণ। আসল উত্তর হ'ল "ইনলাইন" এর পরিবর্তে "সংযুক্তি" হিসাবে শিরোনামে সামগ্রী-বিভাজন সেট করা।
ব্যবহারকারী 158017

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

1
কখনও কখনও প্রশ্ন ভুল হয়। ;) যাইহোক, আপনার সমস্যা সম্পর্কিত, এটি একটি ইউএক্স সমস্যা। ওয়েবকে নির্দিষ্ট উপায়ে আচরণ করতে বাধ্য করা কখনও কখনও প্রয়োজনীয় হয় তবে প্রায়শই ইউএক্স দৃষ্টিভঙ্গি থেকে আরও ভাল সমাধান পাওয়া যায়। এছাড়াও, আমার উত্তরটি সঠিক। আপনি HTML এর সাথে যা করতে চান তা করতে পারবেন না (যা প্রশ্নটি জিজ্ঞাসা করেছিল)। এটি সার্ভার-সাইড সমাধান হিসাবে।
ডিএ

1
এটি আমার পোস্ট করা আজব উত্তরগুলির মধ্যে একটি। লোকেরা এখনও এটিকে নীচে নামানোর জন্য তাদের উপায় খুঁজে পাচ্ছে। কোনটি ঠিক আছে! তবে কেন তা জেনে রাখা আকর্ষণীয় হবে।
ডিএ

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

133

এইচটিএমএল 5 দিয়ে এখন এটি সম্ভব। উপাদানটিতে একটি "ডাউনলোড" অ্যাটর সেট করুন।

<a href="http://link/to/file" download="FileName">Download it!</a>

উত্স: http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download


আপনি যদি এই সমাধানটি সমর্থন করেন তবে আরও ভাল go এটি কিনা তা যাচাই করার জন্য এখানে একটি উপায় রয়েছেif ("download" in document.createElement("a")){ ... }
বিকাল

আমি নীচে অন্য উত্তর যুক্ত করেছি (যদিও খারাপ হ্যাক), যদিও এটি এখনও পছন্দসই উপায়, সম্ভবত হ্যাক উপায়টি অসমর্থিত ব্রাউজারগুলির জন্য দেওয়া যেতে পারে।
সরিম

ফাইল পথের উল্লেখ না করে কেউ পিডিএফ-র জন্য পাঠ্য নির্দিষ্ট করার উপায় আছে কি? আমাকে একটি ডিভ এইচটিএমএল থেকে পিডিএফ তৈরি করতে হবে তবে আমি অন্য উইন্ডোটি খুলতে চাই না, ডাউনলোডটি এই উত্তরের মতো
নির্দোষ

1
ঠিক এখনই আগস্ট 2019, ব্রাউজার সমর্থন এই বৈশিষ্ট্যটির জন্য বর্ধিত বলে মনে হচ্ছে, দেখুন: w3schools.com/tags/att_a_download.asp
ড্যানিয়েল রিচ

2
দ্রষ্টব্য যে ডাউনলোডের বৈশিষ্ট্যটি কেবল একই-উত্সের অনুরোধগুলির জন্য সমর্থিত।
কোয়ান্টিন

82

সার্ভার সাইড কোড দ্বারা একটি HTTP প্রতিক্রিয়া শিরোনাম সেট করেই এটি সম্ভব। যেমন;

Content-Disposition: attachment; filename=fname.ext

2
এটি সঠিক উত্তর - উপযুক্ত সার্ভার-সাইড ভাষায় এটি করার উপায়টি সন্ধান করুন।
ব্যবহারকারী 158017

অ্যাপাচি উদাহরণ। ফ্লাস্ক উদাহরণ।
বব স্টেইন

দুর্ভাগ্যক্রমে আইওএস এখনও পূর্বরূপ দেখতে এবং পিডিএফ ফাইলগুলি ডাউনলোড করবে না এমনকি বিষয়বস্তু প্রদর্শন 'সংযুক্তি' হলেও।
জর্ন ভ্যান ডি বেক

14

আপনাকে প্রেরিত http শিরোনামগুলি পরিবর্তন করতে হবে। আপনার সার্ভারের উপর নির্ভর করে আপনি নীচের হিসাবে আপনার .htaccess পরিবর্তন করতে পারেন:

<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

সামগ্রীর ধরণ সম্পর্কে মিথ্যা বলার দরকার নেই। বিষয়বস্তু-স্বভাব নির্ধারণ করা যথেষ্ট।
কোয়ান্টিন

9

আপনাকে একটি পিএইচপি স্ক্রিপ্ট ব্যবহার করতে হবে (বা এর জন্য কোনও অন্য সার্ভার সাইড ভাষা)

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

এবং পিডিএফের পরিবর্তে পিএইচপি ফাইলে পুনর্নির্দেশ করতে (পুনরায় লিখন) করতে httacces ব্যবহার করুন


হুম, আমি সরাসরি পিএইচপি ফাইলটি খুললে এটি দুর্দান্ত কাজ করে। তবে আমি যখন এখানে পুনঃনির্দেশ ব্যবহার করার চেষ্টা করি: 301 /_PDFs/Gtlueue.pdf পুনর্নির্দেশ http://www.example.com/_PDFs/___download_the_catalogue_instead_opening.phpকরুন এবং পিডিএফ ফাইলটি খোলার চেষ্টা করুন, এটি নাম পরিবর্তিত সংস্করণটি ডাউনলোড করার পরিবর্তে এটি ব্রাউজারে এখনও মূলটি খোলে ...
এলকি

আপডেট: এটি যখন কাজ করে তখন এমন কোনও ফাইল নেই যা সরাসরি ডাকা হচ্ছে না (আমার উদাহরণে "ক্যাটালগ.পিডিএফ" হিসাবে)। তারপরে পুনঃনির্দেশ পুরোপুরি কাজ করে। ধন্যবাদ!
ellockie

8

তুমি ব্যবহার করতে পার

Response.AddHeader("Content-disposition", "attachment; filename=" + Name);

এই উদাহরণটি দেখুন:

http://www.codeproject.com/KB/aspnet/textfile.aspx

এটি ASP.NET এর জন্য যায় for আমি নিশ্চিত যে আপনি অন্যান্য সমস্ত সার্ভার পাশের ভাষায় একই রকম সমাধানগুলি খুঁজে পেতে পারেন। তবে আমার জ্ঞানের সেরাটির কোনও জাভাস্ক্রিপ্ট সমাধান নেই।


এটি উত্তর (পাশাপাশি পিএইচপি-র সম্পর্কিত সম্পর্কিত)। মুল বক্তব্যটি হ'ল http প্রতিক্রিয়া শিরোনামটি সম্পাদনা করতে হবে।
ব্যবহারকারী 158017

5

এইচটিএমএল 5 বৈশিষ্ট্য ছাড়াই পিএইচপি ব্যবহার করে কেউ এটি অর্জন করতে পারে:

এই কোডটি দিয়ে পিএইচপি ফাইলটি নামযুক্ত download.php তৈরি করুন :

<?php
ob_start();
$file = "yourPDF.pdf"

if (file_exists($file)) 
{
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit();
}

এখন আপনি যদি স্বয়ংক্রিয়ভাবে পিডিএফ ডাউনলোড শুরু করতে চান তবে এই জাভাস্ক্রিপ্টটি লিখুন:

<script>window.location = "download.php";</script>

আপনি যদি কোনও লিঙ্কে এটি কাজ করতে চান তবে এটি ব্যবহার করুন ...

<a href='javascript:window.location = "download.php"'>
    Download it!
</a>

4
আপনি কেবলমাত্র ইউআরএল প্যারামিটারের সাহায্যে যখন যাচ্ছেন তখন আপনাকে অবশ্যই যত্নবান হওয়া দরকার। উদাহরণস্বরূপ $file = $_GET['$file'];। কারণ এরপরে কেউ কল করতে পারে download.php?file=../../../wp-config.phpবা অন্য কোনও প্রদত্ত সংস্থান। এক্সটেনশানগুলির জন্য অতিরিক্ত চেকিং, মাইম-প্রকার এবং ("../" এর মতো স্ট্রিপিং স্টাফিং) থেকে ডাউনলোড করার অনুমতিপ্রাপ্ত পাথগুলি খুব গুরুত্বপূর্ণ!
জিয়েল বার্কার্স

এটি কি আমি বা <a href='javascript...'> করা ঠিক সেই লিঙ্কটি সরাসরি ঠিক রাখার মতোই<a href='download.php'> ?
অ্যালান.সিমোন

5

যখন আপনি ব্রাউজার থেকে কোনও চিত্র বা পিডিএফ ফাইল সরাসরি নতুন ট্যাবে খোলার পরিবর্তে জাভাস্ক্রিপ্টে ডাউনলোড করতে চান তখন আপনার গতিশীল লিঙ্ক তৈরির বৈশিষ্ট্য ডাউনলোড করার জন্য মান নির্ধারণ করতে হবে

    var path= "your file path will be here"; 
    var save = document.createElement('a');  
    save.href = filePath; 
    save.download = "Your file name here"; 
    save.target = '_blank'; 
    var event = document.createEvent('Event');
    event.initEvent('click', true, true); 
    save.dispatchEvent(event);
   (window.URL || window.webkitURL).revokeObjectURL(save.href);

নতুন ক্রোম আপডেটের জন্য কিছু সময়ের ইভেন্ট কাজ করছে না। নিম্নলিখিত কোড ব্যবহার করা হবে

  var path= "your file path will be here"; 
    var save = document.createElement('a');  
    save.href = filePath; 
    save.download = "Your file name here"; 
    save.target = '_blank'; 
    document.body.appendChild(save);
    save.click();
    document.body.removeChild(save);

শিশুকে যুক্ত করা এবং শিশুকে সরিয়ে ফেলা ফায়ারফক্সের জন্য দরকারী, কেবল ইন্টারনেট এক্সপ্লোরার ব্রাউজার। ক্রোম এ এটি সন্তানের সংযোজন এবং অপসারণ ছাড়াই কাজ করবে


2

যে সমাধানটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে তা হ'ল নিক তার ব্লগে লিখেছেন

তার সমাধানের মূল ধারণাটি হ'ল অ্যাপাচি সার্ভারের শিরোলেখ মোড ব্যবহার করা এবং একটি ফাইলম্যাচ নির্দেশিকা অন্তর্ভুক্ত করার জন্য .htaccess সম্পাদনা করা যা সমস্ত * .pdf ফাইলগুলিকে সংযুক্তির পরিবর্তে প্রবাহ হিসাবে কাজ করতে বাধ্য করে। যদিও এটিতে আসলে HTML সম্পাদনা জড়িত নেই (মূল প্রশ্ন অনুসারে) এতে প্রতি সেও কোনও প্রোগ্রামিংয়ের প্রয়োজন নেই।

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

আমি আরও যোগ করতে চাই যে পিডিএফগুলির সাথে আপনার সার্ভারে একটি এপিআইয়ের মাধ্যমে প্রাপ্য ফর্মগুলি পোস্ট / জমা দেওয়ার জন্য একটি বিকল্প রয়েছে তবে এটি কার্যকর করতে কিছুটা সময় নেয় takes

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

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


2

যেহেতু এইচটিএমএল 5 উপায় (আমার পূর্ববর্তী উত্তর) সমস্ত ব্রাউজারগুলিতে উপলব্ধ নেই, তাই অন্য একটি সামান্য হ্যাক উপায়।

এই সমাধানটির প্রয়োজন হয় আপনি একই ডোমেন থেকে উদ্দেশ্যযুক্ত ফাইলটি পরিবেশন করছেন, বা CORS অনুমতি রয়েছে।

  1. এক্সএমএলএইচটিপিআরকেয়েস্ট (অ্যাজাক্স) এর মাধ্যমে প্রথমে ফাইলটির সামগ্রী ডাউনলোড করুন।
  2. তারপরে ফাইলের সামগ্রীটি এনকোড করে একটি ডেটা ইউআরআই তৈরি করুন এবং এতে মিডিয়া-টাইপ সেট করুন application/octet-stream। ফলাফল দেখতে হবে

data:application/octet-stream;base64,SGVsbG8sIFdvcmxkIQ%3D%3D

এখন সেট করুন location.href = data। এর ফলে ব্রাউজারটি ফাইলটি ডাউনলোড করবে। দুর্ভাগ্যক্রমে আপনি এইভাবে ফাইলের নাম বা এক্সটেনশান সেট করতে পারবেন না। মিডিয়া-টাইপের সাথে ফিডিং কিছু উপার্জন করতে পারে।

বিশদটি দেখুন: https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs


1

একটি নির্দিষ্ট ফোল্ডারে ডায়নামিক নামের সাথে তৈরি এবং আইআইএস দ্বারা পরিবেশন করা ফাইলগুলির জন্য আমার এটি করা দরকার।

এটি আমার পক্ষে কাজ করেছে:

  • আইআইএস-এ, সেই ফোল্ডারে যান এবং HTTP প্রতিক্রিয়া শিরোনামগুলিতে ডাবল ক্লিক করুন।
  • নিম্নলিখিত তথ্য সহ একটি নতুন শিরোনাম যুক্ত করুন:

    Name: content-disposition Value: attachment

(থেকে: http://forums.iis.net/t/1175103.aspx?add+ কাস্টমহাইডার্স + মাত্র +++++++++++++++++++ )


1

আপনি যদি এইচটিএমএল 5 ব্যবহার করছেন (এবং আমি এখন অনুমান করি যে দিনগুলি সবাই এটি ব্যবহার করে), সেখানে একটি বৈশিষ্ট্য বলে download

প্রাক্তন। <a href="somepathto.pdf" download="filename">

এখানে filenameisচ্ছিক, তবে যদি সরবরাহ করা হয় তবে ডাউনলোড করা ফাইলের জন্য এটি এই নামটি নেবে।


দুঃখের সাথে, আমাকে স্বীকার করতে হবে যে এই ট্যাগটি বুঝতে আমি খুব বোকা। আমি এটি রেখেছি: <a href="download/Curriculum_it.pdf.zip">Download curriculum</a>বা এটি: <a href="download/Curriculum_it.pdf.zip" download="Curriculum_it">Download curriculum</a>এবং এটি কীভাবে কাজ করে তার মধ্যে আমি কোনও পার্থক্য দেখতে পাচ্ছি না। উভয়ই আমার .zip ডাউনলোড করছে। এবং দ্বিতীয়টিতে ফাইলনাম বিকল্পটি ব্যবহার করে কিছুই করার মতো মনে হয় না।
গারাভানি

0

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


0

আপনি ডাউনলোড . js ( https://github.com/rndme/download এবং http://danML.com/download.html ) ব্যবহার করতে পারেন । যদি ফাইলটি কোনও বাহ্যিক URL এ থাকে তবে আপনাকে অবশ্যই একটি অজাক্স অনুরোধ করতে হবে, তবে এটি যদি না হয় তবে আপনি ফাংশনটি ব্যবহার করতে পারেন:

download(Path, name, mime)

গিটহাবের আরও তথ্যের জন্য তাদের ডকুমেন্টেশন পড়ুন।


এটি অন্য ডোমেনে ডাউনলোডের জন্য সেরা জাভাস্ক্রিপ্ট সমাধান।
এডহোলার

-1

পরিশেষে আমি খুঁজে পেয়েছি ...... গতিশীল অ্যাঙ্কর ট্যাগ তৈরি করুন এবং এটিতে ক্লিক করুন

<script> 
   $('#myclick').click(function(){
       $('body').append('<a id="link" href="mypdf.pdf" 
        download="Payment.pdf">&nbsp;</a>');
       $('#link')[0].click();
   });
</script>

'পেমেন্ট.পিডিএফ' কেবলমাত্র কাস্টম নামের জন্য।


গতিশীলভাবে লিঙ্কটি তৈরি করার দরকার নেই।
কোয়ান্টিন

দ্রষ্টব্য যে ডাউনলোডের বৈশিষ্ট্যটি কেবল একই-উত্সের অনুরোধগুলির জন্য সমর্থিত।
কোয়ান্টিন

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