My PDF
Table of Contents
1. Convertir coordenadas
1.1. Proporciones
Las proporciones se calcularon comparando dos punto, uno relativo al PDF y otro relativo a la página. La posición relativa al PDF se obtuvo buscando un texto con pdf-isearch-search-page
, que devuelve dichas coordenadas. Luego, la posición relativa con el siguiente código:
(defun my-pdf-get-view-relative-position () "Get the view relative position from the mouse click." (interactive) (message "%s" (posn-object-x-y (pdf-util-read-image-position "Click para obtener la posición relativa"))))
(defun my-pdf-get-relative-position (list-of-edges) "Get the image relative position from the selected region." (interactive (list (pdf-view-active-region t))) (message "%s" list-of-edges))
Una vez obtenido los valores para un mismo punto, se puede calcular la proporción. La posición relativa al PDF es una lista de cuatro elementos (LEFT TOP RIGHT BOTTOM)
y la posición de la imágen está dada por una lista de (X Y)
.
A continuación se calcula una proporción para X e Y.
1.1.1. Proporción X
Una vez obtenido los valores, el cálculo es (/ X LEFT)
. El resultado es el siguiente:
(defconst my-pdf-x-proportion 0.0019377162629757784 "X proportion between PDF and relative coordinates. Proportion between PDF left/right coordinates and current page coordinates with reseted scale.")
1.1.2. Proporción Y
Una vez obtenido los valores, el cálculo es (/ Y TOP)
. El resultado es el siguiente:
(defconst my-pdf-y-proportion 0.001220730538129115 "Y proportion between PDF and relative coordinates. Proportion between PDF left/right coordinates and current page coordinates with reseted scale.")
1.1.3. Convertir coordenadas PDF a relativas function
(defun my-pdf-coord-to-relative (list) "Convertir coordenadas PDF a relativas a la página." (let ((left (car list)) (top (nth 1 list)) (right (nth 2 list)) (bottom (nth 3 list))) (list (* left my-pdf-x-proportion) (* top my-pdf-y-proportion) (* right my-pdf-x-proportion) (* bottom my-pdf-y-proportion))))
2. Generar una anotación
2.1. Al comienzo de un texto en el PDF
(defun my-pdf-annotate-text (string-to-search) (interactive "MString to search? ") (pdf-view-scale-reset) (let* ((pdf-coord (caar (pdf-isearch-search-page string-to-search))) (rel-coord (my-pdf-coord-to-relative pdf-coord))) (pdf-annot-add-text-annotation (cons (car pdf-coord) (cadr pdf-coord))) (pdf-annot-add-highlight-markup-annotation rel-coord)))