Как в R добавить текст в Powerpoint в произвольном месте, чтобы он унаследовал стиль?

Пакет R Officer очень хорош, позволяя вам вставлять текст в существующие заполнители в колоде PowerPoint. Например, этот код:

library(tidyverse)
library(officer)

pres <- (read_pptx()
  %>% add_slide(layout = "Title and Content", master = "Office Theme")
  %>% ph_with_text(type="body", str="placeholder")
  %>% ph_add_par(level=2)
  %>% ph_add_text("Foo")
  %>% ph_add_par(level=3)
  %>% ph_add_text("Bar")
  %>% ph_add_par(level=4)
  %>% ph_add_text("Baz")
  %>% print(target="bullet_example1.pptx"))

создает powerpoint с пулями, которые выглядят вот так. Однако кажется, что текст вставляется в произвольное место, я должен использовать функцию ph_empty_at () следующим образом:

pres <- (read_pptx()
  %>% add_slide(layout = "Title and Content", master = "Office Theme")
  %>% ph_empty_at(left=2, top=2, width=5, height=5)
  %>% ph_add_par(level=1)
  %>% ph_add_text("Placeholder")
  %>% ph_add_par(level=2)
  %>% ph_add_text("Foo")
  %>% ph_add_par(level=3)
  %>% ph_add_text("Bar")
  %>% ph_add_par(level=4)
  %>% ph_add_text("Baz")
  %>% print(target="bullet_example2.pptx"))

Однако это приводит к тому, что текст выглядит совсем по-другому и не учитывает аргумент уровней. . Кажется, текст не наследует стиль слайда.

Я спрашиваю, потому что мне нужно использовать заранее указанный шаблон PPT. Я могу сделать это с помощью существующего заполнителя и получить желаемый результат. Как я могу вставить подобный форматированный текст в произвольное место на слайде?


person bescoto    schedule 13.07.2017    source источник
comment
Если это не ошибка, я добавлю аргумент типа, чтобы новая форма могла наследовать от формы type ...   -  person David Gohel    schedule 15.07.2017
comment
Я не думаю, что это ошибка - функция состоит в том, чтобы добавить пустой заполнитель, и, глядя на код, кажется, что это происходит. Но было бы здорово унаследовать дополнительные функции от существующего заполнителя! PS спасибо за офицерскую посылку!   -  person bescoto    schedule 16.07.2017
comment
Дэвид добавил аргументы template_type и template_index к функции ph_empty_at пакета офицера. См. github.com/davidgohel/officer/issues/47. Итак, выше вы можете добавить template_type="body" и получить желаемый результат.   -  person bescoto    schedule 23.11.2017


Ответы (1)


Привет, Использование layout = "Blank" похоже, работает

pres <- (read_pptx()
     %>% add_slide(layout = "Blank", master = "Office Theme")
     %>% ph_empty_at(left=0, top=0, width=5, height=5)
     %>% ph_add_par(level=1)
     %>% ph_add_text("Placeholder")
     %>% ph_add_par(level=2)
     %>% ph_add_text("Foo")
     %>% ph_add_par(level=3)
     %>% ph_add_text("Bar")
     %>% ph_add_par(level=4)
     %>% ph_add_text("Baz")
     %>% ph_empty_at(left=5, top=5, width=5, height=5)
     %>% ph_add_par(level=1, id_chr = 3)
     %>% ph_add_text("Placeholder", id_chr = 3)
     %>% ph_add_par(level=2, id_chr = 3)
     %>% ph_add_text("Foo", id_chr = 3)
     %>% ph_add_par(level=3, id_chr = 3)
     %>% ph_add_text("Bar", id_chr = 3)
     %>% ph_add_par(level=4, id_chr = 3)
     %>% ph_add_text("Baz", id_chr = 3)
     %>% print(target="bullet_example2.pptx")
     )
person danilo mercurio    schedule 12.09.2017
comment
Я случайно отклонил ваш ответ @ danilo-mercurio, извините - person David Gohel; 17.09.2017
comment
В данном случае это хороший обходной путь, но он означает, что вы не можете указать макет. Пакет Officer теперь имеет явный template_type аргумент для ph_empty_at, поэтому вы выбираете любой макет, который хотите, и при этом ваш заполнитель наследует желаемый тип. - person bescoto; 23.11.2017
comment
Спасибо за ответ. Это было действительно полезно. Однако я не мог понять, как использовать template_index. Когда мы должны это использовать? Если я добавил слайд с макетом как Пустой, а затем добавляю в слайд заполнители с помощью ph_empty_at, как я могу использовать template_index в этом случае? - person Prince; 02.08.2018