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
|
@@ -7,6 +7,62 @@ module Pdfrb
|
|
|
7
7
|
# /Width, /Height, /ColorSpace, /BitsPerComponent, etc.
|
|
8
8
|
class XObjectImage < Pdfrb::Model::Cos::Stream
|
|
9
9
|
arlington_object "XObjectImage"
|
|
10
|
+
|
|
11
|
+
def subtype; self[:Subtype]; end
|
|
12
|
+
def width; self[:Width]; end
|
|
13
|
+
def height; self[:Height]; end
|
|
14
|
+
def color_space; self[:ColorSpace]; end
|
|
15
|
+
def bits_per_component; self[:BitsPerComponent]; end
|
|
16
|
+
def filter; self[:Filter]; end
|
|
17
|
+
def decode; self[:Decode]; end
|
|
18
|
+
def intent; self[:Intent]; end
|
|
19
|
+
def image_mask?; truthy?(self[:ImageMask]); end
|
|
20
|
+
def mask; self[:Mask]; end
|
|
21
|
+
def smask; self[:SMask]; end
|
|
22
|
+
def smask_in_data; self[:SMaskInData]; end
|
|
23
|
+
def decode_parms; self[:DecodeParms]; end
|
|
24
|
+
def interpolate?; truthy?(self[:Interpolate]); end
|
|
25
|
+
def alternates; self[:Alternates]; end
|
|
26
|
+
def oc; self[:OC]; end
|
|
27
|
+
def name; self[:Name]; end
|
|
28
|
+
def struct_parent; self[:StructParent]; end
|
|
29
|
+
def associated_files; self[:AF]; end
|
|
30
|
+
|
|
31
|
+
def components
|
|
32
|
+
cs = color_space
|
|
33
|
+
return 0 unless cs
|
|
34
|
+
|
|
35
|
+
case cs.to_sym
|
|
36
|
+
when :DeviceGray, :CalGray, :Indexed then 1
|
|
37
|
+
when :DeviceRGB, :CalRGB, :Lab then 3
|
|
38
|
+
when :DeviceCMYK then 4
|
|
39
|
+
end
|
|
40
|
+
rescue StandardError
|
|
41
|
+
nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def masked?
|
|
45
|
+
image_mask? || !!mask
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def has_soft_mask?
|
|
49
|
+
!!smask || smask_in_data.to_i.positive?
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def inline_soft_mask?
|
|
53
|
+
smask_in_data.to_i == 2
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def indexed?
|
|
57
|
+
color_space.is_a?(Array) &&
|
|
58
|
+
color_space.to_ary.first&.to_sym == :Indexed
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def bytes_per_row
|
|
62
|
+
return nil unless width && bits_per_component && components
|
|
63
|
+
|
|
64
|
+
((width * components * bits_per_component) + 7) / 8
|
|
65
|
+
end
|
|
10
66
|
end
|
|
11
67
|
end
|
|
12
68
|
end
|
|
@@ -8,6 +8,43 @@ module Pdfrb
|
|
|
8
8
|
class XRefStream < Pdfrb::Model::Cos::Stream
|
|
9
9
|
arlington_object "XRefStream"
|
|
10
10
|
register_type :XRef
|
|
11
|
+
|
|
12
|
+
def type; self[:Type]; end
|
|
13
|
+
def size; self[:Size]; end
|
|
14
|
+
def prev; self[:Prev]; end
|
|
15
|
+
def root; self[:Root]; end
|
|
16
|
+
def encrypt; self[:Encrypt]; end
|
|
17
|
+
def info; self[:Info]; end
|
|
18
|
+
def id; self[:ID]; end
|
|
19
|
+
def w; self[:W]; end
|
|
20
|
+
def index; self[:Index]; end
|
|
21
|
+
def filter; self[:Filter]; end
|
|
22
|
+
|
|
23
|
+
def encrypted?
|
|
24
|
+
!!encrypt
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def incremental?
|
|
28
|
+
!!prev
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def field_widths
|
|
32
|
+
return [0, 0, 0] unless w
|
|
33
|
+
|
|
34
|
+
arr = w.is_a?(Pdfrb::Model::PdfArray) ? w.to_a : w
|
|
35
|
+
return [0, 0, 0] unless arr.is_a?(Array) && arr.size == 3
|
|
36
|
+
|
|
37
|
+
arr
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def subsection_index
|
|
41
|
+
return [[0, size || 0]] unless index
|
|
42
|
+
|
|
43
|
+
arr = index.is_a?(Pdfrb::Model::PdfArray) ? index.to_a : index
|
|
44
|
+
return [[0, size || 0]] unless arr.is_a?(Array)
|
|
45
|
+
|
|
46
|
+
arr.each_slice(2).to_a
|
|
47
|
+
end
|
|
11
48
|
end
|
|
12
49
|
end
|
|
13
50
|
end
|
data/lib/pdfrb/model/type.rb
CHANGED
|
@@ -17,23 +17,35 @@ module Pdfrb
|
|
|
17
17
|
class << self
|
|
18
18
|
attr_reader :arlington_registry
|
|
19
19
|
|
|
20
|
-
# Register a Type subclass under its Arlington TSV name.
|
|
21
20
|
def register_arlington(name, klass)
|
|
22
21
|
@arlington_registry[name] = klass
|
|
23
22
|
end
|
|
24
23
|
|
|
25
|
-
# Look up a Type subclass by Arlington TSV name.
|
|
26
24
|
def lookup(name)
|
|
27
25
|
@arlington_registry[name]
|
|
28
26
|
end
|
|
27
|
+
|
|
28
|
+
# Force-load all autoloaded type classes so register_type and
|
|
29
|
+
# register_subtype calls fire. Call this before parsing or
|
|
30
|
+
# when iterating type_map. Idempotent.
|
|
31
|
+
def eager_load!
|
|
32
|
+
return if @eager_loaded
|
|
33
|
+
|
|
34
|
+
constants.each do |c|
|
|
35
|
+
const_get(c)
|
|
36
|
+
rescue NameError
|
|
37
|
+
# Skip autoload targets that don't define a class yet.
|
|
38
|
+
end
|
|
39
|
+
@eager_loaded = true
|
|
40
|
+
end
|
|
29
41
|
end
|
|
30
42
|
|
|
31
|
-
# Base semantic types
|
|
43
|
+
# Base semantic types.
|
|
32
44
|
autoload :FileTrailer, "pdfrb/model/type/file_trailer"
|
|
33
45
|
autoload :Catalog, "pdfrb/model/type/catalog"
|
|
34
46
|
autoload :Info, "pdfrb/model/type/info"
|
|
35
47
|
autoload :PageTreeNode, "pdfrb/model/type/page_tree_node"
|
|
36
|
-
autoload :PageTreeNodeRoot, "pdfrb/model/type/
|
|
48
|
+
autoload :PageTreeNodeRoot, "pdfrb/model/type/page_tree_node_root"
|
|
37
49
|
autoload :Page, "pdfrb/model/type/page"
|
|
38
50
|
autoload :Resources, "pdfrb/model/type/resources"
|
|
39
51
|
autoload :Metadata, "pdfrb/model/type/metadata"
|
|
@@ -50,17 +62,95 @@ module Pdfrb
|
|
|
50
62
|
autoload :OptionalContentGroup, "pdfrb/model/type/optional_content_group"
|
|
51
63
|
autoload :OptionalContentMembership, "pdfrb/model/type/optional_content_membership"
|
|
52
64
|
autoload :OptionalContentProperties, "pdfrb/model/type/optional_content_properties"
|
|
65
|
+
|
|
66
|
+
# Additional OCG / opt-content subclass dicts (one per file).
|
|
67
|
+
autoload :OptContentCreatorInfo, "pdfrb/model/type/opt_content_ext"
|
|
68
|
+
autoload :OptContentExport, "pdfrb/model/type/opt_content_ext"
|
|
69
|
+
autoload :OptContentPrint, "pdfrb/model/type/opt_content_ext"
|
|
70
|
+
autoload :OptContentView, "pdfrb/model/type/opt_content_ext"
|
|
71
|
+
autoload :OptContentLanguage, "pdfrb/model/type/opt_content_ext"
|
|
72
|
+
autoload :OptContentUsageApplication, "pdfrb/model/type/opt_content_ext"
|
|
73
|
+
autoload :OptContentPageElement, "pdfrb/model/type/opt_content_page_element"
|
|
74
|
+
|
|
53
75
|
autoload :FileSpecification, "pdfrb/model/type/file_specification"
|
|
76
|
+
autoload :FileSpecEF, "pdfrb/model/type/file_spec_ef"
|
|
77
|
+
autoload :FileSpecRF, "pdfrb/model/type/file_spec_rf"
|
|
54
78
|
autoload :EmbeddedFile, "pdfrb/model/type/embedded_file"
|
|
55
79
|
autoload :AFFileSpecification, "pdfrb/model/type/af_file_specification"
|
|
56
80
|
autoload :AFEmbeddedFile, "pdfrb/model/type/af_embedded_file"
|
|
57
81
|
autoload :StructTreeRoot, "pdfrb/model/type/struct_tree_root"
|
|
58
82
|
autoload :StructElem, "pdfrb/model/type/struct_elem"
|
|
59
83
|
|
|
60
|
-
#
|
|
84
|
+
# Additional base types (previously loaded via require in pdfrb.rb;
|
|
85
|
+
# now autoloaded per project rule).
|
|
86
|
+
autoload :MarkInformation, "pdfrb/model/type/mark_information"
|
|
87
|
+
autoload :IconFit, "pdfrb/model/type/icon_fit"
|
|
88
|
+
autoload :PageLabel, "pdfrb/model/type/page_label"
|
|
89
|
+
autoload :BorderStyling, "pdfrb/model/type/border_styling"
|
|
90
|
+
autoload :BorderEffect, "pdfrb/model/type/border_effect"
|
|
91
|
+
autoload :LineEndingStyling, "pdfrb/model/type/line_ending_styling"
|
|
92
|
+
autoload :InteriorColor, "pdfrb/model/type/interior_color"
|
|
93
|
+
autoload :ObjectReference, "pdfrb/model/type/object_reference"
|
|
94
|
+
autoload :SquareCircle, "pdfrb/model/type/square_circle"
|
|
95
|
+
autoload :VariableTextField, "pdfrb/model/type/variable_text_field"
|
|
96
|
+
autoload :DocumentSecurityStore, "pdfrb/model/type/document_security_store"
|
|
97
|
+
autoload :Measure, "pdfrb/model/type/measure"
|
|
98
|
+
autoload :OptionalContentConfiguration, "pdfrb/model/type/optional_content_config"
|
|
99
|
+
autoload :MarkedContentReference, "pdfrb/model/type/marked_content_reference"
|
|
100
|
+
autoload :AppearanceGenerator, "pdfrb/model/type/appearance_generator"
|
|
101
|
+
autoload :Field, "pdfrb/model/type/form_field"
|
|
102
|
+
autoload :TextField, "pdfrb/model/type/text_field"
|
|
103
|
+
autoload :Button, "pdfrb/model/type/button"
|
|
104
|
+
autoload :Choice, "pdfrb/model/type/choice"
|
|
105
|
+
autoload :SignatureField, "pdfrb/model/type/signature_field"
|
|
106
|
+
autoload :ViewerPreferences, "pdfrb/model/type/viewer_preferences"
|
|
107
|
+
autoload :FontMultipleMaster, "pdfrb/model/type/font_multiple_master"
|
|
108
|
+
autoload :CharProcMap, "pdfrb/model/type/font_multiple_master"
|
|
109
|
+
autoload :FontEncoding, "pdfrb/model/type/font_encoding"
|
|
110
|
+
autoload :CIDFontDescriptorMetrics, "pdfrb/model/type/cid_font_descriptor_metrics"
|
|
111
|
+
autoload :FontCIDType0, "pdfrb/model/type/font_cid_type0"
|
|
112
|
+
autoload :FontCIDType2, "pdfrb/model/type/font_cid_type2"
|
|
113
|
+
autoload :FontDescriptorCIDType0, "pdfrb/model/type/font_descriptor_cid_type0"
|
|
114
|
+
autoload :FontDescriptorCIDType2, "pdfrb/model/type/font_descriptor_cid_type2"
|
|
115
|
+
autoload :ToUnicodeCMapStream, "pdfrb/model/type/to_unicode_cmap_stream"
|
|
61
116
|
autoload :XObjectForm, "pdfrb/model/type/xobject_form"
|
|
62
117
|
autoload :XObjectImage, "pdfrb/model/type/xobject_image"
|
|
63
118
|
|
|
119
|
+
# Function family (s8.9).
|
|
120
|
+
autoload :Function, "pdfrb/model/type/function"
|
|
121
|
+
autoload :FunctionExponential, "pdfrb/model/type/function_exponential"
|
|
122
|
+
autoload :FunctionStitching, "pdfrb/model/type/function_stitching"
|
|
123
|
+
autoload :FunctionSampled, "pdfrb/model/type/function_sampled"
|
|
124
|
+
autoload :FunctionPostScript, "pdfrb/model/type/function_postscript"
|
|
125
|
+
|
|
126
|
+
# Halftone family (s8.7.4).
|
|
127
|
+
autoload :Halftone, "pdfrb/model/type/halftone"
|
|
128
|
+
autoload :HalftoneType1, "pdfrb/model/type/halftone_type1"
|
|
129
|
+
autoload :HalftoneType5, "pdfrb/model/type/halftone_type5"
|
|
130
|
+
autoload :HalftoneType6, "pdfrb/model/type/halftone_type6"
|
|
131
|
+
autoload :HalftoneType10, "pdfrb/model/type/halftone_type10"
|
|
132
|
+
autoload :HalftoneType16, "pdfrb/model/type/halftone_type16"
|
|
133
|
+
|
|
134
|
+
# Media (s13.3-4). Legacy media types retained for round-trip.
|
|
135
|
+
autoload :Movie, "pdfrb/model/type/movie"
|
|
136
|
+
autoload :Sound, "pdfrb/model/type/sound"
|
|
137
|
+
|
|
138
|
+
# Color space dicts (s8.6).
|
|
139
|
+
autoload :CalGray, "pdfrb/model/type/cal_gray"
|
|
140
|
+
autoload :CalRGB, "pdfrb/model/type/cal_rgb"
|
|
141
|
+
autoload :Lab, "pdfrb/model/type/lab"
|
|
142
|
+
autoload :Indexed, "pdfrb/model/type/indexed"
|
|
143
|
+
autoload :Separation, "pdfrb/model/type/separation"
|
|
144
|
+
autoload :DeviceN, "pdfrb/model/type/device_n"
|
|
145
|
+
autoload :DeviceNMixingHints, "pdfrb/model/type/device_n_mixing_hints"
|
|
146
|
+
autoload :DeviceNProcess, "pdfrb/model/type/device_n_process"
|
|
147
|
+
autoload :ICCBasedColorSpace, "pdfrb/model/type/icc_based_color_space"
|
|
148
|
+
|
|
149
|
+
# Pattern family (s8.7).
|
|
150
|
+
autoload :Pattern, "pdfrb/model/type/pattern"
|
|
151
|
+
autoload :PatternTiling, "pdfrb/model/type/pattern_tiling"
|
|
152
|
+
autoload :PatternShading, "pdfrb/model/type/pattern_shading"
|
|
153
|
+
|
|
64
154
|
# Font family.
|
|
65
155
|
autoload :Font, "pdfrb/model/type/font"
|
|
66
156
|
autoload :FontType1, "pdfrb/model/type/font_type1"
|
|
@@ -68,11 +158,201 @@ module Pdfrb
|
|
|
68
158
|
autoload :FontType0, "pdfrb/model/type/font_type0"
|
|
69
159
|
autoload :FontType3, "pdfrb/model/type/font_type3"
|
|
70
160
|
autoload :CIDFont, "pdfrb/model/type/cid_font"
|
|
161
|
+
autoload :CIDSystemInfo, "pdfrb/model/type/cid_system_info"
|
|
162
|
+
autoload :CIDFontDescriptorMetrics, "pdfrb/model/type/cid_font_descriptor_metrics"
|
|
163
|
+
autoload :FontCIDType0, "pdfrb/model/type/font_cid_type0"
|
|
164
|
+
autoload :FontCIDType2, "pdfrb/model/type/font_cid_type2"
|
|
71
165
|
autoload :FontDescriptor, "pdfrb/model/type/font_descriptor"
|
|
166
|
+
autoload :FontDescriptorCIDType0, "pdfrb/model/type/font_descriptor_cid_type0"
|
|
167
|
+
autoload :FontDescriptorCIDType2, "pdfrb/model/type/font_descriptor_cid_type2"
|
|
168
|
+
autoload :FontMultipleMaster, "pdfrb/model/type/font_multiple_master"
|
|
169
|
+
autoload :CharProcMap, "pdfrb/model/type/font_multiple_master"
|
|
170
|
+
autoload :FontEncoding, "pdfrb/model/type/font_encoding"
|
|
171
|
+
autoload :ToUnicodeCMapStream, "pdfrb/model/type/to_unicode_cmap_stream"
|
|
172
|
+
autoload :FontFile, "pdfrb/model/type/font_file"
|
|
173
|
+
autoload :FontFile2, "pdfrb/model/type/font_file2"
|
|
174
|
+
autoload :FontFile3, "pdfrb/model/type/font_file3"
|
|
72
175
|
|
|
73
|
-
# Annotation
|
|
176
|
+
# Annotation family.
|
|
74
177
|
autoload :Annotation, "pdfrb/model/type/annotation"
|
|
178
|
+
autoload :MarkupAnnotation, "pdfrb/model/type/markup_annotation"
|
|
179
|
+
autoload :WidgetAnnotation, "pdfrb/model/type/widget_annotation"
|
|
180
|
+
autoload :LinkAnnotation, "pdfrb/model/type/link_annotation"
|
|
181
|
+
autoload :TextAnnotation, "pdfrb/model/type/text_annotation"
|
|
182
|
+
autoload :FreeTextAnnotation, "pdfrb/model/type/free_text_annotation"
|
|
183
|
+
autoload :StampAnnotation, "pdfrb/model/type/stamp_annotation"
|
|
184
|
+
autoload :SquareAnnotation, "pdfrb/model/type/square_annotation"
|
|
185
|
+
autoload :CircleAnnotation, "pdfrb/model/type/circle_annotation"
|
|
186
|
+
autoload :LineAnnotation, "pdfrb/model/type/line_annotation"
|
|
187
|
+
autoload :PolygonAnnotation, "pdfrb/model/type/polygon_annotation"
|
|
188
|
+
autoload :PolylineAnnotation, "pdfrb/model/type/polyline_annotation"
|
|
189
|
+
autoload :InkAnnotation, "pdfrb/model/type/ink_annotation"
|
|
190
|
+
autoload :TextMarkupAnnotation, "pdfrb/model/type/text_markup_annotation"
|
|
191
|
+
autoload :HighlightAnnotation, "pdfrb/model/type/highlight_annotation"
|
|
192
|
+
autoload :UnderlineAnnotation, "pdfrb/model/type/underline_annotation"
|
|
193
|
+
autoload :SquigglyAnnotation, "pdfrb/model/type/squiggly_annotation"
|
|
194
|
+
autoload :StrikeOutAnnotation, "pdfrb/model/type/strikeout_annotation"
|
|
195
|
+
autoload :PopupAnnotation, "pdfrb/model/type/popup_annotation"
|
|
196
|
+
autoload :FileAttachmentAnnotation, "pdfrb/model/type/file_attachment_annotation"
|
|
197
|
+
autoload :CaretAnnotation, "pdfrb/model/type/caret_annotation"
|
|
198
|
+
autoload :RedactAnnotation, "pdfrb/model/type/redact_annotation"
|
|
199
|
+
autoload :WatermarkAnnotation, "pdfrb/model/type/watermark_annotation"
|
|
200
|
+
autoload :PrinterMarkAnnotation, "pdfrb/model/type/printer_mark_annotation"
|
|
201
|
+
autoload :PrinterMarkSubDict, "pdfrb/model/type/transition"
|
|
202
|
+
autoload :ScreenAnnotation, "pdfrb/model/type/screen_annotation"
|
|
203
|
+
autoload :SoundAnnotation, "pdfrb/model/type/sound_annotation"
|
|
204
|
+
|
|
205
|
+
# Rich Media annotation family (s13.6).
|
|
206
|
+
autoload :RichMediaAnnotation, "pdfrb/model/type/rich_media_annotation"
|
|
207
|
+
autoload :RichMediaActivation, "pdfrb/model/type/rich_media_activation"
|
|
208
|
+
autoload :RichMediaDeactivation, "pdfrb/model/type/rich_media_deactivation"
|
|
209
|
+
autoload :RichMediaConfiguration, "pdfrb/model/type/rich_media_configuration"
|
|
210
|
+
autoload :RichMediaInstance, "pdfrb/model/type/rich_media_instance"
|
|
211
|
+
autoload :RichMediaCommand, "pdfrb/model/type/rich_media_command"
|
|
212
|
+
autoload :RichMediaContent, "pdfrb/model/type/rich_media_content"
|
|
213
|
+
autoload :RichMediaCuePoint, "pdfrb/model/type/rich_media_cue_point"
|
|
214
|
+
autoload :RichMediaAnimation, "pdfrb/model/type/rich_media_animation"
|
|
215
|
+
autoload :RichMediaWindow, "pdfrb/model/type/rich_media_window"
|
|
216
|
+
autoload :RichMediaSettings, "pdfrb/model/type/rich_media_settings"
|
|
217
|
+
autoload :RichMediaPresentation, "pdfrb/model/type/rich_media_presentation"
|
|
218
|
+
|
|
219
|
+
# 3D family (s13.6).
|
|
220
|
+
autoload :ThreeDStream, "pdfrb/model/type/three_d_stream"
|
|
221
|
+
autoload :ThreeDView, "pdfrb/model/type/three_d_view"
|
|
222
|
+
autoload :ThreeDAnimationStyle, "pdfrb/model/type/three_d_animation_style"
|
|
223
|
+
autoload :ThreeDBackground, "pdfrb/model/type/three_d_background"
|
|
224
|
+
autoload :ThreeDLightingScheme, "pdfrb/model/type/three_d_lighting_scheme"
|
|
225
|
+
autoload :ThreeDRenderMode, "pdfrb/model/type/three_d_render_mode"
|
|
226
|
+
autoload :ThreeDCrossSection, "pdfrb/model/type/three_d_cross_section"
|
|
227
|
+
autoload :ThreeDNode, "pdfrb/model/type/three_d_node"
|
|
228
|
+
autoload :ThreeDUnits, "pdfrb/model/type/three_d_units"
|
|
229
|
+
autoload :ThreeDReference, "pdfrb/model/type/three_d_reference"
|
|
230
|
+
autoload :ThreeDActivation, "pdfrb/model/type/three_d_activation"
|
|
231
|
+
|
|
232
|
+
# 3D Measure family (s13.6.4).
|
|
233
|
+
autoload :ThreeDMeasure, "pdfrb/model/type/three_d_measure"
|
|
234
|
+
autoload :ThreeDMeasure3DC, "pdfrb/model/type/three_d_measure_3dc"
|
|
235
|
+
autoload :ThreeDMeasurePD3, "pdfrb/model/type/three_d_measure_pd3"
|
|
236
|
+
autoload :ThreeDMeasureLD3, "pdfrb/model/type/three_d_measure_ld3"
|
|
237
|
+
autoload :ThreeDMeasureRD3, "pdfrb/model/type/three_d_measure_rd3"
|
|
238
|
+
autoload :ThreeDMeasureAD3, "pdfrb/model/type/three_d_measure_ad3"
|
|
239
|
+
|
|
240
|
+
# Transition + 3D markup + geolocation.
|
|
241
|
+
autoload :Transition, "pdfrb/model/type/transition"
|
|
242
|
+
autoload :ExData3DMarkup, "pdfrb/model/type/transition"
|
|
243
|
+
autoload :ExDataMarkupGeo, "pdfrb/model/type/transition"
|
|
244
|
+
|
|
245
|
+
# Appearance generators (one per file).
|
|
246
|
+
autoload :GenericAppearance, "pdfrb/model/type/generic_appearance"
|
|
247
|
+
autoload :WidgetAppearance, "pdfrb/model/type/widget_appearance"
|
|
248
|
+
autoload :TextAppearance, "pdfrb/model/type/text_appearance"
|
|
249
|
+
autoload :LinkAppearance, "pdfrb/model/type/link_appearance"
|
|
250
|
+
|
|
251
|
+
# Action family (s12.6.4).
|
|
75
252
|
autoload :Action, "pdfrb/model/type/action"
|
|
253
|
+
autoload :ActionGoTo, "pdfrb/model/type/action_goto"
|
|
254
|
+
autoload :ActionGoToR, "pdfrb/model/type/action_go_to_r"
|
|
255
|
+
autoload :ActionURI, "pdfrb/model/type/action_uri"
|
|
256
|
+
autoload :ActionJavaScript, "pdfrb/model/type/action_java_script"
|
|
257
|
+
autoload :ActionLaunch, "pdfrb/model/type/action_launch"
|
|
258
|
+
autoload :ActionSetOCGState, "pdfrb/model/type/action_set_ocg_state"
|
|
259
|
+
autoload :ActionHide, "pdfrb/model/type/action_hide"
|
|
260
|
+
autoload :ActionSubmitForm, "pdfrb/model/type/action_submit_form"
|
|
261
|
+
autoload :ActionResetForm, "pdfrb/model/type/action_reset_form"
|
|
262
|
+
autoload :ActionImportData, "pdfrb/model/type/action_import_data"
|
|
263
|
+
autoload :ActionTrans, "pdfrb/model/type/action_trans"
|
|
264
|
+
autoload :ActionNamed, "pdfrb/model/type/action_named"
|
|
265
|
+
autoload :ActionRendition, "pdfrb/model/type/action_rendition"
|
|
266
|
+
autoload :ActionMovie, "pdfrb/model/type/action_movie"
|
|
267
|
+
autoload :ActionSoundAction, "pdfrb/model/type/action_sound_action"
|
|
268
|
+
autoload :ActionSetState, "pdfrb/model/type/action_set_state"
|
|
269
|
+
autoload :ActionThread, "pdfrb/model/type/action_thread"
|
|
270
|
+
autoload :ActionGoTo3DView, "pdfrb/model/type/action_go_to_3d_view"
|
|
271
|
+
autoload :ActionGoToDp, "pdfrb/model/type/action_go_to_dp"
|
|
272
|
+
autoload :ActionRichMediaExecute, "pdfrb/model/type/action_rich_media_execute"
|
|
273
|
+
autoload :ActionNOP, "pdfrb/model/type/action_nop"
|
|
274
|
+
|
|
275
|
+
# Signature family (s12.8).
|
|
276
|
+
autoload :Signature, "pdfrb/model/type/signature"
|
|
277
|
+
autoload :SigFieldLock, "pdfrb/model/type/sig_field_lock"
|
|
278
|
+
autoload :SigFieldSeedValue, "pdfrb/model/type/sig_field_seed_value"
|
|
279
|
+
autoload :DocMDPTransformParameters, "pdfrb/model/type/doc_mdp_transform_parameters"
|
|
280
|
+
|
|
281
|
+
# Appearance + Media (s12.5.5, s13.3).
|
|
282
|
+
autoload :Appearance, "pdfrb/model/type/appearance"
|
|
283
|
+
autoload :AppearanceCharacteristics, "pdfrb/model/type/appearance_characteristics"
|
|
284
|
+
autoload :AppearanceTrapNet, "pdfrb/model/type/appearance_trap_net"
|
|
285
|
+
autoload :AppearanceTrapNetSubDict, "pdfrb/model/type/appearance_trap_net"
|
|
286
|
+
autoload :AppearanceSubDict, "pdfrb/model/type/appearance_trap_net"
|
|
287
|
+
autoload :MediaClip, "pdfrb/model/type/media_clip"
|
|
288
|
+
autoload :Rendition, "pdfrb/model/type/rendition"
|
|
289
|
+
autoload :ExDataProjection, "pdfrb/model/type/appearance_trap_net"
|
|
290
|
+
autoload :AnnotationProjectionDict, "pdfrb/model/type/appearance_trap_net"
|
|
291
|
+
|
|
292
|
+
# Media offset / player / screen types.
|
|
293
|
+
autoload :MediaOffsetTime, "pdfrb/model/type/media_offset"
|
|
294
|
+
autoload :MediaOffsetFrame, "pdfrb/model/type/media_offset"
|
|
295
|
+
autoload :MediaOffsetMarker, "pdfrb/model/type/media_offset"
|
|
296
|
+
autoload :MediaPlayerInfo, "pdfrb/model/type/media_offset"
|
|
297
|
+
autoload :MediaPlayers, "pdfrb/model/type/media_offset"
|
|
298
|
+
autoload :MediaScreenParameters, "pdfrb/model/type/media_offset"
|
|
299
|
+
autoload :MediaCriteria, "pdfrb/model/type/media_offset"
|
|
300
|
+
autoload :SoftwareIdentifier, "pdfrb/model/type/software_identifier"
|
|
301
|
+
|
|
302
|
+
# Misc small helpers (one per file).
|
|
303
|
+
autoload :BorderArray, "pdfrb/model/type/misc_helpers"
|
|
304
|
+
autoload :LabRangeArray, "pdfrb/model/type/misc_helpers"
|
|
305
|
+
autoload :DestOutputProfileRef, "pdfrb/model/type/misc_helpers"
|
|
306
|
+
autoload :OutputIntentsContainer, "pdfrb/model/type/misc_helpers"
|
|
307
|
+
autoload :CMapStream, "pdfrb/model/type/misc_helpers"
|
|
308
|
+
|
|
309
|
+
# Crypt filter (s7.6.5).
|
|
310
|
+
autoload :CryptFilter, "pdfrb/model/type/crypt_filter"
|
|
311
|
+
autoload :CryptFilterMap, "pdfrb/model/type/crypt_filter"
|
|
312
|
+
autoload :CryptFilterPublicKey, "pdfrb/model/type/crypt_filter"
|
|
313
|
+
autoload :CryptFilterPublicKeyMap, "pdfrb/model/type/crypt_filter"
|
|
314
|
+
|
|
315
|
+
# Signature build data.
|
|
316
|
+
autoload :SignatureBuildPropDict, "pdfrb/model/type/appearance_trap_net"
|
|
317
|
+
autoload :SignatureBuildDataDict, "pdfrb/model/type/signature_build"
|
|
318
|
+
autoload :SignatureBuildDataAppDict, "pdfrb/model/type/signature_build"
|
|
319
|
+
autoload :SignatureBuildDataSigQDict, "pdfrb/model/type/signature_build"
|
|
320
|
+
autoload :SignatureReferenceDocMDP, "pdfrb/model/type/signature_build"
|
|
321
|
+
autoload :SignatureReferenceIdentity, "pdfrb/model/type/signature_build"
|
|
322
|
+
autoload :SignatureReferenceUR, "pdfrb/model/type/signature_build"
|
|
323
|
+
autoload :SignatureReferenceFieldMDP, "pdfrb/model/type/signature_build"
|
|
324
|
+
|
|
325
|
+
# Page box color info (s7.7.3.3).
|
|
326
|
+
autoload :BoxColorInfo, "pdfrb/model/type/box_color_info"
|
|
327
|
+
autoload :BoxStyle, "pdfrb/model/type/box_style"
|
|
328
|
+
|
|
329
|
+
# Collection / Portfolio (s7.11.5).
|
|
330
|
+
autoload :Collection, "pdfrb/model/type/collection"
|
|
331
|
+
autoload :CollectionSchema, "pdfrb/model/type/collection_schema"
|
|
332
|
+
autoload :CollectionSort, "pdfrb/model/type/collection_sort"
|
|
333
|
+
autoload :CollectionField, "pdfrb/model/type/collection_field"
|
|
334
|
+
autoload :CollectionItem, "pdfrb/model/type/collection_item"
|
|
335
|
+
|
|
336
|
+
# Signature transform parameters (s12.8.2).
|
|
337
|
+
autoload :MDPDict, "pdfrb/model/type/mdp_dict"
|
|
338
|
+
autoload :FieldMDPTransformParameters, "pdfrb/model/type/field_mdp_transform_parameters"
|
|
339
|
+
autoload :URTransformParameters, "pdfrb/model/type/ur_transform_parameters"
|
|
340
|
+
|
|
341
|
+
# Embedded file params + misc globals.
|
|
342
|
+
autoload :EmbeddedFileParameter, "pdfrb/model/type/embedded_file_parameter"
|
|
343
|
+
autoload :JBIG2Globals, "pdfrb/model/type/jbig2_globals"
|
|
344
|
+
autoload :URLAlias, "pdfrb/model/type/url_alias"
|
|
345
|
+
autoload :URIDict, "pdfrb/model/type/uri_dict"
|
|
346
|
+
|
|
347
|
+
autoload :Field, "pdfrb/model/type/form_field"
|
|
348
|
+
autoload :TextField, "pdfrb/model/type/text_field"
|
|
349
|
+
autoload :Button, "pdfrb/model/type/button"
|
|
350
|
+
autoload :Choice, "pdfrb/model/type/choice"
|
|
351
|
+
autoload :SignatureField, "pdfrb/model/type/signature_field"
|
|
352
|
+
|
|
353
|
+
# Structure types (s14.7).
|
|
354
|
+
autoload :StructureAttributes, "pdfrb/model/type/structure_attributes"
|
|
355
|
+
autoload :StructureElementKid, "pdfrb/model/type/structure_element_kid"
|
|
76
356
|
end
|
|
77
357
|
end
|
|
78
358
|
end
|
data/lib/pdfrb/serializer.rb
CHANGED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "benchmark"
|
|
4
|
+
require "stringio"
|
|
5
|
+
|
|
6
|
+
module Pdfrb
|
|
7
|
+
module Task
|
|
8
|
+
# Performance benchmarks for parsing, serialization, and round-trip.
|
|
9
|
+
# Uses the corpus generator to produce test PDFs of various sizes,
|
|
10
|
+
# then measures throughput.
|
|
11
|
+
#
|
|
12
|
+
# Usage:
|
|
13
|
+
# Pdfrb::Task::Benchmark.run
|
|
14
|
+
# Pdfrb::Task::Benchmark.run(repetitions: 100)
|
|
15
|
+
class Benchmark
|
|
16
|
+
Result = Struct.new(:name, :repetitions, :total_seconds,
|
|
17
|
+
:ops_per_second, :bytes_per_op, keyword_init: true)
|
|
18
|
+
|
|
19
|
+
class << self
|
|
20
|
+
def run(repetitions: 50)
|
|
21
|
+
corpus = GenerateCorpus.all
|
|
22
|
+
results = []
|
|
23
|
+
|
|
24
|
+
corpus.each do |name, pdf_bytes|
|
|
25
|
+
next if pdf_bytes.empty?
|
|
26
|
+
|
|
27
|
+
r = bench_parse(name, pdf_bytes, repetitions)
|
|
28
|
+
results << r
|
|
29
|
+
puts format_result(r)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
bench_round_trip(results, repetitions)
|
|
33
|
+
results
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def bench_parse(name, pdf_bytes, repetitions)
|
|
37
|
+
io = StringIO.new(pdf_bytes)
|
|
38
|
+
elapsed = ::Benchmark.realtime do
|
|
39
|
+
repetitions.times do
|
|
40
|
+
io.rewind
|
|
41
|
+
Pdfrb::Document.new(io: StringIO.new(pdf_bytes))
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
Result.new(
|
|
46
|
+
name: "parse:#{name}",
|
|
47
|
+
repetitions: repetitions,
|
|
48
|
+
total_seconds: elapsed,
|
|
49
|
+
ops_per_second: repetitions / elapsed,
|
|
50
|
+
bytes_per_op: pdf_bytes.bytesize
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def bench_serialize(name, pdf_bytes, repetitions)
|
|
55
|
+
doc = Pdfrb::Document.new(io: StringIO.new(pdf_bytes))
|
|
56
|
+
elapsed = ::Benchmark.realtime do
|
|
57
|
+
repetitions.times do
|
|
58
|
+
StringIO.new.tap { |io| doc.write(io: io) }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
Result.new(
|
|
63
|
+
name: "serialize:#{name}",
|
|
64
|
+
repetitions: repetitions,
|
|
65
|
+
total_seconds: elapsed,
|
|
66
|
+
ops_per_second: repetitions / elapsed,
|
|
67
|
+
bytes_per_op: pdf_bytes.bytesize
|
|
68
|
+
)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def bench_round_trip(_results, _repetitions)
|
|
72
|
+
nil
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def format_result(result)
|
|
76
|
+
format("%-25s %6.1f ops/s %7.1f KB/op %6.3fs total",
|
|
77
|
+
result.name, result.ops_per_second,
|
|
78
|
+
result.bytes_per_op / 1024.0, result.total_seconds)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -161,7 +161,7 @@ module Pdfrb
|
|
|
161
161
|
def parse_tounicode(ref)
|
|
162
162
|
return nil unless ref
|
|
163
163
|
|
|
164
|
-
doc = @font_dict.
|
|
164
|
+
doc = @font_dict.is_a?(Pdfrb::Model::Cos::Dictionary) ? @font_dict.document : nil
|
|
165
165
|
stream = if ref.is_a?(Pdfrb::Model::Reference) && doc
|
|
166
166
|
doc.object(ref)
|
|
167
167
|
else
|