创建包含可点击文件附件的 PDF 文件

问题描述 投票:0回答:1

我正在尝试恢复一些直接创建 PDF 文件的旧代码(不使用任何 API)。它非常简单,只是一些纯文本,后面跟着一个或多个附件。我试图做到这一点,以便当读者单击附件名称时,Windows 将使用该文件打开相应的应用程序。

我确信这曾经有效,但现在不行了。 将鼠标悬停在附件名称上时,光标会变成手形,单击会使该区域突出显示,但应用程序不会启动 - 没有任何反应。

我认为问题在于 Adobe Reader 中增强的安全性,但事实似乎并非如此。我已关闭所有安全性,并且启用了“允许使用外部应用程序打开非 PDF 文件附件”复选框。

那么我的 PDF 格式代码现在不正确吗?下面是一个非常简单的文件的全部内容。附件应位于 c:emp2\pdf\PDF Attachments wsmeet.txt 中。如果有人可以看看这个并告诉我问题是什么,我将非常感激。

%PDF-1.4
%âãÏÓ
1 0 obj
<< /Type /Font
/Subtype /Type1
/Name /F1
/BaseFont /Helvetica
/Encoding /WinAnsiEncoding
>>
endobj
2 0 obj
<< /Type /Font
/Subtype /Type1
/Name /F2
/BaseFont /Courier-Bold
/Encoding /WinAnsiEncoding
>>
endobj
3 0 obj
<< /Type /Font
/Subtype /Type1
/Name /F3
/BaseFont /Times-Roman
/Encoding /WinAnsiEncoding
>>
endobj
4 0 obj
[/PDF /Text]
endobj
5 0 obj
<< /Length 184 >>
stream
BT
/F1 12 Tf
10 750 Td
14 TL
(This is dummy text.) '
/F3 12 Tf
() '
/F1 12 Tf
(_______________________________________________________) '
() '
/F2 12 Tf
(Attachment: ewsmeet.txt) '
ET
endstream
endobj
6 0 obj
<<
/Type /Annot
/Subtype /Link
/Rect [94 677 182 690]
/Border [0 0 2]
/C [1 0 0.5]
/A 7 0 R
>>
endobj
7 0 obj
<<
/Type /Action /S /Launch
/Win <</F (c:\\temp2\\pdf\\PDF Attachments\\ewsmeet.txt) >>
>>
endobj
8 0 obj
<< /Type /Page
/Parent 9 0 R
/MediaBox [0 0 600 900]
/Contents 5 0 R
/Annots [6 0 R ]
/Resources << /ProcSet 4 0 R
/Font << /F1 1 0 R /F2 2 0 R /F3 3 0 R >>
>>
>>
endobj
9 0 obj
<< /Type /Pages
/Kids [8 0 R
]
/Count 1
>>
endobj
10 0 obj
<< /Type /Outlines
/Count 0
>>
endobj
11 0 obj
<< /Type /Catalog
/Outlines 10 0 R
/Pages 9 0 R
>>
endobj
xref
0 12
0000000000 65535 f 
0000000015 00000 n 
0000000122 00000 n 
0000000232 00000 n 
0000000341 00000 n 
0000000369 00000 n 
0000000603 00000 n 
0000000713 00000 n 
0000000819 00000 n 
0000000997 00000 n 
0000001055 00000 n 
0000001102 00000 n 
trailer
<< /Size 12
/Root 11 0 R
>>
startxref
1169
%%EOF

pdf pdf-generation
1个回答
0
投票

这不是不正确,但附件未嵌入,因此无法打开任何内容,如果文件位于系统中,记事本最多可能会触发。

因此,您的示例在首次接受 PDF-XChange 或旧版 Acrobat 中的可信链接后将毫无问题地运行。

enter image description here

enter image description here

注意其他读者可能会忽略该请求

对于简单的文本嵌入,您可以包含与此类似的文件

21 0 obj
<<
  /Type /EmbeddedFile
  /Subtype /text#2Fplain
  /Length 36
>>
stream
Hello World 
ewsmeet.txt is my name
endstream
endobj

22 0 obj
<<
  /Type /Filespec
  /F (ewsmeet.txt)
  /UF (ewsmeet.txt)
  /EF <<
    /F 21 0 R
  >>
>>
endobj

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.