Hao Zhu | f1873a4 | 2019-01-07 15:57:01 -0500 | [diff] [blame] | 1 | #' Render the table as an format-independent image and use it in rmarkdown |
| 2 | #' |
| 3 | #' @description This function generates a temporary png file using `save_kable` |
| 4 | #' and then try to put it in an rmarkdown document using |
| 5 | #' `knitr::include_graphics`. |
| 6 | #' |
| 7 | #' @param x kable input. Either HTML or LaTeX |
| 8 | #' @param width Image width in inches. (1 inch = 2.54 cm) |
| 9 | #' @param height Image height in inches. (1 inch = 2.54 cm) |
Hao Zhu | b361fb5 | 2019-01-15 12:24:10 -0600 | [diff] [blame] | 10 | #' @param file By default, as_image saves to an temp file, which works for |
| 11 | #' normal rmarkdown. However if you are using things like xaringan, which can't |
| 12 | #' be a standalone html, you can specify this file be the path you need, eg. |
| 13 | #' "img/something.png" |
| 14 | #' |
Hao Zhu | f1873a4 | 2019-01-07 15:57:01 -0500 | [diff] [blame] | 15 | #' @param ... Additional arguments passed to save_kable. |
| 16 | #' |
| 17 | #' |
| 18 | #' @export |
Hao Zhu | 62f5031 | 2019-01-15 15:19:29 -0600 | [diff] [blame] | 19 | as_image <- function(x, width = NULL, height = NULL, file = NULL, ...) { |
Hao Zhu | f1873a4 | 2019-01-07 15:57:01 -0500 | [diff] [blame] | 20 | if (is.null(width) + is.null(height) == 0) { |
| 21 | message("Both width and height were defined. Use width only by default. ") |
| 22 | height <- NULL |
| 23 | } |
| 24 | |
Hao Zhu | 62f5031 | 2019-01-15 15:19:29 -0600 | [diff] [blame] | 25 | if (is.null(file)) { |
| 26 | temp_png <- tempfile(fileext = ".png") |
| 27 | } else { |
| 28 | temp_png <- file |
| 29 | } |
| 30 | |
| 31 | |
Hao Zhu | f1873a4 | 2019-01-07 15:57:01 -0500 | [diff] [blame] | 32 | temp_img <- save_kable(x = x, file = temp_png, ...) |
| 33 | |
| 34 | img_dpi <- 300 |
| 35 | |
| 36 | if (is.null(width) + is.null(height) <= 1 & is.null(attr(temp_img, "info"))) { |
| 37 | warning("You need to install magick in order to use width/height in ", |
| 38 | "as_image. ") |
| 39 | } else { |
| 40 | if (!is.null(width)) { |
| 41 | img_dpi <- attr(temp_img, "info")$width / width |
| 42 | } |
| 43 | if (!is.null(height)) { |
| 44 | img_dpi <- attr(temp_img, "info")$height / height |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | include_graphics(temp_png, dpi = img_dpi) |
Hao Zhu | f1873a4 | 2019-01-07 15:57:01 -0500 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | |