创建包含大量(超过一百个)图像的 PDF

创建包含大量(超过一百个)图像的 PDF

我有很多图片需要在 PDF 中显示(无文本)。我希望制作类似照片的联系表。有没有一种简单的方法可以做到这一点,而不必手动完成所有操作,例如,我可以设置一个 20 x 10 的网格,然后只列出文件名吗?如果我必须每隔几行就浏览开始和结束环境,那么这将花费太长时间。理想情况下,我希望它换到下一页。

答案1

一旦文件名中包含特殊字符(例如_等) ,从另一个文件读取文件名就会很棘手。

这将使用\readline,它会相应地更改 catcodes 并将读取的文件名存储到列表中,这里称为\mylist

为了显示图形,定义一个列表处理器就足够了,基本上就是这样\includegraphics。(我在三幅图像后添加了环绕并在表格中使用了漂亮的对齐方式)

\documentclass{article}

\usepackage{etoolbox}
\usepackage{graphicx}

\listxadd{\mylist}{}
\newread\readhandle

\newcommand{\readfromfiletolist}[1]{%
  \IfFileExists{#1}{%
    \begingroup
    \openin\readhandle=#1% open the file
    \endlinechar-1  % Drop the endline characters
    \loop
    \readline\readhandle to \linefromfile %read a complete line
    \listxadd{\mylist}{\linefromfile}% add expanded!
    \unless\ifeof\readhandle
    \repeat
    \endgroup
    \closein\readhandle% Close the file
  }{}%
}


\newcounter{piccounter}

\newcommand{\displayimage}[1]{%
  \stepcounter{piccounter}%
  \begin{tabular}[t]{l}
  \includegraphics[width=3cm]{"#1"} \tabularnewline
  #1  
  \end{tabular}
  \ifnum\value{piccounter} = 3  % Wrap after 3 pictures
  \par
  \setcounter{piccounter}{0}%
  \fi%
}


\begin{document}
\readfromfiletolist{filelist.txt}
\begin{center}
\huge \textbf{Spot the wrong image!}
\end{center}

\forlistloop{\displayimage}{\mylist}
\end{document}

在此处输入图片描述

以下是filelist.text

a_1.jpg
a_2.jpg
a_3.jpg
a_4.jpg
a_5.jpg
a_6.jpg
brontosaurs.png
a_7.jpg

brontosaurs.png文件取自开放剪贴画,而那位可爱的蜜蜂公爵则取自我们友好的用户 Paulo Cereda!

请注意,_由于 catcode 更改,显示为上标点。在我看来,只要文件名本身不显示,就没有问题。

答案2

类似这样的方法可能会有效(未经测试)

\usepackage{etoolbox,graphicx}
\newcommand\HandlePic[1]{%
   \includegraphics[width=3cm]{#1}
   \par
 }

 \forcsvlist\HandlePic{A,B,C}

列表中的每个项目都会逐一交给处理程序。


这只是 Christians 解决方案的一个补充。以下是使用该verbatim包的POC滥用 \verbatiminput

\documentclass[a4paper]{article}
\usepackage{verbatim}
\usepackage{graphicx}
\makeatletter 
\newcommand\test[1]{
  \begingroup
  \def\verbatim@processline{%
    \includegraphics{\the\verbatim@line}%
    \par
  }
  \def\verbatim@input##1##2{%
   \IfFileExists {##2}{%
    \verbatim@readfile{\@filef@und}
    \endgroup\@doendpe}%
   {\typeout {No file ##2.}\endgroup}}
  \verbatiminput{#1}
  \endgroup
}
\makeatother

\begin{document}

\test{t.txt}

\end{document}

相关内容