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)))

Date: 24 sep 2023

Author: Christian Gimenez

Created: 2024-11-04 lun 01:31

Validate