origami 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING.LESSER +165 -0
 - data/README +77 -0
 - data/VERSION +1 -0
 - data/bin/config/pdfcop.conf.yml +237 -0
 - data/bin/gui/about.rb +46 -0
 - data/bin/gui/config.rb +132 -0
 - data/bin/gui/file.rb +385 -0
 - data/bin/gui/hexdump.rb +74 -0
 - data/bin/gui/hexview.rb +91 -0
 - data/bin/gui/imgview.rb +72 -0
 - data/bin/gui/menu.rb +392 -0
 - data/bin/gui/properties.rb +132 -0
 - data/bin/gui/signing.rb +635 -0
 - data/bin/gui/textview.rb +107 -0
 - data/bin/gui/treeview.rb +409 -0
 - data/bin/gui/walker.rb +282 -0
 - data/bin/gui/xrefs.rb +79 -0
 - data/bin/pdf2graph +121 -0
 - data/bin/pdf2ruby +353 -0
 - data/bin/pdfcocoon +104 -0
 - data/bin/pdfcop +455 -0
 - data/bin/pdfdecompress +104 -0
 - data/bin/pdfdecrypt +95 -0
 - data/bin/pdfencrypt +112 -0
 - data/bin/pdfextract +221 -0
 - data/bin/pdfmetadata +123 -0
 - data/bin/pdfsh +13 -0
 - data/bin/pdfwalker +7 -0
 - data/bin/shell/.irbrc +104 -0
 - data/bin/shell/console.rb +136 -0
 - data/bin/shell/hexdump.rb +83 -0
 - data/origami.rb +36 -0
 - data/origami/3d.rb +239 -0
 - data/origami/acroform.rb +321 -0
 - data/origami/actions.rb +299 -0
 - data/origami/adobe/fdf.rb +259 -0
 - data/origami/adobe/ppklite.rb +489 -0
 - data/origami/annotations.rb +775 -0
 - data/origami/array.rb +187 -0
 - data/origami/boolean.rb +101 -0
 - data/origami/catalog.rb +486 -0
 - data/origami/destinations.rb +213 -0
 - data/origami/dictionary.rb +188 -0
 - data/origami/docmdp.rb +96 -0
 - data/origami/encryption.rb +1293 -0
 - data/origami/export.rb +283 -0
 - data/origami/file.rb +222 -0
 - data/origami/filters.rb +250 -0
 - data/origami/filters/ascii.rb +189 -0
 - data/origami/filters/ccitt.rb +515 -0
 - data/origami/filters/crypt.rb +47 -0
 - data/origami/filters/dct.rb +61 -0
 - data/origami/filters/flate.rb +112 -0
 - data/origami/filters/jbig2.rb +63 -0
 - data/origami/filters/jpx.rb +53 -0
 - data/origami/filters/lzw.rb +195 -0
 - data/origami/filters/predictors.rb +276 -0
 - data/origami/filters/runlength.rb +117 -0
 - data/origami/font.rb +209 -0
 - data/origami/functions.rb +93 -0
 - data/origami/graphics.rb +33 -0
 - data/origami/graphics/colors.rb +191 -0
 - data/origami/graphics/instruction.rb +126 -0
 - data/origami/graphics/path.rb +154 -0
 - data/origami/graphics/patterns.rb +180 -0
 - data/origami/graphics/state.rb +164 -0
 - data/origami/graphics/text.rb +224 -0
 - data/origami/graphics/xobject.rb +493 -0
 - data/origami/header.rb +90 -0
 - data/origami/linearization.rb +318 -0
 - data/origami/metadata.rb +114 -0
 - data/origami/name.rb +170 -0
 - data/origami/null.rb +75 -0
 - data/origami/numeric.rb +188 -0
 - data/origami/obfuscation.rb +233 -0
 - data/origami/object.rb +527 -0
 - data/origami/outline.rb +59 -0
 - data/origami/page.rb +559 -0
 - data/origami/parser.rb +268 -0
 - data/origami/parsers/fdf.rb +45 -0
 - data/origami/parsers/pdf.rb +27 -0
 - data/origami/parsers/pdf/linear.rb +113 -0
 - data/origami/parsers/ppklite.rb +86 -0
 - data/origami/pdf.rb +1144 -0
 - data/origami/reference.rb +113 -0
 - data/origami/signature.rb +474 -0
 - data/origami/stream.rb +575 -0
 - data/origami/string.rb +416 -0
 - data/origami/trailer.rb +173 -0
 - data/origami/webcapture.rb +87 -0
 - data/origami/xfa.rb +3027 -0
 - data/origami/xreftable.rb +447 -0
 - data/templates/patterns.rb +66 -0
 - data/templates/widgets.rb +173 -0
 - data/templates/xdp.rb +92 -0
 - data/tests/dataset/test.dummycrt +28 -0
 - data/tests/dataset/test.dummykey +27 -0
 - data/tests/tc_actions.rb +32 -0
 - data/tests/tc_annotations.rb +85 -0
 - data/tests/tc_pages.rb +37 -0
 - data/tests/tc_pdfattach.rb +24 -0
 - data/tests/tc_pdfencrypt.rb +110 -0
 - data/tests/tc_pdfnew.rb +32 -0
 - data/tests/tc_pdfparse.rb +98 -0
 - data/tests/tc_pdfsig.rb +37 -0
 - data/tests/tc_streams.rb +129 -0
 - data/tests/ts_pdf.rb +45 -0
 - metadata +193 -0
 
