Vẽ trên hình nền

Sep 14 2020

Tôi muốn lấy các trang của một tệp PDF hiện có (chỉ đơn giản là hình ảnh) và vẽ một số hộp trên mỗi trang. (Các hộp giới hạn của các từ được phát hiện bởi một chương trình OCR bên ngoài.)

Những gì tôi đã thử cho đến nay:

  • có thể sử dụng \includepdf(từ pdfpagesgói) với tùy chọn [fitpaper=true]để làm cho các trang của PDF kết quả giống với các trang của PDF gốc.

  • có thể sử dụng TikZ để vẽ hình chữ nhật / đa giác, với tọa độ được chỉ định bằng cách sử dụng current page.north westvà một số số học (mà tôi nhận được từ câu trả lời này ), mặc dù có nhiều vấn đề:

    1. Chúng kết thúc trên một trang riêng biệt,

    2. Trang riêng biệt này có kích thước TeX (letter / A4) mặc định, không phải kích thước của PDF đi kèm (mặc dù điều này có thể được đặt rõ ràng)

Đây là những gì tôi có cho đến nay (sử dụng example-image-athay vì tệp PDF của tôi):

\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}

Kết quả trong hai trang (theo thứ tự khác nếu tôi đặt \includepdfsau):

Trả lời

2 Skillmon Sep 14 2020 at 17:33

Sử dụng eso-pic's \AddToShipoutPictureFG*ai có thể đạt được điều này (tôi đã nhận lỗi tự kiểm soát không xác định trên \pagewidthvà \pageheightvà nhận xét họ):

\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

Sử dụng tùy chọn picturecommandcủa \includepdfvà đưa nội dung của bạn tikzpicturevào đó:

\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}

Lưu ý rằng picturecommandbản thân nó sử dụng \AddToShipoutPicturetừ eso-picgói, do đó đây chính xác là nơi thích hợp để đặt nội dung vẽ của bạn.

1 cis Sep 14 2020 at 22:03

Dựa trên phương pháp này :

\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}