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,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
class SignatureField < Field
|
|
7
|
+
def value; self[:V]; end
|
|
8
|
+
def lock; self[:Lock]; end
|
|
9
|
+
def seed_value; self[:SV]; end
|
|
10
|
+
|
|
11
|
+
def signed?
|
|
12
|
+
value && value[:Contents]
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Software Identifier (s13.3.5.5). Identifies a player for
|
|
7
|
+
# media rendering.
|
|
8
|
+
class SoftwareIdentifier < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def u; self[:U]; end
|
|
11
|
+
def l; self[:L]; end
|
|
12
|
+
|
|
13
|
+
def has_version?
|
|
14
|
+
!!u && !!l
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Sound stream (s13.3). Sound effect annotation payload.
|
|
7
|
+
# /R = sampling rate, /C = channels, /B = bits/sample, /E =
|
|
8
|
+
# encoding (Raw, Signed, MuLaw, ALaw).
|
|
9
|
+
class Sound < Pdfrb::Model::Cos::Stream
|
|
10
|
+
def type; self[:Type]; end
|
|
11
|
+
def sampling_rate; self[:R]; end
|
|
12
|
+
def channels; self[:C] || 1; end
|
|
13
|
+
def bits_per_sample; self[:B] || 8; end
|
|
14
|
+
def encoding; self[:E]&.to_sym || :Raw; end
|
|
15
|
+
|
|
16
|
+
def raw_encoding?; encoding == :Raw; end
|
|
17
|
+
def signed_encoding?; encoding == :Signed; end
|
|
18
|
+
def mu_law_encoding?; encoding == :MuLaw; end
|
|
19
|
+
def a_law_encoding?; encoding == :ALaw; end
|
|
20
|
+
|
|
21
|
+
def sample_bytes
|
|
22
|
+
(channels * bits_per_sample) / 8.0
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def duration_seconds
|
|
26
|
+
return nil unless sampling_rate&.positive?
|
|
27
|
+
|
|
28
|
+
bytes = stream ? stream.bytesize : 0
|
|
29
|
+
bytes.to_f / (sample_bytes * sampling_rate)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def audio_data
|
|
33
|
+
decoded_stream&.force_encoding(Encoding::BINARY)
|
|
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
|
+
# Sound annotation (s12.5.6.18). Sound clip embedded in the page.
|
|
7
|
+
class SoundAnnotation < MarkupAnnotation
|
|
8
|
+
def sound; self[:Sound]; end
|
|
9
|
+
def name; self[:Name]; end
|
|
10
|
+
|
|
11
|
+
def icon_name
|
|
12
|
+
(name || :Speaker).to_sym
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def has_sound?
|
|
16
|
+
!!sound
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Square / rectangle annotation (s12.5.6.8).
|
|
7
|
+
class SquareAnnotation < MarkupAnnotation
|
|
8
|
+
def border_effect; self[:BE]; end
|
|
9
|
+
def interior_color; self[:IC]; end
|
|
10
|
+
def border_style; self[:BS]; end
|
|
11
|
+
def border; self[:Border]; end
|
|
12
|
+
def rd; self[:RD]; end
|
|
13
|
+
|
|
14
|
+
def has_border_effect?
|
|
15
|
+
!!border_effect
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def dashed?
|
|
19
|
+
bs && bs[:D]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Rubber-stamp annotation (s12.5.6.14).
|
|
7
|
+
class StampAnnotation < MarkupAnnotation
|
|
8
|
+
def name; self[:Name]; end
|
|
9
|
+
def interior_color; self[:IC]; end
|
|
10
|
+
def rotation; self[:Rotate] || 0; end
|
|
11
|
+
def intent; self[:IT]; end
|
|
12
|
+
|
|
13
|
+
def rubber_stamp?
|
|
14
|
+
intent.nil? || intent&.to_sym == :Stamp
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -9,6 +9,81 @@ module Pdfrb
|
|
|
9
9
|
# for /Figure elements.
|
|
10
10
|
class StructElem < Pdfrb::Model::Cos::Dictionary
|
|
11
11
|
arlington_object "StructElem"
|
|
12
|
+
register_type :StructElem
|
|
13
|
+
|
|
14
|
+
def type; self[:Type]; end
|
|
15
|
+
def structure_type; self[:S]; end
|
|
16
|
+
def parent; self[:P]; end
|
|
17
|
+
def kids; self[:K]; end
|
|
18
|
+
def page; self[:Pg]; end
|
|
19
|
+
def attributes; self[:A]; end
|
|
20
|
+
def classes; self[:C]; end
|
|
21
|
+
def actual_text; self[:ActualText]; end
|
|
22
|
+
def alt_text; self[:Alt]; end
|
|
23
|
+
def title; self[:T]; end
|
|
24
|
+
def lang; self[:Lang]; end
|
|
25
|
+
def expanded_abbreviation; self[:E]; end
|
|
26
|
+
|
|
27
|
+
def block_level?
|
|
28
|
+
%i[Document Part Art Sect Div BlockQuote Caption TOC TOCI
|
|
29
|
+
Index NonStruct H H1 H2 H3 H4 H5 H6 P L LI Lbl LBody
|
|
30
|
+
Table TR TH TD THead TBody TFoot].include?(structure_type&.to_sym)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def inline_level?
|
|
34
|
+
%i[Span Quote Note Reference BibEntry Code Figure Formula Form].include?(structure_type&.to_sym)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def has_alt_text?
|
|
38
|
+
!!alt_text
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def has_actual_text?
|
|
42
|
+
!!actual_text
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def figure?
|
|
46
|
+
structure_type&.to_sym == :Figure
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def link?
|
|
50
|
+
structure_type&.to_sym == :Link
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def heading?
|
|
54
|
+
%i[H H1 H2 H3 H4 H5 H6].include?(structure_type&.to_sym)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def table?
|
|
58
|
+
structure_type&.to_sym == :Table
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def resolved_parent
|
|
62
|
+
ref = parent
|
|
63
|
+
return nil unless ref && document
|
|
64
|
+
|
|
65
|
+
document.object(ref)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def resolved_page
|
|
69
|
+
ref = page
|
|
70
|
+
return nil unless ref && document
|
|
71
|
+
|
|
72
|
+
document.object(ref)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def each_child
|
|
76
|
+
return enum_for(:each_child) unless block_given?
|
|
77
|
+
return unless kids && document
|
|
78
|
+
|
|
79
|
+
arr = kids.is_a?(Pdfrb::Model::Reference) ? document.object(kids) : kids
|
|
80
|
+
return unless arr.is_a?(Array) || arr.is_a?(Pdfrb::Model::PdfArray)
|
|
81
|
+
|
|
82
|
+
arr.each do |kid|
|
|
83
|
+
obj = kid.is_a?(Pdfrb::Model::Reference) ? document.object(kid) : kid
|
|
84
|
+
yield obj if obj
|
|
85
|
+
end
|
|
86
|
+
end
|
|
12
87
|
end
|
|
13
88
|
end
|
|
14
89
|
end
|
|
@@ -9,6 +9,40 @@ module Pdfrb
|
|
|
9
9
|
class StructTreeRoot < Pdfrb::Model::Cos::Dictionary
|
|
10
10
|
arlington_object "StructTreeRoot"
|
|
11
11
|
register_type :StructTreeRoot
|
|
12
|
+
|
|
13
|
+
def type; self[:Type]; end
|
|
14
|
+
def children; self[:K]; end
|
|
15
|
+
def parent_tree; self[:ParentTree]; end
|
|
16
|
+
def parent_tree_next_key; self[:ParentTreeNextKey]; end
|
|
17
|
+
def role_map; self[:RoleMap]; end
|
|
18
|
+
def class_map; self[:ClassMap]; end
|
|
19
|
+
|
|
20
|
+
def each_child
|
|
21
|
+
return enum_for(:each_child) unless block_given?
|
|
22
|
+
return unless children && document
|
|
23
|
+
|
|
24
|
+
arr = children.is_a?(Pdfrb::Model::Reference) ? document.object(children) : children
|
|
25
|
+
return unless arr.is_a?(Array) || arr.is_a?(Pdfrb::Model::PdfArray)
|
|
26
|
+
|
|
27
|
+
arr.each do |kid_ref|
|
|
28
|
+
obj = kid_ref.is_a?(Pdfrb::Model::Reference) ? document.object(kid_ref) : kid_ref
|
|
29
|
+
yield obj if obj
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def mapped_role(custom_name)
|
|
34
|
+
return nil unless role_map.is_a?(::Hash)
|
|
35
|
+
|
|
36
|
+
role_map[custom_name.to_sym] || role_map[custom_name.to_s]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def has_role_map?
|
|
40
|
+
!!role_map
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def has_class_map?
|
|
44
|
+
!!class_map
|
|
45
|
+
end
|
|
12
46
|
end
|
|
13
47
|
end
|
|
14
48
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Structure Attributes Dictionary (s14.7.5). Per-structure-element
|
|
7
|
+
# attributes — owner + per-owner attribute fields (Layout, Table,
|
|
8
|
+
# List, PrintField, etc.).
|
|
9
|
+
class StructureAttributes < Pdfrb::Model::Cos::Dictionary
|
|
10
|
+
def owner; self[:O]; end
|
|
11
|
+
def namespace; self[:NS]; end
|
|
12
|
+
def placement; self[:Placement]&.to_sym; end
|
|
13
|
+
def writing_mode; (self[:WritingMode] || :LrTb).to_sym; end
|
|
14
|
+
def background_color; self[:BackgroundColor]; end
|
|
15
|
+
def border_color; self[:BorderColor]; end
|
|
16
|
+
def border_style; self[:BorderStyle]; end
|
|
17
|
+
def border_thickness; self[:BorderThickness]; end
|
|
18
|
+
def padding; self[:Padding]; end
|
|
19
|
+
def color; self[:Color]; end
|
|
20
|
+
def text_align; self[:TextAlign]&.to_sym; end
|
|
21
|
+
def width; self[:Width]; end
|
|
22
|
+
def height; self[:Height]; end
|
|
23
|
+
def space_before; self[:SpaceBefore]; end
|
|
24
|
+
def space_after; self[:SpaceAfter]; end
|
|
25
|
+
def start_indent; self[:StartIndent]; end
|
|
26
|
+
def end_indent; self[:EndIndent]; end
|
|
27
|
+
def text_indent; self[:TextIndent]; end
|
|
28
|
+
def line_height; self[:LineHeight]; end
|
|
29
|
+
|
|
30
|
+
def layout_owner?; owner == :Layout; end
|
|
31
|
+
def list_owner?; owner == :List; end
|
|
32
|
+
def table_owner?; owner == :Table; end
|
|
33
|
+
def print_field_owner?; owner == :PrintField; end
|
|
34
|
+
def artifact_owner?; owner == :Artifact; end
|
|
35
|
+
def xml_owner?; owner.to_s.start_with?("XML", "HTML"); end
|
|
36
|
+
def user_properties_owner?; owner == :UserProperties; end
|
|
37
|
+
|
|
38
|
+
def has_namespace?
|
|
39
|
+
!!namespace
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Structure Element Kid Reference. When a struct element's kid
|
|
7
|
+
# is a content-stream marker (MCID), the kid is represented as
|
|
8
|
+
# an integer; when it's a sub-element, it's a dict reference.
|
|
9
|
+
class StructureElementKid < Pdfrb::Model::Cos::Dictionary
|
|
10
|
+
def type; self[:Type]; end
|
|
11
|
+
def page; self[:Pg]; end
|
|
12
|
+
def mcid; self[:MCID]; end
|
|
13
|
+
def object; self[:Obj]; end
|
|
14
|
+
def structure_type; self[:S]; end
|
|
15
|
+
|
|
16
|
+
def content_item?
|
|
17
|
+
!mcid.nil?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def object_reference?
|
|
21
|
+
!!object
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def resolved_page
|
|
25
|
+
ref = page
|
|
26
|
+
return nil unless ref && document
|
|
27
|
+
|
|
28
|
+
document.object(ref)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Sticky note annotation (s12.5.6.10).
|
|
7
|
+
class TextAnnotation < MarkupAnnotation
|
|
8
|
+
def state; self[:State]; end
|
|
9
|
+
def state_model; self[:StateModel]; end
|
|
10
|
+
|
|
11
|
+
def open?
|
|
12
|
+
!!value[:Open]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def marked_state?
|
|
16
|
+
state_model&.to_sym == :Marked
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def review_state?
|
|
20
|
+
state_model&.to_sym == :Review
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
class TextField < Field
|
|
7
|
+
def max_len; self[:MaxLen]; end
|
|
8
|
+
def value; self[:V]; end
|
|
9
|
+
def rich_text_value; self[:RV]; end
|
|
10
|
+
|
|
11
|
+
def multiline?; flags & 0x1000 != 0; end
|
|
12
|
+
def password?; flags & 0x2000 != 0; end
|
|
13
|
+
def file_select?; flags & 0x100000 != 0; end
|
|
14
|
+
def do_not_spell_check?; flags & 0x400000 != 0; end
|
|
15
|
+
def do_not_scroll?; flags & 0x800000 != 0; end
|
|
16
|
+
def comb?; flags & 0x1000000 != 0; end
|
|
17
|
+
def rich_text?; flags & 0x2000000 != 0; end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Text-markup annotations (s12.5.6.10). Common base for Highlight,
|
|
7
|
+
# Underline, Squiggly, StrikeOut — all share /QuadPoints.
|
|
8
|
+
class TextMarkupAnnotation < MarkupAnnotation
|
|
9
|
+
def quad_points; self[:QuadPoints]; end
|
|
10
|
+
|
|
11
|
+
def quad_point_count
|
|
12
|
+
return 0 unless quad_points
|
|
13
|
+
|
|
14
|
+
arr = quad_points.is_a?(Pdfrb::Model::PdfArray) ? quad_points.to_a : quad_points
|
|
15
|
+
arr.is_a?(Array) ? arr.size / 8 : 0
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def each_quad(&block)
|
|
19
|
+
return enum_for(:each_quad) unless block
|
|
20
|
+
return unless quad_points
|
|
21
|
+
|
|
22
|
+
arr = quad_points.is_a?(Pdfrb::Model::PdfArray) ? quad_points.to_a : quad_points
|
|
23
|
+
return unless arr.is_a?(Array)
|
|
24
|
+
|
|
25
|
+
arr.each_slice(8, &block)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Activation (s13.6.2). Controls when a 3D stream becomes
|
|
7
|
+
# active and how it's deactivated.
|
|
8
|
+
class ThreeDActivation < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def activation_mode; self[:A]&.to_sym; end
|
|
10
|
+
def activation_instance; self[:AIS]&.to_sym; end
|
|
11
|
+
def deactivation_mode; self[:D]&.to_sym; end
|
|
12
|
+
def deactivation_instance; self[:DIS]&.to_sym; end
|
|
13
|
+
def toolbar?; truthy?(self[:TB]); end
|
|
14
|
+
def new_page?; truthy?(self[:NP]); end
|
|
15
|
+
def style; self[:Style]&.to_sym; end
|
|
16
|
+
def transparent?; truthy?(self[:Transparent]); end
|
|
17
|
+
def window; self[:Window]; end
|
|
18
|
+
|
|
19
|
+
def activation_on_click?; activation_mode == :PO; end
|
|
20
|
+
def activation_on_page_open?; activation_mode == :PV; end
|
|
21
|
+
def activation_on_page_visible?; activation_mode == :XA; end
|
|
22
|
+
|
|
23
|
+
def deactivation_on_page_close?; deactivation_mode == :PC; end
|
|
24
|
+
def deactivation_on_page_hidden?; deactivation_mode == :PI; end
|
|
25
|
+
def deactivation_on_external_deactivation?; deactivation_mode == :XD; end
|
|
26
|
+
|
|
27
|
+
def embedded_style?; style == :Embedded; end
|
|
28
|
+
def windowed_style?; style == :Windowed; end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Animation Style (s13.6.3, Table 312-313). Animation control
|
|
7
|
+
# for a 3D stream.
|
|
8
|
+
class ThreeDAnimationStyle < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def subtype; self[:Subtype]&.to_sym; end
|
|
11
|
+
def play_count; self[:PC] || 0; end
|
|
12
|
+
def time_multiplier; self[:TM] || 1; end
|
|
13
|
+
|
|
14
|
+
def no_animation?; subtype == :None; end
|
|
15
|
+
def linear?; subtype == :Linear; end
|
|
16
|
+
def oscillating?; subtype == :Oscillating; end
|
|
17
|
+
|
|
18
|
+
def loop_forever?
|
|
19
|
+
play_count.zero?
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Background (s13.6.4). Background fill for a 3D view.
|
|
7
|
+
class ThreeDBackground < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def subtype; self[:Subtype]&.to_sym; end
|
|
10
|
+
def color_space; self[:CS]; end
|
|
11
|
+
def color; self[:C]; end
|
|
12
|
+
def enable_alpha?; truthy?(self[:EA]); end
|
|
13
|
+
|
|
14
|
+
def solid_color?
|
|
15
|
+
subtype == :SC
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def image_background?
|
|
19
|
+
subtype == :I
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def default_white?
|
|
23
|
+
color == [1, 1, 1]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Cross Section (s13.6.4). Plane cutaway view of a 3D model.
|
|
7
|
+
class ThreeDCrossSection < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def center; self[:C]; end
|
|
10
|
+
def orientation; self[:O]; end
|
|
11
|
+
def plane_opacity; self[:PO] || 0.5; end
|
|
12
|
+
def plane_color; self[:PC]; end
|
|
13
|
+
def intersection_visible?; truthy?(self[:IV]); end
|
|
14
|
+
def plane_visible?; truthy?(self[:PV]); end
|
|
15
|
+
def show_transparent?; truthy?(self[:ST]); end
|
|
16
|
+
def show_cut?; truthy?(self[:SC]); end
|
|
17
|
+
def intersection_color; self[:IC]; end
|
|
18
|
+
|
|
19
|
+
def has_plane_color?
|
|
20
|
+
!!plane_color
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Lighting Scheme (s13.6.4, Table 320-321). Lighting preset.
|
|
7
|
+
class ThreeDLightingScheme < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def subtype; self[:Subtype]&.to_sym; end
|
|
10
|
+
|
|
11
|
+
def artwork?; subtype == :Artwork; end
|
|
12
|
+
def none?; subtype == :None; end
|
|
13
|
+
def white?; subtype == :White; end
|
|
14
|
+
def day?; subtype == :Day; end
|
|
15
|
+
def night?; subtype == :Night; end
|
|
16
|
+
def hard?; subtype == :Hard; end
|
|
17
|
+
def primary?; subtype == :Primary; end
|
|
18
|
+
def blue?; subtype == :Blue; end
|
|
19
|
+
def red?; subtype == :Red; end
|
|
20
|
+
def cube?; subtype == :Cube; end
|
|
21
|
+
def cad?; subtype == :CAD; end
|
|
22
|
+
def headlamp?; subtype == :Headlamp; end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Measure base (s13.6.4). Common base for the 3D measure
|
|
7
|
+
# subtypes: 3DC, AD3, LD3, PD3, RD3.
|
|
8
|
+
class ThreeDMeasure < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def subtype; self[:Subtype]&.to_sym; end
|
|
11
|
+
|
|
12
|
+
def perpendicular_distance?; subtype == :PD3; end
|
|
13
|
+
def linear_distance?; subtype == :LD3; end
|
|
14
|
+
def radial_distance?; subtype == :RD3; end
|
|
15
|
+
def angle?; subtype == :AD3; end
|
|
16
|
+
def comment?; subtype == :"3DC"; end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Comment (3DC) measure (s13.6.4). A 3D measurement note.
|
|
7
|
+
class ThreeDMeasure3DC < ThreeDMeasure
|
|
8
|
+
def text; self[:TRL]; end
|
|
9
|
+
def anchor; self[:A1]; end
|
|
10
|
+
def name; self[:N1]; end
|
|
11
|
+
def text_position; self[:TP]; end
|
|
12
|
+
def text_box; self[:TB]; end
|
|
13
|
+
def text_size; self[:TS] || 12; end
|
|
14
|
+
def color; self[:C]; end
|
|
15
|
+
def unit_text; self[:UT]; end
|
|
16
|
+
|
|
17
|
+
def default_color?
|
|
18
|
+
color == [1, 1, 1]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Angle Distance measure (AD3, s13.6.4).
|
|
7
|
+
class ThreeDMeasureAD3 < ThreeDMeasure
|
|
8
|
+
def annotation1; self[:A1]; end
|
|
9
|
+
def annotation2; self[:A2]; end
|
|
10
|
+
def angle; self[:A]; end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|