วิธีที่แนะนำในการฝัง PDF ใน HTML คืออะไร?
- iFrame?
- วัตถุ?
- ฝัง?
Adobe บอกตัวเองเกี่ยวกับเรื่องนี้อย่างไร
ในกรณีของฉัน PDF ถูกสร้างขึ้นทันทีดังนั้นจึงไม่สามารถอัปโหลดไปยังโซลูชันของบุคคลที่สามก่อนที่จะล้างข้อมูล
วิธีที่แนะนำในการฝัง PDF ใน HTML คืออะไร?
Adobe บอกตัวเองเกี่ยวกับเรื่องนี้อย่างไร
ในกรณีของฉัน PDF ถูกสร้างขึ้นทันทีดังนั้นจึงไม่สามารถอัปโหลดไปยังโซลูชันของบุคคลที่สามก่อนที่จะล้างข้อมูล
คำตอบ:
อาจเป็นวิธีที่ดีที่สุดคือการใช้ห้องสมุดPDF.JS มันเป็นตัวเรนเดอร์HTML5 / JavaScriptบริสุทธิ์สำหรับเอกสาร PDF ที่ไม่มีปลั๊กอินของบุคคลที่สาม
การสาธิตออนไลน์: http://mozilla.github.com/pdf.js/web/viewer.html
<object>
: github.com/mozilla/pdf.js/blob/master/examples/helloworld/…
สิ่งนี้รวดเร็วง่ายตรงประเด็นและไม่ต้องการสคริปต์บุคคลที่สาม:
<embed src="http://example.com/the.pdf" width="500" height="375"
type="application/pdf">
อัปเดต (1/2018):
เบราว์เซอร์ Chrome บน Android ไม่รองรับการฝัง PDF อีกต่อไป คุณสามารถแก้ไขปัญหานี้ได้โดยใช้โปรแกรมดู PDF ของ Google Drive
<embed src="https://drive.google.com/viewerng/
viewer?embedded=true&url=http://example.com/the.pdf" width="500" height="375">
type='application/pdf'
ในแท็กฝัง
<object>
แท็กเพราะสามารถแสดงเนื้อหาทางเลือกในเบราว์เซอร์ที่ไม่สามารถแสดงไฟล์ PDF ได้ สามารถใส่<embed>
แท็กใน<object>
แท็กได้หากต้องการ Ref: stackoverflow.com/questions/1244788/embed-vs-object
คุณสามารถใช้โปรแกรมดู PDF ของ Google เพื่อจุดประสงค์นี้ เท่าที่ฉันรู้ว่ามันไม่ใช่คุณลักษณะของ Google อย่างเป็นทางการ (ฉันทำผิดในเรื่องนี้หรือไม่) แต่มันก็ใช้งานได้ดีและราบรื่นสำหรับฉัน คุณต้องอัปโหลด PDF ของคุณก่อนและใช้ URL ของมัน:
<iframe src="http://docs.google.com/gview?url=http://example.com/mypdf.pdf&embedded=true" style="width:718px; height:700px;" frameborder="0"></iframe>
สิ่งสำคัญคือมันไม่จำเป็นต้องใช้โปรแกรมเล่นแฟลชมันใช้ JavaScript
public
, และsign-in required
private
มันเป็นคุณสมบัติที่เป็นทางการแน่นอนเมื่อพิจารณาเอกสารใด ๆ ใน Google เอกสารมีembed
ตัวเลือก
คุณสามารถควบคุมวิธีการที่ PDF ปรากฏในเบราว์เซอร์โดยส่งตัวเลือกบางอย่างในสตริงการสืบค้น ฉันมีความสุขกับการทำงานนี้จนกระทั่งฉันรู้ว่ามันไม่ทำงานใน IE8 :(
ใช้งานได้ใน Chrome 9 และ Firefox 3.6 แต่ใน IE8 จะแสดงข้อความ "ใส่ข้อความแสดงข้อผิดพลาดของคุณที่นี่หาก PDF ไม่สามารถแสดงได้"
แม้ว่าฉันยังไม่ได้ทดสอบเบราว์เซอร์รุ่นเก่ากว่าใด ๆ ก็ตาม แต่นี่คือรหัสที่ฉันมีอยู่ในกรณีที่มันช่วยใครก็ได้ ตั้งค่าการซูมเป็น 85% ลบแถบเลื่อนแถบเครื่องมือและบานหน้าต่างนำทาง ฉันจะอัปเดตโพสต์ของฉันหากพบสิ่งที่ใช้งานได้ใน 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>
การใช้ทั้งสองอย่าง<object>
และ<embed>
จะทำให้คุณสามารถใช้งานร่วมกับเบราว์เซอร์ได้กว้างขึ้น
<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
แท็กด้วยตัวเองถือว่าเป็นunsafe
Chrome และ Firefox
แปลงเป็น PNG ผ่าน ImageMagick และแสดง PNG (รวดเร็วและสกปรก)
<?php
$dir = '/absolute/path/to/my/directory/';
$name = 'myPDF.pdf';
exec("/bin/convert $dir$name $dir$name.png");
print '<img src="$dir$name.png" />';
?>
นี่เป็นตัวเลือกที่ดีหากคุณต้องการวิธีแก้ปัญหาอย่างรวดเร็วต้องการหลีกเลี่ยงปัญหาการดู PDF ข้ามเบราว์เซอร์และหาก PDF เป็นเพียงหน้าเดียวหรือสองหน้า แน่นอนว่าคุณต้องติดตั้ง ImageMagick (ซึ่งจำเป็นต้องใช้ Ghostscript) บนเว็บเซิร์ฟเวอร์ของคุณซึ่งเป็นตัวเลือกที่อาจไม่สามารถใช้งานได้ในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกัน นอกจากนี้ยังมีปลั๊กอิน PHP (เรียกว่า Imagick) ที่ผลงานเช่นนี้แต่มันก็มีมันเป็นความต้องการพิเศษของตัวเอง
foreach($pdf->pages as $page)
และสร้างภาพสำหรับแต่ละหน้า
ดูรหัสนี้เพื่อฝัง PDF ใน 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
สำหรับdata
ในขณะที่ @ คำตอบแกรีไม่ทำงาน
FDViewรวมPDF2SWF (ซึ่งตัวเองเป็นพื้นฐานของxpdf ) กับโปรแกรมดูSWFเพื่อให้คุณสามารถแปลงและฝังเอกสาร PDF ได้ทันทีบนเซิร์ฟเวอร์ของคุณ
xpdf ไม่ใช่โปรแกรมแปลง PDF ที่สมบูรณ์แบบ หากคุณต้องการผลลัพธ์ที่ดีกว่าGhostviewมีความสามารถในการแปลงเอกสาร PDF เป็นรูปแบบอื่นซึ่งคุณสามารถสร้าง Flash Viewer ได้ง่ายขึ้น
แต่สำหรับเอกสาร PDF อย่างง่าย FDView ควรทำงานได้ดีพอสมควร
ปัญหาของเราคือว่าด้วยเหตุผลทางกฎหมายเราจะไม่ได้รับอนุญาตในการจัดเก็บชั่วคราวไฟล์ PDF บนฮาร์ดดิสก์ นอกจากนี้ไม่ควรโหลดหน้าทั้งหมดอีกครั้งเมื่อแสดง PDF เป็นตัวอย่างในเบราว์เซอร์
ก่อนอื่นเราลอง PDF.jS มันทำงานร่วมกับ Base64 ในโปรแกรมดูสำหรับ Firefox และ Chrome อย่างไรก็ตาม PDF ของเราช้าเกินไปจนไม่สามารถยอมรับได้ IE / Edge ไม่ทำงานเลย
เราจึงลองกับสตริง Base64 ในแท็กวัตถุ HTML สิ่งนี้ไม่ทำงานสำหรับ IE / Edge (อาจเป็นปัญหาเดียวกับ PDF.js) ใน Chrome / Firefox / Safari อีกครั้งไม่มีปัญหา นั่นเป็นเหตุผลที่เราเลือกโซลูชันไฮบริด IE / Edge เราใช้ IFrame และสำหรับเบราว์เซอร์อื่น ๆ ทั้งหมดนั้นคือ object-tag
แน่นอนว่าโซลูชัน IFrame จะใช้งานได้กับ Chrome และ บริษัท ร่วมด้วยเช่นกัน เหตุผลที่ว่าทำไมเราไม่ได้ใช้วิธีนี้สำหรับ Chrome คือแม้ว่ารูปแบบไฟล์ PDF จะปรากฏขึ้นอย่างถูกต้องChrome ทำให้คำขอใหม่ไปยังเซิร์ฟเวอร์เร็วที่สุดเท่าที่คุณคลิกที่ "ดาวน์โหลด" ในหน้าตัวอย่าง pdfHelperTransferData ที่ซ่อนอยู่ในฟิลด์ที่ต้องการ (สำหรับการส่งข้อมูลแบบฟอร์มของเราที่จำเป็นสำหรับการสร้าง PDF) ไม่ได้ถูกตั้งค่าอีกต่อไปเนื่องจาก PDF แสดงใน IFrame สำหรับคุณสมบัติ / ข้อผิดพลาดนี้ดูChrome จะส่งคำขอสองเมื่อดาวน์โหลดไฟล์ PDF (และยกเลิกการหนึ่งของพวกเขา)
ตอนนี้ปัญหาลูกหลาน IE9 และ IE10 ยังคงอยู่ สำหรับสิ่งเหล่านี้เราได้แก้ปัญหาตัวอย่างและเพียงแค่ส่งเอกสารโดยคลิกที่ปุ่มแสดงตัวอย่างเป็นการดาวน์โหลดไปยังผู้ใช้ (แทนที่จะเป็นตัวอย่าง) เราพยายามอย่างมาก แต่ถึงแม้ว่าเราจะได้พบวิธีแก้ปัญหาความพยายามพิเศษสำหรับส่วนเล็ก ๆ ของผู้ใช้จะไม่คุ้มค่ากับความพยายาม คุณสามารถหาวิธีการแก้ปัญหาของเราสำหรับการดาวน์โหลดที่นี่: ดาวน์โหลดไฟล์ PDF โดยไม่ต้องรีเฟรชกับ IFrame
Javascript ของเรา:
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 ของเรา:
<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>
วิธีตรวจสอบประเภทเบราว์เซอร์สำหรับ IE / Edge ดูที่นี่: ฉันจะตรวจสอบ Internet Explorer (IE) และ Microsoft Edge ได้โดยใช้ JavaScript ได้อย่างไร ฉันหวังว่าการค้นพบเหล่านี้จะช่วยคนอื่นได้ตลอดเวลา
สร้างคอนเทนเนอร์เพื่อเก็บ PDF ของคุณ
<div id="example1"></div>
บอกPDFObjectที่ PDF จะฝังและตำแหน่งที่จะฝัง
<script src="/js/pdfobject.js"></script>
<script>PDFObject.embed("/pdf/sample-3pp.pdf", "#example1");</script>
คุณสามารถเลือกใช้ CSS เพื่อระบุสไตล์การมองเห็นรวมถึงมิติเส้นขอบระยะขอบ ฯลฯ
<style>
.pdfobject-container { height: 500px;}
.pdfobject { border: 1px solid #666; }
</style>
แหล่งที่มา: https://pdfobject.com/
pdf.output('bloburl')
จาก lib jspdf แต่ดูเหมือนว่าจะไม่ทำงานบน IE11
คุณสามารถใช้ตำแหน่งสัมพัทธ์ของไฟล์ PDF ที่บันทึกไว้เช่นนี้:
example1
<embed src="example.pdf" width="1000" height="800" frameborder="0" allowfullscreen>
example2
<iframe src="example.pdf" style="width:1000px; height:800px;" frameborder="0" allowfullscreen></iframe>
Scribd ไม่ต้องการให้คุณโฮสต์เอกสารบนเซิร์ฟเวอร์อีกต่อไป หากคุณสร้างบัญชีกับพวกเขาเพื่อให้คุณได้รับรหัสผู้เผยแพร่ ใช้รหัส JavaScript สองสามบรรทัดเพื่อโหลดไฟล์ PDF ที่เก็บไว้ในเซิร์ฟเวอร์ของคุณเอง
<object width="400" height="400" data="helloworld.pdf"></object>
PdfToImageServletโดยใช้convert
คำสั่งของ ImageMagick
ตัวอย่างการใช้งาน:
<img src='/webAppDirectory/PdfToImageServlet?pdfFile=/usr/share/cups/data/default-testpage.pdf'>
นี่คือวิธีที่ฉันทำกับAXIOSและ 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)
})
เพิ่ม urlPDF แบบไดนามิกไปยัง HTML:
<object width='100%' height='600px' :data='urlPdf' type='application/pdf'></object>
หนึ่งในตัวเลือกที่คุณควรพิจารณาคือNotable PDF
มันมีแผนฟรียกเว้นว่าคุณกำลังวางแผนที่จะทำงานร่วมกันแบบเรียลไทม์บน pdf
ฝังสิ่งต่อไปนี้iframe
ใน html ใด ๆ และเพลิดเพลินไปกับผลลัพธ์:
<iframe width='1000' height='800' src='http://bit.ly/1JxrtjR' frameborder='0' allowfullscreen></iframe>
ในการสตรีมไฟล์ไปยังเบราว์เซอร์โปรดดูคำถามเกี่ยวกับสแต็คโอเวอร์โฟลว์วิธีสตรีมไฟล์ PDF เป็นไบนารี่ไปยังเบราว์เซอร์โดยใช้. NET 2.0 - โปรดทราบว่าหากมีการเปลี่ยนแปลงเล็กน้อย หรือสร้างขึ้นแบบไดนามิก
จากที่กล่าวมาบทความ MSDN ที่อ้างถึงนั้นมีมุมมองที่ค่อนข้างเรียบง่ายของโลกดังนั้นคุณอาจต้องการอ่านสตรีม PDF ไปยังเบราว์เซอร์ผ่าน HTTPS ได้อย่างประสบความสำเร็จรวมถึงส่วนหัวบางส่วนที่คุณต้องจัดหา
การใช้วิธีการนี้ iframe น่าจะเป็นวิธีที่ดีที่สุด มีเว็บฟอร์มหนึ่งรายการที่สตรีมไฟล์จากนั้นวาง iframe ไว้ในอีกหน้าพร้อมกับsrc
ตั้งค่าแอตทริบิวต์เป็นแบบฟอร์มแรก
URI สำหรับ iframe ควรมีลักษณะดังนี้:
/viewer.html?file=blob:19B579EA-5217-41C6-96E4-5D8DF5A5C70B
ตอนนี้ FF, Chrome, IE 11 และ Edge ทั้งหมดจะแสดง PDF ในวิวเวอร์ใน iframe ที่ส่งผ่าน URI หยดมาตรฐานใน URL
หากคุณไม่ต้องการโฮสต์ PDF.JS ด้วยตัวคุณเองคุณสามารถลองใช้DocDroidได้ มันคล้ายกับโปรแกรมดู PDF ของ Google ไดรฟ์ แต่อนุญาตให้ใช้แบรนด์กำหนดเองได้
ฉันต้องดูตัวอย่าง PDF ด้วย React ดังนั้นหลังจากลองใช้ไลบรารีหลาย ๆ ตัวโซลูชันที่ดีที่สุดของฉันคือดึงข้อมูลและเอามันออกมา
const pdfBase64 = //fetched from url or generated with jspdf or other library
<embed
src={pdfBase64}
width="500"
height="375"
type="application/pdf"
></embed>
ฉันพบว่ามันใช้งานได้ดีและเบราว์เซอร์จัดการกับมันใน Firefox ฉันยังไม่ได้ตรวจสอบ IE ...
<script>window.location='url'</script>