1 한국 R 컨퍼런스 발표자료

구글 드라이브에서 취합된 발표자 정보를 확인한다. “발표자료_동영상” 폴더에 각 발표자 발표자료 PDF 파일과 동영상을 저장시켜 추후 관리를 수월히 할 수 있도록 한다.

library(googledrive)
library(tidyverse)

# drive_auth()

rconf_pdf_raw <- drive_find(type = "pdf")

rconf_pdf <- rconf_pdf_raw %>%
  filter(str_detect(name, "^[0-9]{1,2}_.*\\.pdf$"))

rconf_pdf %>% 
  select(name)

2 구글 드라이브 다운로드

발표자료는 크기가 크지 않기 때문에 발표자료를 구글 드라이브에서 로컬 컴퓨터로 다운로드해서 작업한다. 파일 하나를 테스트로 다운로드 해보고, 정상동작되는 것을 확인하고 한번에 파일을 다운로드 한다.

# drive_download(rconf_pdf$name[1], path = glue::glue("data/rconf/{rconf_pdf$name[1]}"), overwrite = TRUE)
fs::dir_create("data/rconf")
download_files <- glue::glue("data/rconf/{rconf_pdf$name}")
walk2(rconf_pdf$name, download_files, drive_download, overwrite = TRUE)

# File downloaded:
#   * 1_박상훈.pdf
# Saved locally as:
#   * data/rconf/1_박상훈.pdf
# File downloaded:
#   * 0_오프닝.pdf
# Saved locally as:
#   * data/rconf/0_오프닝.pdf
# File downloaded:
#   * 3_문건웅.pdf
# Saved locally as:
#   * data/rconf/3_문건웅.pdf
# File downloaded:
#   * 2_이민호김상현.pdf
# Saved locally as:
#   * data/rconf/2_이민호김상현.pdf
# File downloaded:
#   * 6_이영록.pdf
# Saved locally as:
#   * data/rconf/6_이영록.pdf
# File downloaded:
#   * 5_이남신.pdf
# Saved locally as:
#   * data/rconf/5_이남신.pdf
# File downloaded:
#   * 8_김진환.pdf
# Saved locally as:
#   * data/rconf/8_김진환.pdf
# File downloaded:
#   * 9_이광춘.pdf
# Saved locally as:
#   * data/rconf/9_이광춘.pdf
# File downloaded:
#   * 15_Julia.pdf
# Saved locally as:
#   * data/rconf/15_Julia.pdf
# File downloaded:
#   * 7_황의찬.pdf
# Saved locally as:
#   * data/rconf/7_황의찬.pdf

3 방송용 PDF 한파일 작성

방송용으로 PDF 파일을 하나로 작성하는 작업을 수행한다.

3.1 첫장, 간지, 마지막장

먼저 첫장과, 마지막장, 그리고 간지를 준비해보자. PDF 파일로 완성을 할 것이라… 각 장을 모두 PDF 파일로 준비한다.

library(magick)
library(pdftools)

opening_pdf <- magick::image_read_pdf("data/rconf/0_오프닝.pdf")

park_pdf <- magick::image_read_pdf("data/rconf/1_박상훈.pdf")

## 첫장 --------------------------------------
opening_pdf[1] %>% 
  image_annotate(text = "start", size = 100, color = "red", location = "+200+200") %>% 
  magick::image_write("data/rconf/start.pdf", format = "pdf")

## 마지막 장 ---------------------------------
opening_pdf[length(opening_pdf)] %>% 
  image_annotate(text = "end", size = 100, color = "red", location = "+200+200") %>%   
  magick::image_write("data/rconf/end.pdf", format = "pdf")

## 간지 --------------------------------------
slipsheet <- image_read("fig/r-hexstickers.jpg")

slipsheet %>% 
  image_annotate(text = "Slipsheet", size = 177, color = "red", location = "+200+200") %>% 
  magick::image_write("data/rconf/slipsheet.pdf", format = "pdf")

간지 제작을 위해서 두가지 방식으로 나눠 진행되어야 한다. 먼저 배경 이미지로 사용되는 이미지의 크기와 발표 슬라이드 크기를 맞춰야 하기 때문에 다음과 같은 작업이 먼저 선행되어야 한다. R컨퍼런스 발표 템플릿에서 배경 이미지로 사용될 이미지를 선행 작업하여 PDF 파일로 제작한다. slipsheet_slide.html 파일이 간지로 사용될 HTML/PDF 파일이다.

3.2 발표자료 병합

PDF 발표자료를 모두 불러읽어 들여 이를 하나의 파일로 만드는 작업을 수행하자. 이를 위해서 각 발표자료 앞에 간지를 붙이는 작업을 먼저 수행하고 나서 최종적으로 각 파일을 결합한다.

library(pdftools)

fs::dir_create("data/rconf/output")

file_vector <- fs::dir_ls(path = "data/rconf", recurse = FALSE, glob = "*.pdf")
file_vector_mask <- str_detect(file_vector, "data/rconf/[0-9]")
Error in str_detect(file_vector, "data/rconf/[0-9]"): could not find function "str_detect"
slideshow_pdf <- file_vector[file_vector_mask]
Error in NextMethod("["): object 'file_vector_mask' not found
output_slideshow_pdf <- str_remove(slideshow_pdf, "data/rconf/")
Error in str_remove(slideshow_pdf, "data/rconf/"): could not find function "str_remove"
for(i in 1:length(slideshow_pdf)) {
  cat(i, "\n")
  pdftools::pdf_combine(c("data/rconf/slipsheet_from_template.pdf",
                          slideshow_pdf[i]), output = glue::glue("data/rconf/output/{output_slideshow_pdf[i]}"))
}
Error in eval(expr, envir, enclos): object 'slideshow_pdf' not found

최종 파일은 다음과 같이 하나의 파일로 결합이 가능하다.

file_with_slipsheet <- fs::dir_ls(path = "data/rconf/output", recurse = FALSE, glob = "*.pdf")

pdftools::pdf_combine(file_with_slipsheet, output = "data/rconf/slide_onefile.pdf")
 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com