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ó.
Cách được đề xuất để nhúng PDF trong HTML là gì?
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ó.
Câu trả lời:
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
<object>
: github.com/mozilla/pdf.js/blob/master/examples/helloworld/
Đ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">
type='application/pdf'
vào thẻ nhú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
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.
public
, sign-in required
và private
. Đâ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ó embed
tùy chọn.
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>
Sử dụng cả hai <object>
và <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>
embed
thẻ tự nó đã được unsafe
Chrome và Firefox coi là .
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ó.
foreach($pdf->pages as $page)
và tạo một hình ảnh cho mỗi trang
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>
src
cho data
, như trong câu trả lời @ Gayle, làm việc.
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.
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.
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>
Tạo một thùng chứa để giữ tệp PDF của bạn
<div id="example1"></div>
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>
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/
pdf.output('bloburl')
lib jspdf nhưng có vẻ như nó không hoạt động trên IE11.
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 .
PdfToImageServlet sử dụng convert
lệnh của ImageMagick .
Ví dụ sử dụng:
<img src='/webAppDirectory/PdfToImageServlet?pdfFile=/usr/share/cups/data/default-testpage.pdf'>
Đâ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>
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 iframe
và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>
Để 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 src
thuộc tính của nó được đặt thành biểu mẫu đầu tiên.
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.
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>
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>