UP | HOME |

Recortar (crop) una región de un PDF con LaTeX

2025-11-23

Recortar (crop) una región de un PDF con LaTeX

pdfcrop recorta los márgenes de un pdf. Si deseamos recortar una región interior de una página de un pdf se necesita diseñar una herramienta específica para ello. Un posibilidad se basa en convertir el pdf en png y recortarlo: aquí lo implementé en emacs. Pero el problema que presenta esta aproximación reside en que la imagen ya no es vectorial.

A efectos prácticos, este problema resulta insignificante. Pero me intrigó la posibilidad de mantener en todo momento la vectorización del pdf.

10_recortar-1.png

Y así he llegado a una solución para recortar una región interior del pdf manteniendo en todo momento la vectorización. Explico los pasos principales creados en LaTeX.

Primero diseño una rejilla para ayudarme a localizar la región que deseo recortar y muestro en la primera página la página del pdf junto con la cuadrícula. En la segunda página recorto la página con las medidas que he estimado a ojo y en la tercer página ajusto el tamaño de la misma a la región recortada. Posteriormente, solo imprimo la tercer página con el paquete pagesel y finalmente recorto con pdfcrop esta página.

El truco consiste en conseguir que el tamaño de página coincida con la región de trabajo, ya sea la original o la recortada. Primero ajustamos la página al tamaño de página del documento pdf que queremos recortar para que las medidas de la cuadrícula recojan con precisión las posiciones. Y en la tercer página reajustamos el tamaño de página a la región seleccionada.

\documentclass{article}
\usepackage[margin=0mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{atbegshi}
%% \usepackage[3]{pagesel} % Para imprimir solo la página 3

\newcommand{\showgrid}{%
\AtBeginShipoutNext{\AtBeginShipoutAddToBoxForeground{%
\begin{tikzpicture}
    [
    overlay,
    remember picture,
    shift={(current page.south west)},
    grid style/.style={draw=blue, very thin, step=10 mm}
    ]
    \draw[grid style] (0,0) grid (\pdfpagewidth, \pdfpageheight);
    \foreach \x in {0,10,20,30,...,\pdfpagewidth} {
    \pgfmathtruncatemacro\xmaxstep{\x/10}
    \node [font=\fontsize{20}{27}\selectfont\bfseries] at (\x mm,10 mm) {\xmaxstep};
    \node [font=\fontsize{20}{27}\selectfont\bfseries] at (\x mm,\pdfpageheight/2) {\xmaxstep};
    \node [font=\fontsize{20}{27}\selectfont\bfseries] at (\pdfpagewidth-\x mm,\pdfpageheight/2+20) {\xmaxstep};
    }
    \foreach \x in {0,10,20,30,...,\pdfpageheight} {
    \pgfmathtruncatemacro\xmaxstep{\x/10}
    \node [font=\fontsize{20}{27}\selectfont\bfseries] at (10 mm,\x mm) {\xmaxstep};
    \node [font=\fontsize{20}{27}\selectfont\bfseries] at (\pdfpagewidth/2-10,\x mm) {\xmaxstep};
    \node [font=\fontsize{20}{27}\selectfont\bfseries] at (\pdfpagewidth/2 + 20,\pdfpageheight-\x mm) {\xmaxstep};
    }
\end{tikzpicture}%
}}}

\begin{document}%
\def\paginapdf{15}
\def\ficheropdf{Manual de identidad corporativa.pdf}
%% Página I: pdf original junto con rejilla grid
%% Tomamos como referencia la página que queremos examinar
\sbox{0}{{\includegraphics[page=\paginapdf,clip]{\ficheropdf}}}%
%% Dimensiones de la página de LaTeX, las mismas que el gráfico
\pdfpagewidth=\the\wd0 \pdfpageheight=\the\ht0%
\paperwidth=\the\wd0
\paperheight=\the\ht0
\special{papersize=\the\paperwidth,\the\paperheight}
\parindent=0sp
%% Dibujamos el gráfico
\begin{tikzpicture}[remember picture,overlay,inner sep=0pt,outer sep=0pt]%
    \node [anchor=west,yshift=0mm] at (current page.west)
    {{\frame{\usebox{0}}}};%
       \draw[very thick, red] 
    ($(current page.south west)+(0mm,105mm)$) -- 
    ($(current page.south west)+(\paperwidth,105mm)$);
       \draw[very thick, red] 
    ($(current page.south west)+(105mm,\paperheight)$) -- 
    ($(current page.south west)+(105mm,0mm)$);
    \end{tikzpicture}%
%% Dibujamos el grid
\showgrid%
\newpage % Ahora toca ir haciendo pruebas hasta conseguir la región deseada
%% Página II: pdf recortado
\sbox{1}{{\includegraphics[page=\paginapdf,trim={180mm 60mm 60mm 110mm},clip]{\ficheropdf}}} % trim={<left> <lower> <right> <upper>}
\frame{\usebox{1}}
\newpage % Ahora dibujamos una página recortada a esa región
%% Página III: el tamaño de la página ajustado a la región anterior
\paperwidth=\the\wd1
\paperheight=\the\ht1
\pdfpagewidth=\the\wd1 \pdfpageheight=\the\ht1%
\special{papersize=\the\paperwidth,\the\paperheight}
\begin{tikzpicture}[remember picture,overlay,inner sep=0pt,outer sep=0pt]%
    \node [anchor=west,yshift=0mm] at (current page.west)
    {{{\usebox{1}}}};%
\end{tikzpicture}%
\end{document}