UP | HOME |

Extractor de tablas de pdf con R

2026-05-12

Extractor de tablas de pdf con R

En ciertos documentos pdf aparecen tablas de datos. Y yo necesito analizarlas. En este ejemplo la tabla está publicada en tres páginas consecutivas de un documento pdf. Mostramos la primera página.

pdftablaejemplo260503.png

Para extraer esta información existen paquetes de R que usan Java o se conectan con proveedores de internet. Aquí presento una versión que funciona relativamente bien para tablas sencillas. La función pdf_table_page se define en pdftable.R.

library(data.table)
library(pdftools)
source("https://torres.epv.uniovi.es/centon/graphics/pdftable.R")

## Descargamos un documento pdf. La tabla que nos interesan está publicada entre las páginas 22, 23 y 24. Las tenemos que extraer y juntar.
pdffile <-  "prevision.pdf"
url <- "https://socialasturias.asturias.es/documents/1536816/0/PREVISIO%CC%81N-DEMANDA-CUIDADOS-RESIDENCIALES-PERSONAS-MAYORES.pdf/79b87bce-f490-ed33-d387-e2352b98a5ba?t=1736504397392"
download.file(url, destfile = pdffile, method="curl")

## Visualizamos una página
image <- pdf_render_page(pdffile,page=22,dpi=72,numeric=TRUE)
plot_array(image)

## Extraemos la tabla principal de cada una de estas páginas.
ldt <- lapply(22:24,
              function(page)
                  pdf_table_page(pdffile,
                                 page,
                                 alltables= FALSE, # Solo la tabla principal de cada página
                                 gaprows = NULL, # Puntos de separación entre líneas. Prueba con gaprows =4L, 5L o 6L, o NULL para automático.
                                 gapcolumns = 6L,
                                 verbose = 0L))
rbindlist(ldt) # Las juntamos
    pagina  fila                  columna_1 columna_2 columna_3 columna_4 columna_5
     <int> <int>                     <char>     <int>     <int>     <num>     <num>
 1:     22     5                       Boal        68        77      11.5      31.3
 2:     22     6                  Castropol       142        18      13.4       4.7
 3:     22     7                      Coaña       148        41      15.8      12.9
 4:     22     8                  El Franco       187        96      17.9      23.3
 5:     22     9          Grandas de Salime        34        18      11.9      14.5
 6:     22    10                     Illano       120        82      77.9     115.5
 7:     22    11                     Valdés       310       313       8.2      21.1
 8:     22    12                      Navia       398        70      18.5       9.0
 9:     22    13                      Pesoz       111        32     194.7     188.2