| 
         @@ -0,0 +1,173 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            =begin
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            = File
         
     | 
| 
      
 4 
     | 
    
         
            +
            	widgets.rb
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            = Info
         
     | 
| 
      
 7 
     | 
    
         
            +
            	This file is part of Origami, PDF manipulation framework for Ruby
         
     | 
| 
      
 8 
     | 
    
         
            +
            	Copyright (C) 2010	Guillaume Delugré <guillaume@security-labs.org>
         
     | 
| 
      
 9 
     | 
    
         
            +
            	All right reserved.
         
     | 
| 
      
 10 
     | 
    
         
            +
            	
         
     | 
| 
      
 11 
     | 
    
         
            +
              Origami is free software: you can redistribute it and/or modify
         
     | 
| 
      
 12 
     | 
    
         
            +
              it under the terms of the GNU Lesser General Public License as published by
         
     | 
| 
      
 13 
     | 
    
         
            +
              the Free Software Foundation, either version 3 of the License, or
         
     | 
| 
      
 14 
     | 
    
         
            +
              (at your option) any later version.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              Origami is distributed in the hope that it will be useful,
         
     | 
| 
      
 17 
     | 
    
         
            +
              but WITHOUT ANY WARRANTY; without even the implied warranty of
         
     | 
| 
      
 18 
     | 
    
         
            +
              MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         
     | 
| 
      
 19 
     | 
    
         
            +
              GNU Lesser General Public License for more details.
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              You should have received a copy of the GNU Lesser General Public License
         
     | 
| 
      
 22 
     | 
    
         
            +
              along with Origami.  If not, see <http://www.gnu.org/licenses/>.
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            =end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            module Origami
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              module Template
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                class Button < Annotation::Widget::PushButton  
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def initialize(x,y,width,height, caption, id = nil)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    super()
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    set_indirect(true)
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                    self.H = Annotation::Widget::Highlight::INVERT
         
     | 
| 
      
 38 
     | 
    
         
            +
                    self.Rect = [ x, y, x+width, y+height ]
         
     | 
| 
      
 39 
     | 
    
         
            +
                    self.F = Annotation::Flags::PRINT
         
     | 
| 
      
 40 
     | 
    
         
            +
                    self.T = id
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                    appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
         
     | 
| 
      
 43 
     | 
    
         
            +
                    appstm.BBox = [ 0, 0, width, height ]
         
     | 
| 
      
 44 
     | 
    
         
            +
                    appstm.Matrix = [ 1, 0, 0, 1, 0, 0 ]
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    appstm.draw_rectangle(0, 0, width, height, 
         
     | 
| 
      
 47 
     | 
    
         
            +
                      :fill => true, :stroke => false, :fill_color => Graphics::Color::RGB.new(0xE6, 0xE6, 0xFA))
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    appstm.draw_polygon([[1,1],[1,height-1],[width-1,height-1],[width-2,height-2],[2,height-2],[2,2]],
         
     | 
| 
      
 50 
     | 
    
         
            +
                      :fill => true, :stroke => false, :fill_color => Graphics::Color::GrayScale.new(1.0))
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                    appstm.draw_polygon([[width-1,height-1],[width-1,1],[1,1],[2,2],[width-2,2],[width-2,height-2]],
         
     | 
| 
      
 53 
     | 
    
         
            +
                      :fill => true, :stroke => false, :fill_color => Graphics::Color::RGB.new(130, 130, 130))
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    appstm.draw_rectangle(0.5, 0.5, width-1, height-1,
         
     | 
| 
      
 56 
     | 
    
         
            +
                      :fill => false, :stroke => true, :stroke_color => Graphics::Color::GrayScale.new(0.0))
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                    text_width = 4.75 * caption.length
         
     | 
| 
      
 59 
     | 
    
         
            +
                    appstm.write(caption,
         
     | 
| 
      
 60 
     | 
    
         
            +
                      :x => (width - text_width)/2, :y => height/2-5, :size => 10)
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                    appstm.Resources = Resources.new
         
     | 
| 
      
 63 
     | 
    
         
            +
                    set_normal_appearance(appstm)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                class Edit < Annotation::Widget::Text
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                  def initialize(x,y,width,height, id)
         
     | 
| 
      
 71 
     | 
    
         
            +
                    super()
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                    set_indirect(true)
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                    self.Rect = [ x, y, x+width, y+height ]
         
     | 
| 
      
 76 
     | 
    
         
            +
                    self.F = Annotation::Flags::PRINT
         
     | 
| 
      
 77 
     | 
    
         
            +
                    self.T = id
         
     | 
| 
      
 78 
     | 
    
         
            +
                    self.DA = '/F1 12 Tf 0 g'
         
     | 
| 
      
 79 
     | 
    
         
            +
                    
         
     | 
| 
      
 80 
     | 
    
         
            +
                    appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
         
     | 
