4 min read

Convertir documentos de Word y Power Point a PDF en R

R cuenta con librerías capaces de ayudarnos a convertir archivos de Office a PDF, los cuales pueden ayudarnos cuando el Guardar como… nos queda corto.

Durante la primera mitad del año me tocó estar trabajando con infografías en Word (y PPTX) acerca de un proyecto del cual no puedo hablar porque todavía no se publica. En un punto, en el equipo llegamos a tener 512 archivos de word y un día resultó que teníamos que convertirlos todos a PDF. Para agravar las cosas, yo había estado trabajando en Power Point, y también teníamos que hacer la conversión.

El método tradicional para convertir archivos de office a PDF es utilizando la función de Guardar como… que ya viene en Word, o el Exportar de Power Point. Esta es la opción directa. Sin embargo… yo tenía que hacer esto 512 veces, lo cual lo hacía que el proceso fuese bastante tardado.

Quizá, si le mueves al R, sabrás que se puede trabajar con documentos parametrizados; esto es, documentos que cambian dependiendo de una base de datos. Sin embargo, como en el equipo se decidió que sería más práctico hacerlo en Word (porque generalmente, en un equipo de trabajo, no todos usan R, además de que Word es prácticamente un estándar de trabajo en las oficinas de todo el mundo, y quedaron más bonitos que lo que hubiese podido hacer).

Entonces, aprovechando mis conocimientos de programación y buscando una manera de automatizar el proceso encontré una forma de realizar esta transformación utilizando código de R, para el caso en el cual tengas que transformar miles y miles de Words a PDF.

Para que el código funcione se requiere lo siguiente:

  1. R instalado (y RStudio).

  2. Para que me funcionara a mí en mi Mac Pro M1 (2020), instalé una versión de LibreOffice; programa Open-Source de ofimática (el que generalmente viene para Línux). Si bien para Windows vi que existían métodos alternativos, creo que esta solución debería funcionar en una mayor cantidad de casos.

Instalación de LibreOffice

  1. Documentos a transformar.

Una vez que contamos con estos elementos, el siguiente código nos puede ayudar a la transformación:

Caso de Transformación de Word:

Para la transformación a Word vamos a utilizar el paquete {doconv} (disponible en el CRAN).

# Guardado automático en pdf:

# Librerias ----
library(doconv)    # Convertir a PDF
library(tidyverse) # Manejo de datos

# Carpeta de archivos WORD (donde tengo mis archivos) ----
# Cambiar a la ubicación de tu carpeta: 
origen <- "/Users/juvenalcampos/Downloads/Origen"

# Carpeta para depositar archivos PDF
# Crear una carpeta nueva si se requiere.
destino <- "/Users/juvenalcampos/Downloads/Destino"

# Proceso ----

# 1. Guardamos los archivos. 
archivos <- list.files(origen) 
direcciones <- str_c(origen, "/", list.files(origen))

# Aplicamos el bucle de transformación: 
lapply(seq_along(direcciones), function(j){

  # Usamos tryCatch por si algún paso se complica, el proceso no se detenga: 
  tryCatch({

    direccion_archivo <- direcciones[j]
    nombre_archivo <- archivos[j] %>%
      str_replace(pattern = ".docx", replacement = ".pdf")

    # Transformación: 
    docx2pdf(input =
               direccion_archivo,
             output =
               str_c(destino, "/", nombre_archivo))

    print(str_c(nombre_archivo))
  },
  
  # Imprimimos los errores, para ver donde ocurrió el problema: 
  error = function(e){print(str_c("Error en j = ", nombre_archivo))})
})

Caso del Power Point:

En este caso, me funcionó la librería {docxtractr} para realizar un proceso similar, solo que ahora con archivos de Power Point.

# Librerias:
library(tidyverse)
library(docxtractr)

# Carpeta de origen de los archivos: [CAMBIAR]: 
origen <- "/Users/juvenalcampos/Downloads/Origen"

# Carpeta para depositar archivos PDF
# Crear una carpeta nueva si se requiere.
destino <- "/Users/juvenalcampos/Downloads/Destino"

# Archivos: 
archivos <- list.files(root, 
                       full.names = TRUE, 
                       pattern = ".pptx")

# Bucle de transformación: 
lapply(seq_along(archivos), function(i){
  
  tryCatch({
  convert_to_pdf(path = archivos[i],
                 pdf_file = str_c(destino, "/", 
                                  archivos[i] %>%
                                    str_remove(pattern = ".pptx"),
                                  ".pdf"))
  print(i)},
  
  # Imprimimos los errores, para ver donde ocurrió el problema: 
  error = function(e){print(str_c("Error en = ", archivos[i]))})
  
})

Observaciones:

Checa que el documento no tenga el Control de cambios activado, o el pdf se va a generar con comentarios incluídos.

Lógica del proceso:

La lógica del proceso (o al menos como yo la entendí) consiste en que R ejecuta una acción que le manda el archivo de Word a LibreOffice con la orden de transformarlo a PDF. La transformación no se hace en R, solo se gestiona el bucle de envíos al programa que lo hace.

Espero que este proceso les sirva a aquellas personas que se vean en una situación similar; siempre que se pueda automatizar algún proceso tedioso en la oficina ( entendido por mí como algo que hacemos igual por más de tres veces con audífonos puestos) hay que tratar de ver si se puede automatizar.

Cualquier duda u observación, mandarla a mi correo juvenalcampos.publicaciones@gmail.com o dejar el comentario en la parte de abajo: