我有一组 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}