前言
因为在分析一个ruby脚本,里面用了Origami,只找到英文的资料,就翻译一下,希望能上百度,
原文地址:
http://code.google.com/p/origami-pdf/wiki/GettingStarted
关于Origami
Origami是一个用于操作PDF的Ruby框架。它具有一个PDF解析器,并可以分析,修改,创建恶意的PDF文件。尽管它的用途很多,但是它主要当作安全工具使用。正因为如此,它不关心图形的内容而且不包括PDF渲染器。Origami支持如下的PDF规范:
- 加密,直到Adobe Reader X
- 数字签名
- 表单 (Acrobat and XML)
- JavaScript
- 注释
- Flash
- 文件附件
- 对象流
安装
最近的方法安装最新版的Origami是使用Rubygems:
gem install origami
你也能Mercurial(Mercurial是一种轻量级分布式版本控制系统,采用Python语言实现)复制开发树
hg clone 'https://code.google.com/p/origami-pdf/' origam
可选依赖关系
根据你的需要,可选包可以安装来扩展Origami的功能
获得图形界面的支持:
gem install gtk2
获得JavaScript环境支持:
gem install therubyracer
用法
这里有几种方法来使用Origami:
- 图形界面
- shell界面
- 用Origami API编写自己的脚本
图形界面(PDF Walker)
假如你安装了gtk2,你可以尝试Origami的图形界面。它可以让你快速的浏览文档的内容,而不用修改文档。
你能在上面使用双击跟随一个对象引用,并且用Esc键回去。
启动命令:
$ pdfwalker
命令界面
Origami命令行会启动一个标准Ruby命令行并包含了Origami命令空间。这会方便在一个文档上使用几行代码执行简单的操作。
$ pdfsh
>>>
创建一个新的空白文件:
>>> PDF.new.save('blank.pdf')
感染并加密一个存在的文档:
>>> pdf = PDF.read 'foo.pdf'
>>> pdf.onDocumentOpen Action::JavaScript[ 'app.alert("Hello!")' ]
>>> pdf.encrypt.save 'bar.pdf'
在对象里搜索数据
>>> pdf.grep "/bin/sh"
检查PDF对象
>>> pdf = PDF.read 'sample.pdf'
>>> page = pdf.pages.first
33 0 obj
<<%
/MediaBox [ 0 0 243.78 153.071 ]
/Parent 24 0 R
/Contents 38 0 R
/Resources 34 0 R
/CropBox [ 0 0 243.78 153.071 ]
/Rotate 0
/Type /Page
>>
endobj
>>> page.xrefs[0]
[ 33 0 R 1 0 R ]
>>> page.xrefs[0].parent
24 0 obj
<<%
/Count 2
/Kids [ 33 0 R 1 0 R ]
/Type /Pages
>>
endobj
>>> page.Parent
24 0 obj
<<%
/Count 2
/Kids [ 33 0 R 1 0 R ]
/Type /Pages
>>
endobj
>>> pdf[24]
24 0 obj
<<%
/Count 2
/Kids [ 33 0 R 1 0 R ]
/Type /Pages
>>
endobj
编辑页面行内容(你也许需要打开编辑环境变量):
>>> pdf.pages[2].edit
编辑流:
>>> pdf.Catalog.Metadata.edit
你也能使用JavaScript引擎,加入你添加了支持了:
>>> pdf.Catalog.OpenAction.JS.eval_js
>>> pdf.js_engine.shell
js> this
[object Doc]
js> console.println('foo')
foo
nil
js> this.numPages
2
自定义脚本
Origami是一个Ruby框架,你也能编写自己的Ruby脚本,是适合的地方使用Origami脚本。这能用于执行特别的操作,在一堆文档中。
Origami已经完成了一些通常有用的脚本:
- pdfencrypt/pdfdecrypt (加密和解密一个脚本)
- pdfdecompress (去掉一些压缩层)
- pdfmetadata (打印文档元数据)
- pdfextract (从一个文档提取不同的对象)
- pdfcop (自动分析引擎)
- 一些混杂的脚本(pdf2ruby, pdf2graph, pdf2pdfa, ...)
你可以看看Origami的samples目录,找到的一些基本的脚本示例。
PS:其实是不想分析代码了,就来写翻译了,唉~~~