使用纯 TeX(pdfTeX)附加文件

使用纯 TeX(pdfTeX)附加文件

我目前正在使用纯 TeX 编写文档,并希望能够将其他相关文件附加到生成的 pdf 中。我过去曾使用过 attachmentfile、attachfile2 和 embedfile 包(成功)来实现此目的(在 LaTeX 中)。

虽然我可以恢复使用 LaTeX,但我更愿意定义一个适合在纯 TeX 中使用的宏。我已经阅读了 pdf 规范的相关部分以及 pdfTeX 用户手册,但我尚未能够创建实现此目的的宏。

我将非常感激任何想法和/或帮助。


编辑1:参考文献

相关参考文献链接如下:


编辑2:当前的解决方案

系统信息:

  • Fedora 20
  • pdfTeX 3.1415926

请参阅下面的最小工作示例代码以及我当前仅使用纯 TeX 和 pdfTeX 原语的方法。


文件:字母表.txt

这是要附加到文档的文件

abcdefghijklmnopqrstuvwxyz

文件:最小.tex

该文件利用 attachmentfile2 包来演示如何使用 LaTeX (pdfLaTeX) 实现这一点。

\pdfcompresslevel=0
\documentclass{report}
\usepackage{attachfile2}
\begin{document}

    Hello, world!

    \textattachfile{alphabet.txt}{some annotation}

\end{document}

文件:测试.tex

\pdfcompresslevel=0
\catcode`@=11
\def\res@space{ }

\newcount\res@count@obj@file
\newcount\res@count@obj@xform
\newcount\res@count@obj@fspec

\newdimen\res@box@dp
\newdimen\res@box@ht
\newdimen\res@box@wd

\def\res@embefile#1{%
    \immediate\pdfobj stream attr{%
        /Type /EmbeddedFile
        /Params <<
            /Size \pdffilesize{#1}
            /ModDate (\pdffilemoddate{#1})
            /CheckSum <\pdfmdfivesum file {#1}>
        >>
    } file {#1}
    \res@count@obj@file=\the\pdflastobj
}

\def\res@appearance@box#1{%
    \setbox1=\hbox{#1}
    \immediate\pdfxform 1
    \res@count@obj@xform=\the\pdflastxform
    \res@box@dp=\the\dp1
    \res@box@ht=\the\ht1
    \res@box@wd=\the\wd1
}

\def\res@filespec#1{%
    \immediate\pdfobj{
        <<
            /Type /Filespec
            /FS (#1)
            /EF <<
                /F \the\res@count@obj@file\res@space 0 R
            >>
         >>
    }
    \res@count@obj@fspec=\the\pdflastobj
}

\def\res@annot{
    \pdfannot   width \the\res@box@wd
                height \the\res@box@ht
                depth \the\res@box@dp {
        /Subtype /FileAttachment
        /AP <<
            /N \the\res@count@obj@xform\res@space 0 R
            /R \the\res@count@obj@xform\res@space 0 R
            /D \the\res@count@obj@xform\res@space 0 R
        >>
        /F \the\res@count@obj@file
        /FS \the\res@count@obj@fspec\res@space 0 R
    }
}

\def\res@attachfile#1#2{%    Arg 1:  Annotation
                        %    Arg 2:  Name of file to be attached
    \res@embedfile{#2}
    \res@filespec{#2}
    \res@appearance@box{#1}
    \res@annot
}

Hello, world!

\res@attachfile{some annotation}{alphabet.txt}

\bye

前提是字母表.txt存储在同一目录中,可以通过运行以下命令产生所需的输出:

pdflatex minimal.tex

我目前的方法能够产生.pdf可以使用文档查看器查看的文件(我尚未检查它是否能够被 Adob​​e Reader 打开)。.pdf可以通过运行来生成:

pdftex test.tex

通过比较两种方法的输出,似乎附件已正确嵌入。但是,我无法“看到”pdf 上的注释,也无法打开附件。

如果有人能帮我找出错误我将非常感激。

答案1

navigator软件包允许访问 Plain TeX、LaTeX 和 ConteXt 中的链接、附件和其他 PDF 功能。如果您添加

\input navigator

你的序言和

\finishpdffile

到文档末尾,你可以使用

\embeddedfile[<description>]{<object name>}[<alternate file name>]{<file>}

其中<description>是 PDF 查看器中列出的描述,<object name>是附件的内部名称,<alternate file name>是 PDF 查看器中列出的文件名,<file>当然,是您想要附加的文件。

相关内容