总结:我想要控制用生成的图像资源的名称\includegraphics
。
我需要控制 LaTeX 生成的图像资源名称,以便以后可以替换它们。
这个奇怪的工作流程的目的是为了在现有应用程序上进行签名:
- 该应用程序可以生成报告
- 本报告的一个模块是显示人员签名名单
- 当用户想要将报告保存为 PDF 时,将使用乳胶创建带有签名列表的报告。
- [新的] 现在,用户可以决定签名列表是否应填充真实签名(用户还可以决定在文档创建几天后启动签名工作流程)
- 签名工作流程开始,所有签名都以图像形式收集。
- 报告现在应该充满了收集到的签名(在收集到所有签名后我无法重新生成文档,因为报告的数据可能已经被更改(也许签名收集在报告创建几天后就完成了)。所以我唯一的方法是以某种方式转换现有的 PDF 文档)
如果您对如何解决这个工作流程有任何想法,我们非常欢迎!
我的想法是生成 PDF 文档,其中已提供签名列表,但带有用于插入占位符的签名图像的图像占位符。我有一个可以替换图像的有效解决方案,但问题是我无法控制图像的名称\includegraphics
。生成的图像名为 Im1、Im2、... 我想为图像赋予特殊的标记名称,以便以后可以引用名称并用相应的签名替换图像。
关于如何解决我的问题有什么想法吗?
答案1
在 PDFTeX 中,图像资源按包含顺序编号。可以使用 检索 XObject 的关联 PDF 对象编号\pdflastximage
。您可以在排版期间将此关系写入文本文件来记录它,然后让外部程序使用它来将 XObject 内容流替换为所需的内容流(签名图像)。
\documentclass[a5paper]{article}
\usepackage{graphicx}
\begin{document}
\noindent\includegraphics[width=1cm]{example-image-a} (\texttt{Im1}\ $\Leftrightarrow$\ object No. \texttt{\the\pdflastximage})
\immediate\pdfobj{}
\noindent\includegraphics[width=1cm]{example-image-b} (\texttt{Im2}\ $\Leftrightarrow$\ object No. \texttt{\the\pdflastximage})
\noindent\includegraphics[width=1cm]{example-image-c} (\texttt{Im3}\ $\Leftrightarrow$\ object No. \texttt{\the\pdflastximage})
\end{document}
扩展版本已修补\includegraphics
,可跟踪图像资源编号(考虑重复的图像),并在文本文件中写入图像资源<-> pdf 对象编号关系。笔记:这种关系可能会被用于 PDF 后期处理的工具破坏。
\pdfcompresslevel=0
\pdfobjcompresslevel=0
\documentclass[a5paper]{article}
\usepackage{graphicx}
%patch \includegraphics (maintaining an image counter)
\usepackage{etoolbox}
\makeatletter
\newcounter{ImgCnt}
\pretocmd{\Gread@@pdftex}{
\edef\Gin@attr@hash{%
\ifx\Gin@pagebox\@empty
\else
:\Gin@pagebox
\fi
\ifx\Gin@page\@empty
\else
:P\Gin@page
\fi
\ifx\Gin@decode\@empty\else
:D[\Gin@decode]%
\fi
\ifGin@interpolate
:I%
\fi
}%
\@ifundefined{#1 image\Gin@attr@hash}{\stepcounter{ImgCnt}}{}%
}{}{}
%textfile for imageresource<->object number relationship
\newwrite\signObjects
\immediate\openout\signObjects=signobject.txt
\begin{document}
\noindent\includegraphics[width=1cm]{example-image} % random image
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% the images you are interested in (e. g. placeholders for signatures)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\noindent\includegraphics[width=1cm]{example-image-a} (\texttt{Im\theImgCnt}\ $\Leftrightarrow$\ object No. \texttt{\the\pdflastximage})
\immediate\write\signObjects{Im\theImgCnt:\the\pdflastximage\space 0 R}
\immediate\pdfobj{} %create random PDF obj
\noindent\includegraphics[width=1cm]{example-image-b} (\texttt{Im\theImgCnt}\ $\Leftrightarrow$\ object No. \texttt{\the\pdflastximage})
\immediate\write\signObjects{Im\theImgCnt:\the\pdflastximage\space 0 R}
%%%%%% random image duplicated
\noindent\includegraphics[width=1cm]{example-image}
%%%%%%
\noindent\includegraphics[width=1cm]{example-image-c} (\texttt{Im\theImgCnt}\ $\Leftrightarrow$\ object No. \texttt{\the\pdflastximage})
\immediate\write\signObjects{Im\theImgCnt:\the\pdflastximage\space 0 R}
\end{document}