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,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Set OCG State action (s12.6.4.13). Toggle visibility of
|
|
7
|
+
# optional-content groups.
|
|
8
|
+
class ActionSetOCGState < Action
|
|
9
|
+
register_subtype :SetOCGState
|
|
10
|
+
|
|
11
|
+
def state; self[:State]; end
|
|
12
|
+
def preserve_rb?; self[:PreserveRB] == true; end
|
|
13
|
+
|
|
14
|
+
def each_state_transition
|
|
15
|
+
return enum_for(:each_state_transition) unless block_given?
|
|
16
|
+
return unless state
|
|
17
|
+
|
|
18
|
+
arr = state.is_a?(Pdfrb::Model::PdfArray) ? state.to_a : state
|
|
19
|
+
return unless arr.is_a?(Array)
|
|
20
|
+
|
|
21
|
+
current_op = :ON
|
|
22
|
+
arr.each do |entry|
|
|
23
|
+
case entry
|
|
24
|
+
when :ON, :OFF, :Toggle then current_op = entry
|
|
25
|
+
else yield current_op, entry
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Set-state action (deprecated in PDF 1.2, replaced by SetOCGState).
|
|
7
|
+
class ActionSetState < Action
|
|
8
|
+
register_subtype :SetState
|
|
9
|
+
|
|
10
|
+
def state; self[:State]; end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Sound action (s12.6.4.6). Plays a Sound stream.
|
|
7
|
+
class ActionSoundAction < Action
|
|
8
|
+
register_subtype :Sound
|
|
9
|
+
|
|
10
|
+
def sound; self[:Sound]; end
|
|
11
|
+
def volume; self[:Volume]; end
|
|
12
|
+
def mix?; truthy?(self[:Mix]); end
|
|
13
|
+
|
|
14
|
+
def resolved_sound
|
|
15
|
+
ref = sound
|
|
16
|
+
return nil unless ref && document
|
|
17
|
+
|
|
18
|
+
document.object(ref)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Submit-form action (s12.7.6.2). Submits form values to a URL.
|
|
7
|
+
class ActionSubmitForm < Action
|
|
8
|
+
register_subtype :SubmitForm
|
|
9
|
+
|
|
10
|
+
def url; self[:F]; end
|
|
11
|
+
def fields; self[:Fields]; end
|
|
12
|
+
def flags; self[:Flags] || 0; end
|
|
13
|
+
|
|
14
|
+
def include_exclude?
|
|
15
|
+
flags & 1 != 0
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def include_no_value_fields?
|
|
19
|
+
flags & 2 != 0
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def export_format?
|
|
23
|
+
flags & 4 != 0
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def get_method?
|
|
27
|
+
flags & 8 != 0
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def submit_coordinates?
|
|
31
|
+
flags & 16 != 0
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def submit_as_xfdf?
|
|
35
|
+
flags & 32 != 0
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def submit_as_append?
|
|
39
|
+
flags & 64 != 0
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def submit_as_pdf?
|
|
43
|
+
flags & 256 != 0
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def canonical_date_format?
|
|
47
|
+
flags & 512 != 0
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def submit_as_xfdf_with_annotations?
|
|
51
|
+
flags & 1024 != 0
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def submit_as_xdp?
|
|
55
|
+
flags & 2048 != 0
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def submit_as_xfdf_charset?
|
|
59
|
+
flags & 4096 != 0
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Thread action (s12.6.4.6). Navigate within an article thread.
|
|
7
|
+
class ActionThread < Action
|
|
8
|
+
register_subtype :Thread
|
|
9
|
+
|
|
10
|
+
def thread; self[:F]; end
|
|
11
|
+
def destination_bead; self[:D]; end
|
|
12
|
+
|
|
13
|
+
def first_bead?
|
|
14
|
+
destination_bead.zero? || destination_bead.nil?
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def last_bead?
|
|
18
|
+
destination_bead == -1
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Transition action (s12.4.3). Specifies page transition for slide-show.
|
|
7
|
+
class ActionTrans < Action
|
|
8
|
+
register_subtype :Trans
|
|
9
|
+
|
|
10
|
+
def transition; self[:Trans]; end
|
|
11
|
+
|
|
12
|
+
def has_transition?
|
|
13
|
+
!!transition
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def transition_style
|
|
17
|
+
return nil unless transition
|
|
18
|
+
|
|
19
|
+
transition[:S]&.to_sym
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def duration
|
|
23
|
+
return nil unless transition
|
|
24
|
+
|
|
25
|
+
transition[:D]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# URI action (s12.6.4.7). Opens a URL in the browser.
|
|
7
|
+
class ActionURI < Action
|
|
8
|
+
register_subtype :URI
|
|
9
|
+
|
|
10
|
+
def uri; self[:URI]; end
|
|
11
|
+
def track_mouse?; self[:IsMap] == true; end
|
|
12
|
+
|
|
13
|
+
def scheme
|
|
14
|
+
return nil unless uri
|
|
15
|
+
|
|
16
|
+
match = uri.to_s.match(%r{^([a-zA-Z][a-zA-Z0-9+.-]*):})
|
|
17
|
+
match && match[1].downcase
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def http?
|
|
21
|
+
["http", "https"].include?(scheme)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def mailto?
|
|
25
|
+
scheme == "mailto"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -6,6 +6,17 @@ module Pdfrb
|
|
|
6
6
|
# PDF 2.0 Associated-File embedded stream (App Note 002).
|
|
7
7
|
class AFEmbeddedFile < EmbeddedFile
|
|
8
8
|
arlington_object "AFEmbeddedFileStream"
|
|
9
|
+
|
|
10
|
+
def af_relationship
|
|
11
|
+
return nil unless params
|
|
12
|
+
|
|
13
|
+
obj = params.is_a?(Pdfrb::Model::Reference) && document ? document.object(params) : params
|
|
14
|
+
obj && obj[:AFRelationship]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def associated_file_relationship?
|
|
18
|
+
!!af_relationship
|
|
19
|
+
end
|
|
9
20
|
end
|
|
10
21
|
end
|
|
11
22
|
end
|
|
@@ -7,6 +7,40 @@ module Pdfrb
|
|
|
7
7
|
# /AFRelationship to the base FileSpec.
|
|
8
8
|
class AFFileSpecification < FileSpecification
|
|
9
9
|
arlington_object "AFFileSpecification"
|
|
10
|
+
|
|
11
|
+
def af_relationship; self[:AFRelationship]; end
|
|
12
|
+
|
|
13
|
+
def source?
|
|
14
|
+
af_relationship&.to_sym == :Source
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def data?
|
|
18
|
+
af_relationship&.to_sym == :Data
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def alternative?
|
|
22
|
+
af_relationship&.to_sym == :Alternative
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def supplement?
|
|
26
|
+
af_relationship&.to_sym == :Supplement
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def encrypted?
|
|
30
|
+
af_relationship&.to_sym == :EncryptedPayload
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def form_fillin?
|
|
34
|
+
af_relationship&.to_sym == :FormData
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def schema?
|
|
38
|
+
af_relationship&.to_sym == :Schema
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def unspecified?
|
|
42
|
+
af_relationship.nil? || af_relationship&.to_sym == :Unspecified
|
|
43
|
+
end
|
|
10
44
|
end
|
|
11
45
|
end
|
|
12
46
|
end
|
|
@@ -3,14 +3,7 @@
|
|
|
3
3
|
module Pdfrb
|
|
4
4
|
module Model
|
|
5
5
|
module Type
|
|
6
|
-
# Annotation base class (s12.5). The base dict shape is encoded
|
|
7
|
-
# across the per-subtype TSVs (AnnotLink, AnnotText, ...), not
|
|
8
|
-
# a single Annot.tsv — so the base class registers in the
|
|
9
|
-
# type_map and dispatches to a specific subtype class via
|
|
10
|
-
# /Subtype lookup.
|
|
11
6
|
class Annotation < Pdfrb::Model::Cos::Dictionary
|
|
12
|
-
# Common annotation fields per s12.5.2 (hand-coded; base dict
|
|
13
|
-
# is shared across all subtypes before subtype-specific keys).
|
|
14
7
|
define_field :Type, type: Symbol, default: :Annot
|
|
15
8
|
define_field :Subtype, type: Symbol, required: true
|
|
16
9
|
define_field :Rect, type: Pdfrb::Model::Rectangle
|
|
@@ -25,12 +18,59 @@ module Pdfrb
|
|
|
25
18
|
define_field :C, type: Pdfrb::Model::PdfArray
|
|
26
19
|
define_field :A, type: Pdfrb::Model::Cos::Dictionary
|
|
27
20
|
define_field :AA, type: Pdfrb::Model::Cos::Dictionary
|
|
21
|
+
define_field :StructParent, type: Integer
|
|
22
|
+
define_field :OC, type: Pdfrb::Model::Cos::Dictionary
|
|
28
23
|
|
|
29
24
|
register_type :Annot
|
|
30
25
|
|
|
26
|
+
# ---- Accessors ----
|
|
27
|
+
def subtype; self[:Subtype]; end
|
|
28
|
+
def rect; self[:Rect]; end
|
|
29
|
+
def contents; self[:Contents]; end
|
|
30
|
+
def name; self[:NM]; end
|
|
31
|
+
def modified_date; self[:M]; end
|
|
32
|
+
def flags; self[:F] || 0; end
|
|
33
|
+
def color; self[:C]; end
|
|
34
|
+
def border; self[:Border]; end
|
|
35
|
+
def appearance; self[:AP]; end
|
|
36
|
+
def appearance_state; self[:AS]; end
|
|
37
|
+
def action; self[:A]; end
|
|
38
|
+
def additional_actions; self[:AA]; end
|
|
39
|
+
|
|
40
|
+
# ---- Page reference ----
|
|
41
|
+
def page
|
|
42
|
+
ref = self[:P]
|
|
43
|
+
return nil unless ref && document
|
|
44
|
+
|
|
45
|
+
document.object(ref)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# ---- Flag predicates ----
|
|
49
|
+
def hidden?; flags & 1 != 0; end
|
|
50
|
+
def print?; flags & 2 != 0; end
|
|
51
|
+
def no_zoom?; flags & 4 != 0; end
|
|
52
|
+
def no_rotate?; flags & 8 != 0; end
|
|
53
|
+
def no_view?; flags & 16 != 0; end
|
|
54
|
+
def read_only?; flags & 32 != 0; end
|
|
55
|
+
def locked?; flags & 128 != 0; end
|
|
56
|
+
def toggle_no_view?; flags & 256 != 0; end
|
|
57
|
+
def locked_contents?; flags & 512 != 0; end
|
|
58
|
+
|
|
59
|
+
# ---- Appearance management ----
|
|
60
|
+
def normal_appearance
|
|
61
|
+
ap = appearance
|
|
62
|
+
return nil unless ap
|
|
63
|
+
|
|
64
|
+
ap = document.object(ap) if ap.is_a?(Pdfrb::Model::Reference) && document
|
|
65
|
+
ap && ap[:N]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def create_appearance_stream
|
|
69
|
+
AppearanceGenerator.for(self, document: document)&.create_appearance
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# ---- Subtype dispatch ----
|
|
31
73
|
class << self
|
|
32
|
-
# Dispatch by /Subtype. Subclasses register via
|
|
33
|
-
# `register_subtype :Link`.
|
|
34
74
|
def subtype_map
|
|
35
75
|
@subtype_map ||= {}
|
|
36
76
|
end
|
|
@@ -47,4 +87,3 @@ module Pdfrb
|
|
|
47
87
|
end
|
|
48
88
|
end
|
|
49
89
|
end
|
|
50
|
-
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Appearance stream dictionary (s12.5.5). The /AP dict on an
|
|
7
|
+
# annotation holds three sub-dicts: /N (normal), /R (rollover),
|
|
8
|
+
# /D (down).
|
|
9
|
+
class Appearance < Pdfrb::Model::Cos::Dictionary
|
|
10
|
+
def normal; self[:N]; end
|
|
11
|
+
def rollover; self[:R]; end
|
|
12
|
+
def down; self[:D]; end
|
|
13
|
+
|
|
14
|
+
def has_normal?
|
|
15
|
+
!!normal
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def has_rollover?
|
|
19
|
+
!!rollover
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def has_down?
|
|
23
|
+
!!down
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def normal_for_state(state_name)
|
|
27
|
+
return nil unless normal
|
|
28
|
+
|
|
29
|
+
n = if normal.is_a?(Pdfrb::Model::Reference) && document
|
|
30
|
+
document.object(normal)
|
|
31
|
+
else
|
|
32
|
+
normal
|
|
33
|
+
end
|
|
34
|
+
return nil unless n.is_a?(Hash)
|
|
35
|
+
|
|
36
|
+
n[state_name]
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Appearance Characteristics dictionary (s12.5.5). Defines the
|
|
7
|
+
# visual characteristics of a widget annotation: background/caption
|
|
8
|
+
# colors, normal/rollover/down captions, etc. Often stored under
|
|
9
|
+
# the widget's /MK key.
|
|
10
|
+
class AppearanceCharacteristics < Pdfrb::Model::Cos::Dictionary
|
|
11
|
+
def background_color; self[:BG]; end
|
|
12
|
+
def caption; self[:CA]; end
|
|
13
|
+
def rollover_caption; self[:RC]; end
|
|
14
|
+
def down_caption; self[:AC]; end
|
|
15
|
+
def rotation; self[:R] || 0; end
|
|
16
|
+
def border_color; self[:BC]; end
|
|
17
|
+
def normal_icon; self[:IF]; end
|
|
18
|
+
def alternate_icon; self[:IX]; end
|
|
19
|
+
def icon_fit; self[:IF]; end
|
|
20
|
+
def tp; self[:TP]; end
|
|
21
|
+
|
|
22
|
+
def text_position
|
|
23
|
+
tp || 0
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def has_background?
|
|
27
|
+
!!background_color
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def has_caption?
|
|
31
|
+
!!caption
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
class AppearanceGenerator
|
|
7
|
+
def self.for(annotation, document:)
|
|
8
|
+
case annotation[:Subtype]
|
|
9
|
+
when :Widget
|
|
10
|
+
WidgetAppearance.new(annotation, document)
|
|
11
|
+
when :Text
|
|
12
|
+
TextAppearance.new(annotation, document)
|
|
13
|
+
when :Link
|
|
14
|
+
LinkAppearance.new(annotation, document)
|
|
15
|
+
else
|
|
16
|
+
GenericAppearance.new(annotation, document)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# AppearanceTrapNet sub-dictionary (s7.7.3.3, Table 327). Per-
|
|
7
|
+
# appearance-stream trap-net (ink-flattening) parameters.
|
|
8
|
+
class AppearanceTrapNetSubDict < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def pos_h; self[:PosH]; end
|
|
10
|
+
def pos_l; self[:PosL]; end
|
|
11
|
+
def span_h_min; self[:SpanH]; end
|
|
12
|
+
def span_l_min; self[:SpanL]; end
|
|
13
|
+
def font_info; self[:FontInfo]; end
|
|
14
|
+
|
|
15
|
+
def has_darkness_corrected?
|
|
16
|
+
!!font_info
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# AppearanceTrapNet (s7.7.3.3). The trap-net dictionary that wraps
|
|
21
|
+
# appearance sub-dicts.
|
|
22
|
+
class AppearanceTrapNet < Pdfrb::Model::Cos::Dictionary
|
|
23
|
+
def type; self[:Type]; end
|
|
24
|
+
def version; self[:Version]; end
|
|
25
|
+
def font_state_appearance; self[:FontStateAppearance]; end
|
|
26
|
+
def gray_min; self[:GrayMin]; end
|
|
27
|
+
def gray_max; self[:GrayMax]; end
|
|
28
|
+
def monochrome_min; self[:MonoMin]; end
|
|
29
|
+
def monochrome_max; self[:MonoMax]; end
|
|
30
|
+
def colorant_min; self[:ColorantMin]; end
|
|
31
|
+
def colorant_max; self[:ColorantMax]; end
|
|
32
|
+
def step_function; self[:StepFunction]; end
|
|
33
|
+
def trap_net_app_form_name; self[:AppForm]; end
|
|
34
|
+
|
|
35
|
+
def has_step_function?
|
|
36
|
+
!!step_function
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# AppearanceSubDict (s12.5.4). Sub-dictionary inside Appearance
|
|
41
|
+
# entries /N, /R, /D that maps each appearance state to a stream.
|
|
42
|
+
class AppearanceSubDict < Pdfrb::Model::Cos::Dictionary
|
|
43
|
+
def each_state(&block)
|
|
44
|
+
return enum_for(:each_state) unless block
|
|
45
|
+
|
|
46
|
+
value.each(&block)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def state_count
|
|
50
|
+
value.size
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def states
|
|
54
|
+
value.keys
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Signature Build Data Dict (s12.8.4). PPKLite build data.
|
|
59
|
+
class SignatureBuildPropDict < Pdfrb::Model::Cos::Dictionary
|
|
60
|
+
def app_build; self[:App]; end
|
|
61
|
+
|
|
62
|
+
def has_app_build?
|
|
63
|
+
!!app_build
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Annotation Projection dict (s12.5.6.21). Projection annotation
|
|
68
|
+
# for spatial content.
|
|
69
|
+
class AnnotationProjectionDict < Pdfrb::Model::Cos::Dictionary
|
|
70
|
+
def ex_data; self[:ExData]; end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# ExData Projection dict (s12.5.6.21, Table 198). Holds the
|
|
74
|
+
# geospatial projection details used by Projection annotations.
|
|
75
|
+
class ExDataProjection < Pdfrb::Model::Cos::Dictionary
|
|
76
|
+
def type; self[:Type]; end
|
|
77
|
+
|
|
78
|
+
def project?
|
|
79
|
+
type == :ProjectedPDL
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# BorderEffect (s12.5.4.2). Cloudy / inset border effects for
|
|
7
|
+
# annotations.
|
|
8
|
+
class BorderEffect < Cos::Dictionary
|
|
9
|
+
register_type :BorderEffect
|
|
10
|
+
|
|
11
|
+
def type; self[:Type]; end
|
|
12
|
+
def style; self[:S]&.to_sym; end
|
|
13
|
+
def intensity; self[:I] || 0; end
|
|
14
|
+
|
|
15
|
+
def cloudy?
|
|
16
|
+
style == :C
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def inset?
|
|
20
|
+
style == :I
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# BorderStyling (s12.5.4.1, PDF 2.0). Replaces the deprecated
|
|
7
|
+
# /Border array on annotations. Specifies width, dash, style.
|
|
8
|
+
class BorderStyling < Cos::Dictionary
|
|
9
|
+
register_type :BorderStyling
|
|
10
|
+
|
|
11
|
+
def type; self[:Type]; end
|
|
12
|
+
def style; self[:S]&.to_sym; end
|
|
13
|
+
def width; self[:W] || 1.0; end
|
|
14
|
+
def dash; self[:D]; end
|
|
15
|
+
|
|
16
|
+
def solid?; style.nil? || style == :S; end
|
|
17
|
+
def dashed?; style == :D; end
|
|
18
|
+
def beveled?; style == :B; end
|
|
19
|
+
def inset?; style == :I; end
|
|
20
|
+
def underline?; style == :U; end
|
|
21
|
+
|
|
22
|
+
def dash_array
|
|
23
|
+
return nil unless dash
|
|
24
|
+
|
|
25
|
+
arr = dash.is_a?(Pdfrb::Model::PdfArray) ? dash.to_a : dash
|
|
26
|
+
arr.is_a?(Array) && arr.size >= 1 ? arr[0] : nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def dash_phase
|
|
30
|
+
return nil unless dash
|
|
31
|
+
|
|
32
|
+
arr = dash.is_a?(Pdfrb::Model::PdfArray) ? dash.to_a : dash
|
|
33
|
+
arr.is_a?(Array) && arr.size >= 2 ? arr[1] : 0
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Box Color Info dictionary (s7.7.3.3, Table 30). Defines the
|
|
7
|
+
# visual guide lines for page boxes (crop, bleed, trim, art) in
|
|
8
|
+
# the viewer. Lives on Page /BoxColorInfo.
|
|
9
|
+
class BoxColorInfo < Pdfrb::Model::Cos::Dictionary
|
|
10
|
+
def crop_box_style; self[:CropBox]; end
|
|
11
|
+
def bleed_box_style; self[:BleedBox]; end
|
|
12
|
+
def trim_box_style; self[:TrimBox]; end
|
|
13
|
+
def art_box_style; self[:ArtBox]; end
|
|
14
|
+
|
|
15
|
+
def empty?
|
|
16
|
+
!crop_box_style && !bleed_box_style && !trim_box_style && !art_box_style
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Box Style dictionary (s7.7.3.3, Table 396). Describes one box
|
|
7
|
+
# guide: color, dash pattern, visibility.
|
|
8
|
+
class BoxStyle < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def color; self[:C]; end
|
|
10
|
+
def dash_pattern; self[:W]; end
|
|
11
|
+
def dash_style; self[:S]&.to_sym; end
|
|
12
|
+
def dash_count; self[:D]; end
|
|
13
|
+
|
|
14
|
+
def solid?; dash_style.nil? || dash_style == :S; end
|
|
15
|
+
def dashed?; dash_style == :D; end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
class Button < Field
|
|
7
|
+
def value; self[:V]; end
|
|
8
|
+
def opt; self[:Opt]; end
|
|
9
|
+
|
|
10
|
+
def push_button?; flags & 0x10000 != 0; end
|
|
11
|
+
def radio?; flags & 0x8000 != 0; end
|
|
12
|
+
def no_toggle_to_off?; flags & 0x4000 != 0; end
|
|
13
|
+
def radios_in_unison?; flags & 0x2000000 != 0; end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# CalGray color space dictionary (s8.6.3.2). Single-component
|
|
7
|
+
# calibrated grayscale: [/CalGray <dict>].
|
|
8
|
+
class CalGray < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def white_point; self[:WhitePoint]; end
|
|
10
|
+
def black_point; self[:BlackPoint]; end
|
|
11
|
+
def gamma; self[:Gamma] || 1.0; end
|
|
12
|
+
|
|
13
|
+
def components; 1; end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|