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