Создать PDF в дополнение к слову DOCX, используя офицер

Я использую сотрудник (используется для использования репортеров) в цикле для создания 150 уникальных документов. Однако мне нужно, чтобы эти документы были экспортированы из R в виде слова docx И pdfs.

Есть ли способ экспортировать документ, созданный с офицером в PDF?

1 ответ

Это возможно, но решение, которое у меня есть, зависит от libreoffice. Вот код, который я использую. Надеюсь, это поможет. Я жестко запрограммировал путь к libreoffice, тогда вам, вероятно, придется адаптировать или улучшить код для переменной cmd_,

Код преобразует файл PPTX или DOCX в PDF.

library(pdftools)
office_shot <- function( file, wd = getwd() ){
  cmd_ <- sprintf(
    "/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to pdf --outdir %s %s",
    wd, file )
  system(cmd_)

  pdf_file <- gsub("\\.(docx|pptx)$", ".pdf", basename(file))
  pdf_file
}
office_shot(file = "your_presentation.pptx")

Я использую RDCOMClient для преобразования документов, созданных в OfficeR, в PDF-файлы.

library(RDCOMClient)

file <- "C:/path/to your/doc.docx"
wordApp <- COMCreate("Word.Application") #creates COM object
wordApp[["Documents"]]$Open(Filename=file) #opens your docx in wordApp
wordApp[["ActiveDocument"]]$SaveAs("C:/path/to your/doc.pdf"), FileFormat=17) #saves as PDF 
wordApp$Quit() #quits the COM Word application

Я нашел FileFormat=17 бит здесь https://docs.microsoft.com/en-us/office/vba/api/word.wdexportformat

Я был в состоянии поместить вышеупомянутое в цикл, чтобы также быстро конвертировать несколько документов в PDF.

Надеюсь это поможет!

Есть способ конвертировать ваши docx в pdf. Есть функция convert_to_pdf из docxtractr пакет.

Обратите внимание, что эта функция использует LibreOffice для преобразования docx к pdf. Поэтому вам нужно установить LibreOffice раньше и написать путь к soffice.exe. Подробнее о путях для разных ОС читайте здесь.

Вот простой пример, как преобразовать несколько docx документы в pdfна машине с Windows. У меня установлены Windows 10 и LibreOffice 6.4. Представьте себе, что у вас есть X Документы Word, хранящиеся в data папку, и вы хотите создать такое же количество PDF в data/pdf папку (предварительно вам необходимо создать папку pdf).

library(dplyr)
library(purrr)
library(docxtractr)

# You have to show the way to the LibreOffice before
set_libreoffice_path("C:/Program Files/LibreOffice/program/soffice.exe")

# 1) List of word documents
words <- list.files("data/",
                    pattern = "?.docx",
                    full.names = T)

# 2) Custom function
word2pdf <- function(path){
  
  # Let's extract the name of the file
  name <- str_remove(path, "data/") %>% 
    str_remove(".docx")
  
  convert_to_pdf(path,
                 pdf_file = paste0("data/pdf/",
                                   name,
                                   ".pdf"))
  
}

# 3) Convert
words %>%
  map(~word2pdf(.x))
Другие вопросы по тегам