Автоматическое позиционирование изображений и таблиц в PowerPoint Slide Officer

Привет, поэтому я пытаюсь написать свою собственную функцию, которая будет автоматически изменять размер и централизованно выравнивать изображения / таблицы, которые я генерирую из сотрудника. Функции top/left в add_image и add_table хороши, когда я добавляю каждую таблицу вручную, поскольку разные таблицы имеют разные размеры, но я не был уверен, как автоматически сделать это для изображений и таблиц различной формы. У меня есть следующий код для изображений:

Image <- function(PP,title,footer,pageNO,path){
  im <- load.image(path)
  width <- imager::width(im)
  height <- imager::height(im)
  ratio <- width/height
  if(ratio < 9.15 / 3.6){
    y <- 3.6
    x <- 3.6 * ratio
  }
  if(ratio >= 9.15 / 3.6){
    y <- 9.15 / ratio
    x <- 9.15
  }
  PP <- PP %>% 
    add_slide(layout = "Title and Content", master = "Office Theme") %>%
    ph_with_text(type = "title", str = title) %>%
    ph_with_text(type = "dt", str = format(Sys.Date())) %>%
    ph_with_img(type = "body", src = path, height = y, width = x) %>%
    ph_with_text(type = "ftr",str = footer) %>%
    ph_with_text(type = "sldNum", str = pageNO)
}

Затем я хотел бы выровнять это изображение по центру слайда, но не уверен, как бы я это сделал.

То же самое и для таблиц, но я понятия не имею, как это сделать, так как мне придется автоматически масштабировать ширину и высоту столбцов на основе исходной ширины и высоты гибкого изображения, так как я не хочу терять соотношение сторон, если нет это другой способ? Текущий код для этого: но он не делает изменения размера:

Slide <- function(PP,title,footer,pageNO,table){
  PP <- PP %>% 
    add_slide(layout = "Title and Content", master = "Office Theme") %>%
    ph_with_text(type = "title", str = title) %>%
    ph_with_text(type = "ftr",str = footer) %>%
    ph_with_text(type = "dt", str = format(Sys.Date())) %>%
    ph_with_flextable(value = table, type = "body") %>%
    ph_with_text(type = "sldNum", str = pageNO)
}

Большое спасибо заранее, любая помощь будет принята с благодарностью

1 ответ

Старый вопрос, но если кто-то смотрит здесь воспроизводимый пример, который делает следующее:

  • Создайте новую колоду PowerPoint;
  • Создать flextableтаблица, которую мы хотели бы включить;
  • Поместите таблицу в центр нового слайда; а также,
  • Запишите его в файл.

Вы можете расширить это для решения более конкретных проблем, например, используя шаблоны PowerPoint, используя officer::layout_properties()чтобы получить более подробную информацию о макетах и ​​так далее.

      library(tidyverse)
library(officer)
library(flextable)

# create a PowerPoint slide deck
deck <- officer::read_pptx()

# make a fletable with the first 5 rows of mtcars
deck_table <- mtcars %>%
  head(5) %>%
  flextable::flextable()

# get table dimensions
table_width <- sum(dim(deck_table)$widths)
table_height <- sum(dim(deck_table)$heights)

# get slide dimensions in inches
# these are from PowerPoint defaults for 3:4; widescreen width is 13.333 in
slide_width <- 10
slide_height <- 7.5

# find the left and top margins to centre the table
table_leftmargin <- (slide_width - table_width)/2
table_topmargin  <- (slide_height - table_height)/2

# add a slide, then add the table at the desired location
deck %>%
  officer::add_slide() %>%
  officer::ph_with(value = deck_table,
                   location = officer::ph_location(left = table_leftmargin,
                                                   top = table_topmargin))

# save to file
print(deck, "test.pptx")
Другие вопросы по тегам