| 
      
 81 
     | 
    
         
            +
                    appstm.BBox = [ 0, 0, width, height ]
         
     | 
| 
      
 82 
     | 
    
         
            +
                    appstm.Matrix = [ 1, 0, 0, 1, 0, 0 ]
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                    appstm.draw_rectangle(0, 0, width, height,
         
     | 
| 
      
 85 
     | 
    
         
            +
                      :fill => false, :stroke => true, :stroke_color => Graphics::Color::GrayScale.new(0.0))
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                    appstm.draw_polygon([[1,1],[1,height-1],[width-1,height-1],[width-2,height-2],[2,height-2],[2,2]],
         
     | 
| 
      
 88 
     | 
    
         
            +
                      :fill => true, :stroke => false, :fill_color => Graphics::Color::RGB.new(130, 130, 130))
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                    appstm.draw_polygon([[width-1,height-1],[width-1,1],[1,1],[2,2],[width-2,2],[width-2,height-2]],
         
     | 
| 
      
 91 
     | 
    
         
            +
                      :fill => true, :stroke => false, :fill_color => Graphics::Color::GrayScale.new(1.0))
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                    appstm.draw_rectangle(0.5, 0.5, width-1, height-1,
         
     | 
| 
      
 94 
     | 
    
         
            +
                      :fill => false, :stroke => true, :stroke_color => Graphics::Color::GrayScale.new(0.0))
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                    set_normal_appearance(appstm)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                class MultiLineEdit < Edit
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                  def initialize(x,y,width,height, id)
         
     | 
| 
      
 104 
     | 
    
         
            +
                    
         
     | 
| 
      
 105 
     | 
    
         
            +
                    super(x,y,width,height,id)
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                    self.Ff ||= 0
         
     | 
| 
      
 108 
     | 
    
         
            +
                    self.Ff |= Annotation::Widget::Text::Flags::MULTILINE
         
     | 
| 
      
 109 
     | 
    
         
            +
                  end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                class RichTextEdit < MultiLineEdit
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                  def initialize(x,y,width,height, id)
         
     | 
| 
      
 116 
     | 
    
         
            +
                    
         
     | 
| 
      
 117 
     | 
    
         
            +
                    super(x,y,width,height,id)
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
                    self.F |= Annotation::Flags::READONLY
         
     | 
| 
      
 120 
     | 
    
         
            +
                    self.Ff |= (Annotation::Widget::Text::Flags::RICHTEXT | Field::Flags::READONLY)
         
     | 
| 
      
 121 
     | 
    
         
            +
                  end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                end
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                class PasswordEdit < Edit
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                  def initialize(x,y,width,height, id)
         
     | 
| 
      
 128 
     | 
    
         
            +
                    
         
     | 
| 
      
 129 
     | 
    
         
            +
                    super(x,y,width,height,id)
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                    self.Ff ||= 0
         
     | 
| 
      
 132 
     | 
    
         
            +
                    self.Ff |= Annotation::Widget::Text::Flags::PASSWORD
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                  end
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                end
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
                class TextPanel < Annotation::FreeText
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                  def initialize(x,y,width,height, id)
         
     | 
| 
      
 141 
     | 
    
         
            +
                    super()
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                    set_indirect(true)
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                    self.Rect = [ x, y, x+width, y+height ]
         
     | 
| 
      
 146 
     | 
    
         
            +
                    self.F = Annotation::Flags::PRINT
         
     | 
| 
      
 147 
     | 
    
         
            +
                    self.NM = id
         
     | 
| 
      
 148 
     | 
    
         
            +
                    self.DA = '/F1 12 Tf 0 g'
         
     | 
| 
      
 149 
     | 
    
         
            +
                    
         
     | 
| 
      
 150 
     | 
    
         
            +
                    appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
         
     | 
| 
      
 151 
     | 
    
         
            +
                    appstm.BBox = [ 0, 0, width, height ]
         
     | 
| 
      
 152 
     | 
    
         
            +
                    appstm.Matrix = [ 1, 0, 0, 1, 0, 0 ]
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
                    appstm.draw_rectangle(0, 0, width, height,
         
     | 
| 
      
 155 
     | 
    
         
            +
                      :fill => false, :stroke => true, :stroke_color => Graphics::Color::GrayScale.new(0.0))
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                    appstm.draw_polygon([[1,1],[1,height-1],[width-1,height-1],[width-2,height-2],[2,height-2],[2,2]],
         
     | 
| 
      
 158 
     | 
    
         
            +
                      :fill => true, :stroke => false, :fill_color => Graphics::Color::RGB.new(130, 130, 130))
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
                    appstm.draw_polygon([[width-1,height-1],[width-1,1],[1,1],[2,2],[width-2,2],[width-2,height-2]],
         
     | 
| 
      
 161 
     | 
    
         
            +
                      :fill => true, :stroke => false, :fill_color => Graphics::Color::GrayScale.new(1.0))
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                    appstm.draw_rectangle(0.5, 0.5, width-1, height-1,
         
     | 
| 
      
 164 
     | 
    
         
            +
                      :fill => false, :stroke => true, :stroke_color => Graphics::Color::GrayScale.new(0.0))
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                    set_normal_appearance(appstm)
         
     | 
