尝试使用 PDF 和 LaTeX/TikZ 模拟 CSS“对象适配”行为

尝试使用 PDF 和 LaTeX/TikZ 模拟 CSS“对象适配”行为

我有一组 PDF 文件(每个文件正好一页),每个文件的大小和长宽比可能都不同。我想创建一个文档,将每个 PDF 文件放入大小相同但长宽比与 PDF 内容不同的框中。

这意味着 PDF 内容需要缩放以适合框,并且可能会溢出框以保持 PDF 内容的纵横比。我正在尝试(可能徒劳无功)获取此 CSS 块提供的行为:

object-fit      : cover;
object-position : top left;
overflow        : hidden;

http://www.w3.org/TR/css3-images/#the-object-fit

以下是这些属性的实际应用的在线演示:

http://cssdeck.com/labs/full/d3dcpiz0

在这种情况下,我尝试在该链接上模拟选项 3。另请注意,您需要在 Chrome 或 Safari 中查看该页面,因为 Firefox 似乎不支持相关的 CSS 属性。不确定 IE 是否支持。

这是一个与此行为相关的最小示例:

\documentclass{article}

\usepackage{mwe}
\usepackage{graphicx}

\begin{document}

\resizebox{20mm}{30mm}{\includegraphics[keepaspectratio,clip]{example-image-16x10}}

\end{document}

在这种情况下,包含的图形的纵横比为 1.6,包含它的框的纵横比为 0.6,最终内容被扭曲以适应。我知道我可以手动计算缩放比例来实现这一点,但我宁愿不这样做,因为我需要在数百个单页 PDF 上执行此操作。

我意识到 CSS 不是 LaTeX/TikZ,这可能不是完成任务的正确方法,因此任何有关可行方法的提示都会受到欢迎。

答案1

adjustbox简单:

\documentclass{article}
\usepackage[margin=1cm]{geometry}

\usepackage{graphicx}
\usepackage[export]{adjustbox}
\usepackage{xparse}

\ExplSyntaxOn
\keys_define:nn { hungerford/boxgraphics }
 {
  width  .dim_set:N = \l_hungerford_box_wd_dim,
  height .dim_set:N = \l_hungerford_box_ht_dim,
 }

\NewDocumentCommand{\boxincludegraphics}{ m m }
 {
  \group_begin:
  \keys_set:nn { hungerford/boxgraphics } { #1 }
  \hungerford_include_graphics:n { #2 }
  \group_end:
 }

\cs_new_protected:Npn \hungerford_include_graphics:n #1
 {
  \adjustbox{
    clip,
    trim={
     0~
     \dim_eval:n { \height-\l_hungerford_box_ht_dim }~
     \dim_eval:n { \width-\l_hungerford_box_wd_dim }~
     0
    }
  }
  {
   \includegraphics[
    min~width=\l_hungerford_box_wd_dim,
    min~height=\l_hungerford_box_ht_dim
   ]{#1}
  }
 }

\ExplSyntaxOff

\begin{document}

X\boxincludegraphics{width=80mm,height=80mm}{example-image-16x10.pdf}%
\quad
\boxincludegraphics{width=80mm,height=80mm}{example-image-golden-upright.pdf}X

\bigskip

X\boxincludegraphics{width=80mm,height=40mm}{example-image-16x10.pdf}%
\quad
\boxincludegraphics{width=80mm,height=40mm}{example-image-golden-upright.pdf}X


\end{document}

在此处输入图片描述


先前的答案(不知道真正的规格)

我不确定 CSS 规范是什么意思;不过,你可以这样做

\documentclass{article}

\usepackage{graphicx}

\begin{document}

% an empty box for comparison
\begingroup\setlength{\fboxsep}{-\fboxrule}%
\fbox{\rule{0pt}{30mm}\rule{20mm}{0pt}}\endgroup
\quad
\includegraphics[keepaspectratio,width=20mm,height=30mm]{example-image-16x10.pdf}%
\quad
\includegraphics[keepaspectratio,width=20mm,height=30mm]{example-image-golden-upright.pdf}

\end{document}

并且图像将被缩放,以便既不超过规定的高度,也不超过规定的宽度。

在此处输入图片描述

在示例中,第一张图像的宽度为 20 毫米,而第二张图像的高度为 30 毫米。

答案2

使用{!}\resizebox

\documentclass{article}

\usepackage{mwe}
\usepackage{graphicx}

\begin{document}

\resizebox{20mm}{!}{\includegraphics{example-image-16x10}}

\end{document}

相关内容