pdfrb 0.2.1 → 0.6.0
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 +24 -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 +48 -0
- 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 +312 -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 +217 -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.rb +21 -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/form_xobject.rb +68 -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 +31 -257
- 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_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 +286 -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.rb +3 -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 +25 -53
- 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 +312 -2
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# ICCBased Color Space (s8.6.5.5). Wrapper for the
|
|
7
|
+
# [/ICCBased <stream-ref>] array form.
|
|
8
|
+
class ICCBasedColorSpace < Pdfrb::Model::Cos::Stream
|
|
9
|
+
def component_count; self[:N]; end
|
|
10
|
+
def alternate; self[:Alternate]; end
|
|
11
|
+
def range; self[:Range]; end
|
|
12
|
+
def metadata_stream; self[:Metadata]; end
|
|
13
|
+
|
|
14
|
+
def has_alternate?
|
|
15
|
+
!!alternate
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def has_metadata?
|
|
19
|
+
!!metadata_stream
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# IconFit (s12.5.6.19). Controls positioning/scaling of a button
|
|
7
|
+
# field's icon within its rectangle.
|
|
8
|
+
class IconFit < Cos::Dictionary
|
|
9
|
+
register_type :IconFit
|
|
10
|
+
|
|
11
|
+
def type; self[:Type]; end
|
|
12
|
+
def scale_type; self[:SW]&.to_sym; end
|
|
13
|
+
def fit; self[:S]&.to_sym; end
|
|
14
|
+
def always_scaled?; scale_type.nil? || scale_type == :A; end
|
|
15
|
+
def scale_when_bigger?; scale_type == :B; end
|
|
16
|
+
def scale_when_smaller?; scale_type == :S; end
|
|
17
|
+
def never_scale?; scale_type == :N; end
|
|
18
|
+
def proportional_fit?; fit.nil? || fit == :P; end
|
|
19
|
+
def non_proportional_fit?; fit == :A; end
|
|
20
|
+
|
|
21
|
+
def border_background; self[:BG]; end
|
|
22
|
+
def border_arrow_left; self[:IF]; end
|
|
23
|
+
def tp; self[:TP]; end
|
|
24
|
+
|
|
25
|
+
def placement_mode
|
|
26
|
+
tp || 0
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Indexed color space array wrapper. The /Indexed color space is
|
|
7
|
+
# [/Indexed base hival lookup]; the lookup table is the stream payload
|
|
8
|
+
# or a string.
|
|
9
|
+
class Indexed < Pdfrb::Model::Cos::Stream
|
|
10
|
+
def base_color_space; self[:Base]; end
|
|
11
|
+
def hival; self[:Hival]; end
|
|
12
|
+
def lookup; self[:Lookup]; end
|
|
13
|
+
|
|
14
|
+
def components
|
|
15
|
+
return nil unless base_color_space
|
|
16
|
+
|
|
17
|
+
case base_color_space.to_sym
|
|
18
|
+
when :DeviceGray, :CalGray then 1
|
|
19
|
+
when :DeviceRGB, :CalRGB then 3
|
|
20
|
+
when :DeviceCMYK then 4
|
|
21
|
+
end
|
|
22
|
+
rescue StandardError
|
|
23
|
+
nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def palette_entries
|
|
27
|
+
(hival || -1) + 1
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -9,6 +9,50 @@ module Pdfrb
|
|
|
9
9
|
# still widely used.
|
|
10
10
|
class Info < Pdfrb::Model::Cos::Dictionary
|
|
11
11
|
arlington_object "DocInfo"
|
|
12
|
+
register_type :Info
|
|
13
|
+
|
|
14
|
+
def title; self[:Title]; end
|
|
15
|
+
def author; self[:Author]; end
|
|
16
|
+
def subject; self[:Subject]; end
|
|
17
|
+
def keywords; self[:Keywords]; end
|
|
18
|
+
def creator; self[:Creator]; end
|
|
19
|
+
def producer; self[:Producer]; end
|
|
20
|
+
def creation_date; self[:CreationDate]; end
|
|
21
|
+
def modification_date; self[:ModDate]; end
|
|
22
|
+
def trapped; self[:Trapped]; end
|
|
23
|
+
|
|
24
|
+
def trapped?
|
|
25
|
+
trapped&.to_sym == :True
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def creation_time
|
|
29
|
+
parse_pdf_date(creation_date)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def modification_time
|
|
33
|
+
parse_pdf_date(modification_date)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def parse_pdf_date(str)
|
|
39
|
+
return str if str.is_a?(Time)
|
|
40
|
+
return nil unless str
|
|
41
|
+
|
|
42
|
+
match = str.to_s.match(/^D:(\d{4})(\d{2})(\d{2})(\d{2})?(\d{2})?(\d{2})?/)
|
|
43
|
+
return nil unless match
|
|
44
|
+
|
|
45
|
+
year = match[1].to_i
|
|
46
|
+
month = match[2].to_i
|
|
47
|
+
day = match[3].to_i
|
|
48
|
+
hour = (match[4] || 0).to_i
|
|
49
|
+
min = (match[5] || 0).to_i
|
|
50
|
+
sec = (match[6] || 0).to_i
|
|
51
|
+
|
|
52
|
+
Time.new(year, month, day, hour, min, sec, "+00:00")
|
|
53
|
+
rescue StandardError
|
|
54
|
+
nil
|
|
55
|
+
end
|
|
12
56
|
end
|
|
13
57
|
end
|
|
14
58
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Ink annotation (s12.5.6.13). Freehand scribble path(s).
|
|
7
|
+
class InkAnnotation < MarkupAnnotation
|
|
8
|
+
def ink_list; self[:InkList]; end
|
|
9
|
+
def interior_color; self[:IC]; end
|
|
10
|
+
def border_style; self[:BS]; end
|
|
11
|
+
def border; self[:Border]; end
|
|
12
|
+
|
|
13
|
+
def path_count
|
|
14
|
+
return 0 unless ink_list
|
|
15
|
+
|
|
16
|
+
arr = ink_list.is_a?(Pdfrb::Model::PdfArray) ? ink_list.to_a : ink_list
|
|
17
|
+
arr.is_a?(Array) ? arr.size : 0
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def path_at(index)
|
|
21
|
+
return nil unless ink_list
|
|
22
|
+
|
|
23
|
+
arr = ink_list.is_a?(Pdfrb::Model::PdfArray) ? ink_list.to_a : ink_list
|
|
24
|
+
arr && arr[index]
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -6,6 +6,42 @@ module Pdfrb
|
|
|
6
6
|
# AcroForm interactive form root (s12.7.2). Catalog /AcroForm.
|
|
7
7
|
class InteractiveForm < Pdfrb::Model::Cos::Dictionary
|
|
8
8
|
arlington_object "InteractiveForm"
|
|
9
|
+
register_type :AcroForm
|
|
10
|
+
|
|
11
|
+
def fields; self[:Fields]; end
|
|
12
|
+
def need_appearances; self[:NeedAppearances]; end
|
|
13
|
+
def sig_flags; self[:SigFlags]; end
|
|
14
|
+
def co; self[:CO]; end
|
|
15
|
+
def dr; self[:DR]; end
|
|
16
|
+
def da; self[:DA]; end
|
|
17
|
+
def q; self[:Q]; end
|
|
18
|
+
|
|
19
|
+
def need_appearances?
|
|
20
|
+
!!need_appearances
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def field_count
|
|
24
|
+
return 0 unless fields
|
|
25
|
+
|
|
26
|
+
arr = fields.is_a?(Pdfrb::Model::PdfArray) ? fields.to_a : fields
|
|
27
|
+
arr.is_a?(Array) ? arr.size : 0
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def append_only_signatures?
|
|
31
|
+
sig_flags&.anybits?(1)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def contains_signature_dr_usage?
|
|
35
|
+
sig_flags&.anybits?(2)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def text_alignment
|
|
39
|
+
case q
|
|
40
|
+
when 0 then :left
|
|
41
|
+
when 1 then :center
|
|
42
|
+
when 2 then :right
|
|
43
|
+
end
|
|
44
|
+
end
|
|
9
45
|
end
|
|
10
46
|
end
|
|
11
47
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# JBIG2 Globals stream (s7.4.7). Holds shared JBIG2 segment
|
|
7
|
+
# data referenced by /DecodeParms /JBIG2Globals.
|
|
8
|
+
class JBIG2Globals < Pdfrb::Model::Cos::Stream
|
|
9
|
+
def globals_data
|
|
10
|
+
decoded_stream&.force_encoding(Encoding::BINARY)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Lab color space dictionary (s8.6.3.4). CIE L*a*b*:
|
|
7
|
+
# [/Lab <dict>].
|
|
8
|
+
class Lab < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def white_point; self[:WhitePoint]; end
|
|
10
|
+
def black_point; self[:BlackPoint]; end
|
|
11
|
+
def range; self[:Range]; end
|
|
12
|
+
|
|
13
|
+
def components; 3; end
|
|
14
|
+
|
|
15
|
+
# /Range is [a_min a_max b_min b_max]; defaults per spec are
|
|
16
|
+
# [-100 100 -100 100].
|
|
17
|
+
def a_range
|
|
18
|
+
range ? [range[0], range[1]] : [-100, 100]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def b_range
|
|
22
|
+
range ? [range[2], range[3]] : [-100, 100]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Line annotation (s12.5.6.7). Line between two coordinate pairs.
|
|
7
|
+
class LineAnnotation < MarkupAnnotation
|
|
8
|
+
def line; self[:L]; end
|
|
9
|
+
def le; self[:LE]; end
|
|
10
|
+
def line_endings; le; end
|
|
11
|
+
def interior_color; self[:IC]; end
|
|
12
|
+
def caption; self[:Cap]; end
|
|
13
|
+
def measure; self[:Measure]; end
|
|
14
|
+
def border_style; self[:BS]; end
|
|
15
|
+
def border; self[:Border]; end
|
|
16
|
+
def co; self[:CO]; end
|
|
17
|
+
def cp; self[:CP]; end
|
|
18
|
+
def ll; self[:LL]; end
|
|
19
|
+
def lle; self[:LLE]; end
|
|
20
|
+
def it; self[:IT]; end
|
|
21
|
+
|
|
22
|
+
def start_point
|
|
23
|
+
return nil unless line.is_a?(Array) && line.size >= 2
|
|
24
|
+
|
|
25
|
+
line[0..1]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def end_point
|
|
29
|
+
return nil unless line.is_a?(Array) && line.size >= 4
|
|
30
|
+
|
|
31
|
+
line[2..3]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def has_caption?
|
|
35
|
+
!!caption
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def has_measure?
|
|
39
|
+
!!measure
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# LineEndingStyling (s12.5.5). /LE array of line-ending styles
|
|
7
|
+
# (None, OpenArrow, ClosedArrow, Butt, Diamond, Square, etc.).
|
|
8
|
+
class LineEndingStyling < Cos::Dictionary
|
|
9
|
+
register_type :LineEndingStyling
|
|
10
|
+
|
|
11
|
+
def type; self[:Type]; end
|
|
12
|
+
def line_endings; self[:LE]; end
|
|
13
|
+
|
|
14
|
+
def line_start
|
|
15
|
+
return nil unless line_endings
|
|
16
|
+
|
|
17
|
+
arr = line_endings.is_a?(Pdfrb::Model::PdfArray) ? line_endings.to_a : line_endings
|
|
18
|
+
arr.is_a?(Array) ? arr[0] : nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def line_end
|
|
22
|
+
return nil unless line_endings
|
|
23
|
+
|
|
24
|
+
arr = line_endings.is_a?(Pdfrb::Model::PdfArray) ? line_endings.to_a : line_endings
|
|
25
|
+
arr.is_a?(Array) ? arr[1] : nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def symmetric?
|
|
29
|
+
line_start == line_end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def has_arrows?
|
|
33
|
+
[:OpenArrow, :ClosedArrow].include?(line_start&.to_sym) ||
|
|
34
|
+
[:OpenArrow, :ClosedArrow].include?(line_end&.to_sym)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
class LinkAnnotation < Annotation
|
|
7
|
+
def action; self[:A]; end
|
|
8
|
+
def destination; self[:Dest]; end
|
|
9
|
+
def highlight_mode; self[:H]; end
|
|
10
|
+
def uri_action; self[:PA]; end
|
|
11
|
+
def quad_points; self[:QuadPoints]; end
|
|
12
|
+
def border; self[:Border]; end
|
|
13
|
+
def bs; self[:BS]; end
|
|
14
|
+
|
|
15
|
+
def has_action?
|
|
16
|
+
!!action
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def has_destination?
|
|
20
|
+
!!destination
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def uri_link?
|
|
24
|
+
has_action? && action && action[:S]&.to_sym == :URI
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def goto_link?
|
|
28
|
+
has_action? && action && action[:S]&.to_sym == :GoTo
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def launch_link?
|
|
32
|
+
has_action? && action && action[:S]&.to_sym == :Launch
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def highlight
|
|
36
|
+
(highlight_mode || :Invert).to_sym
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# MarkInformation (s14.7.1). Catalog /MarkInfo — flags whether
|
|
7
|
+
# the document is tagged and structural metadata is reliable.
|
|
8
|
+
class MarkInformation < Cos::Dictionary
|
|
9
|
+
register_type :MarkInfo
|
|
10
|
+
|
|
11
|
+
def type; self[:Type]; end
|
|
12
|
+
|
|
13
|
+
def marked?; truthy?(self[:Marked]); end
|
|
14
|
+
def user_properties?; truthy?(self[:UserProperties]); end
|
|
15
|
+
def suspects?; truthy?(self[:Suspects]); end
|
|
16
|
+
|
|
17
|
+
def tagged?
|
|
18
|
+
marked? && !suspects?
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Marked-Content Reference (s14.7.6.2). Refers to a marked-content
|
|
7
|
+
# sequence on a page by MCID.
|
|
8
|
+
class MarkedContentReference < Cos::Dictionary
|
|
9
|
+
register_type :MCR
|
|
10
|
+
|
|
11
|
+
def type; self[:Type]; end
|
|
12
|
+
def page; self[:Pg]; end
|
|
13
|
+
def content_item; self[:MCID]; end
|
|
14
|
+
|
|
15
|
+
def resolved_page
|
|
16
|
+
ref = page
|
|
17
|
+
return nil unless ref && document
|
|
18
|
+
|
|
19
|
+
document.object(ref)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
class MarkupAnnotation < Annotation
|
|
7
|
+
def title; self[:T]; end
|
|
8
|
+
def popup; self[:Popup]; end
|
|
9
|
+
def rich_contents; self[:RC]; end
|
|
10
|
+
def creation_date; self[:CreationDate]; end
|
|
11
|
+
def subject; self[:Subj]; end
|
|
12
|
+
def intent; self[:IT]; end
|
|
13
|
+
def in_reply_to; self[:IRT]; end
|
|
14
|
+
def reply_type; self[:RT]; end
|
|
15
|
+
def external_data; self[:ExData]; end
|
|
16
|
+
def opacity; self[:CA]; end
|
|
17
|
+
def interior_color; self[:IC]; end
|
|
18
|
+
|
|
19
|
+
def open?
|
|
20
|
+
return false unless popup
|
|
21
|
+
|
|
22
|
+
obj = popup.is_a?(Pdfrb::Model::Reference) && document ? document.object(popup) : popup
|
|
23
|
+
obj && obj[:Open]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def reply?
|
|
27
|
+
!!in_reply_to
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def group_reply?
|
|
31
|
+
reply_type&.to_sym == :Group
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# MDP (Modification Detection and Prevention) dict (s12.8.2.2).
|
|
7
|
+
# The /Reference entry on a Signature, with /TransformMethod /DocMDP
|
|
8
|
+
# or /UR (Usage Rights).
|
|
9
|
+
class MDPDict < Pdfrb::Model::Cos::Dictionary
|
|
10
|
+
def type; self[:Type]; end
|
|
11
|
+
def transform_method; self[:TransformMethod]&.to_sym; end
|
|
12
|
+
def transform_params; self[:TransformParams]; end
|
|
13
|
+
|
|
14
|
+
def doc_mdp?; transform_method == :DocMDP; end
|
|
15
|
+
def ur?; transform_method == :UR; end
|
|
16
|
+
def field_mdp?; transform_method == :FieldMDP; end
|
|
17
|
+
def identity?; transform_method == :Identity; end
|
|
18
|
+
|
|
19
|
+
def resolved_transform_params
|
|
20
|
+
ref = transform_params
|
|
21
|
+
return nil unless ref && document
|
|
22
|
+
|
|
23
|
+
document.object(ref)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Measure dictionary (s11.4). Used by line/poly annotations and
|
|
7
|
+
# XObjects to map PDF units to real-world units.
|
|
8
|
+
class Measure < Cos::Dictionary
|
|
9
|
+
register_type :Measure
|
|
10
|
+
|
|
11
|
+
def type; self[:Type]; end
|
|
12
|
+
def subtype; self[:Subtype]; end
|
|
13
|
+
def scale_ratio; self[:R]; end
|
|
14
|
+
def x_scale; self[:X]; end
|
|
15
|
+
def y_scale; self[:Y]; end
|
|
16
|
+
def cyxy; self[:CYX]; end
|
|
17
|
+
def cyy; self[:CYY]; end
|
|
18
|
+
def distance_format; self[:D]; end
|
|
19
|
+
def area_format; self[:A]; end
|
|
20
|
+
def angular_format; self[:T]; end
|
|
21
|
+
def slope_format; self[:S]; end
|
|
22
|
+
def origin; self[:O]; end
|
|
23
|
+
def ctp; self[:CYX]; end
|
|
24
|
+
|
|
25
|
+
def rectilinear?
|
|
26
|
+
subtype&.to_sym == :RL
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def geographic?
|
|
30
|
+
subtype&.to_sym == :GEO
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def has_area_format?
|
|
34
|
+
!!area_format
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Media Clip Data stream (s13.3.3). Carries actual media payload.
|
|
7
|
+
class MediaClip < Pdfrb::Model::Cos::Stream
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def subtype; self[:S]&.to_sym; end
|
|
10
|
+
|
|
11
|
+
def must_use_honest?
|
|
12
|
+
subtype == :MIMEType
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def file_spec; self[:D]; end
|
|
16
|
+
def mime_type; self[:CT]; end
|
|
17
|
+
def data_size; self[:S]; end
|
|
18
|
+
|
|
19
|
+
def resolved_file_spec
|
|
20
|
+
ref = file_spec
|
|
21
|
+
return nil unless ref && document
|
|
22
|
+
|
|
23
|
+
document.object(ref)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|