| 
      
 167 
     | 
    
         
            +
                  end
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                end
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
              end
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
            end
         
     | 
    
        data/templates/xdp.rb
    ADDED
    
    | 
         @@ -0,0 +1,92 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            =begin
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            = File
         
     | 
| 
      
 4 
     | 
    
         
            +
            	xdp.rb
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            = Info
         
     | 
| 
      
 7 
     | 
    
         
            +
            	This file is part of Origami, PDF manipulation framework for Ruby
         
     | 
| 
      
 8 
     | 
    
         
            +
            	Copyright (C) 2010	Guillaume Delugré <guillaume@security-labs.org>
         
     | 
| 
      
 9 
     | 
    
         
            +
            	All right reserved.
         
     | 
| 
      
 10 
     | 
    
         
            +
            	
         
     | 
| 
      
 11 
     | 
    
         
            +
              Origami is free software: you can redistribute it and/or modify
         
     | 
| 
      
 12 
     | 
    
         
            +
              it under the terms of the GNU Lesser General Public License as published by
         
     | 
| 
      
 13 
     | 
    
         
            +
              the Free Software Foundation, either version 3 of the License, or
         
     | 
| 
      
 14 
     | 
    
         
            +
              (at your option) any later version.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              Origami is distributed in the hope that it will be useful,
         
     | 
| 
      
 17 
     | 
    
         
            +
              but WITHOUT ANY WARRANTY; without even the implied warranty of
         
     | 
| 
      
 18 
     | 
    
         
            +
              MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         
     | 
| 
      
 19 
     | 
    
         
            +
              GNU Lesser General Public License for more details.
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              You should have received a copy of the GNU Lesser General Public License
         
     | 
| 
      
 22 
     | 
    
         
            +
              along with Origami.  If not, see <http://www.gnu.org/licenses/>.
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            =end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            module Origami
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              module Template
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                class XMLForm < XDP::Package
         
     | 
| 
      
 31 
     | 
    
         
            +
                  def initialize(script = "")
         
     | 
| 
      
 32 
     | 
    
         
            +
                    super()
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    self.root.add_element(create_config_packet)
         
     | 
| 
      
 35 
     | 
    
         
            +
                    self.root.add_element(create_template_packet(script))
         
     | 
| 
      
 36 
     | 
    
         
            +
                    self.root.add_element(create_datasets_packet)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  def create_config_packet
         
     | 
| 
      
 40 
     | 
    
         
            +
                    config = XDP::Packet::Config.new
         
     | 
| 
      
 41 
     | 
    
         
            +
                    
         
     | 
| 
      
 42 
     | 
    
         
            +
                    present = config.add_element(XFA::Element.new("present"))
         
     | 
| 
      
 43 
     | 
    
         
            +
                    pdf = present.add_element(XFA::Element.new("pdf"))
         
     | 
| 
      
 44 
     | 
    
         
            +
                    interactive = pdf.add_element(XFA::Element.new("interactive"))
         
     | 
| 
      
 45 
     | 
    
         
            +
                    interactive.text = 1
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    config
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  def create_template_packet(script)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    template = XDP::Packet::Template.new
         
     | 
| 
      
 52 
     | 
    
         
            +
                    
         
     | 
| 
      
 53 
     | 
    
         
            +
                    form1 = template.add_subform(:layout => 'tb', :name => 'form1')
         
     | 
| 
      
 54 
     | 
    
         
            +
                    form1.add_pageSet
         
     | 
| 
      
 55 
     | 
    
         
            +
                    form1.add_event(:activity => 'initialize', :name => 'event__ready').
         
     | 
| 
      
 56 
     | 
    
         
            +
                      add_script(:contentType => 'application/x-formcalc').
         
     | 
| 
      
 57 
     | 
    
         
            +
                        text = script
         
     | 
| 
      
 58 
     | 
    
         
            +
                    
         
     | 
| 
      
 59 
     | 
    
         
            +
                    subform = form1.add_subform
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                    button = subform.add_field(:name => 'Button1')
         
     | 
| 
      
 62 
     | 
    
         
            +
                    button.add_ui.add_button(:highlight => 'inverted')
         
     | 
| 
      
 63 
     | 
    
         
            +
                    btncaption = button.add_caption
         
     | 
| 
      
 64 
     | 
    
         
            +
                    btncaption.add_value.add_text.text = "Send!"
         
     | 
| 
      
 65 
     | 
    
         
            +
                    btncaption.add_para(:vAlign => 'middle', :hAlign => 'center')
         
     | 
| 
      
 66 
     | 
    
         
            +
                    button.add_bind(:match => 'none')
         
     | 
| 
      
 67 
     | 
    
         
            +
                    button.add_event(:activity => 'click', :name => 'event__click').
         
     | 
| 
      
 68 
     | 
    
         
            +
                      add_script(:contentType => 'application/x-formcalc').
         
     | 
| 
      
 69 
     | 
    
         
            +
                        text = script
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                    txtfield = subform.add_field(:name => 'TextField1')
         
     | 
