2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-06-03 19:00:51 +00:00
qpdf/include/qpdf/QPDFAnnotationObjectHelper.hh
Jay Berkenbilt f78ea057ca Switch annotation flattening to use the form xobjects
Instead of directly putting the contents of the annotation appearance
streams into the page's content stream, add commands to render the
form xobjects directly. This is a more robust way to do it than the
original solution as it works properly with patterns and avoids
problems with resource name clashes between the pages and the form
xobjects.
2019-01-02 21:49:47 -05:00

102 lines
3.4 KiB
C++

// Copyright (c) 2005-2018 Jay Berkenbilt
//
// This file is part of qpdf.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Versions of qpdf prior to version 7 were released under the terms
// of version 2.0 of the Artistic License. At your option, you may
// continue to consider qpdf to be licensed under those terms. Please
// see the manual for additional information.
#ifndef QPDFANNOTATIONOBJECTHELPER_HH
#define QPDFANNOTATIONOBJECTHELPER_HH
#include <qpdf/QPDFObjectHelper.hh>
#include <qpdf/DLL.h>
class QPDFAnnotationObjectHelper: public QPDFObjectHelper
{
public:
QPDF_DLL
QPDFAnnotationObjectHelper(QPDFObjectHandle);
QPDF_DLL
virtual ~QPDFAnnotationObjectHelper()
{
}
// This class provides helper methods for certain types of
// annotations. At its introduction, it only supports Widget
// annotations, but other types of annotations may be supported in
// the future. For additional information about interactive forms,
// please see the comments at the top of
// QPDFAcroFormDocumentHelper.hh.
// Return the subtype of the annotation as a string (e.g.
// "/Widget"). Returns the empty string if the subtype (which is
// required by the spec) is missing.
QPDF_DLL
std::string getSubtype();
QPDF_DLL
QPDFObjectHandle::Rectangle getRect();
QPDF_DLL
QPDFObjectHandle getAppearanceDictionary();
// Return the appearance state as given in "/AS", or the empty
// string if none is given.
QPDF_DLL
std::string getAppearanceState();
// Return a specific stream. "which" may be one of "/N", "/R", or
// "/D" to indicate the normal, rollover, or down appearance
// stream. (Any value may be passed to "which"; if an appearance
// stream of that name exists, it will be returned.) If the value
// associated with "which" in the appearance dictionary is a
// subdictionary, an appearance state may be specified to select
// which appearance stream is desired. If not specified, the
// appearance state in "/AS" will used.
QPDF_DLL
QPDFObjectHandle getAppearanceStream(std::string const& which,
std::string const& state = "");
// Generate text suitable for addition to the containing page's
// content stream that draws this annotation's appearance stream
// as a form XObject. The value "name" is the resource name that
// will be used to refer to the form xobject. The value "rotate"
// should be set to the page's /Rotate value or 0 if none.
QPDF_DLL
std::string getPageContentForAppearance(
std::string const& name, int rotate);
private:
class Members
{
friend class QPDFAnnotationObjectHelper;
public:
QPDF_DLL
~Members();
private:
Members();
Members(Members const&);
};
PointerHolder<Members> m;
};
#endif // QPDFANNOTATIONOBJECTHELPER_HH