设置/控制使用 LaTeX 生成的图像的名称

设置/控制使用 LaTeX 生成的图像的名称

总结:我想要控制用生成的图像资源的名称\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}

相关内容