| 
      
 72 
     | 
    
         
            +
                    txtfield.add_ui.add_textEdit.add_border.add_edge(:stroke => 'lowered')
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                    template
         
     | 
| 
      
 75 
     | 
    
         
            +
                  end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  def create_datasets_packet
         
     | 
| 
      
 78 
     | 
    
         
            +
                    datasets = XDP::Packet::Datasets.new
         
     | 
| 
      
 79 
     | 
    
         
            +
                    data = datasets.add_element(XDP::Packet::Datasets::Data.new)
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                    data.
         
     | 
| 
      
 82 
     | 
    
         
            +
                      add_element(XFA::Element.new('form1')).
         
     | 
| 
      
 83 
     | 
    
         
            +
                        add_element(XFA::Element.new('TextField1')).
         
     | 
| 
      
 84 
     | 
    
         
            +
                          text = '$host.messageBox("test")'
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                    datasets
         
     | 
| 
      
 87 
     | 
    
         
            +
                  end
         
     | 
| 
      
 88 
     | 
    
         
            +
                end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
              end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,28 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            -----BEGIN CERTIFICATE-----
         
     | 
| 
      
 2 
     | 
    
         
            +
            MIIE0zCCA7ugAwIBAgIJAPsOg8mXiWmIMA0GCSqGSIb3DQEBBQUAMIGhMQswCQYD
         
     | 
| 
      
 3 
     | 
    
         
            +
            VQQGEwJGUjEWMBQGA1UECBMNSWxlLWRlLUZyYW5jZTEOMAwGA1UEBxMFUGFyaXMx
         
     | 
| 
      
 4 
     | 
    
         
            +
            DzANBgNVBAoTBlNvZ2V0aTENMAsGA1UECxMERVNFQzEaMBgGA1UEAxQRR3VpbGxh
         
     | 
| 
      
 5 
     | 
    
         
            +
            dW1lIERlbHVncoIxLjAsBgkqhkiG9w0BCQEWH2RhcmtwaG9lbml4QGJpbmFyeS1y
         
     | 
| 
      
 6 
     | 
    
         
            +
            ZXZlcnNlci5vcmcwHhcNMDgwODIwMTIyMTMxWhcNMTgwODE4MTIyMTMxWjCBoTEL
         
     | 
| 
      
 7 
     | 
    
         
            +
            MAkGA1UEBhMCRlIxFjAUBgNVBAgTDUlsZS1kZS1GcmFuY2UxDjAMBgNVBAcTBVBh
         
     | 
| 
      
 8 
     | 
    
         
            +
            cmlzMQ8wDQYDVQQKEwZTb2dldGkxDTALBgNVBAsTBEVTRUMxGjAYBgNVBAMUEUd1
         
     | 
| 
      
 9 
     | 
    
         
            +
            aWxsYXVtZSBEZWx1Z3KCMS4wLAYJKoZIhvcNAQkBFh9kYXJrcGhvZW5peEBiaW5h
         
     | 
| 
      
 10 
     | 
    
         
            +
            cnktcmV2ZXJzZXIub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
         
     | 
| 
      
 11 
     | 
    
         
            +
            pU1Hrr0RnHsh0dP5V8BPX+Q/jR/TVboZUaaNT+4fUYl7p6fMaQI0qEY3xMOMRtIV
         
     | 
| 
      
 12 
     | 
    
         
            +
            qWTzARCumhRjVzCQzwawS5ZFiL6mU9F1NODxtj0KkgUXQ7LlDPR6HY0wc4IFlGw9
         
     | 
| 
      
 13 
     | 
    
         
            +
            DNdapEPhK3DOmsBWimwiekqSOaCYhq/iv32uyYs+mNVlfgjBaQxE6zyDsdizMj+h
         
     | 
| 
      
 14 
     | 
    
         
            +
            DAHfuc4zbXFVn2E1rk9dMM5ozhvD6EX6CxLb2SkZyeiG4oXQA6z9RHyfupOxhpHM
         
     | 
| 
      
 15 
     | 
    
         
            +
            xpt3ykteKyhA9icplO/OUrASsJyKk5w+V6Xd3z3FI9JDVbWKSCJ8fqEkVy7K4FJj
         
     | 
| 
      
 16 
     | 
    
         
            +
            HmJg6v1pOujZPe65EnR43QIDAQABo4IBCjCCAQYwHQYDVR0OBBYEFFX7JF1lbd5q
         
     | 
| 
      
 17 
     | 
    
         
            +
            oNhQCMUWOnUXVu7gMIHWBgNVHSMEgc4wgcuAFFX7JF1lbd5qoNhQCMUWOnUXVu7g
         
     | 
| 
      
 18 
     | 
    
         
            +
            oYGnpIGkMIGhMQswCQYDVQQGEwJGUjEWMBQGA1UECBMNSWxlLWRlLUZyYW5jZTEO
         
     | 
| 
      
 19 
     | 
    
         
            +
            MAwGA1UEBxMFUGFyaXMxDzANBgNVBAoTBlNvZ2V0aTENMAsGA1UECxMERVNFQzEa
         
     | 
| 
      
 20 
     | 
    
         
            +
            MBgGA1UEAxQRR3VpbGxhdW1lIERlbHVncoIxLjAsBgkqhkiG9w0BCQEWH2Rhcmtw
         
     | 
