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,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# CalRGB color space dictionary (s8.6.3.3). Calibrated RGB:
|
|
7
|
+
# [/CalRGB <dict>].
|
|
8
|
+
class CalRGB < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def white_point; self[:WhitePoint]; end
|
|
10
|
+
def black_point; self[:BlackPoint]; end
|
|
11
|
+
def gamma; self[:Gamma]; end
|
|
12
|
+
def matrix; self[:Matrix]; end
|
|
13
|
+
|
|
14
|
+
def components; 3; end
|
|
15
|
+
|
|
16
|
+
def has_matrix?
|
|
17
|
+
!!matrix
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Caret annotation (s12.5.6.11). Text-insertion indicator.
|
|
7
|
+
class CaretAnnotation < MarkupAnnotation
|
|
8
|
+
def rd; self[:RD]; end
|
|
9
|
+
def sy; self[:Sy]; end
|
|
10
|
+
|
|
11
|
+
def paragraph_style?
|
|
12
|
+
sy&.to_sym == :P
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def new_line_style?
|
|
16
|
+
sy&.to_sym == :None
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -15,34 +15,117 @@ module Pdfrb
|
|
|
15
15
|
arlington_object "Catalog"
|
|
16
16
|
register_type :Catalog
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
def
|
|
20
|
-
|
|
18
|
+
def pages; self[:Pages]; end
|
|
19
|
+
def page_labels; self[:PageLabels]; end
|
|
20
|
+
def names; self[:Names]; end
|
|
21
|
+
def destinations; self[:Dests]; end
|
|
22
|
+
def viewer_preferences; self[:ViewerPreferences]; end
|
|
23
|
+
def page_layout; self[:PageLayout]; end
|
|
24
|
+
def page_mode; self[:PageMode]; end
|
|
25
|
+
def outlines; self[:Outlines]; end
|
|
26
|
+
def threads; self[:Threads]; end
|
|
27
|
+
def open_action; self[:OpenAction]; end
|
|
28
|
+
def additional_actions; self[:AA]; end
|
|
29
|
+
def uri; self[:URI]; end
|
|
30
|
+
def acro_form; self[:AcroForm]; end
|
|
31
|
+
def metadata; self[:Metadata]; end
|
|
32
|
+
def struct_tree_root; self[:StructTreeRoot]; end
|
|
33
|
+
def mark_info; self[:MarkInfo]; end
|
|
34
|
+
def lang; self[:Lang]; end
|
|
35
|
+
def spider_info; self[:SpiderInfo]; end
|
|
36
|
+
def output_intents; self[:OutputIntents]; end
|
|
37
|
+
def piece_info; self[:PieceInfo]; end
|
|
38
|
+
def oc_properties; self[:OCProperties]; end
|
|
39
|
+
def perms; self[:Perms]; end
|
|
40
|
+
def legal; self[:Legal]; end
|
|
41
|
+
def requirements; self[:Requirements]; end
|
|
42
|
+
def collection; self[:Collection]; end
|
|
43
|
+
def needs_rendering?; truthy?(self[:NeedsRendering]); end
|
|
44
|
+
def dss; self[:DSS]; end
|
|
45
|
+
def associated_files; self[:AF]; end
|
|
46
|
+
def dpart_root; self[:DPartRoot]; end
|
|
47
|
+
def version_override; self[:Version]; end
|
|
48
|
+
def extensions; self[:Extensions]; end
|
|
49
|
+
|
|
50
|
+
def single_page_layout?; page_layout&.to_sym == :SinglePage; end
|
|
51
|
+
def one_column_layout?; page_layout&.to_sym == :OneColumn; end
|
|
52
|
+
|
|
53
|
+
def two_column_layout?
|
|
54
|
+
[:TwoColumnLeft, :TwoColumnRight].include?(page_layout&.to_sym)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def two_page_layout?
|
|
58
|
+
[:TwoPageLeft, :TwoPageRight].include?(page_layout&.to_sym)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def use_attachments_mode?; page_mode&.to_sym == :UseAttachments; end
|
|
62
|
+
def use_thumbs_mode?; page_mode&.to_sym == :UseThumbs; end
|
|
63
|
+
def use_outlines_mode?; page_mode&.to_sym == :UseOutlines; end
|
|
64
|
+
def full_screen_mode?; page_mode&.to_sym == :FullScreen; end
|
|
65
|
+
def use_oc_mode?; page_mode&.to_sym == :UseOC; end
|
|
66
|
+
|
|
67
|
+
def tagged?
|
|
68
|
+
mark_info && !!mark_info[:Marked]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def contains_struct_tree?
|
|
72
|
+
!!struct_tree_root
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def contains_form?
|
|
76
|
+
!!acro_form
|
|
21
77
|
end
|
|
22
78
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
self[:AcroForm]
|
|
79
|
+
def contains_outlines?
|
|
80
|
+
!!outlines
|
|
26
81
|
end
|
|
27
82
|
|
|
28
|
-
def
|
|
29
|
-
|
|
83
|
+
def page_count
|
|
84
|
+
return 0 unless pages
|
|
85
|
+
|
|
86
|
+
obj = pages.is_a?(Pdfrb::Model::Reference) && document ? document.object(pages) : pages
|
|
87
|
+
obj && obj[:Count]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def resolved_pages
|
|
91
|
+
return nil unless pages && document
|
|
92
|
+
|
|
93
|
+
document.object(pages)
|
|
30
94
|
end
|
|
31
95
|
|
|
32
|
-
def
|
|
33
|
-
|
|
96
|
+
def resolved_acro_form
|
|
97
|
+
return nil unless acro_form && document
|
|
98
|
+
|
|
99
|
+
document.object(acro_form)
|
|
34
100
|
end
|
|
35
101
|
|
|
36
|
-
def
|
|
37
|
-
|
|
102
|
+
def resolved_outlines
|
|
103
|
+
return nil unless outlines && document
|
|
104
|
+
|
|
105
|
+
document.object(outlines)
|
|
38
106
|
end
|
|
39
107
|
|
|
40
|
-
def
|
|
41
|
-
|
|
108
|
+
def resolved_metadata
|
|
109
|
+
return nil unless metadata && document
|
|
110
|
+
|
|
111
|
+
document.object(metadata)
|
|
42
112
|
end
|
|
43
113
|
|
|
44
|
-
def
|
|
45
|
-
|
|
114
|
+
def each_output_intent
|
|
115
|
+
return enum_for(:each_output_intent) unless block_given?
|
|
116
|
+
return unless output_intents && document
|
|
117
|
+
|
|
118
|
+
arr = if output_intents.is_a?(Pdfrb::Model::Reference)
|
|
119
|
+
document.object(output_intents)
|
|
120
|
+
else
|
|
121
|
+
output_intents
|
|
122
|
+
end
|
|
123
|
+
return unless arr.is_a?(Array) || arr.is_a?(Pdfrb::Model::PdfArray)
|
|
124
|
+
|
|
125
|
+
arr.each do |entry|
|
|
126
|
+
obj = entry.is_a?(Pdfrb::Model::Reference) ? document.object(entry) : entry
|
|
127
|
+
yield obj if obj
|
|
128
|
+
end
|
|
46
129
|
end
|
|
47
130
|
end
|
|
48
131
|
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
class Choice < Field
|
|
7
|
+
def value; self[:V]; end
|
|
8
|
+
def opt; self[:Opt]; end
|
|
9
|
+
def top_index; self[:TI]; end
|
|
10
|
+
def indices; self[:I]; end
|
|
11
|
+
|
|
12
|
+
def combo?; flags & 0x20000 != 0; end
|
|
13
|
+
def list?; !combo?; end
|
|
14
|
+
def edit?; flags & 0x40000 != 0; end
|
|
15
|
+
def multi_select?; flags & 0x200000 != 0; end
|
|
16
|
+
def sort?; flags & 0x80000 != 0; end
|
|
17
|
+
def commit_on_change?; flags & 0x4000000 != 0; end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -5,8 +5,59 @@ module Pdfrb
|
|
|
5
5
|
module Type
|
|
6
6
|
# CID-keyed font (s9.7.3). Inner font of a /Type0 composite.
|
|
7
7
|
# /Subtype /CIDFontType0 or /CIDFontType2.
|
|
8
|
-
class CIDFont < Pdfrb::Model::
|
|
8
|
+
class CIDFont < Pdfrb::Model::Type::Font
|
|
9
9
|
arlington_object "FontCIDType0"
|
|
10
|
+
|
|
11
|
+
def cid_subtype; self[:Subtype]; end
|
|
12
|
+
def base_font; self[:BaseFont]; end
|
|
13
|
+
def cid_system_info; self[:CIDSystemInfo]; end
|
|
14
|
+
def font_descriptor; self[:FontDescriptor]; end
|
|
15
|
+
def dw; self[:DW]; end
|
|
16
|
+
def w; self[:W]; end
|
|
17
|
+
def dw2; self[:DW2]; end
|
|
18
|
+
def w2; self[:W2]; end
|
|
19
|
+
def cid_to_gid_map; self[:CIDToGIDMap]; end
|
|
20
|
+
|
|
21
|
+
def type0?
|
|
22
|
+
cid_subtype&.to_sym == :CIDFontType0
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def type2?
|
|
26
|
+
cid_subtype&.to_sym == :CIDFontType2
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def default_width
|
|
30
|
+
dw || 1000
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def width_for_cid(cid)
|
|
34
|
+
return default_width unless w
|
|
35
|
+
|
|
36
|
+
entries = w.is_a?(Pdfrb::Model::PdfArray) ? w.to_a : w
|
|
37
|
+
i = 0
|
|
38
|
+
while i < entries.size
|
|
39
|
+
first = entries[i]
|
|
40
|
+
second = entries[i + 1]
|
|
41
|
+
return nil unless first && second
|
|
42
|
+
|
|
43
|
+
case second.to_s
|
|
44
|
+
when /\A[\[\]]\z/
|
|
45
|
+
array = entries[i + 2]
|
|
46
|
+
return nil unless first.is_a?(Integer) && array.is_a?(Array)
|
|
47
|
+
|
|
48
|
+
offset = cid - first
|
|
49
|
+
return array[offset] if offset >= 0 && offset < array.size
|
|
50
|
+
|
|
51
|
+
else
|
|
52
|
+
value = entries[i + 2]
|
|
53
|
+
return value if cid.between?(first, second)
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
i += 3
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
default_width
|
|
60
|
+
end
|
|
10
61
|
end
|
|
11
62
|
end
|
|
12
63
|
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# CID Font Descriptor Metrics (s9.8.1, Table 117). Per-CIDFont
|
|
7
|
+
# metrics used for embedded CIDFontType0/CIDFontType2.
|
|
8
|
+
class CIDFontDescriptorMetrics < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def style; self[:Style]&.to_sym; end
|
|
10
|
+
def cid_set; self[:CIDSet]; end
|
|
11
|
+
|
|
12
|
+
def monospaced?; style == :Monospaced; end
|
|
13
|
+
def proportional?; style == :Proportional; end
|
|
14
|
+
|
|
15
|
+
def has_cid_set?
|
|
16
|
+
!!cid_set
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def resolved_cid_set
|
|
20
|
+
ref = cid_set
|
|
21
|
+
return nil unless ref && document
|
|
22
|
+
|
|
23
|
+
document.object(ref)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# CIDSystemInfo dictionary (s9.7.3). Each CIDFont must declare
|
|
7
|
+
# its Character ID system: registry, ordering, supplement.
|
|
8
|
+
# Required for proper glyph interpretation.
|
|
9
|
+
class CIDSystemInfo < Pdfrb::Model::Cos::Dictionary
|
|
10
|
+
def registry; self[:Registry]; end
|
|
11
|
+
def ordering; self[:Ordering]; end
|
|
12
|
+
def supplement; self[:Supplement]; end
|
|
13
|
+
|
|
14
|
+
def identity?
|
|
15
|
+
registry == "Adobe" && ordering == "Identity"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def complete?
|
|
19
|
+
!registry.nil? && !ordering.nil? && !supplement.nil?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def to_s
|
|
23
|
+
"#{registry}-#{ordering}-#{supplement}"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Circle / ellipse annotation (s12.5.6.8).
|
|
7
|
+
class CircleAnnotation < 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
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Collection dictionary (s7.11.5). Describes a PDF Portfolio — a
|
|
7
|
+
# collection of embedded files with a presentation schema. Lives
|
|
8
|
+
# on Catalog /Collection.
|
|
9
|
+
class Collection < Pdfrb::Model::Cos::Dictionary
|
|
10
|
+
def schema; self[:Schema]; end
|
|
11
|
+
def default_view; self[:View]; end
|
|
12
|
+
def sort; self[:Sort]; end
|
|
13
|
+
def split; self[:Split]; end
|
|
14
|
+
def colors; self[:Colors]; end
|
|
15
|
+
def folders; self[:Folders]; end
|
|
16
|
+
|
|
17
|
+
def has_schema?
|
|
18
|
+
!!schema
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def has_default_view?
|
|
22
|
+
!!default_view
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Collection field (s7.11.5). One column definition.
|
|
7
|
+
class CollectionField < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def name; self[:N]; end
|
|
9
|
+
def field_type; self[:Subtype]; end
|
|
10
|
+
def order; self[:O]; end
|
|
11
|
+
def visibility; self[:V]; end
|
|
12
|
+
|
|
13
|
+
def text_field?; field_type == :Text; end
|
|
14
|
+
def number_field?; field_type == :Number; end
|
|
15
|
+
def date_field?; field_type == :Date; end
|
|
16
|
+
def file_name_field?; field_type == :FileName; end
|
|
17
|
+
def file_size_field?; field_type == :FileSize; end
|
|
18
|
+
def description_field?; field_type == :Desc; end
|
|
19
|
+
def modification_date_field?; field_type == :ModDate; end
|
|
20
|
+
def creation_date_field?; field_type == :CreationDate; 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
|
+
# Collection item (s7.11.5). Per-embedded-file values for the
|
|
7
|
+
# schema fields.
|
|
8
|
+
class CollectionItem < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def value_for(field_name)
|
|
10
|
+
self[field_name.to_sym] || self[field_name.to_s]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def keys
|
|
14
|
+
value.keys
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Collection schema (s7.11.5). Defines the columns/fields shown
|
|
7
|
+
# in the portfolio view.
|
|
8
|
+
class CollectionSchema < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def fields
|
|
10
|
+
value.keys
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def field_count
|
|
14
|
+
value.size
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def each_field(&)
|
|
18
|
+
return enum_for(:each_field) unless block_given?
|
|
19
|
+
|
|
20
|
+
value.each(&)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Collection sort (s7.11.5). Defines default sort order.
|
|
7
|
+
class CollectionSort < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def field_name; self[:S]; end
|
|
9
|
+
def descending?; truthy?(self[:A]); end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Crypt Filter (s7.6.5). Per-stream cipher filter spec — names
|
|
7
|
+
# the cipher and authentication event.
|
|
8
|
+
class CryptFilter < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def cipher_method; self[:CFM]&.to_sym; end
|
|
10
|
+
def auth_event; self[:AuthEvent]&.to_sym; end
|
|
11
|
+
def length; self[:Length]; end
|
|
12
|
+
|
|
13
|
+
def none?; cipher_method == :None; end
|
|
14
|
+
def v2?; cipher_method == :V2; end
|
|
15
|
+
def aes_v2?; cipher_method == :AESV2; end
|
|
16
|
+
def aes_v3?; cipher_method == :AESV3; end
|
|
17
|
+
def aes_v4?; cipher_method == :AESV4; end
|
|
18
|
+
|
|
19
|
+
def open_event?; auth_event == :EFOpen; end
|
|
20
|
+
def doc_open_event?; auth_event == :DocOpen; end
|
|
21
|
+
|
|
22
|
+
def has_length?
|
|
23
|
+
length&.positive?
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Crypt Filter Map (s7.6.5, Table 26). Maps per-page crypt filter
|
|
28
|
+
# names to the default CryptFilter used.
|
|
29
|
+
class CryptFilterMap < Pdfrb::Model::Cos::Dictionary
|
|
30
|
+
def filter_for(stream_name)
|
|
31
|
+
value[stream_name.to_sym] || value[stream_name.to_s]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def each_filter(&)
|
|
35
|
+
return enum_for(:each_filter) unless block_given?
|
|
36
|
+
|
|
37
|
+
value.each(&)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Crypt Filter Public Key (s7.6.5, Table 26). Public-key analog
|
|
42
|
+
# of CryptFilter.
|
|
43
|
+
class CryptFilterPublicKey < Pdfrb::Model::Cos::Dictionary
|
|
44
|
+
def cipher_method; self[:CFM]&.to_sym; end
|
|
45
|
+
def auth_event; self[:AuthEvent]&.to_sym; end
|
|
46
|
+
def recipients; self[:Recipients]; end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Crypt Filter Public Key Map (s7.6.5, Table 26). Maps per-page
|
|
50
|
+
# public-key crypt filters.
|
|
51
|
+
class CryptFilterPublicKeyMap < Pdfrb::Model::Cos::Dictionary
|
|
52
|
+
def filter_for(stream_name)
|
|
53
|
+
value[stream_name.to_sym] || value[stream_name.to_s]
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# DeviceN color space (s8.6.6.4). Multiple custom colorants mapped
|
|
7
|
+
# through a single tint-transform function. Generalises Separation.
|
|
8
|
+
class DeviceN < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def colorants; self[:Names]; end
|
|
10
|
+
def alternate_space; self[:AlternateSpace]; end
|
|
11
|
+
def tint_transform; self[:TintTransform]; end
|
|
12
|
+
def attributes; self[:Attributes]; end
|
|
13
|
+
|
|
14
|
+
def colorant_count
|
|
15
|
+
return 0 unless colorants
|
|
16
|
+
|
|
17
|
+
arr = colorants.is_a?(Pdfrb::Model::PdfArray) ? colorants.to_a : colorants
|
|
18
|
+
arr.is_a?(Array) ? arr.size : 0
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def components
|
|
22
|
+
colorant_count
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def each_colorant(&)
|
|
26
|
+
return enum_for(:each_colorant) unless block_given?
|
|
27
|
+
return unless colorants
|
|
28
|
+
|
|
29
|
+
arr = colorants.is_a?(Pdfrb::Model::PdfArray) ? colorants.to_a : colorants
|
|
30
|
+
return unless arr.is_a?(Array)
|
|
31
|
+
|
|
32
|
+
arr.each(&)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# DeviceN Mixing Hints (s8.6.6.5). Per-colorant device hints.
|
|
7
|
+
class DeviceNMixingHints < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def solidities; self[:Solidities]; end
|
|
9
|
+
def dot_gain; self[:DotGain]; end
|
|
10
|
+
|
|
11
|
+
def has_solidities?
|
|
12
|
+
!!solidities
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# DeviceN Process (s8.6.6.4). Process colorant list.
|
|
7
|
+
class DeviceNProcess < Pdfrb::Model::Cos::Dictionary
|
|
8
|
+
def color_space; self[:ColorSpace]; end
|
|
9
|
+
def components; self[:Components]; end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Document Modification Detection and Prevention (DocMDP) —
|
|
7
|
+
# s12.8.2.2. Restricts what edits are allowed after signing.
|
|
8
|
+
class DocMDPTransformParameters < Pdfrb::Model::Cos::Dictionary
|
|
9
|
+
def type; self[:Type]; end
|
|
10
|
+
def p; self[:P]; end
|
|
11
|
+
def v; self[:V]; end
|
|
12
|
+
|
|
13
|
+
# P=1: no changes allowed; P=2: minimal changes (form fill);
|
|
14
|
+
# P=3: annotations + form fill.
|
|
15
|
+
def no_changes_allowed?; p == 1; end
|
|
16
|
+
def minimal_changes_allowed?; p == 2; end
|
|
17
|
+
def annotations_allowed?; p == 3; end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Pdfrb
|
|
4
|
+
module Model
|
|
5
|
+
module Type
|
|
6
|
+
# Document Security Store (s12.8.4.3, PDF 2.0). Holds certs, CRLs,
|
|
7
|
+
# and OCSP responses used by signature verification.
|
|
8
|
+
class DocumentSecurityStore < Cos::Dictionary
|
|
9
|
+
register_type :DSS
|
|
10
|
+
|
|
11
|
+
def type; self[:Type]; end
|
|
12
|
+
def certs; self[:Certs]; end
|
|
13
|
+
def ocsp; self[:OCSPs]; end
|
|
14
|
+
def crl; self[:CRLs]; end
|
|
15
|
+
def vri; self[:VRI]; end
|
|
16
|
+
|
|
17
|
+
def cert_count
|
|
18
|
+
return 0 unless certs
|
|
19
|
+
|
|
20
|
+
arr = certs.is_a?(Pdfrb::Model::PdfArray) ? certs.to_a : certs
|
|
21
|
+
arr.is_a?(Array) ? arr.size : 0
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def ocsp_count
|
|
25
|
+
return 0 unless ocsp
|
|
26
|
+
|
|
27
|
+
arr = ocsp.is_a?(Pdfrb::Model::PdfArray) ? ocsp.to_a : ocsp
|
|
28
|
+
arr.is_a?(Array) ? arr.size : 0
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def crl_count
|
|
32
|
+
return 0 unless crl
|
|
33
|
+
|
|
34
|
+
arr = crl.is_a?(Pdfrb::Model::PdfArray) ? crl.to_a : crl
|
|
35
|
+
arr.is_a?(Array) ? arr.size : 0
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def has_vri?
|
|
39
|
+
!!vri
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def each_cert
|
|
43
|
+
return enum_for(:each_cert) unless block_given?
|
|
44
|
+
return unless certs && document
|
|
45
|
+
|
|
46
|
+
arr = certs.is_a?(Pdfrb::Model::PdfArray) ? certs.to_a : certs
|
|
47
|
+
arr.each do |ref|
|
|
48
|
+
obj = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
|
|
49
|
+
yield obj if obj
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -7,6 +7,25 @@ module Pdfrb
|
|
|
7
7
|
# /Filespec /EF entry.
|
|
8
8
|
class EmbeddedFile < Pdfrb::Model::Cos::Stream
|
|
9
9
|
arlington_object "EmbeddedFileStream"
|
|
10
|
+
register_type :EmbeddedFile
|
|
11
|
+
|
|
12
|
+
def subtype; self[:Subtype]; end
|
|
13
|
+
def length; self[:Length]; end
|
|
14
|
+
def filter; self[:Filter]; end
|
|
15
|
+
def params; self[:Params]; end
|
|
16
|
+
def checksum; self[:Params] && self[:Params][:CheckSum]; end
|
|
17
|
+
def creation_date; self[:Params] && self[:Params][:CreationDate]; end
|
|
18
|
+
def modification_date; self[:Params] && self[:Params][:ModDate]; end
|
|
19
|
+
def size; self[:Params] && self[:Params][:Size]; end
|
|
20
|
+
def mac_creator; self[:Params] && self[:Params][:Mac]; end
|
|
21
|
+
|
|
22
|
+
def compressed?
|
|
23
|
+
filter && !filter.to_s.empty?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def mime_type
|
|
27
|
+
subtype&.to_s
|
|
28
|
+
end
|
|
10
29
|
end
|
|
11
30
|
end
|
|
12
31
|
end
|