当前位置: 首页 > 面试题库 >

如何生成可在文档查看器中使用的纯文本源代码PDF示例?

卫俊誉
2023-03-14
问题内容

我刚刚发现规范中的文章Adobe论坛:简单文本字符串示例已损坏。,因此我对查找纯文本源PDF示例感兴趣。

因此,通过该帖子,我最终发现:

  • 网页PDF参考和PDF规范的Adobe扩展| Adobe开发人员连接;其中包含:
    • PDF 文档管理–便携式文档格式–第1部分:PDF 1.7,第一版(PDF32000_2008.pdf)

PDF 1.7规范在第699页上有附录“ _Annex H(参考)示例PDF文件”;从那开始,我想尝试“ H.3简单文本字符串示例”(“经典Hello
World”)。

因此,我尝试将其保存为hello.pdf(从PDF32000_2008.pdf复制时,请注意_except注释,您可能会得到“ %PDF-1. 4”-即在后面插入一个空格1.,必须将其删除_):

%PDF-1.4
1 0 obj
  << /Type /Catalog
      /Outlines 2 0 R
      /Pages 3 0 R
  >>
endobj

2 0 obj
  << /Type /Outlines
      /Count 0
  >>
endobj

3 0 obj
  << /Type /Pages
      /Kids [ 4 0 R ]
      /Count 1
  >>
endobj

4 0 obj
  << /Type /Page
      /Parent 3 0 R
      /MediaBox [ 0 0 612 792 ]
      /Contents 5 0 R
      /Resources << /ProcSet 6 0 R
      /Font << /F1 7 0 R >>
  >>
>>
endobj

5 0 obj
  << /Length 73 >>
stream
  BT
    /F1 24 Tf
    100 100 Td
    ( Hello World ) Tj
  ET
endstream
endobj

…并且我正在尝试打开它:

evince hello.pdf

…但是,evance无法打开它:“无法打开文档/ PDF文档已损坏”;并且:

Error: PDF file is damaged - attempting to reconstruct xref table...
Error: Couldn't find trailer dictionary
Error: Couldn't read xref table

我也检查qpdf

$ qpdf --check hello.pdf
WARNING: hello.pdf: file is damaged
WARNING: hello.pdf: can't find startxref
WARNING: hello.pdf: Attempting to reconstruct cross-reference table
hello.pdf: unable to find trailer dictionary while recovering damaged file

我在哪里错呢?

非常感谢您的任何回答,
干杯!


问题答案:

您应该在文件末尾附加一个(在语法上正确的)xreftrailer节。这意味着:即使未正确说明字节偏移量,PDF中的每个对象也需要在外部参照表中一行。然后,Ghostscript,pdftk或qpdf可以重新建立正确的外部参照并呈现文件:

[...]
endobj
xref 
0 8 
0000000000 65535 f 
0000000010 00000 n 
0000000020 00000 n 
0000000030 00000 n 
0000000040 00000 n 
0000000050 00000 n 
0000000060 00000 n 
0000000070 00000 n 
trailer 
<</Size 8/Root 1 0 R>> 
startxref 
555 
%%EOF


 类似资料:
  • 我似乎不知道如何使用PDFBox及其PDFPagePanel组件查看PDF页面。 因此,使用PDFBox,我的选项似乎是创建PDPage对象或PDDocument对象的列表,我使用了PDPage列表(而不是对PDDocument对象使用) 下面的代码创建一个名为testPage的PDPage对象 在这里,我想创建一个并使用它的方法将PDPage放入组件中。从这里开始,我想将组件添加到JFrame中

  • go doc 工具会从 Go 程序和包文件中提取顶级声明的首行注释以及每个对象的相关注释,并生成相关文档。 它也可以作为一个提供在线文档浏览的 web 服务器,http://golang.org 就是通过这种形式实现的。 一般用法 go doc package 获取包的文档注释,例如:go doc fmt 会显示使用 godoc 生成的 fmt 包的文档注释。 go doc package/sub

  • 使用Notepad++,您可以选择在浏览器中运行。如何使用Visual Studio代码执行相同的操作?

  • 问题内容: 使用Eclipse,我想查看核心Java类(Eg )的源代码,但是当我使用“打开声明”导航到源代码时,它显示“未找到源代码”,并提供了附加源代码的选项。 我的问题是;我如何附加来源?我从哪里获得库的源.jar ? 问题答案: 您需要安装JDK。那你可以看看 对我来说(取决于您当前的版本) 您无需获取特殊的开源版本。

  • 我还被告知要做的一件事是将带有Lombok注释的代码放在中,而不是放在中。我假设我保持了与中相同的包目录结构。 这看起来有点奇怪,但我这样做了,并且lombok生成了包含所有getter/setter/equals/hashcode等方法的源文件。它们被放置在例如中。这是我在使用其他代码生成工具(如XJC)后所期望的。 我的问题是:如何使生成的源代码对eclipse和编译环境“可见”?我到处都是编

  • 本文向大家介绍Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题,包括了Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题的使用技巧和注意事项,需要的朋友参考一下 项目地址:https://github.com/PythonerKK/django-generate-pdf/tree/master 这个demo实现了通过用户输入自己的个人信息生成一份简历pdf