Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to add "author" metadata to a pdf created from R

Tags:

r

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.

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

like image 930
Peter Ellis Avatar asked Sep 05 '13 23:09

Peter Ellis


People also ask

Can you add metadata to a PDF?

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.

How do I change the properties of a PDF?

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.

Why add metadata to PDF?

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.


1 Answers

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"  
like image 191
jbaums Avatar answered Oct 19 '22 03:10

jbaums