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.
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...
Choose File > Properties. Click the Description tab, and type the author's name, subject, and keywords. (Optional) Click Additional Metadata to add other descriptive information, such as copyright information.
Choose File > Properties, and then select Custom. To add a property, type the name and value, and then click Add. To change the properties, do any of the following, and then click OK: To edit a property, select it, change the Value, and then click Change.
Adding metadata to your document increases the searchability of your document. It also allows software applications to display information about the document to give the user enough information to determine if this is the document contains the information they are looking for.
Here are a couple of functions that get and set Exif metadata for any of these filetypes, using ExifTool.
To get metadata:
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='')
}
}
To set metadata:
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))
}
Here's an example
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"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With