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

Как добавить сюжет к существующему файлу PDF

Я хочу добавить сюжет к существующему PDF файлу после того, как dev.off() был вызван *. После прочтения pdf() файл справки и после прочтения Q и A здесь и здесь, я довольно уверен, что это невозможно сделать в Р. Но, возможно, у некоторых из вас умнее людей есть решение, которое я не смог найти.

pdf("Append to me.%03d.pdf",onefile=T)
plot(1:10,10:1) #First plot (page 1)
dev.off()
pdf("Append to me.%03d.pdf",onefile=T)
plot(1:10,rep(5,10)) #Want this one on page 2
dev.off()

* Это не дубликат вопросов, связанных выше, потому что я хочу, чтобы добавить в файл PDF <я > после устройство PDF было закрыто.

4b9b3361

Ответ 1

Вы можете использовать recordPlot для хранения каждого графика в list, а затем записать их в pdf файл в конце с помощью replayPlot. Вот пример:

num.plots <- 5
my.plots <- vector(num.plots, mode='list')

for (i in 1:num.plots) {
    plot(i)
    my.plots[[i]] <- recordPlot()
}
graphics.off()

pdf('myplots.pdf', onefile=TRUE)
for (my.plot in my.plots) {
    replayPlot(my.plot)
}
graphics.off()

Ответ 2

Если вы хотите установить небольшую бесплатную независимую от платформы pdftk, вы можете использовать системный вызов от R до пусть он сшит все ваши фигуры вместе:

## A couple of example pdf docs
pdf("Append to me.1.pdf")
plot(1:10,10:1)
dev.off()

pdf("Append to me.2.pdf")
plot(1:10,rep(5,10)) 
dev.off()

## Collect the names of the figures to be glued together
ff <- dir(pattern="Append to me")
## The name of the pdf doc that will contain all the figures
outFileName <- "AllFigs.pdf"

## Make a system call to pdftk
system2(command = "pdftk",
        args = c(shQuote(ff), "cat output", shQuote(outFileName)))

## The command above is equiv. to typing the following at the system command line
## pdftk "Append to me.1.pdf" "Append to me.2.pdf" cat output "AllFigs.pdf"

Ответ 3

Это ужасно хаки и, вероятно, противоречит моей ограниченной оболочке UNIX, но она работает для меня в ящике Fedora 17 с пакетом pdfjam установлен (не R-пакет, а из репозитория YUM)

pdf("pdf1.pdf")
plot(1:10)
dev.off()

pdf("| pdfjoin --outfile \"pdf2.pdf\" && pdfjoin pdf1.pdf pdf2.pdf --outfile pdf1.pdf && rm pdf2.pdf")
plot(10:1)
dev.off()

Выход в R:

> pdf("| pdfjoin --outfile \"pdf2.pdf\" && pdfjoin pdf1.pdf pdf2.pdf --outfile pdf1.pdf && rm pdf2.pdf")## && pdfunite joined.pdf tmp.pdf joined.pdf && rm tmp.pdf")
> plot(10:1)
> dev.off()
          ----
  pdfjam: This is pdfjam version 2.08.
  pdfjam: Reading any site-wide or user-specific defaults...
          (none found)
  pdfjam: No PDF/JPG/PNG source specified: input is from stdin.
  pdfjam: Effective call for this run of pdfjam:
          /usr/bin/pdfjam --fitpaper 'true' --rotateoversize 'true' --suffix joined --outfile pdf2.pdf -- /dev/stdin - 
  pdfjam: Calling pdflatex...
  pdfjam: Finished.  Output was to 'pdf2.pdf'.
          ----
  pdfjam: This is pdfjam version 2.08.
  pdfjam: Reading any site-wide or user-specific defaults...
          (none found)
  pdfjam: Effective call for this run of pdfjam:
          /usr/bin/pdfjam --fitpaper 'true' --rotateoversize 'true' --suffix joined --outfile pdf1.pdf -- pdf1.pdf - pdf2.pdf - 
  pdfjam: Calling pdflatex...
  pdfjam: Finished.  Output was to 'pdf1.pdf'.
null device 
          1

В принципе, pdfjoin будет принимать входные данные из stdin, если это единственный входной файл, поэтому я передаю вывод из pdf() в программу pdfjoin и задаю выходной файл с помощью аргумента --outfile. Затем с помощью && присоединяется исходный pdf1.pdf только что созданный pdf2.pdf, указав, что выходной PDF pdf1.pdf, имя исходного PDF.

Ответ 4

Недавно я нашел эту отличную работу (не пытаюсь утверждать ее как свою).

https://jonkimanalyze.wordpress.com/2014/07/24/r-compile-png-files-into-pdf/

Это не совсем то, о чем просил OP, но причина, по которой мне это нравится, заключается в том, что у меня часто есть довольно плотные диаграммы рассеяния и другие сюжеты, которые не особенно хорошо реагируют на изменение размера окна и т.д. в формате pdf. Однако мне нужно создать многостраничный вывод. Поэтому, если графики плотны по плотности, я делаю их как .png, а затем использую указанную выше функцию для рекомбинации в конце.

merge.png.pdf <- function(pdfFile, pngFiles, deletePngFiles=FALSE) {

  pdf(pdfFile)

  n <- length(pngFiles)

  for( i in 1:n) {


    pngFile <- pngFiles[i]

    pngRaster <- readPNG(pngFile)

    grid.raster(pngRaster, width=unit(0.8, "npc"), height= unit(0.8, "npc"))

    if (i < n) plot.new()

  }

  dev.off()

  if (deletePngFiles) {

    unlink(pngFiles)
  }

}

Ответ 5

pdf("myFile.pdf",onefile=T)

plot(1:10,10:1) #First plot (page 1)
plot(1:10,rep(5,10)) #Want this one on page 2

dev.off()