Cách khuyến nghị để nhúng PDF trong HTML?


1182

Cách được đề xuất để nhúng PDF trong HTML là gì?

  • iFrame?
  • Vật?
  • Nhúng?

Adobe nói gì về nó?

Trong trường hợp của tôi, PDF được tạo nhanh chóng, vì vậy nó không thể được tải lên giải pháp của bên thứ ba trước khi xóa nó.


6
Hãy thử pdf2htmlEX: github.com/coolwanglu/pdf2htmlEX
Tezcat

Có một sự so sánh tuyệt vời không chỉ về các giải pháp cụ thể mà cả các chiến lược chung, trên wiki của repo pdf2htmlEX . Ngoài ra, mặc dù tôi đã không thử nó, đây dường như là một ngã ba duy trì.
ShreevatsaR

Câu trả lời:


540

Có lẽ cách tiếp cận tốt nhất là sử dụng thư viện PDF.JS. Đó là trình kết xuất HTML5 / JavaScript thuần cho các tài liệu PDF mà không cần bất kỳ plugin nào của bên thứ ba.

Bản demo trực tuyến: http://mozilla.github.com/pdf.js/web/viewer.html

GitHub: https://github.com/mozilla/pdf.js


12
Như đã lưu ý trong một câu trả lời khác, scribd thực sự sử dụng pdf2swf để chuyển đổi các tệp pdf
Peter Craig

8
Tôi đặc biệt khuyên bạn không nên sử dụng scribd - Tôi vừa thực hiện một thử nghiệm trên một tài liệu cụ thể và trong firefox 4, nó chỉ hiển thị 3 trang đầu tiên, trong khi ở IE9, văn bản hiển thị của nó bị sai - bù một số phần của trang. Vì vậy, về mặt kỹ thuật, nó là lỗi. Ngoài ra, họ mong đợi bạn đăng ký để in hoặc tải xuống tài liệu! Về cơ bản, họ đang lấy các tài liệu miễn phí trước đây và dựng một bức tường xung quanh họ.
frankster

9
Thư viện PDF.js thực sự trông giống như một giải pháp rất tốt, mặc dù bản demo được liên kết không hiển thị nó được nhúng trong một trang (nó chiếm toàn bộ trang). Nhưng nó sử dụng canvas của HMTL5, vì vậy nó rất dễ nhúng và rất nhanh . Về phía bên dưới, phải mất một số js để sử dụng, không giống như <object>: github.com/mozilla/pdf.js/blob/master/examples/helloworld/
Lỗi

33
pdf.js hoạt động kém trên các trình duyệt máy tính bảng như Chrome. Tôi cũng thấy nó rất, rất chậm đối với các tài liệu pdf lớn hơn.
Rocco The Taco

10
Tôi không thể tin rằng điều này đang được khuyến khích. Nhìn vào kết xuất phông chữ trong bản demo trực tuyến, chúng trông lởm chởm và khủng khiếp. Nó trông tốt hơn nhiều với kết xuất pixel phụ khi được mở trong trình đọc adobe.
bay tốc độ

532

Điều này nhanh chóng, dễ dàng, đến mức không cần bất kỳ tập lệnh của bên thứ ba nào:

<embed src="http://example.com/the.pdf" width="500" height="375" 
 type="application/pdf">

CẬP NHẬT (1/2018):

Trình duyệt Chrome trên Android không còn hỗ trợ nhúng PDF. Bạn có thể khắc phục điều này bằng cách sử dụng trình xem Google Drive PDF

<embed src="https://drive.google.com/viewerng/
viewer?embedded=true&url=http://example.com/the.pdf" width="500" height="375">

30
Tốt hơn là sử dụng thẻ <object> để bạn có thể đưa vào dự phòng.
Đồi Jonathon

1
Tôi nghĩ rằng các nhà phát triển sẽ muốn biết Mac / Firefox có một hình ảnh plugin bị hỏng. Trang plugin sẽ không tải plugin mà nó đang tìm kiếm. Bất kỳ ý tưởng làm thế nào để có được xung quanh này?
Tối

63
nếu bạn muốn chắc chắn rằng nó sẽ được hiển thị thay vì tự động tải xuống bản pdf (vì nó rất vui với tôi) hãy thêm type='application/pdf'vào thẻ nhúng
Hassek

