UP | HOME |

Imprimir un documento aumentando la letra

2025-08-04

Imprimir un documento aumentando la letra

A veces conviene imprimir un documento para revisarlo con calma. Desafortunadamente, la letra resulta tan pequeña que la presbicia impide leerlo. Algunos compañeros lo solucionan recortando a mano el documento antes de imprimirlo.

twopages.png

En mi caso, además de recortarlo, lo imprimo aumentando la escala del documento. Así, un documento en pdf de tamaño A4 lo convierto en otro documento, también de tamaño A4, pero donde las páginas originales aparecen como si fueran un A3. El resultado final es un documento con el doble de páginas que el original que se lee de maravilla.

Dejo aquí el código en R que automatiza el proceso. Usa LaTeX para reescalarlo.

  ## Print an A4 pdf file as an A3 file  
library(pdftools)


inputfile <- "myfile.pdf"
imprimir <- TRUE
output <- "pp.tex"

# Extract  data for all pages
data <- pdf_data(inputfile)
getboundingboxpage <- function(datapage){
    if (nrow(datapage) == 0) {
    return(data.frame(llx = 0, lly = 0, urx = 595.2756, ury = 841.89))
  }
    data.frame(llx=min(datapage[["x"]]),
               lly=min(datapage[["y"]]),
               urx=max(datapage[["x"]] + datapage[["width"]]+10),
               ury=max(datapage[["y"]] + datapage[["height"]]))    
}
## Ajustamos lo que queremos ver en cada página
## La Y en R es al revés que en LaTeX
datos <- cbind(do.call("rbind",lapply(data,getboundingboxpage)),pdf_pagesize(inputfile))
datos[["page"]] <- 1:nrow(datos)
datos[["texllyb"]]  <-   datos[["bottom"]]-datos[["top"]]-datos[["ury"]]
datos[["texuryb"]]  <-  datos[["texllyb"]] + ceiling((datos[["ury"]]-datos[["lly"]])/1.9)
datos[["texurya"]]  <-  datos[["bottom"]]-datos[["top"]]-datos[["lly"]]
datos[["texlla"]]  <-  datos[["texurya"]] - ceiling((datos[["ury"]]-datos[["lly"]])/1.9)
cat("The PDF file has", nrow(datos), "pages.\n")

## Creamos el código latex y lo compilamos
latex_code <- paste(
    "\\documentclass[landscape]{article}",
    "\\usepackage[a4paper, margin=0in]{geometry}",  
    "\\usepackage{graphicx}",
    "\\pagestyle{empty}",  
    "\\begin{document}"
  )
  ## Cada página original se divide en dos páginas.
for(i in 1:nrow(datos)){
    imagea <- paste(
        "\\resizebox{0.99\\paperwidth}{0.99\\paperheight}{",
        "\\includegraphics[page=",
        i,
        ",viewport=",
        datos[["llx"]][i], datos[["texlla"]][i], datos[["urx"]][i], datos[["texurya"]][i],
        ",clip=true]{",
        inputfile,
        "}}")
     imageb <- paste(
        "\\resizebox{0.99\\paperwidth}{0.99\\paperheight}{",
        "\\includegraphics[page=",
        i,
        ",viewport=",
        datos[["llx"]][i], datos[["texllyb"]][i], datos[["urx"]][i], datos[["texuryb"]][i],
        ",clip=true]{",
        inputfile,
        "}}")
    latex_code <- paste(latex_code,"\n\n",imagea,"\n\n",imageb)
}
latex_code <- paste(latex_code,"\\end{document}")
cat(latex_code,sep="\n",file=output)


tools::texi2pdf(output, clean = TRUE, quiet = TRUE)
file.remove(output)


if(imprimir){
    newfile <- sub("\\.tex$", ".pdf", output)
    system(paste("lpr", newfile))
    file.remove(newfile)
}