diff --git a/lib/hexapdf/configuration.rb b/lib/hexapdf/configuration.rb index 2d791770..b6b2f62b 100644 --- a/lib/hexapdf/configuration.rb +++ b/lib/hexapdf/configuration.rb @@ -610,6 +610,7 @@ def constantize(name, *keys) PageLabel: 'HexaPDF::Type::PageLabel', XXMarkInformation: 'HexaPDF::Type::MarkInformation', OCG: 'HexaPDF::Type::OptionalContentGroup', + OCMD: 'HexaPDF::Type::OptionalContentMembership', XXOCUsage: 'HexaPDF::Type::OptionalContentGroup::OptionalContentUsage', XXOCUsageCreatorInfo: 'HexaPDF::Type::OptionalContentGroup::OptionalContentUsage::CreatorInfo', XXOCUsageLanguage: 'HexaPDF::Type::OptionalContentGroup::OptionalContentUsage::Language', diff --git a/lib/hexapdf/type.rb b/lib/hexapdf/type.rb index 49dc3941..86aedbd8 100644 --- a/lib/hexapdf/type.rb +++ b/lib/hexapdf/type.rb @@ -77,6 +77,7 @@ module Type autoload(:PageLabel, 'hexapdf/type/page_label') autoload(:MarkInformation, 'hexapdf/type/mark_information') autoload(:OptionalContentGroup, 'hexapdf/type/optional_content_group') + autoload(:OptionalContentMembership, 'hexapdf/type/optional_content_membership') end diff --git a/lib/hexapdf/type/optional_content_membership.rb b/lib/hexapdf/type/optional_content_membership.rb new file mode 100644 index 00000000..4431071c --- /dev/null +++ b/lib/hexapdf/type/optional_content_membership.rb @@ -0,0 +1,63 @@ +# -*- encoding: utf-8; frozen_string_literal: true -*- +# +#-- +# This file is part of HexaPDF. +# +# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby +# Copyright (C) 2014-2023 Thomas Leitner +# +# HexaPDF is free software: you can redistribute it and/or modify it +# under the terms of the GNU Affero General Public License version 3 as +# published by the Free Software Foundation with the addition of the +# following permission added to Section 15 as permitted in Section 7(a): +# FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY +# THOMAS LEITNER, THOMAS LEITNER DISCLAIMS THE WARRANTY OF NON +# INFRINGEMENT OF THIRD PARTY RIGHTS. +# +# HexaPDF is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public +# License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with HexaPDF. If not, see . +# +# The interactive user interfaces in modified source and object code +# versions of HexaPDF must display Appropriate Legal Notices, as required +# under Section 5 of the GNU Affero General Public License version 3. +# +# In accordance with Section 7(b) of the GNU Affero General Public +# License, a covered work must retain the producer line in every PDF that +# is created or manipulated using HexaPDF. +# +# If the GNU Affero General Public License doesn't fit your need, +# commercial licenses are available at . +#++ + +require 'hexapdf/dictionary' + +module HexaPDF + module Type + + # Represents an optional content membership dictionary. + # + # A membership dictionary allows more complex visibility policies, like: + # + # * Content that should be visible when a certain optional content group is off instead of on. + # * Content that should be visible when all of a number of OCGs are on. + # + # See: PDF2.0 s8.11.2.2 + class OptionalContentMembership < Dictionary + + define_type :OCMD + + define_field :Type, type: Symbol, required: true, default: type + define_field :OCGs, type: [:OCG, PDFArray] + define_field :P, type: Symbol, default: :AnyOn, + allowed_values: [:AllOn, :AnyOn, :AnyOff, :AllOff] + define_field :VE, type: PDFArray + + end + + end +end