mirror of
https://github.com/qpdf/qpdf.git
synced 2024-06-03 19:00:51 +00:00
f78ea057ca
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.
102 lines
3.4 KiB
C++
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
|