Data URI Hash Parameters (Hide PDF toolbar for data URI)

时间:2016-02-12 20:02:53

标签: html pdf data-uri

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.

PDF toolbar example

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. :)

4 个答案:

答案 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查看器中隐藏工具栏,如下所示-

  • data:application / pdf;#toolbar = 0; base64