Class Origami::Parser
In: sources/parser/parser.rb
Parent: Object

Class representing a PDF file parser.

Methods

new   parse  

Constants

VERBOSE_QUIET = 0   Do not output debug information.
VERBOSE_INFO = 1   Output some useful information.
VERBOSE_DEBUG = 2   Output debug information.
VERBOSE_INSANE = 3   Output every objects read
PPK = Adobe::AddressBook::PPK.new(o.PPK)
User = Adobe::AddressBook::UserList.new(o.PPK.User)
AddressBook = Adobe::AddressBook::AddressList.new(o.PPK.AddressBook)

Attributes

options  [RW] 

Public Class methods

Creates a new PDF file Parser.

options:A hash of options modifying the parser behavior.

[Source]

     # File sources/parser/parser.rb, line 123
123:     def initialize(options = {})
124:       
125:       #Default options values
126:       @options = 
127:       { 
128:         :verbosity => VERBOSE_INFO, # Verbose level.
129:         :ignore_errors => true,    # Try to keep on parsing when errors occur.
130:         :callback => Proc.new {},   # Callback procedure whenever a structure is read.
131:         :prompt_password => Proc.new { print "Password: "; gets.chomp } #Callback procedure to prompt password when document is encrypted.
132:       }
133:      
134:       @options.update(options)
135:     end

Public Instance methods

Parse the given file and returns a PDF object, or nil if the parsing process failed.

filename:The path to the PDF file to parse.

[Source]

     # File sources/parser/parser.rb, line 141
141:     def parse(filename)
142:       
143:       # Read PDF file contents
144:       begin
145:         
146:         fd = File.open(filename, "r").binmode
147:         stream = StringScanner.new(fd.read)
148:         
149:         info "...Start parsing file ..."
150:         
151:         info "...Reading header..."
152: 
153:         hdr = nil
154:         @@file_types.each { |fileType|
155:           begin
156:             hdr = fileType::Header.parse(stream)
157:             break
158:           rescue Exception => e 
159:             next
160:           end
161:         }
162:         
163:         case hdr
164:           when PDF::Header
165:             pdf = PDF.new(false)
166:             pdf.header = hdr
167:             pdf.filename = filename
168:             @options[:callback].call(pdf.header)
169:             
170:             parse_pdf_file(pdf, stream)
171:             
172:             info "...End parsing file..."
173:             info
174:             
175:             return pdf
176:           
177:           when Adobe::AddressBook::Header
178:             addrbk = Adobe::AddressBook.new
179:             addrbk.header = hdr
180:             addrbk.filename = filename
181:             @options[:callback].call(addrbk.header)
182:             
183:             parse_addressbook(addrbk, stream)
184:             
185:             info "...End parsing file..."
186:             info
187:             
188:             return addrbk
189:           
190:           else
191:             raise InvalidHeader, "No file type was recognized"
192:         end
193:         
194:       rescue SystemExit
195:         raise
196: 
197:       rescue Exception => e
198:         error "An error occured while parsing."
199:       
200:         debug "#{e.message} (#{e.class})"
201:         #debug e.backtrace.join("\n")
202:         debug
203:          
204:         raise
205:       end
206:     
207:     end

[Validate]