32
Sử dụng <object>thẻ tốt hơn vì nó có thể hiển thị nội dung thay thế trong các trình duyệt không thể hiển thị pdf. Thậm chí có thể đặt một <embed>thẻ trong một <object>thẻ nếu bạn muốn. Tham chiếu: stackoverflow.com/questions/1244788/embed-vs-object
Raphael

1
@raphaelcm Thật ra, như tôi đã nói trước đây, chỉ cần sử dụng thẻ nhúng hoạt động trong tất cả các trình duyệt chính. Ngay cả IE 7 & 8.
Batfan

361

Bạn cũng có thể sử dụng trình xem Google PDF cho mục đích này. Theo như tôi biết thì đây không phải là một tính năng chính thức của Google (tôi có sai về điều này không?), Nhưng nó hoạt động với tôi rất độc đáo và trơn tru. Bạn cần tải lên bản PDF của mình ở đâu đó trước đó và chỉ cần sử dụng URL của nó:

<iframe src="http://docs.google.com/gview?url=http://example.com/mypdf.pdf&embedded=true" style="width:718px; height:700px;" frameborder="0"></iframe>

Điều quan trọng là nó không cần trình phát Flash, nó sử dụng JavaScript.


29
Một điều cần được đề cập là có giới hạn trên đối với kích thước của tệp PDF có thể được hiển thị. Tôi nghĩ hiện tại nó là 10MB / 100 trang. Tái bút: Tôi không nghĩ người xem là "không chính thức"; họ thậm chí còn có một trang hướng dẫn xây dựng URL nhúng cho bạn: docs.google.com/viewer
SuperElectric

30
Tùy chọn này hoạt động rất tốt, nhưng bạn phải làm cho các tệp PDF của mình có thể truy cập công khai, mà đối với tôi không phải lúc nào cũng là một tùy chọn.
KoviNET

4
Nếu Và trong trường hợp iframe, nó không tải.
dwenaus

5
Bạn được phép để thiết lập quyền riêng tư của bất kỳ Google Documents giữa public, sign-in requiredprivate. Đây chắc chắn là một tính năng chính thức, xem xét bất kỳ tài liệu nào trên Google Docs đều có embedtùy chọn.
b1nary.atr0phy

6
Một điều khác cần được đề cập là cảnh báo "bạn đã thực hiện quá nhiều yêu cầu gần đây", đó là một hạn chế.
kommradHomer

116

Bạn có một số kiểm soát về cách PDF xuất hiện trong trình duyệt bằng cách chuyển một số tùy chọn trong chuỗi truy vấn. Tôi rất vui khi làm việc này, cho đến khi tôi nhận ra nó không hoạt động trong IE8. :

Nó hoạt động trong Chrome 9 và Firefox 3.6, nhưng trong IE8, nó hiển thị thông báo "Chèn thông báo lỗi của bạn vào đây, nếu PDF không thể được hiển thị."

Mặc dù vậy, tôi chưa thử nghiệm các phiên bản cũ hơn của bất kỳ trình duyệt nào ở trên. Nhưng đây là mã tôi có trong trường hợp nó giúp được bất cứ ai. Điều này đặt thu phóng đến 85%, loại bỏ thanh cuộn, thanh công cụ và bảng điều hướng. Tôi sẽ cập nhật bài viết của mình nếu tôi cũng bắt gặp một cái gì đó hoạt động trong IE.

<object width="400" height="500" type="application/pdf" data="/my_pdf.pdf?#zoom=85&scrollbar=0&toolbar=0&navpanes=0">
    <p>Insert your error message here, if the PDF cannot be displayed.</p>
</object>