| 
      
 21 
     | 
    
         
            +
            aG9lbml4QGJpbmFyeS1yZXZlcnNlci5vcmeCCQD7DoPJl4lpiDAMBgNVHRMEBTAD
         
     | 
| 
      
 22 
     | 
    
         
            +
            AQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCIM2oUlghWGNqGPtFThC4mhSjkLE3FMrhw
         
     | 
| 
      
 23 
     | 
    
         
            +
            ZMUCGCoBejtw8FewdaAj1TwjbN/QXT8C6whAuVMrBkTiPKWkT7p9VjwuP7+U84OP
         
     | 
| 
      
 24 
     | 
    
         
            +
            lF7iHrnhD0WUsgrymoMn6e653VEh8rY1W7qQ5Z9qjdUD4EVLO7eQiqeUgvoi/bC+
         
     | 
| 
      
 25 
     | 
    
         
            +
            9wJlR5CfjY+lUQx5upZzm+quG3nq4m8Je0Ewv95euZP6vLGbzEvoHd97pwczJILZ
         
     | 
| 
      
 26 
     | 
    
         
            +
            5hhFDb8fSP0nuwb4XSzZIsTmEU53sOhwXMosuTnIAzLnmKWiLQexQwebECvuPMVF
         
     | 
| 
      
 27 
     | 
    
         
            +
            6VWc5hAV5gi8fMvQ2z2h+sCNNsfyauZQIIzGXZu/XU+xjFStyViC
         
     | 
| 
      
 28 
     | 
    
         
            +
            -----END CERTIFICATE-----
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            -----BEGIN RSA PRIVATE KEY-----
         
     | 
| 
      
 2 
     | 
    
         
            +
            MIIEowIBAAKCAQEApU1Hrr0RnHsh0dP5V8BPX+Q/jR/TVboZUaaNT+4fUYl7p6fM
         
     | 
| 
      
 3 
     | 
    
         
            +
            aQI0qEY3xMOMRtIVqWTzARCumhRjVzCQzwawS5ZFiL6mU9F1NODxtj0KkgUXQ7Ll
         
     | 
| 
      
 4 
     | 
    
         
            +
            DPR6HY0wc4IFlGw9DNdapEPhK3DOmsBWimwiekqSOaCYhq/iv32uyYs+mNVlfgjB
         
     | 
| 
      
 5 
     | 
    
         
            +
            aQxE6zyDsdizMj+hDAHfuc4zbXFVn2E1rk9dMM5ozhvD6EX6CxLb2SkZyeiG4oXQ
         
     | 
| 
      
 6 
     | 
    
         
            +
            A6z9RHyfupOxhpHMxpt3ykteKyhA9icplO/OUrASsJyKk5w+V6Xd3z3FI9JDVbWK
         
     | 
| 
      
 7 
     | 
    
         
            +
            SCJ8fqEkVy7K4FJjHmJg6v1pOujZPe65EnR43QIDAQABAoIBAAphDtYu8vMjXB1D
         
     | 
| 
      
 8 
     | 
    
         
            +
            tQ1IevNnboIa9HcWh050Kb1SE09YVZZSV+hkBhBm0Eufh6hOuqN3Pjbb6Equawpn
         
     | 
| 
      
 9 
     | 
    
         
            +
            d0A4iEtGtTj/14u9xCE82pB5xrcicLKEghNNKnm+isNF77nBDhhHUV6tEG9c1uwq
         
     | 
| 
      
 10 
     | 
    
         
            +
            lYR9g7CwC/xoVAto8dDaQGZRQu3vpmDN2RMbaEN5EY/rNGYDfe0OM8MnNdxJPDAc
         
     | 
| 
      
 11 
     | 
    
         
            +
            75jCd0N0SDB4GpLW3hYDbajhJVf4rb0nAelaz+FDF/m1wWyQP5752RrDiptFEscN
         
     | 
| 
      
 12 
     | 
    
         
            +
            U8hTNHNcdxStdm7mJat3O47rVXjLtomttUDHxQIKqMbZsK/uNcV3jQEYmiojuwOF
         
     | 
| 
      
 13 
     | 
    
         
            +
            WhEtG7UCgYEA2IEQnIoS/P3ZMofjYYNtl1etQ0W9pVS7h/7KgClBNdxL5YqAYEYc
         
     | 
| 
      
 14 
     | 
    
         
            +
            Bab/bbcuQKmN0krA5/TqFo+VBhJ+QkejfB2Xk3sFn3gavg/tABCaSckegJ/5q5om
         
     | 
| 
      
 15 
     | 
    
         
            +
            IONTnOrWNRtVAGgg/R85kycJjZjqfq5NslfPU5oUAeerek37r/YrTbMCgYEAw3UF
         
     | 
| 
      
 16 
     | 
    
         
            +
            9mbgL8v1ssY/dJHmIs3EWqx9++5WlxvCdjUcFmngaXY6ledgtJHE8JIovw1wzvsi
         
     | 
