用php脚本把Rstudio公司的所有cheatsheet合并

R studio公司毕竟是商业化公司,在R语言推广方面做得很棒。网站什么总共有9个cheatsheet,R语言入门完全可以把这个当做笔记,写代码随时查用!

我批量下载了所有,但是想打印的时候,发现挺麻烦的,因为我不知道批量打印的方法,索性我还是半个程序猿,所以搜索了一下批量合并pdf的方法,这样就可以批量打印了,也方便传输这个文件。

其实如果在linux系统里面,一般都会自带pdf toolkit工具,里面有命令可以合并PDF文档。

正好我搜索到了一个比较好玩的实现方法,就是PHP脚本,我还是第一次听说PHP也可以来当做脚本运行,简单浏览了一下,发现跟perl其实差不多,它需要require一些其它public的php脚本,perl就是需要载入一些模块。

首先列出所有下载地址,用wget批量来下载:

http://www.rstudio.com/wp-content/uploads/2016/05/base-r.pdf

http://www.rstudio.com/wp-content/uploads/2016/02/advancedR.pdf

http://www.rstudio.com/wp-content/uploads/2015/03/rmarkdown-reference.pdf

https://www.rstudio.com/wp-content/uploads/2016/01/rstudio-IDE-cheatsheet.pdf

https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

https://www.rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf

https://www.rstudio.com/wp-content/uploads/2015/03/ggplot2-cheatsheet.pdf

https://www.rstudio.com/wp-content/uploads/2015/06/devtools-cheatsheet.pdf

https://www.rstudio.com/wp-content/uploads/2015/02/shiny-cheatsheet.pdf

然后写一个PHP函数,get到待合并目录下面的所有pdf文件:

<?php

$dir="./Rstudio_cheatsheets/";

$file=array_diff(scandir($dir),array('..','.'));

print_r($file);

?>

上面的代码相当于简单的PHP语法入门,其实这个语言感觉跟perl挺像的,就是列出文件夹里面的文件。

1

然后需要下载两个PHP压缩包,解压到当前文件夹

FPDF: http://www.fpdf.org/en/download.php

FPDI: https://www.setasign.com/products/fpdi/downloads

然后写一个脚本来实现合并的功能。

2

这个语法对我来说很诡异,最后居然还报错!!!

PHP Fatal error:  Uncaught exception 'Exception' with message 'This document (/home/jmzeng/tmp/test_php/Rstudio_cheatsheets/advancedR.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI. (See https://www.setasign.com/fpdi-pdf-parser for more details)' in /home/jmzeng/tmp/test_php/pdf_parser.php:322

Stack trace:

#0 /home/jmzeng/tmp/test_php/pdf_parser.php(195): pdf_parser->_readXref(Array, 116)

#1 /home/jmzeng/tmp/test_php/fpdi_pdf_parser.php(64): pdf_parser->__construct('/home/jmzeng/tm...')

#2 /home/jmzeng/tmp/test_php/fpdi.php(123): fpdi_pdf_parser->__construct('/home/jmzeng/tm...')

#3 /home/jmzeng/tmp/test_php/fpdi.php(101): FPDI->_getPdfParser('/home/jmzeng/tm...')

#4 /home/jmzeng/tmp/test_php/merge_pdf.php(11): FPDI->setSourceFile('advancedR.pdf')

#5 {main}

thrown in /home/jmzeng/tmp/test_php/pdf_parser.php on line 322

简单看了下报错内容,估计是PDF这个技术更新的太快了,R studio公司的 cheatsheet 用的PDF标准不被PHP的那两个模块支持!

后来我直接用了pdfjoin Rstudio_cheatsheets/*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 -- Rstudio_cheatsheets/advancedR.pdf - Rstudio_cheatsheets/base-r.pdf - Rstudio_cheatsheets/data-wrangling-cheatsheet.pdf - Rstudio_cheatsheets/devtools-cheatsheet.pdf - Rstudio_cheatsheets/ggplot2-cheatsheet.pdf - Rstudio_cheatsheets/rmarkdown-cheatsheet.pdf - Rstudio_cheatsheets/rmarkdown-reference.pdf - Rstudio_cheatsheets/rstudio-IDE-cheatsheet.pdf - Rstudio_cheatsheets/shiny-cheatsheet.pdf -

pdfjam: Calling pdflatex...

  pdfjam: Finished.  Output was to '/home/jmzeng/tmp/test_php/shiny-cheatsheet-joined.pdf'.

但是,格式不怎么正常, 我最后还是推荐用一个网页工具,你直接上传你的PDF,人家马上就给你合并好了,你直接下载即可。

这种技术,玩玩就好,不要深究。

 

Comments are closed.