繁体   English   中英

如何从任何 Base64 字符串创建 PDF 文件?

[英]How to create a PDF file from any Base64 string?

我想将任何 Base64 字符串输入到 function 并从那里获取 PDF。 所以试过这种方式,它下载了PDF但是有错误

“无法加载 PDF 文档。”

这是我尝试过的方式

let data = "SGVsbG8gd29ybGQ=" //hello world

 var bufferArray = this.base64ToArrayBuffer(data);


    var binary_string = window.atob(data)
    var len = bufferArray.length;
    var bytes = new Uint8Array(len);

    for (var i = 0; i < len; i++) {
        bytes[i] = binary_string.charCodeAt(i);
    }

    let blob = new Blob([bytes.buffer], { type: 'application/pdf' })
  
    var url = URL.createObjectURL(blob);
  
    window.open(url);


 //convert base64 string to arraybuffer
 base64ToArrayBuffer(data) {
    var bString = window.atob(data);
    var bLength = bString.length;
    var bytes = new Uint8Array(bLength);
    for (var i = 0; i < bLength; i++) {
        var ascii = bString.charCodeAt(i);
        bytes[i] = ascii;
    }
    return bytes;
};

Base64 不是 pdf 所以 hello.b64 永远不会变成 hello.pdf

它需要一个 pdf header 页面和十进制字节的尾部,这些不能轻易添加为 base64 object 包装太多变量。

text/pdf 需要小心的脚本作为文本来环绕 hello 文本,请参见 hello 示例https://stackoverflow.com/a/70748286/10802527

So as Base64 for example JVBER i0xLjIgDQo5IDAgb2JqDQo8PA0KPj4NCnN0cmVhbQ0KQlQvIDMyIFRmKCAg SGVsbG8gV29ybGQgICAp JyBFVA0KZW5kc3RyZWFtDQplbmRvYmoNCjQgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCA1IDAgUg0KL0NvbnRlbnRzIDkgMCBSDQo+Pg0KZW5kb2JqDQo1IDAgb2JqDQo8PA0KL0tpZHMgWzQgMCBSIF0NCi9Db3VudCAxDQovVHlwZSAvUGFnZXMNCi9NZWRpYUJveCBbIDAgMCAyNTAgNTAgXQ0KPj4NCmVuZG9iag0KMyAwIG9iag0KPDwNCi9QYWdlcyA1IDAgUg0KL1R5cGUgL0NhdGFsb2cNCj4+DQplbmRvYmoNCnRyYWlsZXINCjw8DQovUm9vdCAzIDAgUg0KPj4NCiUlRU9G

 <iframe type="application/pdf" width="95%" height=150 src="data:application/pdf;base64,JVBERi0xLjIgDQo5IDAgb2JqDQo8PA0KPj4NCnN0cmVhbQ0KQlQvIDMyIFRmKCAgSGVsbG8gV29ybGQgICApJyBFVA0KZW5kc3RyZWFtDQplbmRvYmoNCjQgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCA1IDAgUg0KL0NvbnRlbnRzIDkgMCBSDQo+Pg0KZW5kb2JqDQo1IDAgb2JqDQo8PA0KL0tpZHMgWzQgMCBSIF0NCi9Db3VudCAxDQovVHlwZSAvUGFnZXMNCi9NZWRpYUJveCBbIDAgMCAyNTAgNTAgXQ0KPj4NCmVuZG9iag0KMyAwIG9iag0KPDwNCi9QYWdlcyA1IDAgUg0KL1R5cGUgL0NhdGFsb2cNCj4+DQplbmRvYmoNCnRyYWlsZXINCjw8DQovUm9vdCAzIDAgUg0KPj4NCiUlRU9G">frame</iframe>

尝试上面的方法,但可能会被安全阻止它对某些用户来说看起来像这样,但不是全部!

在此处输入图像描述 在此处输入图像描述

在评论中,您询问了如何在 java 脚本中操作文本,而我的标准答案是 java 脚本通常不能轻易用于构建 PDF 或编辑 Base64 内容。 但是,如果您已经准备好占位符,则可以通过查找和替换来更改它。 但必须小心完成,因为总文件长度不应更改。

举个例子,把上面的作为先验模板,把内容切换到。

JVBERi0xLjIgDQo5IDAgb2JqDQo8PA0KPj4NCnN0cmVhbQ0KQlQvIDMyIFRmKCAg RmFyZS10aGVlLXdlbGwp JyBFVA0KZW5kc3RyZWFtDQplbmRvYmoNCjQgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCA1IDAgUg0KL0NvbnRlbnRzIDkgMCBSDQo+Pg0KZW5kb2JqDQo1IDAgb2JqDQo8PA0KL0tpZHMgWzQgMCBSIF0NCi9Db3VudCAxDQovVHlwZSAvUGFnZXMNCi9NZWRpYUJveCBbIDAgMCAyNTAgNTAgXQ0KPj4NCmVuZG9iag0KMyAwIG9iag0KPDwNCi9QYWdlcyA1IDAgUg0KL1R5cGUgL0NhdGFsb2cNCj4+DQplbmRvYmoNCnRyYWlsZXINCjw8DQovUm9vdCAzIDAgUg0KPj4NCiUlRU9G

因此,通过查找 SGVsbG8gV29ybGQgICAP 并将其替换为SGVsbG8gV29ybGQgICAp ,我们得到一个文本更改RmFyZS10aGVlLXdlbGwp重要的是字符串长度是 4 的倍数并且长度相同)

 <iframe type="application/pdf" width="95%" height=150 src="data:application/pdf;base64,JVBERi0xLjIgDQo5IDAgb2JqDQo8PA0KPj4NCnN0cmVhbQ0KQlQvIDMyIFRmKCAgRmFyZS10aGVlLXdlbGwpJyBFVA0KZW5kc3RyZWFtDQplbmRvYmoNCjQgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCA1IDAgUg0KL0NvbnRlbnRzIDkgMCBSDQo+Pg0KZW5kb2JqDQo1IDAgb2JqDQo8PA0KL0tpZHMgWzQgMCBSIF0NCi9Db3VudCAxDQovVHlwZSAvUGFnZXMNCi9NZWRpYUJveCBbIDAgMCAyNTAgNTAgXQ0KPj4NCmVuZG9iag0KMyAwIG9iag0KPDwNCi9QYWdlcyA1IDAgUg0KL1R5cGUgL0NhdGFsb2cNCj4+DQplbmRvYmoNCnRyYWlsZXINCjw8DQovUm9vdCAzIDAgUg0KPj4NCiUlRU9G">frame</iframe>

结果是

在此处输入图像描述

使用此方法时必须遵循严格的规则:-
Hello World )是模板,注意在)限制之前包含空格
Fare-thee-well)在这种情况下是允许替换的
因此必须预先计划源字段足够大以进行最大的替换,并且基于 3 的倍数的纯文本长度(匹配 base64 块 4)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM