Module: Pdfrb::Task::ExtractImages
- Defined in:
- lib/pdfrb/task/extract_images.rb
Overview
Walk each page's /Resources/XObject for Image XObjects and yield (page, name, image_stream). Returns a flat list when no block.
Defined Under Namespace
Classes: ImageInfo
Class Method Summary collapse
Class Method Details
.call(document) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/pdfrb/task/extract_images.rb', line 13 def call(document) results = [] document.pages.each_with_index do |page, idx| xobjects = xobject_map(page, document) xobjects&.each do |name, ref| stream = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref next unless stream.is_a?(Pdfrb::Model::Cos::Stream) next unless stream.value[:Subtype] == :Image info = ImageInfo.new( page_index: idx, name: name.to_s, stream: stream, width: stream.value[:Width], height: stream.value[:Height], filter: stream.value[:Filter] ) block_given? ? yield(info) : (results << info) end end block_given? ? document : results end |
.xobject_map(page, document) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/pdfrb/task/extract_images.rb', line 37 def xobject_map(page, document) # /Resources can be inheritable from a parent Pages node. resources = page.value[:Resources] if resources.nil? parent_ref = page.value[:Parent] parent = parent_ref && document.object(parent_ref) resources = parent&.value&.dig(:Resources) if parent end return nil unless resources resources = resources.value if resources.is_a?(Pdfrb::Model::Cos::Dictionary) resources[:XObject] end |