确定ghostscript版本

时间:2013-01-16 19:38:11

标签: r

我曾经做过一个关于将graphis与外部程序结合起来的博客,并且收到了读者(-click here-)关于在R中使用ghostscript完全实现这一点的极好评论,如下所示。我最近一直在使用它,我想与其他人分享。我想修改它以使函数更直观,并且检测ghostscript类型是我想要做但不能做的一个mod。通过.Platform可轻松完成unix与windows的对比。关键点是我奋斗的窗户32和64。

如何使用R来检测哪个ghostscript版本(gswin32c或gswin64c)正在运行?仅仅看一下计算机的规格并不够好,因为我在Win 64机器上运行gswin32c。我们的想法是完全删除os参数或将其设置为NULL并让函数尝试访问此信息。

mergePDF <- function(infiles, outfile, os = "UNIX") {
    version <- switch(os,
        UNIX = "gs",
        Win32 = "gswin32c",
        Win64 = "gswin64c")
    pre = " -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="
    system(paste(paste(version, pre, outfile, sep = ""), infiles, collapse = " "))
}


pdf("file1.pdf", width = 10, height = 8)
plot(1:10, col="red", pch = 19)
dev.off()

pdf("file2.pdf", width = 16, height = 8)
plot(1:10)
dev.off()

mergePDF("file1.pdf file2.pdf", "mergefromR.pdf", "Win32")

1 个答案:

答案 0 :(得分:4)

泰勒,伙计。我是不是已被降级为Stack Ove- R -flow同行到您博客的“读者”?或者是促销活动;)

这对我来说有些神圣,但应该完成工作。将其添加为函数的前几行并删除os参数:

testme <- c(UNIX = "gs -version", 
            Win32 = "gswin32c -version", 
            Win64 = "gswin64c -version")
os <- names(which(sapply(testme, system) == 0))

我使用了-version开关,因此R不会尝试不必要地加载Ghostscript。

在我的Ubuntu系统上,当我运行它时,os按预期返回UNIX,并且在我安装了32位版本Ghostscript的Windows系统上,它返回{{ 1}}。在运行32位GS的64位机器上试一试,让我知道它是如何工作的。


更新

在阅读Win32system()的帮助页面后,我了解了system2(),这似乎正是您正在寻找的内容。这是我的Ubuntu系统的实际操作:

Sys.which()

因此,可以在Sys.which(c("gs", "gswin32c", "gswin64c")) # gs gswin32c gswin64c # "/usr/bin/gs" "" "" names(which(Sys.which(c("gs", "gswin32c", "gswin64c")) != "")) # [1] "gs" 函数中完全跳过OS规范:

mergePDF()

您可能想要进行一些错误检查。如果mergePDF <- function(infiles, outfile) { gsversion <- names(which(Sys.which(c("gs", "gswin32c", "gswin64c")) != "")) pre = " -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=" system(paste(paste(gsversion, pre, outfile, sep = ""), infiles, collapse = " ")) } 的长度是&gt;例如,1或者为0,您可能希望停止该功能并提示用户安装Ghostscript或验证其Ghostscript版本。