pdfrb 0.3.0 → 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/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 +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 +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/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 +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 +311 -2
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Linear Distance measure (LD3, s13.6.4).
|
|
7
|
+
class ThreeDMeasureLD3 < ThreeDMeasure
|
|
8
|
+
def annotation1; self[:A1]; end
|
|
9
|
+
def annotation2; self[:A2]; end
|
|
10
|
+
def distance; self[:D]; end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Perpendicular Distance measure (PD3, s13.6.4).
|
|
7
|
+
class ThreeDMeasurePD3 < ThreeDMeasure
|
|
8
|
+
def annotation1; self[:A1]; end
|
|
9
|
+
def annotation2; self[:A2]; end
|
|
10
|
+
def distance; self[:D]; end
|
|
11
|
+
def leader_line_extension; self[:LE]; end
|
|
12
|
+
def leader_line_length; self[:LL]; end
|
|
13
|
+
|
|
14
|
+
def has_both_anchors?
|
|
15
|
+
!!annotation1 && !!annotation2
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Radial Distance measure (RD3, s13.6.4).
|
|
7
|
+
class ThreeDMeasureRD3 < ThreeDMeasure
|
|
8
|
+
def annotation1; self[:A1]; end
|
|
9
|
+
def annotation2; self[:A2]; end
|
|
10
|
+
def distance; self[:D]; end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Node (s13.6.4). A node in a 3D model's scene graph.
|
|
7
|
+
class ThreeDNode < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def name; self[:N]; end
|
|
10
|
+
def opacity; self[:O]; end
|
|
11
|
+
def visible?; truthy?(self[:V]); end
|
|
12
|
+
def matrix; self[:M]; end
|
|
13
|
+
def instance; self[:Instance]; end
|
|
14
|
+
def data; self[:Data]; end
|
|
15
|
+
def render_mode; self[:RM]; end
|
|
16
|
+
|
|
17
|
+
def has_render_mode?
|
|
18
|
+
!!render_mode
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def resolved_instance
|
|
22
|
+
ref = instance
|
|
23
|
+
return nil unless ref && document
|
|
24
|
+
|
|
25
|
+
document.object(ref)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def resolved_render_mode
|
|
29
|
+
ref = render_mode
|
|
30
|
+
return nil unless ref && document
|
|
31
|
+
|
|
32
|
+
document.object(ref)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Reference (s13.6.5). Indirect reference to a 3D stream
|
|
7
|
+
# elsewhere in the document.
|
|
8
|
+
class ThreeDReference < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def target_stream; self[:Target]; end
|
|
11
|
+
|
|
12
|
+
def resolved_target
|
|
13
|
+
ref = target_stream
|
|
14
|
+
return nil unless ref && document
|
|
15
|
+
|
|
16
|
+
document.object(ref)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Render Mode (s13.6.4, Table 318-319). Rendering style for
|
|
7
|
+
# 3D objects (solid, wireframe, transparent, etc.).
|
|
8
|
+
class ThreeDRenderMode < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def subtype; self[:Subtype]&.to_sym; end
|
|
11
|
+
def auxiliary_color; self[:AC]; end
|
|
12
|
+
def face_color; self[:FC]; end
|
|
13
|
+
def opacity; self[:O] || 0.5; end
|
|
14
|
+
def crease_value; self[:CV] || 45; end
|
|
15
|
+
|
|
16
|
+
def solid?; subtype == :Solid; end
|
|
17
|
+
def solid_wireframe?; subtype == :SolidWireframe; end
|
|
18
|
+
def transparent?; subtype == :Transparent; end
|
|
19
|
+
def transparent_wireframe?; subtype == :TransparentWireframe; end
|
|
20
|
+
def bounding_box?; subtype == :BoundingBox; end
|
|
21
|
+
def wireframe?; subtype == :Wireframe; end
|
|
22
|
+
def shaded_wireframe?; subtype == :ShadedWireframe; end
|
|
23
|
+
def hidden_wireframe?; subtype == :HiddenWireframe; end
|
|
24
|
+
def vertices?; subtype == :Vertices; end
|
|
25
|
+
def illustration?; subtype == :Illustration; end
|
|
26
|
+
def solid_outline?; subtype == :SolidOutline; end
|
|
27
|
+
|
|
28
|
+
def has_opacity?
|
|
29
|
+
opacity.between?(0, 1)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Stream (s13.6.3). Carries a U3D or PRC binary 3D model.
|
|
7
|
+
class ThreeDStream < Pdfrb::Model::Cos::Stream
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def subtype; self[:Subtype]&.to_sym; end
|
|
10
|
+
def views; self[:VA]; end
|
|
11
|
+
def default_view; self[:DV]; end
|
|
12
|
+
def animation; self[:AN]; end
|
|
13
|
+
def on_instantiate; self[:OnInstantiate]; end
|
|
14
|
+
def color_space; self[:ColorSpace]; end
|
|
15
|
+
|
|
16
|
+
def u3d?
|
|
17
|
+
subtype == :U3D
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def prc?
|
|
21
|
+
subtype == :PRC
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def step?
|
|
25
|
+
subtype == :STEP
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def view_count
|
|
29
|
+
return 0 unless views
|
|
30
|
+
|
|
31
|
+
arr = views.is_a?(Pdfrb::Model::PdfArray) ? views.to_a : views
|
|
32
|
+
arr.is_a?(Array) ? arr.size : 0
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def each_view
|
|
36
|
+
return enum_for(:each_view) unless block_given?
|
|
37
|
+
return unless views && document
|
|
38
|
+
|
|
39
|
+
arr = views.is_a?(Pdfrb::Model::PdfArray) ? views.to_a : views
|
|
40
|
+
arr.each do |ref|
|
|
41
|
+
obj = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
|
|
42
|
+
yield obj if obj
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D Units (s13.6.4). Scaling factor and unit name for 3D measures.
|
|
7
|
+
class ThreeDUnits < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def type; self[:Type]; end
|
|
9
|
+
def unit_name; self[:U]; end
|
|
10
|
+
def scale_factor; self[:SF]; end
|
|
11
|
+
|
|
12
|
+
def has_scale_factor?
|
|
13
|
+
!!scale_factor
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# 3D View (s13.6.4). A single camera/lighting/material configuration
|
|
7
|
+
# for a 3D stream.
|
|
8
|
+
class ThreeDView < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def external_name; self[:XN]; end
|
|
11
|
+
def internal_name; self[:IN]; end
|
|
12
|
+
def measure_space; self[:MS]&.to_sym; end
|
|
13
|
+
def camera_to_world; self[:C2W]; end
|
|
14
|
+
def u3d_path; self[:U3DPath]; end
|
|
15
|
+
def camera_offset; self[:CO]; end
|
|
16
|
+
def projection; self[:P]; end
|
|
17
|
+
def measures; self[:MA]; end
|
|
18
|
+
|
|
19
|
+
def matrix_space?
|
|
20
|
+
measure_space == :M
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def u3d_space?
|
|
24
|
+
measure_space == :U3D
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def has_measures?
|
|
28
|
+
!!measures && (!measures.is_a?(Array) || !measures.empty?)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def resolved_projection
|
|
32
|
+
ref = projection
|
|
33
|
+
return nil unless ref && document
|
|
34
|
+
|
|
35
|
+
document.object(ref)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# ToUnicode CMap stream (s9.10.3). Maps glyph codes to Unicode
|
|
7
|
+
# strings for text extraction.
|
|
8
|
+
class ToUnicodeCMapStream < Pdfrb::Model::Cos::Stream
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
|
|
11
|
+
def cmap_source
|
|
12
|
+
decoded_stream&.force_encoding(Encoding::BINARY)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def has_codespace?
|
|
16
|
+
return false unless cmap_source
|
|
17
|
+
|
|
18
|
+
cmap_source.include?("begincodespacerange")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Page Transition dict (s12.4.3). Animation for moving between
|
|
7
|
+
# pages in FullScreen mode. Lives on Page /Trans or on an
|
|
8
|
+
# ActionTrans.
|
|
9
|
+
class Transition < Pdfrb::Model::Cos::Dictionary
|
|
10
|
+
def type; self[:Type]; end
|
|
11
|
+
def style; self[:S]&.to_sym; end
|
|
12
|
+
def duration; self[:D]; end
|
|
13
|
+
def dimension; self[:Dm]&.to_sym; end
|
|
14
|
+
def motion_direction; self[:M]&.to_sym; end
|
|
15
|
+
def direction; self[:Di] || 0; end
|
|
16
|
+
def scale; self[:SS] || 1.0; end
|
|
17
|
+
def bidirectional?; truthy?(self[:B]); end
|
|
18
|
+
|
|
19
|
+
def split?; style == :Split; end
|
|
20
|
+
def blinds?; style == :Blinds; end
|
|
21
|
+
def box?; style == :Box; end
|
|
22
|
+
def wipe?; style == :Wipe; end
|
|
23
|
+
def dissolve?; style == :Dissolve; end
|
|
24
|
+
def glitter?; style == :Glitter; end
|
|
25
|
+
def fly?; style == :Fly; end
|
|
26
|
+
def push?; style == :Push; end
|
|
27
|
+
def cover?; style == :Cover; end
|
|
28
|
+
def uncover?; style == :Uncover; end
|
|
29
|
+
def fade?; style == :Fade; end
|
|
30
|
+
|
|
31
|
+
def horizontal?; dimension == :H; end
|
|
32
|
+
def vertical?; dimension == :V; end
|
|
33
|
+
|
|
34
|
+
def inward?; motion_direction == :I; end
|
|
35
|
+
def outward?; motion_direction == :O; end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Printer Mark sub-dictionary (s12.5.6.18). Per-printer-mark
|
|
39
|
+
# sub-parameters.
|
|
40
|
+
class PrinterMarkSubDict < Pdfrb::Model::Cos::Dictionary
|
|
41
|
+
def printer; self[:PRINTER]; end
|
|
42
|
+
def credentials; self[:CREDS]; end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# ExData 3D Markup (s13.6.1). 3D scene metadata for Projection
|
|
46
|
+
# annotations / 3D models.
|
|
47
|
+
class ExData3DMarkup < Pdfrb::Model::Cos::Dictionary
|
|
48
|
+
def type; self[:Type]; end
|
|
49
|
+
def v3d; self[:V3D]; end
|
|
50
|
+
|
|
51
|
+
def has_3d?
|
|
52
|
+
!!v3d
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# ExData Markup Geo (s12.5.6.21). Geo-spatial markup attached to
|
|
57
|
+
# a Projection annotation.
|
|
58
|
+
class ExDataMarkupGeo < Pdfrb::Model::Cos::Dictionary
|
|
59
|
+
def type; self[:Type]; end
|
|
60
|
+
def coordinate_path; self[:CoordinatePath]; end
|
|
61
|
+
|
|
62
|
+
def has_coordinate_path?
|
|
63
|
+
!!coordinate_path
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# UR Transform Parameters (s12.8.2.3). Adobe Reader-enabled
|
|
7
|
+
# usage rights — annotations, form fill-in, signatures allowed.
|
|
8
|
+
class URTransformParameters < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def annotations; self[:Annots]; end
|
|
11
|
+
def form; self[:Form]; end
|
|
12
|
+
def signature; self[:Signature]; end
|
|
13
|
+
def ef; self[:EF]; end
|
|
14
|
+
|
|
15
|
+
def has_annotation_rights?
|
|
16
|
+
!!annotations
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def has_form_rights?
|
|
20
|
+
!!form
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def has_signature_rights?
|
|
24
|
+
!!signature
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def has_embedded_file_rights?
|
|
28
|
+
!!ef
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# URI dict (s12.5.6.5). Catalog /URI dict for base URI and
|
|
7
|
+
# retriever map.
|
|
8
|
+
class URIDict < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def base; self[:Base]; end
|
|
10
|
+
def retriever_map; self[:Map]; end
|
|
11
|
+
|
|
12
|
+
def has_base?
|
|
13
|
+
!!base
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# URL Alias (s7.9.6). Names dictionary entry mapping friendly
|
|
7
|
+
# URLs to actual URLs for collection sub-items.
|
|
8
|
+
class URLAlias < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def alias_value; self[:U]; end
|
|
11
|
+
def url; self[:URL]; end
|
|
12
|
+
|
|
13
|
+
def has_alias?
|
|
14
|
+
!!alias_value
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Variable Text Field (s12.7.4.3). Base for text fields with
|
|
7
|
+
# dynamic appearance generation. Adds /DA, /Q, /RV.
|
|
8
|
+
class VariableTextField < Field
|
|
9
|
+
def default_appearance; self[:DA]; end
|
|
10
|
+
def da; self[:DA]; end
|
|
11
|
+
def q; self[:Q]; end
|
|
12
|
+
def rv; self[:RV]; end
|
|
13
|
+
|
|
14
|
+
def text_alignment
|
|
15
|
+
case q
|
|
16
|
+
when 1 then :center
|
|
17
|
+
when 2 then :right
|
|
18
|
+
when 3 then :justify
|
|
19
|
+
else :left
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def has_rich_text?
|
|
24
|
+
!!rv
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def default_appearance_font
|
|
28
|
+
return nil unless default_appearance
|
|
29
|
+
|
|
30
|
+
match = default_appearance.to_s.match(/\/(\w+)\s+([\d.]+)\s+Tf/)
|
|
31
|
+
return nil unless match
|
|
32
|
+
|
|
33
|
+
[match[1].to_sym, match[2].to_f]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def default_appearance_color
|
|
37
|
+
return nil unless default_appearance
|
|
38
|
+
|
|
39
|
+
match = default_appearance.to_s.match(/([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+rg/)
|
|
40
|
+
return nil unless match
|
|
41
|
+
|
|
42
|
+
[match[1].to_f, match[2].to_f, match[3].to_f]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# ViewerPreferences (s12.2, ISO 32000-2 7.7.2). Catalog /ViewerPreferences.
|
|
7
|
+
class ViewerPreferences < Cos::Dictionary
|
|
8
|
+
register_type :ViewerPreferences
|
|
9
|
+
|
|
10
|
+
def type; self[:Type]; end
|
|
11
|
+
def hide_toolbar?; truthy?(self[:HideToolbar]); end
|
|
12
|
+
def hide_menubar?; truthy?(self[:HideMenubar]); end
|
|
13
|
+
def hide_window_ui?; truthy?(self[:HideWindowUI]); end
|
|
14
|
+
def fit_window?; truthy?(self[:FitWindow]); end
|
|
15
|
+
def center_window?; truthy?(self[:CenterWindow]); end
|
|
16
|
+
def display_doc_title?; truthy?(self[:DisplayDocTitle]); end
|
|
17
|
+
def non_fullscreen_page_mode; self[:NonFullScreenPageMode]; end
|
|
18
|
+
def direction; self[:Direction]; end
|
|
19
|
+
def view_area; self[:ViewArea]; end
|
|
20
|
+
def view_clip; self[:ViewClip]; end
|
|
21
|
+
def print_area; self[:PrintArea]; end
|
|
22
|
+
def print_clip; self[:PrintClip]; end
|
|
23
|
+
def print_scaling; self[:PrintScaling]; end
|
|
24
|
+
def duplex; self[:Duplex]; end
|
|
25
|
+
def pick_tray_by_pdf_size?; truthy?(self[:PickTrayByPDFSize]); end
|
|
26
|
+
def print_pagerange; self[:PrintPageRange]; end
|
|
27
|
+
def num_copies; self[:NumCopies]; end
|
|
28
|
+
|
|
29
|
+
def left_to_right?; direction&.to_sym == :L2R; end
|
|
30
|
+
def right_to_left?; direction&.to_sym == :R2L; end
|
|
31
|
+
|
|
32
|
+
def simplex?; duplex&.to_sym == :Simplex; end
|
|
33
|
+
def duplex_flip_short_edge?; duplex&.to_sym == :DuplexFlipShortEdge; end
|
|
34
|
+
def duplex_flip_long_edge?; duplex&.to_sym == :DuplexFlipLongEdge; end
|
|
35
|
+
|
|
36
|
+
def enforce_print_scaling?
|
|
37
|
+
print_scaling&.to_sym == :AppDefault
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Watermark annotation (s12.5.6.23). PDF 2.0. Non-printing,
|
|
7
|
+
# non-interactive visual watermark behind/over page content.
|
|
8
|
+
class WatermarkAnnotation < Annotation
|
|
9
|
+
def fixed_print?; !!value[:FixedPrint]; end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
class WidgetAnnotation < Annotation
|
|
7
|
+
def field; self[:Parent]; end
|
|
8
|
+
def appearance_stream; self[:AP]; end
|
|
9
|
+
def highlight_mode; self[:H]; end
|
|
10
|
+
def mk; self[:MK]; end
|
|
11
|
+
def action; self[:A]; end
|
|
12
|
+
def additional_actions; self[:AA]; end
|
|
13
|
+
|
|
14
|
+
def resolved_field
|
|
15
|
+
ref = field
|
|
16
|
+
return nil unless ref && document
|
|
17
|
+
|
|
18
|
+
document.object(ref)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def button_background_color
|
|
22
|
+
return nil unless mk
|
|
23
|
+
|
|
24
|
+
obj = mk.is_a?(Pdfrb::Model::Reference) && document ? document.object(mk) : mk
|
|
25
|
+
obj && obj[:BG]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def button_caption
|
|
29
|
+
return nil unless mk
|
|
30
|
+
|
|
31
|
+
obj = mk.is_a?(Pdfrb::Model::Reference) && document ? document.object(mk) : mk
|
|
32
|
+
obj && obj[:CA]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def normal_caption
|
|
36
|
+
return nil unless mk
|
|
37
|
+
|
|
38
|
+
obj = mk.is_a?(Pdfrb::Model::Reference) && document ? document.object(mk) : mk
|
|
39
|
+
obj && obj[:CA]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def has_action?
|
|
43
|
+
!!action
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -7,6 +7,47 @@ module Pdfrb
|
|
|
7
7
|
# /BBox, /Matrix, /Resources, /Group, /Filter, etc.
|
|
8
8
|
class XObjectForm < Pdfrb::Model::Cos::Stream
|
|
9
9
|
arlington_object "XObjectFormType1"
|
|
10
|
+
|
|
11
|
+
def subtype; self[:Subtype]; end
|
|
12
|
+
def bbox; self[:BBox]; end
|
|
13
|
+
def matrix; self[:Matrix]; end
|
|
14
|
+
def resources; self[:Resources]; end
|
|
15
|
+
def group; self[:Group]; end
|
|
16
|
+
def filter; self[:Filter]; end
|
|
17
|
+
def decode_parms; self[:DecodeParms]; end
|
|
18
|
+
def form_type; self[:FormType] || 1; end
|
|
19
|
+
def oc; self[:OC]; end
|
|
20
|
+
def name; self[:Name]; end
|
|
21
|
+
def last_modified; self[:LastModified]; end
|
|
22
|
+
def piece_info; self[:PieceInfo]; end
|
|
23
|
+
def struct_parent; self[:StructParent]; end
|
|
24
|
+
def associated_files; self[:AF]; end
|
|
25
|
+
def mark_stream_data?; truthy?(self[:MS]); end
|
|
26
|
+
|
|
27
|
+
def transparency_group?
|
|
28
|
+
!!group
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def isolated?
|
|
32
|
+
group && !!group[:I]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def knockout?
|
|
36
|
+
group && !!group[:K]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def default_color_space
|
|
40
|
+
group && group[:CS]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def identity_matrix?
|
|
44
|
+
return true unless matrix
|
|
45
|
+
|
|
46
|
+
arr = matrix.is_a?(Pdfrb::Model::PdfArray) ? matrix.to_a : matrix
|
|
47
|
+
return true unless arr.is_a?(Array) && arr.size == 6
|
|
48
|
+
|
|
49
|
+
arr[0] == 1 && arr[1].zero? && arr[2].zero? && arr[3] == 1 && arr[4].zero? && arr[5].zero?
|
|
50
|
+
end
|
|
10
51
|
end
|
|
11
52
|
end
|
|
12
53
|
end
|