| 
      
 17 
     | 
    
         
            +
            91bRwVAfszzZFMVEB+vNFBy3ccFxi1ouyau29GumcjQv9ai8sIvX4eLeHP8Fi8DV
         
     | 
| 
      
 18 
     | 
    
         
            +
            wNO9sA6ji3OFlhBeSyRucT/j6ayU9HpY1s+Rdy8CgYBdr2PHyTu0PAhrhD/RZ3TZ
         
     | 
| 
      
 19 
     | 
    
         
            +
            w3fXH2uUClln3Mo1sSRlsSEqf8dTYaMokv3+tQCPvI8BC5X0CZfuEU2UJhZ6idNl
         
     | 
| 
      
 20 
     | 
    
         
            +
            lsyLZfWl7uvriKqul4CcIypO0GrSZc7P9m6s/TWaH2yl02lK/uMEGSVaH2yBSt2W
         
     | 
| 
      
 21 
     | 
    
         
            +
            KccuTwMPW/do4iviFazhXwKBgBZBLsqdcA1BJdqTJAp7yj5QO3kvhrC2tHlEGeIn
         
     | 
| 
      
 22 
     | 
    
         
            +
            rekHaRvY8Fa9H4+vwUK7AZSvTRbkFVkgM4XVP6bC2Ny6kUJtoM4XbvOu2OTLAeTI
         
     | 
| 
      
 23 
     | 
    
         
            +
            fm5aC3uZYZSQ/9sCMTRxBmU6zEDbVfs8oK55HDn2j1FEz9eycDjI04R5uAQWIiNj
         
     | 
| 
      
 24 
     | 
    
         
            +
            QubVAoGBAIP1rmU6OrRcwPUY74okeJLMYKiCWVkL4lhqfik/5kmXRmszfnd0pf2z
         
     | 
| 
      
 25 
     | 
    
         
            +
            VtdfGmfuycI2HeFGOO3o88y9TcZ9nq7/ZavwNEYrbiBRnVC8anDqW+YJT0ytb2Nc
         
     | 
| 
      
 26 
     | 
    
         
            +
            bJVRuY1tVHAqIVjgtFUlqIKPEl5c6cnFcCP5j5RpuywCgNM+U2th
         
     | 
| 
      
 27 
     | 
    
         
            +
            -----END RSA PRIVATE KEY-----
         
     | 
    
        data/tests/tc_actions.rb
    ADDED
    
    | 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              class TC_Actions < Test::Unit::TestCase
         
     | 
| 
      
 4 
     | 
    
         
            +
                def setup
         
     | 
| 
      
 5 
     | 
    
         
            +
                  @target = PDF.new
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @page = Page.new
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @action = Action::JavaScript.new "app.alert(null);"
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                # def teardown
         
     | 
| 
      
 11 
     | 
    
         
            +
                # end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def test_pdf_actions
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @target.onDocumentOpen @action
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @target.onDocumentClose @action
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @target.onDocumentPrint @action
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  assert_equal @target.Catalog.OpenAction, @action
         
     | 
| 
      
 19 
     | 
    
         
            +
                  assert_equal @target.Catalog.AA.WC, @action
         
     | 
| 
      
 20 
     | 
    
         
            +
                  assert_equal @target.Catalog.AA.WP, @action
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                def test_page_actions
         
     | 
| 
      
 24 
     | 
    
         
            +
                  
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @page.onOpen @action
         
     | 
| 
      
 26 
     | 
    
         
            +
                  @page.onClose @action
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  assert_equal @page.AA.O, @action
         
     | 
| 
      
 29 
     | 
    
         
            +
                  assert_equal @page.AA.C, @action
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,85 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'stringio'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              class TC_Annotations< Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
                def setup
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @target = PDF.new
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @page = Page.new
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @action = Action::JavaScript.new "app.alert(null);"
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @output = StringIO.new
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                # def teardown
         
     | 
| 
      
 13 
     | 
    
         
            +
                # end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def test_annotations
         
     | 
| 
      
 16 
     | 
    
         
            +
                  
         
     | 
| 
      
 17 
     | 
    
         
            +
                  circle = Annotation::Circle.new
         
     | 
| 
      
 18 
     | 
    
         
            +
                  square = Annotation::Square.new
         
     | 
| 
      
 19 
     | 
    
         
            +
                  text = Annotation::Text.new
         
     | 
| 
      
 20 
     | 
    
         
            +
                  link = Annotation::Link.new
         
     | 
| 
      
 21 
     | 
    
         
            +
                  file = Annotation::FileAttachment.new
         
     | 
| 
      
 22 
     | 
    
         
            +
                  screen = Annotation::Screen.new
         
     | 
| 
      
 23 
     | 
    
         
            +
                  sound = Annotation::Sound.new
         
     | 
| 
      
 24 
     | 
    
         
            +
                  pushbutton = Annotation::Widget::PushButton.new
         
     | 
| 
      
 25 
     | 
    
         
            +
                  checkbox = Annotation::Widget::CheckBox.new
         
     | 
| 
      
 26 
     | 
    
         
            +
                  radio = Annotation::Widget::Radio.new
         
     | 
| 
      
 27 
     | 
    
         
            +
                  edit = Annotation::Widget::Text.new
         
     | 
