I have a PDF base64 encode data URI.
eg:
return <object data="data:application/pdf;base64,JVBERi0xLjMKJf////8KOCAwIG9...VmCjI0MTU4OAolJUVPRgo=" type="application/pdf"></object>
I am able to embed it in the page without any problem. However, by default browsers include a toolbar in the PDF.
It seems like the only way to disable this toolbar is to include some hash parameters at the end of the url.
eg.
<object data="path/to/file.pdf#toolbar=0&navpanes=0&scrollbar=0" type="application/pdf"></object>
Which works fine if the PDF is accessed through a relative path or URL, but I cant figure out a way to make this work with a data URI.
Is there any way to include these hash parameters at the end of a URI?
Or does anyone know some way to hide this toolbar some other way?
Any help is greatly appreciated. Thanks in advance. :)
答案 0 :(得分:5)
像kolin所说,没有办法直接发送带有数据URI的查询字符串。但是,您可以将数据URI切换为blob URL并在其中传递参数。
只需获取base64数据并将其转换为pdf blob,如下所示:
function b64toBlob(b64Data, contentType) {
var byteCharacters = atob(b64Data)
var byteArrays = []
for (let offset = 0; offset < byteCharacters.length; offset += 512) {
var slice = byteCharacters.slice(offset, offset + 512),
byteNumbers = new Array(slice.length)
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i)
}
var byteArray = new Uint8Array(byteNumbers)
byteArrays.push(byteArray)
}
var blob = new Blob(byteArrays, { type: contentType })
return blob}
然后使用createObjectURL方法创建一个可以放置查询字符串的URL,如下所示:
URL.createObjectURL(b64toBlob(data.buffer.data, 'application/pdf')) + '#toolbar=0&navpanes=0&scrollbar=0'
将对象的数据属性设置为结果字符串,然后就可以了。
答案 1 :(得分:4)
我自己在这里处于相同的位置,并且不幸地看着
https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs
声明(#34;常见问题&#34;):
不支持查询字符串等 数据URI的数据部分是不透明的,因此尝试使用带有数据URI的查询字符串(特定于页面的参数,带有语法?parameter-data)将只包含URI表示的数据中的查询字符串。 / p>
似乎表明这是不可能的。
如果您试图阻止打印PDF,并且可以访问生成它的代码(例如iText),您可以使用类似于(加密文档)的代码以编程方式禁用打印按钮
.mine
然而,这不会阻止文档能够保存。 (见: http://developers.itextpdf.com/question/how-disable-save-button-and-hide-menu-bar-adobe-reader)
能够将参数传递给嵌入(或对象)元素会很好,但是哼哼。
答案 2 :(得分:1)
昨天我也遇到了类似问题并找到了可行的解决方案。当您在URI中使用base64并尝试设置默认行为none(#toolbar = 0&amp; navpanes = 0&amp; scrollbar = 0&amp;)时,src无法检测以&#39;#&#39;开头的边界。你可以用data:application/pdf;#toolbar=0&navpanes=0&scrollbar=0&;base64,your_base64_string
得到想要的结果。
根据您的代码,您可以像这样返回:
return <object data="data:application/pdf;#toolbar=0&navpanes=0&scrollbar=0&;base64,JVBERi0xLjMKJf////8KOCAwIG9...VmCjI0MTU4OAolJUVPRgo=" type="application/pdf"></object>
我希望这可以帮助你和其他人。
答案 3 :(得分:0)
您只需要在“ data:application / pdf;”之后的数据网址中添加“#toolbar = 0&”标签,以从pdf查看器中隐藏工具栏,如下所示-