手动创建交互式PDF

时间:2017-03-29 19:17:36

标签: pdf pdf-generation

由于解释繁琐的原因,我需要在不使用任何第三方库的情况下从C#应用程序创建简单的PDF。有问题的PDF需要包含文本和线条图,如果可能,还应包括图像,单选按钮和文本字段。我一直在阅读Adobe documentation,这在很大程度上是直截了当的,但到目前为止还无法弄清楚如何使交互式字段真正出现在文档中。

例如,考虑下面描述的部分测试PDF文档:

1 0 obj
  << /Type /Catalog
     /Pages 2 0 R
     /AcroForm 6 0 R
  >>
endobj

...

6 0 obj
  << /Fields [ 7 0 R ]
     /DR 5 0 R
  >>
endobj

7 0 obj
  << /FT /Btn
     /Ff 65536
     /Kids [ 8 0 R 9 0 R ]
  >>
endobj

8 0 obj
  << /Parent 7 0 R
     /AS /FieldA
     /AP 10 0 R
  >>
endobj

9 0 obj
  << /Parent 8 0 R
     /AS /FieldB
     /AP 10 0 R
  >>
endobj

10 0 obj
  << /N
    << /FieldA 11 0 R
       /FieldB 12 0 R
       /Off 13 0 R
    >>
  >>
endobj

11 0 obj
  << /Length  59 >>
stream
  BT
    /F1 12 Tf
    0 0 Td
    (Field A) Tj
  ET
endstream
endobj

...

其中5 0 R引用包含字体/F112 0 R以及13 0 R类似于11 0 R的引用流的资源字典,其中字符串替换为{{1}分别和Field B

我需要对文档进行哪些更改才能使这样定义的字段实际显示在页面上?

编辑:因为mkl问,这是整个pdf(删除额外的换行符以节省空间)

Off

2 个答案:

答案 0 :(得分:2)

根据您发布的完整文件,我看到了几个问题(可能还有更多):

  • 文档目录不包含/ AcroForm条目
  • 该页面不包含带有指向字段小部件链接的/ Annots条目
  • 字段定义8和9不完整,它们不包括窗口小部件注释条目。这些条目指定页面上的字段位置
  • 您的字段是按钮,它没有不同的外观状态,/ N外观应该是对外观流(11,12或13)的引用
  • 字段外观11,12,13无效,缺少/ Type,/ Subtype,/ BBox,/ Resources等条目

更新:您可以在下面找到单选按钮的最小文件结构。

1 0 obj
<< /Type /Catalog /Version /1.4 /Pages 8 0 R /AcroForm <</Fields [2 0 R ]>> >>
endobj
2 0 obj
<< /FT /Btn /T (Radio) /V /Off /Kids [5 0 R 3 0 R ] /Ff 32768 >>
endobj
3 0 obj
<< /Type /Annot /F 4 /Rect [250  667  270  687  ] /Subtype /Widget /AS /Off /AP << /N << /Two 7 0 R /Off 6 0 R >> >> /Parent 2 0 R /P 4 0 R >>
endobj
4 0 obj
<< /Type /Page /Contents null /MediaBox [0  0  612  792  ] /Parent 8 0 R /Annots [5 0 R 3 0 R ] >>
endobj
5 0 obj
<< /Type /Annot /F 4 /Rect [150  667  170  687  ] /Subtype /Widget /AS /Off /AP << /N << /One 7 0 R /Off 6 0 R >> >> /Parent 2 0 R /P 4 0 R >>
endobj
6 0 obj
<< /Type /XObject /Subtype /Form /BBox [0  0  20  20  ] /Length 74 >>
stream
/DeviceRGB CS 0 0 0 SC 1 w 0.5 0.5 m 19.5 0.5 l 19.5 19.5 l 0.5 19.5 l h S
endstream
endobj
7 0 obj
<< /Type /XObject /Subtype /Form /BBox [0  0  20  20  ] /Length 55 >>
stream
/DeviceRGB cs 0 0 0 sc 0 0 m 20 0 l 20 20 l 0 20 l h f
endstream
endobj
8 0 obj
<< /Type /Pages /Count 1 /Kids [4 0 R ] >>
endobj 

您可以下载minimum radio button samplemore detailed radio button sample

使用我们的XFINIUM.PDF Inspector,您可以看到PDF文件结构。

答案 1 :(得分:0)

您的字段需要包含所谓的&#34;外观&#34;它们是包含用于创建字段视觉外观的绘图指令的XObject。请参阅PDF规范的12.5.5节。或者,您可以将文档目录中AcroForm条目的NeedAppearances属性设置为true。请参阅PDF规范的第12.7.2节。将此设置为true将使符合标准的查看器根据其属性创建字段的外观。但是,您无法依靠大多数观看者来执行此操作。