pdfrb 0.3.0 → 0.7.1
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +51 -0
- data/Gemfile +1 -0
- data/PROPOSAL.canvas-clip.md +92 -0
- data/PROPOSAL.canvas-draw-image-matrix.md +87 -0
- data/PROPOSAL.canvas-rich-text.md +103 -0
- data/PROPOSAL.canvas-text-lines.md +77 -0
- data/PROPOSAL.canvas-transparency.md +106 -0
- data/PROPOSAL.external-font-metrics.md +129 -0
- data/PROPOSAL.font-embedding-fontfile2.md +88 -0
- data/PROPOSAL.font-resolver-ttc.md +105 -0
- data/PROPOSAL.font-resolver.md +96 -0
- data/PROPOSAL.font-subsetting.md +98 -0
- data/PROPOSAL.gradient-shadings.md +110 -0
- data/PROPOSAL.page-mediabox-setter.md +66 -0
- data/PROPOSAL.per-glyph-width.md +91 -0
- data/PROPOSAL.stringio-require.md +53 -0
- data/PROPOSAL.struct-tree-root.md +102 -0
- data/PROPOSAL.text-measurement.md +93 -0
- data/PROPOSAL.ttf-table-parsing-fix.md +112 -0
- data/RELEASE.md +61 -0
- data/data/pdfrb/afm/Courier-Bold.afm +342 -342
- data/data/pdfrb/afm/Courier-BoldOblique.afm +342 -342
- data/data/pdfrb/afm/Courier-Oblique.afm +342 -342
- data/data/pdfrb/afm/Courier.afm +342 -342
- data/data/pdfrb/afm/Helvetica-Bold.afm +2827 -2827
- data/data/pdfrb/afm/Helvetica-BoldOblique.afm +2827 -2827
- data/data/pdfrb/afm/Helvetica-Oblique.afm +3051 -3051
- data/data/pdfrb/afm/Helvetica.afm +3051 -3051
- data/data/pdfrb/afm/Symbol.afm +213 -213
- data/data/pdfrb/afm/Times-Bold.afm +2588 -2588
- data/data/pdfrb/afm/Times-BoldItalic.afm +2384 -2384
- data/data/pdfrb/afm/Times-Italic.afm +2667 -2667
- data/data/pdfrb/afm/Times-Roman.afm +2419 -2419
- data/data/pdfrb/afm/ZapfDingbats.afm +225 -225
- data/lib/pdfrb/action/base.rb +21 -0
- data/lib/pdfrb/action/types.rb +178 -0
- data/lib/pdfrb/action.rb +55 -0
- data/lib/pdfrb/annotation/base.rb +79 -0
- data/lib/pdfrb/annotation/types.rb +222 -0
- data/lib/pdfrb/annotation.rb +78 -0
- data/lib/pdfrb/appearance/generator.rb +216 -0
- data/lib/pdfrb/appearance.rb +11 -0
- data/lib/pdfrb/arlington/object_definition.rb +2 -2
- data/lib/pdfrb/arlington/predicate/evaluator.rb +1 -1
- data/lib/pdfrb/arlington/predicate/functions.rb +25 -9
- data/lib/pdfrb/arlington/predicate.rb +1 -5
- data/lib/pdfrb/cli/batch.rb +18 -0
- data/lib/pdfrb/cli/debug_info.rb +18 -0
- data/lib/pdfrb/cli/files.rb +16 -0
- data/lib/pdfrb/cli/fonts.rb +16 -0
- data/lib/pdfrb/cli/form.rb +18 -0
- data/lib/pdfrb/cli/image2pdf.rb +18 -0
- data/lib/pdfrb/cli/images.rb +34 -0
- data/lib/pdfrb/cli/info.rb +20 -0
- data/lib/pdfrb/cli/inspect.rb +18 -0
- data/lib/pdfrb/cli/merge.rb +18 -0
- data/lib/pdfrb/cli/modify.rb +18 -0
- data/lib/pdfrb/cli/optimize.rb +18 -0
- data/lib/pdfrb/cli/split.rb +21 -0
- data/lib/pdfrb/cli/watermark.rb +18 -0
- data/lib/pdfrb/cli.rb +291 -7
- data/lib/pdfrb/color/color_space.rb +259 -0
- data/lib/pdfrb/color/icc_profile.rb +90 -0
- data/lib/pdfrb/color.rb +12 -0
- data/lib/pdfrb/compare/comparator.rb +244 -0
- data/lib/pdfrb/compare/report.rb +78 -0
- data/lib/pdfrb/compare.rb +42 -0
- data/lib/pdfrb/composer.rb +161 -0
- data/lib/pdfrb/conformance/pdf_a.rb +317 -56
- data/lib/pdfrb/conformance/pdf_ua.rb +186 -29
- data/lib/pdfrb/conformance/pdf_x.rb +247 -0
- data/lib/pdfrb/conformance/rule.rb +78 -0
- data/lib/pdfrb/conformance/structure_elements.rb +174 -0
- data/lib/pdfrb/conformance/verapdf_bridge.rb +92 -0
- data/lib/pdfrb/conformance.rb +7 -3
- data/lib/pdfrb/content/canvas.rb +354 -72
- data/lib/pdfrb/content/color_space.rb +157 -0
- data/lib/pdfrb/content/hidden_text_detector.rb +167 -0
- data/lib/pdfrb/content/operator.rb +21 -1
- data/lib/pdfrb/content/operators/clipping.rb +36 -0
- data/lib/pdfrb/content/operators/graphics_state_params.rb +15 -0
- data/lib/pdfrb/content/operators/inline_image.rb +53 -0
- data/lib/pdfrb/content/operators.rb +22 -0
- data/lib/pdfrb/content/shading/base.rb +139 -0
- data/lib/pdfrb/content/shading.rb +17 -0
- data/lib/pdfrb/content/smart_text_extractor.rb +85 -0
- data/lib/pdfrb/content/tiling_pattern.rb +78 -0
- data/lib/pdfrb/content/transformation_matrix.rb +61 -0
- data/lib/pdfrb/content.rb +7 -26
- data/lib/pdfrb/destination/fit.rb +185 -0
- data/lib/pdfrb/destination.rb +13 -0
- data/lib/pdfrb/digital_signature/cms_handler.rb +22 -0
- data/lib/pdfrb/digital_signature/signing.rb +107 -11
- data/lib/pdfrb/digital_signature/timestamp_handler.rb +45 -0
- data/lib/pdfrb/digital_signature/verification.rb +88 -9
- data/lib/pdfrb/digital_signature/verification_result.rb +14 -0
- data/lib/pdfrb/digital_signature.rb +26 -2
- data/lib/pdfrb/document/annotations.rb +120 -3
- data/lib/pdfrb/document/associated_files.rb +104 -0
- data/lib/pdfrb/document/colors.rb +95 -0
- data/lib/pdfrb/document/destinations.rb +127 -5
- data/lib/pdfrb/document/display.rb +84 -0
- data/lib/pdfrb/document/fonts.rb +417 -45
- data/lib/pdfrb/document/form.rb +338 -0
- data/lib/pdfrb/document/graphics_state.rb +91 -0
- data/lib/pdfrb/document/images.rb +4 -4
- data/lib/pdfrb/document/info.rb +102 -0
- data/lib/pdfrb/document/layers.rb +62 -0
- data/lib/pdfrb/document/metadata.rb +12 -5
- data/lib/pdfrb/document/output_intents.rb +91 -0
- data/lib/pdfrb/document/page_labels.rb +80 -0
- data/lib/pdfrb/document/pages.rb +68 -19
- data/lib/pdfrb/document/portfolio.rb +119 -0
- data/lib/pdfrb/document/shadings.rb +159 -0
- data/lib/pdfrb/document/stamps.rb +68 -0
- data/lib/pdfrb/document/structure.rb +242 -0
- data/lib/pdfrb/document.rb +73 -4
- data/lib/pdfrb/encryption/identity.rb +13 -0
- data/lib/pdfrb/encryption/password_verification.rb +53 -8
- data/lib/pdfrb/encryption/security_handler.rb +8 -5
- data/lib/pdfrb/encryption/standard_security_handler.rb +154 -81
- data/lib/pdfrb/encryption.rb +17 -0
- data/lib/pdfrb/error.rb +2 -2
- data/lib/pdfrb/filter/brotli_decode.rb +32 -0
- data/lib/pdfrb/filter/ccitt_fax_decode.rb +12 -0
- data/lib/pdfrb/filter/crypt.rb +2 -2
- data/lib/pdfrb/filter/dct_decode.rb +18 -0
- data/lib/pdfrb/filter/flate_decode.rb +4 -18
- data/lib/pdfrb/filter/jbig2_decode.rb +12 -0
- data/lib/pdfrb/filter/jpx_decode.rb +18 -0
- data/lib/pdfrb/filter/lzw_decode.rb +3 -2
- data/lib/pdfrb/filter/png_predictor.rb +94 -0
- data/lib/pdfrb/filter.rb +26 -13
- data/lib/pdfrb/font/afm_parser.rb +50 -26
- data/lib/pdfrb/font/cmap/writer.rb +9 -0
- data/lib/pdfrb/font/encoding/win_ansi_encoding.rb +17 -0
- data/lib/pdfrb/font/encoding.rb +32 -3
- data/lib/pdfrb/font/metrics_helper.rb +121 -0
- data/lib/pdfrb/font/true_type/file.rb +10 -1
- data/lib/pdfrb/font/true_type/glyf.rb +82 -0
- data/lib/pdfrb/font/true_type/kern.rb +58 -0
- data/lib/pdfrb/font/true_type/loca.rb +42 -0
- data/lib/pdfrb/font/true_type/maxp.rb +44 -0
- data/lib/pdfrb/font/true_type/name.rb +53 -0
- data/lib/pdfrb/font/true_type/post.rb +93 -0
- data/lib/pdfrb/font/true_type/subsetter.rb +3 -5
- data/lib/pdfrb/font/true_type/wrapper.rb +102 -0
- data/lib/pdfrb/font/true_type.rb +7 -0
- data/lib/pdfrb/font.rb +2 -0
- data/lib/pdfrb/font_loader/from_configuration.rb +19 -0
- data/lib/pdfrb/font_loader/from_file.rb +20 -0
- data/lib/pdfrb/font_loader/standard14.rb +20 -0
- data/lib/pdfrb/font_loader/variant_from_name.rb +36 -0
- data/lib/pdfrb/font_loader.rb +4 -0
- data/lib/pdfrb/font_resolver.rb +138 -0
- data/lib/pdfrb/image/audit.rb +94 -0
- data/lib/pdfrb/image/downsampler.rb +124 -0
- data/lib/pdfrb/image.rb +13 -0
- data/lib/pdfrb/image_loader/jpeg.rb +39 -58
- data/lib/pdfrb/image_loader/png.rb +82 -251
- data/lib/pdfrb/layout/bidi.rb +198 -0
- data/lib/pdfrb/layout/box.rb +49 -0
- data/lib/pdfrb/layout/box_fitter.rb +54 -0
- data/lib/pdfrb/layout/column_box.rb +71 -0
- data/lib/pdfrb/layout/container_box.rb +45 -0
- data/lib/pdfrb/layout/frame.rb +67 -0
- data/lib/pdfrb/layout/image_box.rb +44 -0
- data/lib/pdfrb/layout/inline_box.rb +25 -0
- data/lib/pdfrb/layout/line.rb +55 -0
- data/lib/pdfrb/layout/list_box.rb +87 -0
- data/lib/pdfrb/layout/numeric_refinements.rb +43 -0
- data/lib/pdfrb/layout/page_style.rb +65 -0
- data/lib/pdfrb/layout/style.rb +62 -0
- data/lib/pdfrb/layout/table_box.rb +66 -0
- data/lib/pdfrb/layout/text_box.rb +38 -0
- data/lib/pdfrb/layout/text_fragment.rb +45 -0
- data/lib/pdfrb/layout/text_layouter.rb +123 -0
- data/lib/pdfrb/layout.rb +28 -0
- data/lib/pdfrb/linearization/hint_stream.rb +93 -0
- data/lib/pdfrb/linearization/writer.rb +259 -0
- data/lib/pdfrb/linearization.rb +21 -0
- data/lib/pdfrb/model/cos/dictionary.rb +12 -0
- data/lib/pdfrb/model/pdf_array.rb +2 -2
- data/lib/pdfrb/model/type/action.rb +42 -0
- data/lib/pdfrb/model/type/action_go_to_3d_view.rb +14 -0
- data/lib/pdfrb/model/type/action_go_to_dp.rb +16 -0
- data/lib/pdfrb/model/type/action_go_to_r.rb +26 -0
- data/lib/pdfrb/model/type/action_goto.rb +34 -0
- data/lib/pdfrb/model/type/action_hide.rb +26 -0
- data/lib/pdfrb/model/type/action_import_data.rb +18 -0
- data/lib/pdfrb/model/type/action_java_script.rb +18 -0
- data/lib/pdfrb/model/type/action_launch.rb +22 -0
- data/lib/pdfrb/model/type/action_movie.rb +22 -0
- data/lib/pdfrb/model/type/action_named.rb +23 -0
- data/lib/pdfrb/model/type/action_nop.rb +12 -0
- data/lib/pdfrb/model/type/action_rendition.rb +28 -0
- data/lib/pdfrb/model/type/action_reset_form.rb +22 -0
- data/lib/pdfrb/model/type/action_rich_media_execute.rb +17 -0
- data/lib/pdfrb/model/type/action_set_ocg_state.rb +32 -0
- data/lib/pdfrb/model/type/action_set_state.rb +14 -0
- data/lib/pdfrb/model/type/action_sound_action.rb +23 -0
- data/lib/pdfrb/model/type/action_submit_form.rb +64 -0
- data/lib/pdfrb/model/type/action_thread.rb +23 -0
- data/lib/pdfrb/model/type/action_trans.rb +30 -0
- data/lib/pdfrb/model/type/action_uri.rb +30 -0
- data/lib/pdfrb/model/type/af_embedded_file.rb +11 -0
- data/lib/pdfrb/model/type/af_file_specification.rb +34 -0
- data/lib/pdfrb/model/type/annotation.rb +49 -10
- data/lib/pdfrb/model/type/appearance.rb +41 -0
- data/lib/pdfrb/model/type/appearance_characteristics.rb +36 -0
- data/lib/pdfrb/model/type/appearance_generator.rb +22 -0
- data/lib/pdfrb/model/type/appearance_trap_net.rb +84 -0
- data/lib/pdfrb/model/type/border_effect.rb +25 -0
- data/lib/pdfrb/model/type/border_styling.rb +38 -0
- data/lib/pdfrb/model/type/box_color_info.rb +21 -0
- data/lib/pdfrb/model/type/box_style.rb +19 -0
- data/lib/pdfrb/model/type/button.rb +17 -0
- data/lib/pdfrb/model/type/cal_gray.rb +17 -0
- data/lib/pdfrb/model/type/cal_rgb.rb +22 -0
- data/lib/pdfrb/model/type/caret_annotation.rb +21 -0
- data/lib/pdfrb/model/type/catalog.rb +99 -16
- data/lib/pdfrb/model/type/choice.rb +21 -0
- data/lib/pdfrb/model/type/cid_font.rb +52 -1
- data/lib/pdfrb/model/type/cid_font_descriptor_metrics.rb +28 -0
- data/lib/pdfrb/model/type/cid_system_info.rb +28 -0
- data/lib/pdfrb/model/type/circle_annotation.rb +20 -0
- data/lib/pdfrb/model/type/collection.rb +27 -0
- data/lib/pdfrb/model/type/collection_field.rb +24 -0
- data/lib/pdfrb/model/type/collection_item.rb +19 -0
- data/lib/pdfrb/model/type/collection_schema.rb +25 -0
- data/lib/pdfrb/model/type/collection_sort.rb +13 -0
- data/lib/pdfrb/model/type/crypt_filter.rb +58 -0
- data/lib/pdfrb/model/type/device_n.rb +37 -0
- data/lib/pdfrb/model/type/device_n_mixing_hints.rb +17 -0
- data/lib/pdfrb/model/type/device_n_process.rb +13 -0
- data/lib/pdfrb/model/type/doc_mdp_transform_parameters.rb +21 -0
- data/lib/pdfrb/model/type/document_security_store.rb +55 -0
- data/lib/pdfrb/model/type/embedded_file.rb +19 -0
- data/lib/pdfrb/model/type/embedded_file_parameter.rb +48 -0
- data/lib/pdfrb/model/type/encryption_public_key.rb +38 -0
- data/lib/pdfrb/model/type/encryption_standard.rb +68 -0
- data/lib/pdfrb/model/type/field_mdp_transform_parameters.rb +26 -0
- data/lib/pdfrb/model/type/file_attachment_annotation.rb +29 -0
- data/lib/pdfrb/model/type/file_spec_ef.rb +22 -0
- data/lib/pdfrb/model/type/file_spec_rf.rb +21 -0
- data/lib/pdfrb/model/type/file_specification.rb +43 -0
- data/lib/pdfrb/model/type/file_trailer.rb +54 -0
- data/lib/pdfrb/model/type/font.rb +73 -2
- data/lib/pdfrb/model/type/font_cid_type0.rb +17 -0
- data/lib/pdfrb/model/type/font_cid_type2.rb +17 -0
- data/lib/pdfrb/model/type/font_descriptor.rb +47 -0
- data/lib/pdfrb/model/type/font_descriptor_cid_type0.rb +15 -0
- data/lib/pdfrb/model/type/font_descriptor_cid_type2.rb +15 -0
- data/lib/pdfrb/model/type/font_encoding.rb +47 -0
- data/lib/pdfrb/model/type/font_file.rb +28 -0
- data/lib/pdfrb/model/type/font_file2.rb +32 -0
- data/lib/pdfrb/model/type/font_file3.rb +23 -0
- data/lib/pdfrb/model/type/font_multiple_master.rb +60 -0
- data/lib/pdfrb/model/type/font_true_type.rb +1 -1
- data/lib/pdfrb/model/type/font_type0.rb +1 -1
- data/lib/pdfrb/model/type/font_type1.rb +1 -1
- data/lib/pdfrb/model/type/font_type3.rb +1 -1
- data/lib/pdfrb/model/type/form_field.rb +73 -0
- data/lib/pdfrb/model/type/free_text_annotation.rb +37 -0
- data/lib/pdfrb/model/type/function.rb +42 -0
- data/lib/pdfrb/model/type/function_exponential.rb +31 -0
- data/lib/pdfrb/model/type/function_postscript.rb +25 -0
- data/lib/pdfrb/model/type/function_sampled.rb +55 -0
- data/lib/pdfrb/model/type/function_stitching.rb +33 -0
- data/lib/pdfrb/model/type/generic_appearance.rb +40 -0
- data/lib/pdfrb/model/type/graphics_state_parameter.rb +69 -0
- data/lib/pdfrb/model/type/halftone.rb +21 -0
- data/lib/pdfrb/model/type/halftone_type1.rb +17 -0
- data/lib/pdfrb/model/type/halftone_type10.rb +16 -0
- data/lib/pdfrb/model/type/halftone_type16.rb +11 -0
- data/lib/pdfrb/model/type/halftone_type5.rb +24 -0
- data/lib/pdfrb/model/type/halftone_type6.rb +16 -0
- data/lib/pdfrb/model/type/highlight_annotation.rb +11 -0
- data/lib/pdfrb/model/type/icc_based_color_space.rb +24 -0
- data/lib/pdfrb/model/type/icon_fit.rb +31 -0
- data/lib/pdfrb/model/type/indexed.rb +32 -0
- data/lib/pdfrb/model/type/info.rb +44 -0
- data/lib/pdfrb/model/type/ink_annotation.rb +29 -0
- data/lib/pdfrb/model/type/interactive_form.rb +36 -0
- data/lib/pdfrb/model/type/interior_color.rb +12 -0
- data/lib/pdfrb/model/type/jbig2_globals.rb +15 -0
- data/lib/pdfrb/model/type/lab.rb +27 -0
- data/lib/pdfrb/model/type/line_annotation.rb +44 -0
- data/lib/pdfrb/model/type/line_ending_styling.rb +39 -0
- data/lib/pdfrb/model/type/link_annotation.rb +41 -0
- data/lib/pdfrb/model/type/link_appearance.rb +9 -0
- data/lib/pdfrb/model/type/mark_information.rb +23 -0
- data/lib/pdfrb/model/type/marked_content_reference.rb +24 -0
- data/lib/pdfrb/model/type/markup_annotation.rb +36 -0
- data/lib/pdfrb/model/type/mdp_dict.rb +28 -0
- data/lib/pdfrb/model/type/measure.rb +39 -0
- data/lib/pdfrb/model/type/media_clip.rb +28 -0
- data/lib/pdfrb/model/type/media_offset.rb +106 -0
- data/lib/pdfrb/model/type/metadata.rb +27 -3
- data/lib/pdfrb/model/type/misc_helpers.rb +75 -0
- data/lib/pdfrb/model/type/movie.rb +28 -0
- data/lib/pdfrb/model/type/names.rb +51 -0
- data/lib/pdfrb/model/type/namespace.rb +27 -0
- data/lib/pdfrb/model/type/object_reference.rb +31 -0
- data/lib/pdfrb/model/type/object_stream.rb +38 -0
- data/lib/pdfrb/model/type/opt_content_ext.rb +94 -0
- data/lib/pdfrb/model/type/opt_content_page_element.rb +18 -0
- data/lib/pdfrb/model/type/optional_content_config.rb +56 -0
- data/lib/pdfrb/model/type/optional_content_group.rb +35 -10
- data/lib/pdfrb/model/type/optional_content_membership.rb +36 -2
- data/lib/pdfrb/model/type/optional_content_properties.rb +16 -1
- data/lib/pdfrb/model/type/outline.rb +40 -6
- data/lib/pdfrb/model/type/outline_item.rb +45 -0
- data/lib/pdfrb/model/type/output_intent.rb +30 -0
- data/lib/pdfrb/model/type/page.rb +127 -0
- data/lib/pdfrb/model/type/page_label.rb +68 -0
- data/lib/pdfrb/model/type/page_piece_info.rb +58 -0
- data/lib/pdfrb/model/type/page_tree_node.rb +51 -16
- data/lib/pdfrb/model/type/page_tree_node_root.rb +15 -0
- data/lib/pdfrb/model/type/pattern.rb +16 -0
- data/lib/pdfrb/model/type/pattern_shading.rb +25 -0
- data/lib/pdfrb/model/type/pattern_tiling.rb +25 -0
- data/lib/pdfrb/model/type/polygon_annotation.rb +29 -0
- data/lib/pdfrb/model/type/polygon_polyline.rb +14 -0
- data/lib/pdfrb/model/type/polyline_annotation.rb +29 -0
- data/lib/pdfrb/model/type/popup_annotation.rb +20 -0
- data/lib/pdfrb/model/type/printer_mark_annotation.rb +13 -0
- data/lib/pdfrb/model/type/redact_annotation.rb +28 -0
- data/lib/pdfrb/model/type/rendition.rb +31 -0
- data/lib/pdfrb/model/type/resources.rb +59 -14
- data/lib/pdfrb/model/type/rich_media_activation.rb +24 -0
- data/lib/pdfrb/model/type/rich_media_animation.rb +25 -0
- data/lib/pdfrb/model/type/rich_media_annotation.rb +18 -0
- data/lib/pdfrb/model/type/rich_media_command.rb +19 -0
- data/lib/pdfrb/model/type/rich_media_configuration.rb +32 -0
- data/lib/pdfrb/model/type/rich_media_content.rb +28 -0
- data/lib/pdfrb/model/type/rich_media_cue_point.rb +18 -0
- data/lib/pdfrb/model/type/rich_media_deactivation.rb +17 -0
- data/lib/pdfrb/model/type/rich_media_instance.rb +33 -0
- data/lib/pdfrb/model/type/rich_media_presentation.rb +29 -0
- data/lib/pdfrb/model/type/rich_media_settings.rb +33 -0
- data/lib/pdfrb/model/type/rich_media_window.rb +20 -0
- data/lib/pdfrb/model/type/screen_annotation.rb +19 -0
- data/lib/pdfrb/model/type/separation.rb +25 -0
- data/lib/pdfrb/model/type/sig_field_lock.rb +25 -0
- data/lib/pdfrb/model/type/sig_field_seed_value.rb +25 -0
- data/lib/pdfrb/model/type/signature.rb +65 -0
- data/lib/pdfrb/model/type/signature_build.rb +86 -0
- data/lib/pdfrb/model/type/signature_field.rb +17 -0
- data/lib/pdfrb/model/type/software_identifier.rb +19 -0
- data/lib/pdfrb/model/type/sound.rb +38 -0
- data/lib/pdfrb/model/type/sound_annotation.rb +21 -0
- data/lib/pdfrb/model/type/square_annotation.rb +24 -0
- data/lib/pdfrb/model/type/square_circle.rb +13 -0
- data/lib/pdfrb/model/type/squiggly_annotation.rb +11 -0
- data/lib/pdfrb/model/type/stamp_annotation.rb +19 -0
- data/lib/pdfrb/model/type/strikeout_annotation.rb +11 -0
- data/lib/pdfrb/model/type/struct_elem.rb +75 -0
- data/lib/pdfrb/model/type/struct_tree_root.rb +34 -0
- data/lib/pdfrb/model/type/structure_attributes.rb +44 -0
- data/lib/pdfrb/model/type/structure_element_kid.rb +33 -0
- data/lib/pdfrb/model/type/text_annotation.rb +25 -0
- data/lib/pdfrb/model/type/text_appearance.rb +9 -0
- data/lib/pdfrb/model/type/text_field.rb +21 -0
- data/lib/pdfrb/model/type/text_markup_annotation.rb +30 -0
- data/lib/pdfrb/model/type/three_d_activation.rb +32 -0
- data/lib/pdfrb/model/type/three_d_animation_style.rb +24 -0
- data/lib/pdfrb/model/type/three_d_background.rb +28 -0
- data/lib/pdfrb/model/type/three_d_cross_section.rb +25 -0
- data/lib/pdfrb/model/type/three_d_lighting_scheme.rb +26 -0
- data/lib/pdfrb/model/type/three_d_measure.rb +20 -0
- data/lib/pdfrb/model/type/three_d_measure_3dc.rb +23 -0
- data/lib/pdfrb/model/type/three_d_measure_ad3.rb +14 -0
- data/lib/pdfrb/model/type/three_d_measure_ld3.rb +14 -0
- data/lib/pdfrb/model/type/three_d_measure_pd3.rb +20 -0
- data/lib/pdfrb/model/type/three_d_measure_rd3.rb +14 -0
- data/lib/pdfrb/model/type/three_d_node.rb +37 -0
- data/lib/pdfrb/model/type/three_d_reference.rb +21 -0
- data/lib/pdfrb/model/type/three_d_render_mode.rb +34 -0
- data/lib/pdfrb/model/type/three_d_stream.rb +48 -0
- data/lib/pdfrb/model/type/three_d_units.rb +18 -0
- data/lib/pdfrb/model/type/three_d_view.rb +40 -0
- data/lib/pdfrb/model/type/to_unicode_cmap_stream.rb +23 -0
- data/lib/pdfrb/model/type/transition.rb +68 -0
- data/lib/pdfrb/model/type/underline_annotation.rb +11 -0
- data/lib/pdfrb/model/type/ur_transform_parameters.rb +33 -0
- data/lib/pdfrb/model/type/uri_dict.rb +18 -0
- data/lib/pdfrb/model/type/url_alias.rb +19 -0
- data/lib/pdfrb/model/type/variable_text_field.rb +47 -0
- data/lib/pdfrb/model/type/viewer_preferences.rb +42 -0
- data/lib/pdfrb/model/type/watermark_annotation.rb +13 -0
- data/lib/pdfrb/model/type/widget_annotation.rb +48 -0
- data/lib/pdfrb/model/type/widget_appearance.rb +9 -0
- data/lib/pdfrb/model/type/xobject_form.rb +41 -0
- data/lib/pdfrb/model/type/xobject_image.rb +56 -0
- data/lib/pdfrb/model/type/xref_stream.rb +37 -0
- data/lib/pdfrb/model/type.rb +289 -6
- data/lib/pdfrb/serializer.rb +2 -2
- data/lib/pdfrb/source/tokenizer.rb +0 -2
- data/lib/pdfrb/task/benchmark.rb +83 -0
- data/lib/pdfrb/task/extract_text.rb +1 -1
- data/lib/pdfrb/task/generate_corpus.rb +130 -0
- data/lib/pdfrb/task/memory_profile.rb +84 -0
- data/lib/pdfrb/task/optimize.rb +97 -7
- data/lib/pdfrb/task/regenerate_appearances.rb +98 -0
- data/lib/pdfrb/task.rb +4 -3
- data/lib/pdfrb/test_utils.rb +112 -0
- data/lib/pdfrb/validator.rb +82 -0
- data/lib/pdfrb/version.rb +1 -1
- data/lib/pdfrb/writer.rb +117 -27
- data/lib/pdfrb/xmp/packet.rb +122 -0
- data/lib/pdfrb/xmp/schemas.rb +96 -0
- data/lib/pdfrb/xmp.rb +44 -0
- data/lib/pdfrb/xref_section.rb +2 -2
- data/lib/pdfrb.rb +24 -54
- data/pdfrb.gemspec +45 -0
- data/script/apply_fixes.sh +843 -0
- data/script/make_jpeg_fixture.rb +53 -0
- data/script/make_png_fixture.rb +25 -0
- metadata +319 -4
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Popup annotation (s12.5.6.14). Displays text/markup in a pop-up window.
|
|
7
|
+
class PopupAnnotation < Annotation
|
|
8
|
+
def parent; self[:Parent]; end
|
|
9
|
+
def open?; !!value[:Open]; end
|
|
10
|
+
|
|
11
|
+
def markup_annotation
|
|
12
|
+
ref = parent
|
|
13
|
+
return nil unless ref && document
|
|
14
|
+
|
|
15
|
+
document.object(ref)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Printer-mark annotation (s12.5.6.17). Marks page for trimming,
|
|
7
|
+
# registration, etc.
|
|
8
|
+
class PrinterMarkAnnotation < Annotation
|
|
9
|
+
def mark_subtype; self[:MN]; end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Redaction annotation (s12.5.6.16). Marks content for removal.
|
|
7
|
+
class RedactAnnotation < MarkupAnnotation
|
|
8
|
+
def overlay_text; self[:OverlayText]; end
|
|
9
|
+
def repeat_overlay?; truthy?(self[:Repeat]); end
|
|
10
|
+
def quadding; self[:Q]; end
|
|
11
|
+
def interior_color; self[:IC]; end
|
|
12
|
+
def da; self[:DA]; end
|
|
13
|
+
|
|
14
|
+
def alignment
|
|
15
|
+
case quadding
|
|
16
|
+
when 1 then :center
|
|
17
|
+
when 2 then :right
|
|
18
|
+
else :left
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def has_overlay_text?
|
|
23
|
+
!!overlay_text && (!overlay_text.is_a?(String) || !overlay_text.empty?)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rendition dictionary (s13.3.5). Describes a media clip plus
|
|
7
|
+
# how it should be played.
|
|
8
|
+
class Rendition < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def subtype; self[:S]&.to_sym; end
|
|
11
|
+
def media_clip; self[:C]; end
|
|
12
|
+
def operation; self[:OP]; end
|
|
13
|
+
|
|
14
|
+
def media?
|
|
15
|
+
subtype == :MR
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def selector?
|
|
19
|
+
subtype == :SR
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def resolved_media_clip
|
|
23
|
+
ref = media_clip
|
|
24
|
+
return nil unless ref && document
|
|
25
|
+
|
|
26
|
+
document.object(ref)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -8,36 +8,81 @@ module Pdfrb
|
|
|
8
8
|
class Resources < Pdfrb::Model::Cos::Dictionary
|
|
9
9
|
arlington_object "Resource"
|
|
10
10
|
|
|
11
|
-
def
|
|
12
|
-
|
|
11
|
+
def fonts; self[:Font]; end
|
|
12
|
+
def xobjects; self[:XObject]; end
|
|
13
|
+
def ext_gstates; self[:ExtGState]; end
|
|
14
|
+
def color_spaces; self[:ColorSpace]; end
|
|
15
|
+
def patterns; self[:Pattern]; end
|
|
16
|
+
def shadings; self[:Shading]; end
|
|
17
|
+
def properties_dict; self[:Properties]; end
|
|
18
|
+
def proc_set; self[:ProcSet]; end
|
|
19
|
+
|
|
20
|
+
def font_names
|
|
21
|
+
dict_keys(fonts)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def xobject_names
|
|
25
|
+
dict_keys(xobjects)
|
|
13
26
|
end
|
|
14
27
|
|
|
15
|
-
def
|
|
16
|
-
|
|
28
|
+
def ext_gstate_names
|
|
29
|
+
dict_keys(ext_gstates)
|
|
17
30
|
end
|
|
18
31
|
|
|
19
|
-
def
|
|
20
|
-
|
|
32
|
+
def color_space_names
|
|
33
|
+
dict_keys(color_spaces)
|
|
21
34
|
end
|
|
22
35
|
|
|
23
|
-
def
|
|
24
|
-
|
|
36
|
+
def pattern_names
|
|
37
|
+
dict_keys(patterns)
|
|
25
38
|
end
|
|
26
39
|
|
|
27
|
-
def
|
|
28
|
-
|
|
40
|
+
def shading_names
|
|
41
|
+
dict_keys(shadings)
|
|
29
42
|
end
|
|
30
43
|
|
|
31
|
-
def
|
|
32
|
-
|
|
44
|
+
def font(name); lookup_named(:Font, name); end
|
|
45
|
+
def xobject(name); lookup_named(:XObject, name); end
|
|
46
|
+
def ext_gstate(name); lookup_named(:ExtGState, name); end
|
|
47
|
+
def color_space(name); lookup_named(:ColorSpace, name); end
|
|
48
|
+
def pattern(name); lookup_named(:Pattern, name); end
|
|
49
|
+
def shading(name); lookup_named(:Shading, name); end
|
|
50
|
+
def properties(name); lookup_named(:Properties, name); end
|
|
51
|
+
|
|
52
|
+
def has_procset?(name)
|
|
53
|
+
return false unless proc_set
|
|
54
|
+
|
|
55
|
+
arr = proc_set.is_a?(Pdfrb::Model::PdfArray) ? proc_set.to_a : proc_set
|
|
56
|
+
arr.is_a?(Array) && arr.include?(name)
|
|
33
57
|
end
|
|
34
58
|
|
|
35
|
-
def
|
|
36
|
-
|
|
59
|
+
def empty?
|
|
60
|
+
%i[Font XObject ExtGState ColorSpace Pattern Shading Properties].all? do |k|
|
|
61
|
+
value[k].nil? || empty_collection?(value[k])
|
|
62
|
+
end
|
|
37
63
|
end
|
|
38
64
|
|
|
39
65
|
private
|
|
40
66
|
|
|
67
|
+
def empty_collection?(value)
|
|
68
|
+
case value
|
|
69
|
+
when ::Array, ::Hash then value.empty?
|
|
70
|
+
when Pdfrb::Model::Cos::Dictionary, Pdfrb::Model::PdfArray then value.value.empty?
|
|
71
|
+
else false
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def dict_keys(dict)
|
|
76
|
+
return [] unless dict
|
|
77
|
+
|
|
78
|
+
obj = dict.is_a?(Pdfrb::Model::Reference) && document ? document.object(dict) : dict
|
|
79
|
+
case obj
|
|
80
|
+
when Hash then obj.keys
|
|
81
|
+
when Pdfrb::Model::Cos::Dictionary then obj.value.keys
|
|
82
|
+
else []
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
41
86
|
def lookup_named(key, name)
|
|
42
87
|
sub = self[key]
|
|
43
88
|
return nil unless sub.is_a?(::Hash) || sub.is_a?(Pdfrb::Model::Cos::Dictionary)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Activation (s13.6.1). Activation behaviour settings.
|
|
7
|
+
class RichMediaActivation < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def condition; self[:Condition]&.to_sym; end
|
|
10
|
+
def configuration; self[:Configuration]; end
|
|
11
|
+
def presentation; self[:Presentation]; end
|
|
12
|
+
def scripts; self[:Scripts]; end
|
|
13
|
+
|
|
14
|
+
def activation_on_click?; condition == :PO; end
|
|
15
|
+
def activation_on_page_open?; condition == :PV; end
|
|
16
|
+
def activation_on_page_visible?; condition == :XA; end
|
|
17
|
+
|
|
18
|
+
def has_configuration?
|
|
19
|
+
!!configuration
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Animation (s13.6.2). Playback control for
|
|
7
|
+
# rich media instances.
|
|
8
|
+
class RichMediaAnimation < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def subtype; self[:Subtype]&.to_sym; end
|
|
11
|
+
def play_count; self[:PlayCount] || -1; end
|
|
12
|
+
def speed; self[:Speed] || 1; end
|
|
13
|
+
def animation_offset; self[:AO] || 0; end
|
|
14
|
+
|
|
15
|
+
def no_animation?; subtype == :None; end
|
|
16
|
+
def linear?; subtype == :Linear; end
|
|
17
|
+
def oscillating?; subtype == :Oscillating; end
|
|
18
|
+
|
|
19
|
+
def loop_forever?
|
|
20
|
+
play_count.negative?
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media annotation (s12.5.6.20, PDF 1.7 ExtensionLevel 3 +
|
|
7
|
+
# PDF 2.0). Hosts interactive rich media content (Flash, video).
|
|
8
|
+
class RichMediaAnnotation < Annotation
|
|
9
|
+
def rich_media_settings; self[:RichMediaSettings]; end
|
|
10
|
+
def rich_media_content; self[:RichMediaContent]; end
|
|
11
|
+
|
|
12
|
+
def has_rich_media?
|
|
13
|
+
!!rich_media_content
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Command (s13.6.4). A command sent to a rich media
|
|
7
|
+
# instance.
|
|
8
|
+
class RichMediaCommand < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def command_name; self[:Cmd]; end
|
|
11
|
+
def arguments; self[:Args]; end
|
|
12
|
+
|
|
13
|
+
def has_arguments?
|
|
14
|
+
!!arguments && (!arguments.is_a?(Array) || !arguments.empty?)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Configuration (s13.6.2). A media instance list.
|
|
7
|
+
class RichMediaConfiguration < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def instances; self[:Instances]; end
|
|
10
|
+
def name; self[:Name]; end
|
|
11
|
+
|
|
12
|
+
def instance_count
|
|
13
|
+
return 0 unless instances
|
|
14
|
+
|
|
15
|
+
arr = instances.is_a?(Pdfrb::Model::PdfArray) ? instances.to_a : instances
|
|
16
|
+
arr.is_a?(Array) ? arr.size : 0
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def each_instance
|
|
20
|
+
return enum_for(:each_instance) unless block_given?
|
|
21
|
+
return unless instances && document
|
|
22
|
+
|
|
23
|
+
arr = instances.is_a?(Pdfrb::Model::PdfArray) ? instances.to_a : instances
|
|
24
|
+
arr.each do |ref|
|
|
25
|
+
obj = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
|
|
26
|
+
yield obj if obj
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Content (s13.6.5). Top-level rich media assets bundle.
|
|
7
|
+
class RichMediaContent < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def configurations; self[:Configurations]; end
|
|
10
|
+
def assets; self[:Assets]; end
|
|
11
|
+
|
|
12
|
+
def configuration_count
|
|
13
|
+
return 0 unless configurations
|
|
14
|
+
|
|
15
|
+
arr = configurations.is_a?(Pdfrb::Model::PdfArray) ? configurations.to_a : configurations
|
|
16
|
+
arr.is_a?(Array) ? arr.size : 0
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def asset_count
|
|
20
|
+
return 0 unless assets
|
|
21
|
+
|
|
22
|
+
obj = assets.is_a?(Pdfrb::Model::Reference) && document ? document.object(assets) : assets
|
|
23
|
+
obj.is_a?(Pdfrb::Model::Cos::Dictionary) ? obj.value.size : 0
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Cue Point (s13.6.6). Time marker in a media playback.
|
|
7
|
+
class RichMediaCuePoint < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def time; self[:Time]; end
|
|
10
|
+
def name; self[:Name]; end
|
|
11
|
+
|
|
12
|
+
def has_time?
|
|
13
|
+
!!time
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Deactivation (s13.6.1). Deactivation behaviour.
|
|
7
|
+
class RichMediaDeactivation < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def condition; self[:Condition]&.to_sym; end
|
|
10
|
+
|
|
11
|
+
def deactivation_on_click?; condition == :PC; end
|
|
12
|
+
def deactivation_on_page_close?; condition == :PI; end
|
|
13
|
+
def deactivation_on_page_hidden?; condition == :XD; end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Instance (s13.6.3). A single playable instance.
|
|
7
|
+
class RichMediaInstance < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def subtype; self[:Subtype]&.to_sym; end
|
|
10
|
+
def media_clip; self[:Asset]; end
|
|
11
|
+
|
|
12
|
+
def flash?
|
|
13
|
+
subtype == :Flash
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def sound?
|
|
17
|
+
subtype == :Sound
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def video?
|
|
21
|
+
subtype == :Video
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def resolved_media_clip
|
|
25
|
+
ref = media_clip
|
|
26
|
+
return nil unless ref && document
|
|
27
|
+
|
|
28
|
+
document.object(ref)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Presentation (s13.6.1). Visual presentation settings
|
|
7
|
+
# for a RichMedia annotation (style, window, transparency, etc.).
|
|
8
|
+
class RichMediaPresentation < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def style; self[:Style]&.to_sym; end
|
|
11
|
+
def window; self[:Window]; end
|
|
12
|
+
def transparent?; truthy?(self[:Transparent]); end
|
|
13
|
+
def navigation_pane?; truthy?(self[:NavigationPane]); end
|
|
14
|
+
def toolbar?; truthy?(self[:Toolbar]); end
|
|
15
|
+
def pass_context_click?; truthy?(self[:PassContextClick]); end
|
|
16
|
+
|
|
17
|
+
def embedded_style?; style == :Embedded; end
|
|
18
|
+
def windowed_style?; style == :Windowed; end
|
|
19
|
+
|
|
20
|
+
def resolved_window
|
|
21
|
+
ref = window
|
|
22
|
+
return nil unless ref && document
|
|
23
|
+
|
|
24
|
+
document.object(ref)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Settings (s13.6.2). Top-level activation/deactivation
|
|
7
|
+
# configuration for a RichMedia annotation.
|
|
8
|
+
class RichMediaSettings < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def activation; self[:Activation]; end
|
|
11
|
+
def deactivation; self[:Deactivation]; end
|
|
12
|
+
|
|
13
|
+
def has_activation?
|
|
14
|
+
!!activation
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def resolved_activation
|
|
18
|
+
ref = activation
|
|
19
|
+
return nil unless ref && document
|
|
20
|
+
|
|
21
|
+
document.object(ref)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def resolved_deactivation
|
|
25
|
+
ref = deactivation
|
|
26
|
+
return nil unless ref && document
|
|
27
|
+
|
|
28
|
+
document.object(ref)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rich Media Window (s13.6.1). Window dimensions and position
|
|
7
|
+
# for windowed rich media.
|
|
8
|
+
class RichMediaWindow < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def width; self[:Width]; end
|
|
11
|
+
def height; self[:Height]; end
|
|
12
|
+
def position; self[:Position]; end
|
|
13
|
+
|
|
14
|
+
def has_dimensions?
|
|
15
|
+
!!width && !!height
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Screen annotation (s12.5.6.18). Holds media played via Action
|
|
7
|
+
# triggers. /Subtype /Screen.
|
|
8
|
+
class ScreenAnnotation < Annotation
|
|
9
|
+
def attachment_point; self[:AP]; end
|
|
10
|
+
def media_type; self[:T]; end
|
|
11
|
+
def actions; self[:AA]; end
|
|
12
|
+
|
|
13
|
+
def has_media?
|
|
14
|
+
!!media_type
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Separation color space (s8.6.6.3). A single custom colorant
|
|
7
|
+
# mapped through a tint-transform function. Used for spot colors
|
|
8
|
+
# like PANTONE 185 C.
|
|
9
|
+
class Separation < Pdfrb::Model::Cos::Dictionary
|
|
10
|
+
def alternate_space; self[:AlternateSpace]; end
|
|
11
|
+
def tint_transform; self[:TintTransform]; end
|
|
12
|
+
def colorant_name; self[:Colorant]; end
|
|
13
|
+
|
|
14
|
+
def components; 1; end
|
|
15
|
+
|
|
16
|
+
def resolved_tint_transform
|
|
17
|
+
ref = tint_transform
|
|
18
|
+
return nil unless ref && document
|
|
19
|
+
|
|
20
|
+
document.object(ref)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Signature field lock (s12.7.6.5). Specifies which fields are
|
|
7
|
+
# locked after signing.
|
|
8
|
+
class SigFieldLock < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def action; self[:Action]&.to_sym; end
|
|
10
|
+
def fields; self[:Fields]; end
|
|
11
|
+
|
|
12
|
+
def all_locked?; action == :All; end
|
|
13
|
+
def include_locked?; action == :Include; end
|
|
14
|
+
def exclude_locked?; action == :Exclude; end
|
|
15
|
+
|
|
16
|
+
def locked_field_names
|
|
17
|
+
return [] unless include_locked? && fields
|
|
18
|
+
|
|
19
|
+
arr = fields.is_a?(Pdfrb::Model::PdfArray) ? fields.to_a : fields
|
|
20
|
+
arr.is_a?(Array) ? arr : []
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Signature field seed value (s12.7.6.6). Constraints the signer
|
|
7
|
+
# must obey when signing (cert issuers, hash algorithms, etc.).
|
|
8
|
+
class SigFieldSeedValue < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def filter; self[:Filter]; end
|
|
10
|
+
def sub_filter; self[:SubFilter]; end
|
|
11
|
+
def digest_method; self[:DigestMethod]; end
|
|
12
|
+
def cert; self[:Cert]; end
|
|
13
|
+
def flags; self[:F] || 0; end
|
|
14
|
+
def legal_attestation; self[:LegalAttestation]; end
|
|
15
|
+
def add_rev_info?; flags & 1 != 0; end
|
|
16
|
+
def add_doc_mdp?; flags & 2 != 0; end
|
|
17
|
+
def add_field_mdp?; flags & 4 != 0; end
|
|
18
|
+
def required_filter?; filter && flags.anybits?(0x100); end
|
|
19
|
+
def required_subfilter?; sub_filter && flags.anybits?(0x200); end
|
|
20
|
+
def required_digest?; digest_method && flags.anybits?(0x400); end
|
|
21
|
+
def required_cert?; cert && flags.anybits?(0x800); end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Signature dictionary (s12.8.2). Carries the PKCS#7 / CMS
|
|
7
|
+
# signature payload. Lives in a Signature field's /V entry.
|
|
8
|
+
class Signature < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def filter; self[:Filter]; end
|
|
11
|
+
def sub_filter; self[:SubFilter]; end
|
|
12
|
+
def contents; self[:Contents]; end
|
|
13
|
+
def cert; self[:Cert]; end
|
|
14
|
+
def byte_range; self[:ByteRange]; end
|
|
15
|
+
def reference; self[:Reference]; end
|
|
16
|
+
def changes; self[:Changes]; end
|
|
17
|
+
def name; self[:Name]; end
|
|
18
|
+
def reason; self[:Reason]; end
|
|
19
|
+
def location; self[:Location]; end
|
|
20
|
+
def contact_info; self[:ContactInfo]; end
|
|
21
|
+
def m; self[:M]; end
|
|
22
|
+
def prop_build; self[:Prop_Build]; end
|
|
23
|
+
def prop_auth_time; self[:Prop_AuthTime]; end
|
|
24
|
+
def prop_auth_type; self[:Prop_AuthType]; end
|
|
25
|
+
|
|
26
|
+
def signed_time
|
|
27
|
+
return nil unless m
|
|
28
|
+
|
|
29
|
+
m.is_a?(Time) ? m : parse_pdf_date(m)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def pkcs7_detached?
|
|
33
|
+
sub_filter == :"adbe.pkcs7.detached"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def pkcs7_sha1?
|
|
37
|
+
sub_filter == :"adbe.pkcs7.sha1"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def pkcs1?
|
|
41
|
+
sub_filter == :"adbe.x509.rsa_sha1"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def has_byte_range?
|
|
45
|
+
byte_range.is_a?(Array) && byte_range.size == 4
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
def parse_pdf_date(str)
|
|
51
|
+
return nil unless str
|
|
52
|
+
|
|
53
|
+
match = str.to_s.match(/^D:(\d{4})(\d{2})(\d{2})(\d{2})?(\d{2})?(\d{2})?/)
|
|
54
|
+
return nil unless match
|
|
55
|
+
|
|
56
|
+
Time.new(match[1].to_i, match[2].to_i, match[3].to_i,
|
|
57
|
+
(match[4] || 0).to_i, (match[5] || 0).to_i, (match[6] || 0).to_i,
|
|
58
|
+
"+00:00")
|
|
59
|
+
rescue StandardError
|
|
60
|
+
nil
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|