【发布时间】:2017-03-29 19:17:35
【问题描述】:
由于解释繁琐的原因,我需要在不使用任何第三方库的情况下从 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 引用包含字体/F1 和12 0 R 和13 0 R 的资源字典引用类似于11 0 R 的流,其中字符串分别替换为Field B 和Off。
我需要对文档进行哪些更改才能使如此定义的字段真正出现在页面上?
编辑:由于 mkl 询问,这里是整个 pdf(删除额外的换行符以节省空间)
%PDF-1.7
%¥±ë
1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj
2 0 obj << /Type /Pages /Kids [3 0 R] /Count 1 /MediaBox [0 0 200 200] >> endobj
3 0 obj << /Type /Page /Parent 2 0 R /Resources 5 0 R /Contents 4 0 R >> endobj
4 0 obj << /Length 39 >>
stream
BT /F1 12 Tf 0 0 Td (Hello World) Tj ET
endstream
endobj
5 0 obj << /Font << /F1 << /Type /Font /Subtype /Type1 /BaseFont /Helvetica >> >> >> 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 7 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
12 0 obj << /Length 39 >>
stream
BT /F1 12 Tf 0 0 Td (Field B) Tj ET
endstream
endobj
13 0 obj << /Length 39 >>
stream
BT /F1 12 Tf 0 0 Td (Off... ) Tj ET 94
endstream
endobj
xref
0 14
0000000000 65535 f
0000000018 00000 n
0000000068 00000 n
0000000150 00000 n
0000000233 00000 n
0000000327 00000 n
0000000420 00000 n
0000000470 00000 n
0000000533 00000 n
0000000592 00000 n
0000000651 00000 n
0000000727 00000 n
0000000821 00000 n
0000000917 00000 n
trailer << /Root 1 0 R /Size 5 >>
startxref
1013
%%EOF
【问题讨论】:
-
请分享整个PDF进行分析。
-
您的内容没有隐藏在页面底部是吗? (0, 0 是左下角)
-
@lecstor 不应该,因为文本是从光标位置向上和向右写的。无论哪种方式,我所写的内容都不是放置在页面上的按钮。
-
酷,是的,我只是想检查一下。有些肯定会在页面上,只是不在前 8)
-
@mkl 最后添加。长得不合理,因此删除了额外的换行符。重新计算字节数以确保它们对于外部参照表仍然准确。
标签: pdf pdf-generation