| 
      
 28 
     | 
    
         
            +
                  combo = Annotation::Widget::ComboBox.new
         
     | 
| 
      
 29 
     | 
    
         
            +
                  list = Annotation::Widget::ListBox.new
         
     | 
| 
      
 30 
     | 
    
         
            +
                  sig = Annotation::Widget::Signature.new
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  @target.append_page @page
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  assert_nothing_raised do
         
     | 
| 
      
 35 
     | 
    
         
            +
                    @page.add_annot circle
         
     | 
| 
      
 36 
     | 
    
         
            +
                    @page.add_annot square
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @page.add_annot text
         
     | 
| 
      
 38 
     | 
    
         
            +
                    @page.add_annot link
         
     | 
| 
      
 39 
     | 
    
         
            +
                    @page.add_annot file
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @page.add_annot screen
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @page.add_annot sound
         
     | 
| 
      
 42 
     | 
    
         
            +
                    @page.add_annot pushbutton
         
     | 
| 
      
 43 
     | 
    
         
            +
                    @page.add_annot checkbox
         
     | 
| 
      
 44 
     | 
    
         
            +
                    @page.add_annot radio
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @page.add_annot edit
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @page.add_annot combo
         
     | 
| 
      
 47 
     | 
    
         
            +
                    @page.add_annot list
         
     | 
| 
      
 48 
     | 
    
         
            +
                    @page.add_annot sig
         
     | 
| 
      
 49 
     | 
    
         
            +
                  end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  assert_nothing_raised do
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @target.save(@output)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                def test_annotation_actions
         
     | 
| 
      
 57 
     | 
    
         
            +
                  
         
     | 
| 
      
 58 
     | 
    
         
            +
                  screen = Annotation::Screen.new
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  @page.add_annot screen
         
     | 
| 
      
 61 
     | 
    
         
            +
                  
         
     | 
| 
      
 62 
     | 
    
         
            +
                  screen.onMouseOver @action
         
     | 
| 
      
 63 
     | 
    
         
            +
                  screen.onMouseOut @action
         
     | 
| 
      
 64 
     | 
    
         
            +
                  screen.onMouseDown @action
         
     | 
| 
      
 65 
     | 
    
         
            +
                  screen.onMouseUp @action
         
     | 
| 
      
 66 
     | 
    
         
            +
                  screen.onFocus @action
         
     | 
| 
      
 67 
     | 
    
         
            +
                  screen.onBlur @action
         
     | 
| 
      
 68 
     | 
    
         
            +
                  screen.onPageOpen @action
         
     | 
| 
      
 69 
     | 
    
         
            +
                  screen.onPageClose @action
         
     | 
| 
      
 70 
     | 
    
         
            +
                  screen.onPageVisible @action
         
     | 
| 
      
 71 
     | 
    
         
            +
                  screen.onPageInvisible @action
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  assert_equal screen.AA.E, @action
         
     | 
| 
      
 74 
     | 
    
         
            +
                  assert_equal screen.AA.X, @action
         
     | 
| 
      
 75 
     | 
    
         
            +
                  assert_equal screen.AA.D, @action
         
     | 
| 
      
 76 
     | 
    
         
            +
                  assert_equal screen.AA.U, @action
         
     | 
| 
      
 77 
     | 
    
         
            +
                  assert_equal screen.AA.Fo, @action
         
     | 
| 
      
 78 
     | 
    
         
            +
                  assert_equal screen.AA.Bl, @action
         
     | 
| 
      
 79 
     | 
    
         
            +
                  assert_equal screen.AA.PO, @action
         
     | 
| 
      
 80 
     | 
    
         
            +
                  assert_equal screen.AA.PC, @action
         
     | 
| 
      
 81 
     | 
    
         
            +
                  assert_equal screen.AA.PV, @action
         
     | 
| 
      
 82 
     | 
    
         
            +
                  assert_equal screen.AA.PI, @action
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            end
         
     | 
    
        data/tests/tc_pages.rb
    ADDED
    
    | 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'stringio'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              class TC_Pages < Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
                def setup
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @target = PDF.new
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @output = StringIO.new
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                # def teardown
         
     | 
| 
      
 11 
     | 
    
         
            +
                # end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def test_appendpage
         
     | 
| 
      
 14 
     | 
    
         
            +
                  p1, p2, p3 = Page.new, Page.new, Page.new
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  assert_nothing_raised do
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @target.append_page p1, p2, p3
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  assert_equal @target.pages.size, 3
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  assert_equal @target.pages[0], p1
         
     | 
| 
      
 23 
     | 
    
         
            +
                  assert_equal @target.pages[1], p2
         
     | 
| 
      
 24 
     | 
    
         
            +
                  assert_equal @target.pages[2], p3
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  assert_equal @target.Catalog.Pages, p1.Parent
         
     | 
| 
      
 27 
     | 
    
         
            +
                  assert_equal @target.Catalog.Pages, p2.Parent
         
     | 
| 
      
 28 
     | 
    
         
            +
                  assert_equal @target.Catalog.Pages, p3.Parent
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  assert_nothing_raised do
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @target.save(@output)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  assert_equal @target.Catalog.Pages.Count, 3
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     |