Подтвердить что ты не робот

Есть ли способ добавить метаданные автора к pdf, созданному из R

При создании PDF с графическим устройством pdf() в R можно легко добавить метаданные заголовка с аргументом title= в pdf(). Но нет очевидного способа добавления автора.

Глядя на код для pdf() в R, ключ, по-видимому, является C-функцией C_PDF, которая, по-видимому, не имеет аргумента автора и которая не в силах взломать. Есть ли другой способ, более удобный, чем вязание моего графического вывода в PDF файл, созданный LaTeX, включая информацию об авторе и сохранение времени, которое мы делаем вручную позже?

.External(C_PDF, file, old$paper, old$family, old$encoding, 
    old$bg, old$fg, old$width, old$height, old$pointsize, 
    onefile, old$pagecentre, old$title, old$fonts, version[1L], 
    version[2L], old$colormodel, old$useDingbats, old$useKerning, 
    old$fillOddEven, old$compress)

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

4b9b3361

Ответ 1

Вот несколько функций, которые получают и устанавливают метаданные Exif для любого из этих типов файлов, используя ExifTool.

Чтобы получить метаданные:

getexif <- function(file, exiftool='exiftool.exe', opts=NULL, 
                    intern=TRUE, simplify=FALSE) {
  # file: the file to be updated
  # exiftool: the path to the ExifTool binary
  # opts: additional arguments to ExifTool (optional)
  # intern: should a named vector of metadata be returned? (bool)
  # simplify: if intern==TRUE, should the results be returned as a named 
  #           vector (TRUE) or as a data.frame (FALSE)?
  arg <- c(opts, normalizePath(file))
  if(intern) {
    exif <- system2(normalizePath(exiftool), args=arg, stdout=TRUE)
    exif <- do.call(rbind, strsplit(exif, ' +: +', perl=T))
    row.names(exif) <- exif[, 1]
    exif[, 2, drop=simplify]
  } else {
    system2(normalizePath(exiftool), args=arg, stdout='')
  }
}

Чтобы установить метаданные:

setexif <- function(file, metadata, exiftool='exiftool.exe') {
  # file: the file to be updated
  # metadata: a named character vector or list containing metadata
  # exiftool: the path to the ExifTool binary
  exif <- sprintf('-%s="%s"', names(metadata), metadata)
  system2(exiftool, args=c(exif, file))
}

Здесь пример

pdf(f <- tempfile(fileext='.pdf'))
plot(runif(10))
dev.off()

toolpath <- 'c:/software/exiftool(-k).exe'


setexif(f, c(title = "foo", subject='bar', author = "Me"), toolpath)

getexif(f, toolpath)

##                            [,1]                                         
## ExifTool Version Number     "9.64"                                       
## File Name                   "file237c6f8d4dac.pdf"                       
## Directory                   "C:/Users/john/AppData/Local/Temp/RtmpSGqI6O"
## File Size                   "7.8 kB"                                     
## File Modification Date/Time "2014:06:17 10:50:22+10:00"                  
## File Access Date/Time       "2014:06:17 10:50:22+10:00"                  
## File Creation Date/Time     "2014:06:17 10:50:20+10:00"                  
## File Permissions            "rw-rw-rw-"                                  
## File Type                   "PDF"                                        
## MIME Type                   "application/pdf"                            
## PDF Version                 "1.4"                                        
## Linearized                  "No"                                         
## Create Date                 "2014:06:17 10:50:20"                        
## Modify Date                 "2014:06:17 10:50:20"                        
## Producer                    "R 3.1.0"                                    
## Creator                     "R"                                          
## Page Count                  "1"                                          
## XMP Toolkit                 "Image::ExifTool 9.64"                       
## Subject                     "bar"                                        
## Title                       "foo"                                        
## Author                      "Me"