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

时间:2014-10-13 13:45:43

标签: 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
<<
  /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

我尝试使用&#34添加另一个文本对象;这是一个pdf&#34;文字,但它不会出现,我不知道什么可能是错的,我尝试改变一些事情,但没有运气。图片部分我也没有,所以一些帮助就好了。

这是关于&#34; hello world&#34;的维基。 pdf我发现: http://www.gnupdf.org/Introduction_to_PDF

Adob​​e提供了一些关于pdf如何工作的解释,但我找不到任何可以解决我的问题的方法: http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf

2 个答案:

答案 0 :(得分:2)

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

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

您可以从代码中轻松地从头开始编写PDF,但只能在记事本中打开PDF并开始更改内容,因为索引(外部参照)会立即损坏。

除非评论从新行开始,否则我还建议不要在整个文件中添加评论。否则一些PDF解析器会混淆,因为这通常是不期望的。通常PDF文件不包含注释(第二行除外,Adobe建议将其作为某些非ASCII字符的注释,因此FTP将文件识别为二进制文件),因为它们几乎不可能手动编写。

http://www.adobe.com/devnet/pdf/pdf_reference.html

答案 1 :(得分:1)

几年前,我写了一本书,其中涵盖了这类事情:

http://www.amazon.com/PDF-Explained-John-Whitington/dp/1449310028/

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