bin/gui/properties.rb in origami-1.2.7 vs bin/gui/properties.rb in origami-2.0.0

- old
+ new

@@ -1,144 +1,128 @@ =begin -= File - properties.rb + This file is part of PDF Walker, a graphical PDF file browser + Copyright (C) 2016 Guillaume Delugré. -= Info - This file is part of PDF Walker, a graphical PDF file browser - Copyright (C) 2010 Guillaume Delugré <guillaume AT security-labs DOT org> - All right reserved. - - PDF Walker is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. + PDF Walker is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. - PDF Walker is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + PDF Walker is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with PDF Walker. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the GNU General Public License + along with PDF Walker. If not, see <http://www.gnu.org/licenses/>. =end require 'digest/md5' module PDFWalker - class Walker < Window - - def display_file_properties - if @opened - prop = Properties.new(self, @opened) - end - end - - class Properties < Dialog - - @@acrobat_versions = - { - 1.0 => "1.x", - 1.1 => "2.x", - 1.2 => "3.x", - 1.3 => "4.x", - 1.4 => "5.x", - 1.5 => "6.x", - 1.6 => "7.x", - 1.7 => "8.x / 9.x / 10.x" - } - - def initialize(parent, pdf) - super("Document properties", parent, Dialog::MODAL, [Stock::CLOSE, Dialog::RESPONSE_NONE]) - - docframe = Frame.new(" File properties ") - stat = File.stat(parent.filename) - - if RUBY_VERSION < '1.9' - require 'iconv' - i = Iconv.new("UTF-8//IGNORE//TRANSLIT", "ISO-8859-1") + class Walker < Window - creation_date = i.iconv(stat.ctime.to_s) - last_modified = i.iconv(stat.mtime.to_s) - fd = File.open(parent.filename, 'rb') - md5sum = Digest::MD5.hexdigest(fd.read) - fd.close - i.close - else - creation_date = stat.ctime.to_s.encode("utf-8", :invalid => :replace, :undef => :replace) - last_modified = stat.mtime.to_s.encode("utf-8", :invalid => :replace, :undef => :replace) - md5sum = Digest::MD5.hexdigest(File.binread(parent.filename)) + def display_file_properties + Properties.new(self, @opened) if @opened end - - labels = - [ - [ "Filename:", parent.filename ], - [ "File size:", "#{File.size(parent.filename)} bytes" ], - [ "MD5:", md5sum ], - [ "Read-only:", "#{not stat.writable?}" ], - [ "Creation date:", creation_date ], - [ "Last modified:", last_modified ] - ] - doctable = Table.new(labels.size + 1, 3) - - row = 0 - labels.each do |name, value| - - doctable.attach(Label.new(name).set_alignment(1,0), 0, 1, row, row + 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK, 4, 4) - doctable.attach(Label.new(value).set_alignment(0,0), 1, 2, row, row + 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK, 4, 4) - - row = row.succ + class Properties < Dialog + + @@acrobat_versions = + { + 1.0 => "1.x", + 1.1 => "2.x", + 1.2 => "3.x", + 1.3 => "4.x", + 1.4 => "5.x", + 1.5 => "6.x", + 1.6 => "7.x", + 1.7 => "8.x / 9.x / 10.x" + } + + def initialize(parent, pdf) + super("Document properties", parent, Dialog::MODAL, [Stock::CLOSE, Dialog::RESPONSE_NONE]) + + docframe = Frame.new(" File properties ") + stat = File.stat(parent.filename) + + creation_date = stat.ctime.to_s.encode("utf-8", :invalid => :replace, :undef => :replace) + last_modified = stat.mtime.to_s.encode("utf-8", :invalid => :replace, :undef => :replace) + md5sum = Digest::MD5.hexdigest(File.binread(parent.filename)) + + labels = + [ + [ "Filename:", parent.filename ], + [ "File size:", "#{File.size(parent.filename)} bytes" ], + [ "MD5:", md5sum ], + [ "Read-only:", "#{not stat.writable?}" ], + [ "Creation date:", creation_date ], + [ "Last modified:", last_modified ] + ] + + doctable = Table.new(labels.size + 1, 3) + + row = 0 + labels.each do |name, value| + doctable.attach(Label.new(name).set_alignment(1,0), 0, 1, row, row + 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK, 4, 4) + doctable.attach(Label.new(value).set_alignment(0,0), 1, 2, row, row + 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK, 4, 4) + + row = row.succ + end + + docframe.border_width = 5 + docframe.shadow_type = Gtk::SHADOW_IN + docframe.add(doctable) + + pdfframe = Frame.new(" PDF properties ") + + pdf_version = pdf.header.to_f + if pdf_version >= 1.0 and pdf_version <= 1.7 + acrobat_version = @@acrobat_versions[pdf_version] + else + acrobat_version = "unknown version" + end + + labels = + [ + [ "Version:", "#{pdf_version} (Acrobat #{acrobat_version})" ], + [ "Number of revisions:", "#{pdf.revisions.size}" ], + [ "Number of indirect objects:", "#{pdf.indirect_objects.size}" ], + [ "Number of pages:", "#{pdf.pages.count}" ], + [ "Linearized:", pdf.linearized? ? 'yes' : 'no' ], + [ "Encrypted:", pdf.encrypted? ? 'yes' : 'no' ], + [ "Signed:", pdf.signed? ? 'yes' : 'no' ], + [ "Has usage rights:", pdf.usage_rights? ? 'yes' : 'no' ], + [ "Form:", pdf.form? ? 'yes' : 'no' ], + [ "XFA form:", pdf.xfa_form? ? 'yes' : 'no' ], + [ "Document information:", pdf.document_info? ? 'yes' : 'no' ], + [ "Metadata:", pdf.metadata? ? 'yes' : 'no' ] + ] + + pdftable = Table.new(labels.size + 1, 3) + + row = 0 + labels.each do |name, value| + pdftable.attach(Label.new(name).set_alignment(1,0), 0, 1, row, row + 1, Gtk::FILL, Gtk::SHRINK, 4, 4) + pdftable.attach(Label.new(value).set_alignment(0,0), 1, 2, row, row + 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK, 4, 4) + + row = row.succ + end + + pdfframe.border_width = 5 + pdfframe.shadow_type = Gtk::SHADOW_IN + pdfframe.add(pdftable) + + vbox.add(docframe) + vbox.add(pdfframe) + + signal_connect('response') { destroy } + + show_all + end end - - docframe.border_width = 5 - docframe.shadow_type = Gtk::SHADOW_IN - docframe.add(doctable) - - pdfframe = Frame.new(" PDF properties ") - - labels = - [ - [ "Version:", "#{pdf.header.to_f} (Acrobat #{ if pdf.header.to_f >= 1.0 and pdf.header.to_f <= 1.7 then @@acrobat_versions[pdf.header.to_f] else "unknown version" end})" ], - [ "Number of revisions:", "#{pdf.revisions.size}" ], - [ "Number of indirect objects:", "#{pdf.indirect_objects.size}" ], - [ "Number of pages:", "#{pdf.pages.size}" ], - [ "Is linearized:", "#{pdf.is_linearized?}" ], - [ "Is encrypted:", "#{pdf.is_encrypted?}" ], - [ "Is signed:", "#{pdf.is_signed?}" ], - [ "Has usage rights:", "#{pdf.has_usage_rights?}"], - [ "Contains Acroform:", "#{pdf.has_form?}" ], - #[ "Contains XFA forms:", "#{pdf.has_xfa_forms?}" ] - [ "Has document information:", "#{pdf.has_document_info?}" ], - [ "Has metadata:", "#{pdf.has_metadata?}" ] - ] - - pdftable = Table.new(labels.size + 1, 3) - - row = 0 - labels.each do |name, value| - - pdftable.attach(Label.new(name).set_alignment(1,0), 0, 1, row, row + 1, Gtk::FILL, Gtk::SHRINK, 4, 4) - pdftable.attach(Label.new(value).set_alignment(0,0), 1, 2, row, row + 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK, 4, 4) - - row = row.succ - end - - pdfframe.border_width = 5 - pdfframe.shadow_type = Gtk::SHADOW_IN - pdfframe.add(pdftable) - - vbox.add(docframe) - vbox.add(pdfframe) - - signal_connect('response') { destroy } - - show_all - end - end - - end end