PostScript PDF(1.7),手动编写代码

PostScript PDF(1.7),手动编写代码,pdf,text,postscript,Pdf,Text,Postscript,我正在尝试手动编写一个简单的PDF文件,其中包含标题、一些文本和图像。我找到了一个手动编写的“Hello world”示例,并设法更改了一些内容,但我无法让它用于另一个文本对象。我曾在互联网上寻求帮助,但运气不佳,我想没有多少人会自己编写PDF文件 这就是我到目前为止所做的: %PDF-1.7 1 0 obj % entry point << /Type /Catalog /Pages 2 0 R >> endobj 2 0 obj <<

我正在尝试手动编写一个简单的PDF文件,其中包含标题、一些文本和图像。我找到了一个手动编写的“Hello world”示例,并设法更改了一些内容,但我无法让它用于另一个文本对象。我曾在互联网上寻求帮助,但运气不佳,我想没有多少人会自己编写PDF文件

这就是我到目前为止所做的:

%PDF-1.7



1 0 obj  % entry point
<<
  /Type /Catalog
  /Pages 2 0 R
>>
endobj



2 0 obj
<<
  /Type /Pages
  /MediaBox [ 0 0 200 200 ]
  /Count 1
  /Kids [ 3 0 R ]
>>
endobj

3 0 obj
<<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <<
      /F1 4 0 R 
    >>
  >>
  /Contents 4 0 R
>>
endobj


4 0 obj  % page content
<<
  /Length 20
>>
stream
BT
80 180 TD
/F1 14 Tf
(PDF) Tj
ET
endstream
endobj

5 0 obj  % page content
<<
  /Length 20
>>
stream
BT
50 70 TD
/F1 14 Tf
(this is a pdf) Tj
ET
endstream
endobj


trailer
<<
  /Size 6
  /Root 1 0 R
>>
startxref
492
%%EOF
%PDF-1.7
10 obj%入口点
>
endobj
20 obj
>
endobj
30 obj
>
/目录40R
>>
endobj
4 0 obj%页面内容
>
流动
英国电信
80 180 TD
/F1 14 Tf
(PDF)Tj
ET
尾流
endobj
5 0 obj%页面内容
>
流动
英国电信
5070TD
/F1 14 Tf
(这是pdf)Tj
ET
尾流
endobj
拖车
>
起始外部参照
492
%%EOF
我曾尝试添加另一个文本对象,其中包含“this is a pdf”文本,但它不会显示,我不知道会出什么问题,我尝试过更改一些内容,但没有成功。图像部分我也没有,所以一些帮助会很好

这是一个关于我找到的“hello world”pdf的维基:

Adobe提供了一些关于pdf如何工作的解释,但我找不到任何可以解决我问题的方法:
几年前,我写了一本书,正好涵盖了这类事情:


恐怕没有免费的在线版本。您可以从Adobe自己的文档中获得所有相同的信息,这是免费的,但它是一个相当长的文档

这不是有效的PDF。如果Acrobat打开它,那是因为它在外部参照表中被放弃,并对文件进行了完整扫描,但您的PDF无效。4 0 obj不是您指定的字体,5 0 obj不能从任何地方访问

PDF规范要求外部参照表指向每个对象在文件中的确切位置。除非每次在文件中添加或删除1个字节时都要手动更新整个外部参照表,否则无法手动编写此文件

您可以很容易地从代码中从头开始编写PDF,但仅在记事本中打开PDF并开始更改内容是行不通的,因为索引(外部参照)会立即损坏

我还建议不要在整个文件中添加注释,除非注释以新行开头。否则,一些PDF解析器会感到困惑,因为这通常是不可能的。通常PDF文件不包含注释(第二行除外,Adobe建议第二行是一些非ASCII字符的注释,以便FTP将文件识别为二进制),因为它们实际上不可能手动写入


我不知道它是否能解释整个问题,但您的文件中有一个
startxref
条目,但没有
xref
表。是的,它看起来很像,但如果您将其复制并保存为pdf文件,它就会起作用。“如何工作?”?你的意思是它可能在Acrobat中打开。Acrobat打开各种损坏的PDF文件,并以静默方式修复它们。如果Acrobat在您退出时提供“保存更改”,而您没有更改PDF,那么这很好地表明您的原始文件已损坏。Lucas说得很对,您没有外部参照,因此您的PDF文件无效。如果我需要一个指向对象确切位置的外部参照表,我应该如何执行此操作?请计算字节数。如果你真的想手动创建PDF,你还能做什么?你可以尝试一下,它可以转换成实际的PDF和一个更容易编辑的中间文件。关于使用注释的警告。。。注释是一种简单的标准PDF构造。不支持它们的PDF查看器可以被视为与OP的PDF一样坏。