Class: Pdfrb::Document::OutputIntents
- Inherits:
-
Object
- Object
- Pdfrb::Document::OutputIntents
- Defined in:
- lib/pdfrb/document/output_intents.rb
Overview
Output Intents facade. An output intent declares the intended output device color profile (ICC) so that downstream processors can render colors consistently. Required for PDF/X.
/OutputIntents is an array on the Catalog. Each entry has:
/Type /OutputIntent
/S /GTS_PDFA1 (for PDF/A) or /GTS_PDFX (for PDF/X)
/OutputConditionIdentifier — registry name (e.g. "FOGRA39")
/OutputCondition — human-readable description
/RegistryName — e.g. "http://www.color.org"
/DestOutputProfile — ICC profile stream reference
Instance Attribute Summary collapse
-
#document ⇒ Object
readonly
Returns the value of attribute document.
Instance Method Summary collapse
-
#add(icc_stream_ref, identifier:, condition: nil, registry: nil, subtype: :GTS_PDFX) ⇒ Pdfrb::Model::Cos::Dictionary
Add an output intent referencing an ICC profile stream.
- #count ⇒ Object
-
#each(&block) ⇒ Object
Enumerate output intents.
-
#embed_icc(icc_bytes, identifier:, condition: nil, registry: nil, subtype: :GTS_PDFX) ⇒ Object
Convenience: embed an ICC profile and register as output intent.
-
#initialize(document) ⇒ OutputIntents
constructor
A new instance of OutputIntents.
Constructor Details
#initialize(document) ⇒ OutputIntents
Returns a new instance of OutputIntents.
19 20 21 |
# File 'lib/pdfrb/document/output_intents.rb', line 19 def initialize(document) @document = document end |
Instance Attribute Details
#document ⇒ Object (readonly)
Returns the value of attribute document.
17 18 19 |
# File 'lib/pdfrb/document/output_intents.rb', line 17 def document @document end |
Instance Method Details
#add(icc_stream_ref, identifier:, condition: nil, registry: nil, subtype: :GTS_PDFX) ⇒ Pdfrb::Model::Cos::Dictionary
Add an output intent referencing an ICC profile stream.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/pdfrb/document/output_intents.rb', line 30 def add(icc_stream_ref, identifier:, condition: nil, registry: nil, subtype: :GTS_PDFX) intent = document.add( { Type: :OutputIntent, S: subtype, OutputConditionIdentifier: identifier, OutputCondition: condition, RegistryName: registry, DestOutputProfile: icc_stream_ref, }.compact, type: Pdfrb::Model::Cos::Dictionary ) catalog = document.catalog intents = catalog.value[:OutputIntents] ref = Pdfrb::Model::Reference.new(intent.oid, intent.gen) if intents.nil? catalog.value[:OutputIntents] = [ref] elsif intents.is_a?(::Array) intents << ref else catalog.value[:OutputIntents] = [intents, ref] end intent end |
#count ⇒ Object
83 84 85 86 87 88 |
# File 'lib/pdfrb/document/output_intents.rb', line 83 def count intents = document.catalog.value[:OutputIntents] return 0 unless intents intents.is_a?(::Array) ? intents.length : 1 end |
#each(&block) ⇒ Object
Enumerate output intents.
71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/pdfrb/document/output_intents.rb', line 71 def each(&block) intents = document.catalog.value[:OutputIntents] return enum_for(:each) unless block return self unless intents intents.each do |ref| obj = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref yield obj if obj end self end |
#embed_icc(icc_bytes, identifier:, condition: nil, registry: nil, subtype: :GTS_PDFX) ⇒ Object
Convenience: embed an ICC profile and register as output intent.
57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/pdfrb/document/output_intents.rb', line 57 def (icc_bytes, identifier:, condition: nil, registry: nil, subtype: :GTS_PDFX) profile = Pdfrb::Color::ICCProfile.new(icc_bytes) stream = document.add( { **profile.stream_dictionary_fields, Length: profile.raw_data.bytesize }, type: Pdfrb::Model::Cos::Stream ) stream.stream = profile.raw_data ref = Pdfrb::Model::Reference.new(stream.oid, stream.gen) add(ref, identifier: identifier, condition: condition, registry: registry, subtype: subtype) end |