Dessiner sur une image d'arrière-plan

Sep 14 2020

Je voudrais prendre des pages d'un PDF existant (qui sont simplement des images), et dessiner plusieurs cases sur chaque page. (Les cadres de sélection des mots détectés par un programme OCR externe.)

Ce que j'ai essayé jusqu'à présent:

  • peut utiliser \includepdf(à partir du pdfpagespackage) avec option [fitpaper=true]pour rendre les pages du PDF résultant identiques à celles du PDF original.

  • peut utiliser TikZ pour dessiner des rectangles / polygones, avec des coordonnées spécifiées en utilisant current page.north westet un peu d'arithmétique (que j'ai obtenu de cette réponse ), bien qu'il y ait plusieurs problèmes:

    1. Ils se retrouvent sur une page séparée,

    2. Cette page séparée a les dimensions TeX par défaut (lettre / A4), pas celles du PDF inclus (bien que cela puisse être défini explicitement)

Voici ce que j'ai jusqu'à présent (en utilisant à la example-image-aplace de mon fichier PDF):

\documentclass{article}
\pagestyle{empty}
\usepackage{pdfpages}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\paperwidth=319.999bp
\paperheight=239.999bp
\pagewidth=319.999bp
\pageheight=239.999bp
\begin{document}
\includepdf[fitpaper=true]{example-image-a}%
\begin{tikzpicture}[remember picture,overlay]
\draw [line width=1mm,opacity=.25] (current page.center) circle (3cm);
\draw[red, thick] ($(current page.north west)+(102 bp,-72 bp)$) -- ($(current page.north west)+(132 bp,-72 bp)$) -- ($(current page.north west)+(132 bp,-90 bp)$) -- ($(current page.north west)+(102 bp,-90 bp)$) -- cycle;
\end{tikzpicture}%
\end{document}

Résultats en deux pages (dans l'autre ordre si je mets le \includepdfplus tard):

Réponses

2 Skillmon Sep 14 2020 at 17:33

L' utilisation eso-picde » \AddToShipoutPictureFG*l'on peut y parvenir (je suis arrivé erreurs de séquence de commande non définies sur \pagewidthet \pageheightet les commentais):

\documentclass{article}
\pagestyle{empty}
\usepackage{eso-pic}
\usepackage{pdfpages}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\paperwidth=319.999bp
\paperheight=239.999bp
%\pagewidth=319.999bp
%\pageheight=239.999bp
\begin{document}
\AddToShipoutPictureFG*{%
  \put(0,0){\begin{tikzpicture}[remember picture,overlay]
\draw [line width=1mm,opacity=.25] (current page.center) circle (3cm);
\draw[red, thick] ($(current page.north west)+(102 bp,-72 bp)$) -- ($(current page.north west)+(132 bp,-72 bp)$) -- ($(current page.north west)+(132 bp,-90 bp)$) -- ($(current page.north west)+(102 bp,-90 bp)$) -- cycle;
\end{tikzpicture}%
}}%
\includepdf[fitpaper=true]{example-image-a}%
\end{document}

2 AndreasMatthias Sep 14 2020 at 19:16

Utilisez l'option picturecommandde \includepdfet mettez-y vos tikzpicturetrucs:

\documentclass{article}
\usepackage{pdfpages}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}

\begin{document}
\includepdf[
  fitpaper=true,
  picturecommand={%
    \begin{tikzpicture}[remember picture,overlay]
      \draw [line width=1mm,opacity=.25] (current page.center) circle (3cm);
      \draw[red, thick]
        ($(current page.north west)+(102 bp,-72 bp)$) --
        ($(current page.north west)+(132 bp,-72 bp)$) --
        ($(current page.north west)+(132 bp,-90 bp)$) --
        ($(current page.north west)+(102 bp,-90 bp)$) -- cycle;
    \end{tikzpicture}}
]{example-image-a}
\end{document}

Notez qu'il picturecommandutilise lui - même \AddToShipoutPicturedu eso-picpackage, donc c'est exactement le bon endroit où mettre vos trucs de dessin.

1 cis Sep 14 2020 at 22:03

Basé sur cette méthode:

\documentclass[a4paper]{article}
\usepackage{pdfpages}
\usepackage{tikz}
\begin{document}
\includepdf[
fitpaper=true,
picturecommand={%
\begin{tikzpicture}[remember picture,overlay,
x={(current page.south east)},y={(current page.north west)}
]
% Help CoSy
\draw[help lines,xstep=.1,ystep=.1] (0,0) grid (1,1);
\foreach \x in {0,1,...,9} { \node [anchor=south] at (\x/10,0) {0.\x}; }
\foreach \y in {1,...,9} { \node [anchor=west] at (0,\y/10) {0.\y}; }
% Stuff
\draw[red, thick, rounded corners] (0.1,0.9) rectangle (0.25,0.75);
\draw [cyan, very thick] (0.5,0.5) circle[radius=2cm];
\draw[yellow, line width=4mm, ->] (0.7,0.1) -- (0.9,0.3);
\draw [blue, very thick] (current page.center) circle[radius=3cm];
\end{tikzpicture}}
]{example-image-a.pdf}
\end{document}