tri*_*587 1 html javascript pdf data-uri
我正在制作一个可以预览 PDF 文件的应用程序。嵌入元素embed对于小型 PDF 文件效果很好,但对于较大的 PDF 文件则失败,因为数据 URL 的大小限制。我正在寻找一种使用浏览器的本机 PDF 查看器来查看 PDF 文件但不使用数据 url 的方法。
我的代码目前如下所示:
<script>
function addToCard(input) {
if (input.files.length <= 0) return;
let fileReader = new FileReader();
fileReader.onload = async function () {
pdfCard.src = fileReader.result;
};
fileReader.readAsDataURL(input.files[0]);
}
</script>
<input type=file oninput="addToCard(this)" />
<embed id=pdfCard style="width:100%;height:100%" />
Run Code Online (Sandbox Code Playgroud)
您可以URL.createObjectURL()在 PDF 上使用。它还创建一个代表该对象的 URL;然而,对象 URL 和数据 URL 之间的区别在于,数据 URL 包含对象本身,而对象 URL 是对存储在内存中的对象的引用。这意味着对象 URL 比数据 URL 短得多,并且创建时间更短。
这种方法有两个缺点,可能会阻止您使用它。首先,对象 URL 只能在创建它的页面上工作。尝试在不同页面上使用对象 URL是行不通的。如果您需要在创建该 URL 的页面以外的任何地方访问此 URL,则此方法将不起作用。
第二个是对象 URL 将为其创建的对象保存在内存中。当你使用完该URL.revokeObjectURL()方法后,你必须撤销该对象 URL,否则会导致内存泄漏。这意味着您可能需要添加一些额外的代码,以便在加载 PDF 后撤销对象 URL。这个例子可能会有帮助。
实现可能看起来像这样:
function addToCard(input) {
if (input.files.length <= 0) return;
pdfCard.src = URL.createObjectURL(input.files[0])
// gonna have to call revokeObjectURL eventually...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1423 次 |
| 最近记录: |