元数据到从R创建的pdf

元数据到从R创建的pdf

本文介绍了有没有办法添加“作者"?元数据到从R创建的pdf的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当使用R中的pdf()图形设备创建PDF时,可以使用title =参数为pdf()轻松添加标题元数据.但是没有明显的增加作者的方法.

When creating a PDF with the pdf() graphics device in R, it is possible to add title metadata easily with the title= argument to pdf(). But there is no obvious way of adding an author.

看看R中pdf()的代码,关键似乎是C函数C_PDF,它显然没有作者的论点,而且超出了我的能力.是否有其他方法比将我的图形输出编织成LaTeX创建的PDF更方便,包括添加作者信息并保存我们稍后手动进行处理?

Looking at the code for pdf() in R, the key seems to be the C function C_PDF, which apparently does not have an author argument and which is beyond my capacity to hack. Is there some other way, more convenient than knitting my graphics output into a LaTeX-created PDF, of including author information and saving us doing it manually later?

.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)

我对此没有太大希望,因为这个更广泛的问题 ...

I don't have much hope of this as there was no satisfactory language-based answer to this broader question...

推荐答案

这里有几个函数可以为这些文件类型,使用 ExifTool .

Here are a couple of functions that get and set Exif metadata for any of these filetypes, using 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, ..., exiftool='exiftool.exe') {
  # file: the file to be updated
  # ...: metadata items
  # exiftool: the path to the ExifTool binary
  dots <- list(...)
  exif <- sprintf('-%s="%s"', names(dots), dots)
  system2(exiftool, args=c(exif, file))
}

这是一个例子

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

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


setexif(f, title = "foo", subject='bar', author = "Me", exiftool=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"

这篇关于有没有办法添加“作者"?元数据到从R创建的pdf的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-06 03:13