gpt4 book ai didi

pdf - 如何将 PostScript XObject 添加到 PDF?

转载 作者:行者123 更新时间:2023-12-05 00:24:03 26 4
gpt4 key购买 nike

我正在演示一个我一直在玩的想法,虽然 Adob​​e 规范说包括 PS XObjects 不是一个好主意,但一些 PDF 阅读器应该仍然支持这个功能。无论如何,这与事实不符。我一直在使用 Adob​​e PDF 规范并拥有以下 PDF 对象。这只是使用 PostScript 生成一个伪随机值,然后将其打印到页面上。理想情况下,每次呈现此页面时都应显示一个新值:

5 0 obj
<< /Type/XObject
/Subtype/PS
/Length 103
>>
stream
/Times findfont 10 scalefont setfont
/str 32 string def
10 20 moveto
rand str cvs show
endstream
endobj

每次我测试过的任何 PDF 查看器读取这个对象时,我都会收到错误,例如:“错误(741):缺少 'endstream'” 并且对于该流中的每个标记也是如此。我确定我的偏移量是正确的。虽然我知道我的 PDF 查看器确实支持表单等的一些 PS,但是否有任何明显不正确的地方。如果有人有我可以引用的示例 PDF,那就太好了。我测试我的读者的表单示例并没有太大帮助。如果我只从 GhostView 运行 PS 代码,它就可以正常工作。感谢您的任何见解。

最佳答案

我已经搜索了我的 PDF 文件集,并提出了 2 个包含 PS XObjects 的文件(这确实已被弃用)。不幸的是,我无法共享 tehm,因为它们是客户数据文件 :-(

但是,这是其中之一的摘录:

74 0 obj
<<
/Type /XObject
/Subtype /PS
/Filter /FlateDecode
/Length 77 0 R
/Name /Ps1
>>
stream
....endstream

注 1,数据结尾和“endstream”标记之间没有 EOL。
77 0 obj
4480
endobj

'stream' 标记后面的 0x0A 的偏移量为 0xdab15,endstream 中 'e' 的偏移量为 0xdbc96。那是 4481 个字节。所以在我看来,/Length 应该包含“流”标记的 EOL 之后的所有字节,直到结束流标记中“e”之前的最后一个字节。

我认为在流数据之后和结束流之前插入一个 0x0A 是可以的。这将归结为 token 之前的流数据之后的空格,并且 PDF 应该可以容忍空格。

这与表 3.4(1.7 PDF 引用的第 62 页)中流字典的/Length 条目的描述一致:

The number of bytes from the beginning of the line fol-lowing the keyword stream to the last byte just before the keyword endstream. (There may be an additional EOL marker, preceding endstream, that is not included in the count and is not logically part of the stream data.) See “Stream Extent,” above, for further discussion.



我认为(如果我计算正确的话)您示例中的/Length 应该是 87,假设 PostScript 片段中有一个字节的行终止符。

关于pdf - 如何将 PostScript XObject 添加到 PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5690370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com