5

我在循环中使用官员(用于使用记者)来创建 150 个独特的文档。但是,我需要将这些文档从 R 导出为 word docx 和 pdf。

有没有办法将用官员创建的文档导出为pdf?

4

3 回答 3

8

这是可能的,但我的解决方案取决于 libreoffice。这是我正在使用的代码。希望它会有所帮助。我已经对 libreoffice 路径进行了硬编码,那么您可能必须调整或改进 variable 的代码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")
于 2018-09-18T14:49:23.617 回答
3

我一直在使用 RDCOMClient 将我的 OfficeR 创建的 docx 转换为 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

我已经能够将上述内容放在一个循环中,以快速将多个 docx 转换为 PDF。

希望这可以帮助!

于 2018-12-19T04:24:35.107 回答
2

有一种方法可以将您的docx转换为pdf. 包中有一个功能convert_to_pdfdocxtractr

请注意,此函数使用 LibreOffice 转换docxpdf. 所以你必须先安装 LibreOffice 并写入soffice.exe. 在此处阅读有关不同操作系统路径的更多信息。

这是一个简单的例子,如何在 Windows 机器上转换多个docx文档。pdf我安装了 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))
于 2020-09-21T08:04:18.267 回答