6
Đó là giải pháp tốt nhất vì đang sử dụng các khả năng của trình duyệt và không phải là giải pháp phức tạp của bên thứ ba. Trong tất cả các trình duyệt hiện đại (IE9, FF hoặc Chrome) PDF nên được nhúng độc đáo. Xin lỗi cho người dùng IE 6/7. Họ phải nâng cấp. Chúng tôi đã ngừng hỗ trợ các trình duyệt này từ lâu. :(
Adrian P.

2
Không hoạt động trên phiên bản máy tính bảng di động Chrome của tôi..FYI ... thật đáng tiếc, sẽ là một sửa chữa nhanh chóng.
Rocco The Taco

1
+1 để giải quyết các tùy chọn thu phóng và cuộn, tuy nhiên, điều này không hoạt động trong phiên bản Chrome mới nhất (44) ... Không thể tải tài liệu PDF.
NotJay

Có thể thêm một nút đóng? và làm thế nào?
Roberto Sepúlveda Bravo

@RoccoTheTaco Thứ hai, không hoạt động trên chrome di động trên Android
Ẩn danh

66

Sử dụng cả hai <object><embed>sẽ cung cấp cho bạn một phạm vi rộng hơn về khả năng tương thích trình duyệt.

<object data="http://yoursite.com/the.pdf" type="application/pdf" width="750px" height="750px">
    <embed src="http://yoursite.com/the.pdf" type="application/pdf">
        <p>This browser does not support PDFs. Please download the PDF to view it: <a href="http://yoursite.com/the.pdf">Download PDF</a>.</p>
    </embed>
</object>

4
Điều này sẽ không hoạt động trong trình duyệt nếu addon pdf không được cài đặt hoặc hết hạn
Umair Hamid

Ngoài ra, điều này sẽ không xác nhận cho những người liên quan đến xác thực mã.
NotJay

1
Điều này làm việc rất tốt cho tôi, trong khi việc sử dụng embedthẻ tự nó đã được unsafeChrome và Firefox coi là .
Richie Thomas

1
Vì một số lý do trên Android (chrome), nó không nhúng PDF và thay vào đó cung cấp để tải xuống. Trên iPhone (safari), nó chỉ hiển thị trang đầu tiên của PDF.
Ivan Rubinson

21

Chuyển đổi nó thành PNG thông qua ImageMagick và hiển thị PNG (nhanh và bẩn).

<?php
  $dir = '/absolute/path/to/my/directory/';
  $name = 'myPDF.pdf';
  exec("/bin/convert $dir$name $dir$name.png");
  print '<img src="$dir$name.png" />';
?>

Đây là một lựa chọn tốt nếu bạn cần một giải pháp nhanh chóng, muốn tránh các vấn đề xem PDF trên trình duyệt chéo và nếu PDF chỉ là một hoặc hai trang. Tất nhiên, bạn cần cài đặt ImageMagick (lần lượt cần Ghostscript) trên máy chủ web của bạn, một tùy chọn có thể không khả dụng trong môi trường lưu trữ được chia sẻ. Ngoài ra còn có một plugin PHP (được gọi là fantick) hoạt động như thế này nhưng nó có các yêu cầu đặc biệt của riêng nó.


Hoặc chuyển đổi hình ảnh thành PNG bằng một ứng dụng, chẳng hạn như Xem trước trên Mac.
Garrett

2
Nhưng bạn có thể làm điều đó theo chương trình?
Dan Mantyla

Nếu tài liệu có nhiều hơn 1 trang thì sao? Tôi đoán bạn sẽ chỉ hiển thị trang đầu tiên sau đó
seb

@seb đã được một lúc nhưng tôi đã có thể sử dụng nó trên các tệp PDF dài 2 hoặc 3 trang. Sẽ không khôn ngoan khi đi lớn hơn thế nhiều, tôi nghĩ rằng các trình duyệt di động có một thời gian khó hiển thị hình ảnh như thế. Đây là lý do tại sao tôi gọi nó là phương pháp "nhanh và bẩn", nhưng nó là một phương pháp tốt mà tôi nghĩ miễn là bản PDF không quá một vài trang.
Dan Mantyla

1
Nếu bạn mở tệp PDF bằng thư viện zend thì bạn có thể thực hiện foreach($pdf->pages as $page)và tạo một hình ảnh cho mỗi trang
99 Vấn đề - Cú pháp không phải là một

19

Hãy xem mã này - Để nhúng PDF vào HTML

<!-- Embed PDF File -->
<object data="YourFile.pdf" type="application/x-pdf" title="SamplePdf" width="500" height="720">
    <a href="YourFile.pdf">shree</a> 
</object>

6
Điều này dường như không hoạt động. Tôi luôn luôn kết thúc với một màn hình màu xám trống thay vì pdf. Nhưng chuyển sang srccho data, như trong câu trả lời @ Gayle, làm việc.
Mottie

1
Tôi đang sử dụng Chrome 44 và nó sẽ không hoạt động. Tôi cũng đã thử chuyển đổi dữ liệu sang src.
NotJay

1
gõ = "application / pdf" khắc phục sự cố. Hoạt động tốt trong chrome.
Gavin Simpson

13

FDView kết hợp PDF2SWF (bản thân nó dựa trên xpdf ) với trình xem SWF để bạn có thể chuyển đổi và nhúng các tài liệu PDF một cách nhanh chóng trên máy chủ của mình.

xpdf không phải là một trình chuyển đổi PDF hoàn hảo. Nếu bạn cần kết quả tốt hơn thì Ghostview có một số khả năng chuyển đổi tài liệu PDF sang các định dạng khác mà bạn có thể dễ dàng xây dựng trình xem Flash hơn.

Nhưng đối với các tài liệu PDF đơn giản, FDView nên hoạt động tốt.


FDView có sẵn ở bất cứ nơi nào khác không? code4net.com dường như đã biến mất.
Michael Myers

@Michael Không phải tôi có thể dễ dàng tìm thấy. Tôi sẽ để lại câu trả lời này nếu có cơ hội ai đó sẽ lưu trữ lại fview ở một nơi khác.
Adam Davis

12

Vấn đề của chúng tôi là vì lý do pháp lý, chúng tôi không được phép lưu trữ tạm thời một tệp PDF trên đĩa cứng . Ngoài ra, không nên tải lại toàn bộ trang khi hiển thị PDF dưới dạng Xem trước trong Trình duyệt.

Đầu tiên chúng tôi đã thử PDF.jS. Nó hoạt động với Base64 trong trình xem cho Firefox và Chrome. Tuy nhiên, nó chậm đến mức không thể chấp nhận được đối với bản PDF của chúng tôi. IE / Edge hoàn toàn không hoạt động.

Do đó, chúng tôi đã thử nó với chuỗi Base64 trong thẻ đối tượng HTML. Điều này một lần nữa không hoạt động đối với IE / Edge (có thể là vấn đề tương tự như với PDF.js). Trong Chrome / Firefox / Safari một lần nữa không có vấn đề. Đó là lý do tại sao chúng tôi chọn một giải pháp lai. IE / Edge chúng tôi sử dụng IFrame và cho tất cả các trình duyệt khác thẻ đối tượng.

Giải pháp IFrame tất nhiên cũng sẽ hoạt động cho Chrome và co. Lý do tại sao chúng tôi không sử dụng giải pháp này cho Chrome là vì mặc dù PDF được hiển thị chính xác, Chrome đưa ra yêu cầu mới cho máy chủ ngay khi bạn nhấp vào "tải xuống" trong bản xem trước . PdfHelperTransferData trường ẩn được yêu cầu (để gửi dữ liệu biểu mẫu của chúng tôi cần để tạo PDF) không còn được đặt vì PDF được hiển thị trong IFrame. Đối với tính năng / lỗi này, xemChrome gửi hai yêu cầu khi tải xuống bản PDF (và hủy một trong số chúng) .

Bây giờ vấn đề trẻ em IE9 và IE10 vẫn còn. Đối với những điều này, chúng tôi đã từ bỏ một giải pháp xem trước và chỉ cần gửi tài liệu bằng cách nhấp vào nút xem trước dưới dạng tải xuống cho người dùng (thay vì xem trước). Chúng tôi đã cố gắng rất nhiều nhưng ngay cả khi chúng tôi đã tìm ra giải pháp, nỗ lực thêm cho phần nhỏ người dùng này sẽ không đáng để nỗ lực. Bạn có thể tìm giải pháp của chúng tôi để tải xuống tại đây: Tải xuống PDF mà không cần làm mới với IFrame .

Javascript của chúng tôi:

var transferData = getFormAsJson()
if (isMicrosoftBrowser()) {
        // Case IE / Edge (because doesn't recoginzie Pdf-Base64 use Iframe)
        var form = document.getElementById('pdf-helper-form');
        $("#pdfHelperTransferData").val(transferData);
        form.target = "iframe-pdf-shower";
        form.action = "serverSideFunctonWhichWritesPdfinResponse";
        form.submit();
 } else {
        // Case non IE use Object tag instead of iframe
        $.ajax({
            url: "serverSideFunctonWhichRetrivesPdfAsBase64",
            type: "post",
            data: { downloadHelperTransferData: transferData },
            success: function (result) {
                $("#object-pdf-shower").attr("data", result);
            }
        })
 }

HTML của chúng tôi:

<div id="pdf-helper-hidden-container" style="display:none">
   <form id="pdf-helper-form" method="post">
        <input type="hidden" name="pdfHelperTransferData" id="pdfHelperTransferData" />
   </form>
</div>

<div id="pdf-wrapper" class="modal-content">
    <iframe id="iframe-pdf-shower" name="iframe-pdf-shower"></iframe>
    <object id="object-pdf-shower" type="application/pdf"></object>
</div>

Để kiểm tra loại trình duyệt cho IE / Edge xem tại đây: Làm cách nào tôi có thể phát hiện Internet Explorer (IE) và Microsoft Edge bằng JavaScript? Tôi hy vọng những phát hiện này sẽ tiết kiệm thời gian cho người khác.


Tôi xin lỗi, nhưng tôi không hiểu, loại "transferData" có giá trị gì?
Kate

1
Xin chào @Kate, trong trường hợp của chúng tôi, chúng tôi tạo PDF dựa trên đầu vào của người dùng ở dạng web của chúng tôi. "transferData" chứa dữ liệu được gửi dưới dạng JSON đến hàm tạo PDF trong API web. Tôi đã thêm một dòng mã để làm rõ.
George Maharis

10

Bạn có thể sử dụng vị trí tương đối của pdf đã lưu như thế này:

Ví dụ 1

<embed src="example.pdf" width="1000" height="800" frameborder="0" allowfullscreen>

Ví dụ2

<iframe src="example.pdf" style="width:1000px; height:800px;" frameborder="0" allowfullscreen></iframe>


10
  1. Tạo một thùng chứa để giữ tệp PDF của bạn

    <div id="example1"></div>
  2. Nói cho PDFObject biết nên nhúng PDF nào và nhúng vào đâu

    <script src="/js/pdfobject.js"></script>
    <script>PDFObject.embed("/pdf/sample-3pp.pdf", "#example1");</script>
  3. Bạn có thể tùy ý sử dụng CSS để chỉ định kiểu dáng trực quan, bao gồm kích thước, đường viền, lề, v.v.

    <style>
    .pdfobject-container { height: 500px;}
    .pdfobject { border: 1px solid #666; }
    </style>

nguồn: https://pdfobject.com/


Đây là một giải pháp rất tốt và hoạt động tốt khi kết hợp với kiểu dáng bootstrap. Tất cả đã đi lên trên các yếu tố bootstrap khác.
netfed

Bạn đã thử với tập tin blob? Tôi đã sử dụng cái này với pdf.output('bloburl')lib jspdf nhưng có vẻ như nó không hoạt động trên IE11.
Hoàng Trần Sơn

8

Scribd không còn yêu cầu bạn lưu trữ tài liệu của bạn trên máy chủ của họ. Nếu bạn tạo một tài khoản với họ để bạn có được ID nhà xuất bản. Chỉ mất một vài dòng mã JavaScript để tải lên các tệp PDF được lưu trữ trên máy chủ của riêng bạn.

Để biết thêm chi tiết, xem Công cụ dành cho nhà phát triển .


1
Bạn có thể gửi một liên kết khác cho thấy làm thế nào được thực hiện? Nó không rõ ràng từ liên kết bạn đã đăng.
SuperElectric

Có vẻ như họ đã cập nhật trang web của họ và thay đổi trang này. Tôi nghĩ rằng trang này có nội dung mà tôi đã đề cập trong bài viết gốc của mình: scribd.com/developers/api?method_name=Javascript+API
Bjorn

Tôi ước tôi có thể thích điều này hơn một lần, nó hoạt động hoàn hảo. Cuộn xuống cuối trang web và nhấp vào API để xem các ví dụ.
Rocco The Taco

1
Đăng ký hiện đang đóng cửa cho scribd.
Lance Fisher

4
<object width="400" height="400" data="helloworld.pdf"></object>

4

PdfToImageServlet sử dụng convertlệnh của ImageMagick .

Ví dụ sử dụng: <img src='/webAppDirectory/PdfToImageServlet?pdfFile=/usr/share/cups/data/default-testpage.pdf'>


4

Đây là cách tôi đã làm với AXIOS và Vue.js:

        axios({
            url: `urltoPDFfile.pdf`,
            method: 'GET',
            headers: headers,
            responseType: 'blob'
        })
        .then((response) => {
            this.urlPdf = URL.createObjectURL(response.data)
        })
        .catch((error) => {
            console.log('ERROR   ', error)
        })

thêm urlPDF động vào HTML:

<object width='100%' height='600px' :data='urlPdf' type='application/pdf'></object>

3

Một trong những lựa chọn bạn nên xem xét là PDF đáng chú ý
Nó có gói miễn phí trừ khi bạn dự định thực hiện cộng tác trực tuyến theo thời gian thực trên pdf

Nhúng phần sau iframevào bất kỳ html nào và tận hưởng kết quả:

<iframe width='1000' height='800' src='http://bit.ly/1JxrtjR' frameborder='0' allowfullscreen></iframe>

2

Để truyền tệp đến trình duyệt, hãy xem Câu hỏi về Stack Overflow Cách truyền tệp PDF dưới dạng nhị phân sang trình duyệt bằng .NET 2.0 - lưu ý rằng, với các biến thể nhỏ, điều này sẽ hoạt động cho dù bạn đang phục vụ một tệp từ hệ thống tệp hoặc tự động tạo ra.

Như đã nói, bài viết MSDN được tham chiếu có một cái nhìn khá đơn giản về thế giới, vì vậy bạn có thể muốn đọc thành công Truyền phát PDF sang trình duyệt thông qua HTTPS cũng như một số tiêu đề bạn có thể cần cung cấp.

Sử dụng phương pháp đó, iframe có lẽ là cách tốt nhất để đi. Có một biểu mẫu web truyền phát tệp, sau đó đặt iframe trên một trang khác với srcthuộc tính của nó được đặt thành biểu mẫu đầu tiên.


4
@downvoter quan tâm giải thích lý do tại sao bạn ẩn danh một câu trả lời 10 tuổi?
GalacticCowboy

1
  1. Xây dựng một đốm các byte PDF đầu vào
  2. Sử dụng iframePDF.js được vá bằng cách giải quyết trình duyệt chéo này

URI cho iframe sẽ trông giống như thế này:

/viewer.html?file=blob:19B579EA-5217-41C6-96E4-5D8DF5A5C70B

Bây giờ FF, Chrome, IE 11 và Edge đều hiển thị PDF trong trình xem trong iframe được truyền qua URI blob tiêu chuẩn trong URL.


1

Tôi đã phải xem trước một tệp PDF với React vì vậy sau khi thử một vài thư viện, giải pháp tối ưu của tôi là tìm nạp dữ liệu và thu thập nó.

const pdfBase64 = //fetched from url or generated with jspdf or other library

  <embed
    src={pdfBase64}
    width="500"
    height="375"
    type="application/pdf"
  ></embed>

0

Nếu bạn không muốn tự mình lưu trữ PDF.JS, bạn có thể dùng thử DocDroid . Nó tương tự như trình xem Google Drive PDF nhưng cho phép tùy chỉnh nhãn hiệu.


-7

Tôi thấy điều này hoạt động tốt và trình duyệt xử lý nó trong firefox. Tôi chưa kiểm tra IE ...

<script>window.location='url'</script>

Điều này được cho là để đạt được? Tôi không thể thấy nó trả lời câu hỏi như thế nào.
TRiG

Khi tôi nhúng một tệp PDF vào HTML của mình, tôi thấy cách tốt nhất là có một liên kết đến tài liệu này. chẳng hạn như <a href=" server1.network/trifold_JonesChiro.pdf "target='etric'> Cổng thông tin khách hàng Trifold (mẫu) </a> đôi khi là một câu trả lời rõ ràng để mở một trang và hiển thị pdf vs tring để đặt nó trong html. Nó cũng cho phép pdf duy trì mở trong một tab.
Wynn

Vì vậy, đề nghị của bạn là liên kết, không nhúng? Điều đó tốt, nhưng như một câu trả lời, điều này khá không rõ ràng.
TRiG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.