10:     22    14        San Martín de Oscos       140        76      91.5     133.3
11:     22    15     Santa Eulalia de Oscos        55        14      37.2      20.3
12:     22    16         San Tirso de Abres        72        34      46.5      52.3
13:     22    17         Tapia de Casariego       151        34      13.7       8.0
14:     22    18                  Taramundi        99        44      37.5      41.9
15:     22    19                    Vegadeo        77        29       6.6       6.8
16:     22    20        Villanueva de Oscos        79        36      76.0      83.7
17:     22    21                   Villayón        50        13      10.5       7.2
18:     22    22               Total ÁREA I      1485        81      10.9       1.6
19:     22    23                    Allande        71        50      11.0      18.2
20:     22    24          Cangas del Narcea       250        23       6.9       1.8
21:     22    25                     Degaña       142        93      62.3     114.8
22:     22    26                      Ibias        11         7       2.3       3.5
23:     22    27                      Tineo       264       225       8.8      18.3
24:     22    28              Total ÁREA II       210       112       2.6       3.6
25:     22    29                     Avilés      6520      4241      33.3      61.9
26:     22    30                 Castrillón      3106       821      55.4      52.0
27:     22    31        Corvera de Asturias      2096       850      57.6      79.1
28:     22    32                  Cudillero        54        78       3.4      13.1
29:     22    33                      Gozón       559       126      19.1      12.3
30:     22    34                      Illas        94        28      32.2      28.9
31:     22    35             Muros de Nalón        60        10      10.2       4.6
32:     22    36                     Pravia       143       161       6.5      18.8
33:     22    37             Soto del Barco       182         0      16.3       0.0
34:     22    38             Total ÁREA III     12420      5817      33.1      45.9
35:     23     2        Belmonte de Miranda        36        50       6.0      20.5
36:     23     3                    Bimenes        45        48       8.6      22.6
37:     23     4                   Cabranes        12        26       3.6      16.5
38:     23     5                    Candamo        14        26       2.1      10.5
39:     23     6                      Grado       271       334       9.9      31.1
40:     23     7                    Llanera       856       152      31.5      18.1
41:     23     8                     Morcín       201       176      28.7      60.1
42:     23     9                       Nava       127        70       9.7      15.1
43:     23    10                     Noreña       226        61      21.4      16.3
44:     23    11                     Oviedo     15154      3050      30.3      18.6
45:     23    12                     Proaza        75         9      27.9      10.5
46:     23    13                     Quirós        40         3       9.7       2.1
47:     23    14               Las Regueras        70        60      12.0      33.9
48:     23    15           Ribera de Arriba       101        76      22.9      43.9
49:     23    16                      Riosa       192       157      36.5      78.9
50:     23    17                      Salas       224       152      13.1      20.7
51:     23    18              Santo Adriano        89        37      92.7     100.0
52:     23    19                    Sariego       108        48      31.2      36.6
53:     23    20                      Siero      3068       913      27.9      25.2
54:     23    21                    Somiedo        15        22       3.5      11.1
55:     23    22                    Teverga        96        73      16.4      32.9
56:     23    23            Yernes y Tameza        83        36     207.5     300.0
57:     23    24              Total ÁREA IV     19987      4081      25.9      15.7
58:     23    25                    Carreño       303        13      11.0       1.4
59:     23    26                      Gijón     24210      7455      34.2      33.2
60:     23    27               Villaviciosa        42       350       1.0      24.0
61:     23    28               Total ÁREA V     24471      7092      31.5      28.5
62:     23    29                     Amieva        72        11      29.8      11.0
63:     23    30                   Cabrales        32        19       5.3       8.1
64:     23    31             Cangas de Onís         5        97       0.3      16.9
65:     23    32                    Caravia       136        23     102.3      67.6
66:     23    33                    Colunga        73        89       6.6      20.1
67:     23    34                     Llanes        57       327       1.6      25.6
68:     23    35                       Onís        57        20      23.4      19.0
69:     23    36                     Parres        18        69       1.3      12.3
70:     23    37           Peñamellera Alta        65        12      32.0      15.0
71:     23    38           Peñamellera Baja        13        29       3.4      19.3
72:     23    39                     Piloña       341       273      15.9      30.7
73:     23    40                      Ponga       140        12      64.2      23.5
74:     24     2                 Ribadedeva        98        17      20.0       9.3
75:     24     3                Ribadesella       211        68      13.4      11.9
76:     24     4              Total ÁREA VI       454       774       3.3      14.7
77:     24     5                      Aller         6       250       0.2      20.1
78:     24     6                       Lena        86        88       2.9       7.9
79:     24     7                     Mieres       987      1211       9.4      30.7
80:     24     8             Total ÁREA VII      1079      1549       6.5      24.6
81:     24     9                       Caso        11        60       1.9      30.3
82:     24    10                    Langreo       513       327       5.1       9.5
83:     24    11                    Laviana       570       260      17.2      22.9
84:     24    12 San Martín del Rey Aurelio       637       500      13.8      31.7
85:     24    13                Sobrescobio        67        38      28.8      38.8
86:     24    14            Total ÁREA VIII      1798      1065       9.6      16.5
87:     24    15                   ASTURIAS     61904     18799      23.5      20.9
    pagina  fila                  columna_1 columna_2 columna_3 columna_4 columna_5