H5移动端加载预览pdf文件——demo
前言:正常情况下需要在HTML中嵌入本地docx或pdf文件时,我们会有以下解决办法:
1. 使用<iframe>标签
2. 使用<embed>标签
3. 使用<object>标签
4. 使用第三方库(如PDF.js)
当实际操作时,会发现前三种方式在pc端支持,但在移动端不支持,因为这些标签在移动端浏览器中的支持并不统一。
为了兼容移动端,我使用了第4种方案解决,当然网上很多教程咯~
随便找了一个ppt,放入html中使用第三方插件后展示的效果如下:

完整代码如下:
<!DOCTYPE html>
<html>
<head>
<title>移动端引入pdf</title>
<style>
* {
margin: 0;
padding: 0;
}
.pdf_box,
#pdf-container {
width: 100vw;
height: 100vh;
overflow: scroll;
}
canvas {
width: 100vw;
}
</style>
</head>
<body>
<!-- <iframe src="test.pdf" class="pdf_box"></iframe>
<embed src="test.pdf" class="pdf_box">
<object data="test.pdf" class="pdf_box"></object> -->
<div id="pdf-container"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.js"></script>
<script>
pdfjsLib.GlobalWorkerOptions.workerSrc =
"https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.worker.js";
const pdfUrl = "test.pdf",
_targetDom = "pdf-container";
pdfjsLib.getDocument("test.pdf").promise.then(async (doc) => {
let _i = 0;
for (let item of new Array(doc.numPages).fill()) {
await renderOtherPage(doc, ++_i, _targetDom);
}
});
function renderOtherPage(pdfDoc, pageNumber) {
return new Promise((resolve) => {
pdfDoc.getPage(pageNumber).then((page) => {
const scale = 1;
const viewport = page.getViewport({ scale: scale });
const canvas = document.createElement("canvas");
const context = canvas.getContext("2d");
canvas.height = viewport.height;
canvas.width = viewport.width;
document.getElementById(_targetDom).appendChild(canvas);
const renderContext = {
canvasContext: context,
viewport: viewport,
};
page.render(renderContext);
resolve();
});
});
}
</script>
</body>
</html>
未来的我会感谢现在努力的自己。

浙公网安备 33010602011771号