【问题标题】:Generating PDF for downloading and opening it in new window生成用于下载并在新窗口中打开的 PDF
【发布时间】:2022-12-09 12:08:11
【问题描述】:

我想创建一个 PDF new File(["<body>text<body>"],"application/pdf") 但我想要它没有任何库

与香草 Js

并使用新的 FileReader 获取 base 64 字符串 还尝试了 URL.createObjectURL

它返回一个 URL,但如果我打开它,一段时间后它会自动关闭 另外,如何将数据添加到 pdf 的新文件中 喜欢=>新文件([数据],...)

const file = new File(['<body>Text</body>'] , "app.pdf")
//Or. 
const file = new File(['<body>Text</body>'] , "app.pdf" , {type: 'application/pdf'})

const D = new FileReader()
D.onload = ()=> {console.log(this.result || D.result)}
D.readAsDataURL(file)

或者用 blob

const file = new File(['<body>Text</body>'] , "app.pdf" )
//Or.
const file = new File(['<body>Text</body>'] , "app.pdf" , {type: "application/pdf"})


URL.createObjectURL(file)

【问题讨论】:

  • &lt;body&gt;Text&lt;/body&gt; 不是有效的 PDF。
  • 我知道我已经提到了如何添加数据
  • 向无效 PDF 添加数据不会使其成为有效 PDF
  • 什么无效文件???
  • 我看到他们两个,但第一个..这是关于什么的

标签: javascript pdf blob createobjecturl


【解决方案1】:

要编写 mime 类型文本/pdf,即没有二进制 lib 编码的 pdf,您只需要编写这样的字符串(另存为 text.pdf 以查看其工作原理) 或者右键单击并从 https://github.com/GitHubRulesOK/MyNotes/raw/master/MAKE-PDF.cmd 下载演示 pdf cmd writer

%PDF-1.1
%âãÏÓ
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Kids [3 0 R]/Count 1/MediaBox [0 0 594 792]>>endobj
3 0 obj<</Type/Page/Parent 2 0 R/Resources<</Font<</F1<</Type/Font/Subtype/Type1/BaseFont/Helvetica>>>>>>/Contents 4 0 R>>endobj
4 0 obj<</Length 78
>>
stream

BT /F1 18 Tf 036 740 Td (Body) Tj ET
BT /F1 18 Tf 036 720 Td (Text) Tj ET

endstream 
endobj xref
0 5 
0000000000 65535 f
0000000021 00000 n
0000000065 00000 n
0000000139 00000 n
0000000269 00000 n
trailer<</Root 1 0 R /Size 5>>
startxref
401
%%EOF

或在 iFrame 中使用

&lt;iframe title="testing" type="application/pdf" width="98%" height="98%" src="data:application/pdf;base64,JVBERi0xLjENCiXDosOjw4/Dkw0KMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqDQoyIDAgb2JqPDwvVHlwZS9QYWdlcy9LaWRzIFszIDAgUl0vQ291bnQgMS9NZWRpYUJveCBbMCAwIDU5NCA3OTJdPj5lbmRvYmoNCjMgMCBvYmo8PC9UeXBlL1BhZ2UvUGFyZW50IDIgMCBSL1Jlc291cmNlczw8L0ZvbnQ8PC9GMTw8L1R5cGUvRm9udC9TdWJ0eXBlL1R5cGUxL0Jhc2VGb250L0hlbHZldGljYT4+Pj4+Pi9Db250ZW50cyA0IDAgUj4+ZW5kb2JqDQo0IDAgb2JqPDwvTGVuZ3RoIDc4DQo+Pg0Kc3RyZWFtDQoNCkJUIC9GMSAxOCBUZiAwMzYgNzQwIFRkIChCb2R5KSBUaiBFVA0KQlQgL0YxIDE4IFRmIDAzNiA3MjAgVGQgKFRleHQpIFRqIEVUDQoNCmVuZHN0cmVhbSANCmVuZG9iaiB4cmVmDQowIDUgDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMjEgMDAwMDAgbg0KMDAwMDAwMDA2NSAwMDAwMCBuDQowMDAwMDAwMTM5IDAwMDAwIG4NCjAwMDAwMDAyNjkgMDAwMDAgbg0KdHJhaWxlcjw8L1Jvb3QgMSAwIFIgL1NpemUgNT4+c3RhcnR4cmVmDQo0MDEgJSVFT0YNCg=="&gt;Your browser does not support iFrame&lt;/Iframe&gt;

【讨论】:

  • 我没有得到这个但是为了回复我接受了答案..
  • 您可以在没有 lib 的情况下编写 PDF,但它是劳动密集型的并且不适合 vbs JS python Java 您可以使用 CMD 或 bash 但是为什么二进制文件是两个一分钱。
  • 一句话,开始外部参照,偏移量,和%%EOFaccording to spec 必须在单独的行上。不过,一些 PDF 处理器可能更宽松。
  • @mkl 谢谢我没有正确遵循所有细节,当被几个工具接受时,但会将那个方面添加到我的cmd pdf writer,目的是在每行上连接尽可能多的组件以减少行数!如果不是这样写的话,xfref 表给我带来了几个问题,但大多数读者会毫无怨言地重组以适应。在视觉上更正但不是 base64 变体
猜你喜欢
  • 2015-10-17
  • 2020-04-16
  • 2013-07-18
  • 2012-09-01
  • 1970-01-01
  • 2018-06-02
  • 2014-07-01
  • 2022-06-19
  • 2013-03-07
相关资源
最近更新 更多