| PdfAnnotation.h | | PdfAnnotation.h | |
| | | | |
| skipping to change at line 273 | | skipping to change at line 273 | |
| void SetFileAttachement( const PdfFileSpec & rFileSpec ); | | void SetFileAttachement( const PdfFileSpec & rFileSpec ); | |
| | | | |
| /** Get a file attachement of this annotation. | | /** Get a file attachement of this annotation. | |
| * \returns a file specification object. The file specification object
is owned | | * \returns a file specification object. The file specification object
is owned | |
| * by the PdfAnnotation. | | * by the PdfAnnotation. | |
| * | | * | |
| * \see SetFileAttachement | | * \see SetFileAttachement | |
| */ | | */ | |
| PdfFileSpec* GetFileAttachement() const; | | PdfFileSpec* GetFileAttachement() const; | |
| | | | |
|
| | | /** Get the quad points associated with the annotation (if appropriate) | |
| | | . | |
| | | * This array is used in text markup annotations to describe the | |
| | | * regions affected by the markup (i.e. the hilighted words, one | |
| | | * quadrilateral per word) | |
| | | * | |
| | | * \returns a PdfArray of 8xn numbers describing the | |
| | | * x,y coordinates of BL BR TR TL corners of the | |
| | | * quadrilaterals. If inappropriate, returns | |
| | | * an empty array. | |
| | | */ | |
| | | PdfArray GetQuadPoints() const; | |
| | | | |
| | | /** Set the quad points associated with the annotation (if appropriate) | |
| | | . | |
| | | * This array is used in text markup annotations to describe the | |
| | | * regions affected by the markup (i.e. the hilighted words, one | |
| | | * quadrilateral per word) | |
| | | * | |
| | | * \param rQuadPoints a PdfArray of 8xn numbers describing the | |
| | | * x,y coordinates of BL BR TR TL corners of the | |
| | | * quadrilaterals. | |
| | | */ | |
| | | void SetQuadPoints( const PdfArray & rQuadPoints ); | |
| | | | |
| | | /** Get the color key of the Annotation dictionary | |
| | | * which defines the color of the annotation, | |
| | | * as per 8.4 of the pdf spec. The PdfArray contains | |
| | | * 0 to four numbers, depending on the colorspace in | |
| | | * which the color is specified | |
| | | * 0 numbers means the annotation is transparent | |
| | | * 1 number specifies the intensity of the color in grayscale | |
| | | * 3 numbers specifie the color in the RGB colorspace and | |
| | | * 4 numbers specify the color in the CMYK colorspace | |
| | | * | |
| | | * \returns a PdfArray of either 0, 1, 3 or 4 numbers | |
| | | * depending on the colorspace in which the color | |
| | | * is specified | |
| | | */ | |
| | | | |
| | | PdfArray GetColor() const; | |
| | | | |
| | | /** Set the C key of the Annotation dictionary, which defines the | |
| | | * color of the annotation, as per 8.4 of the pdf spec. Parameters | |
| | | * give the color in rgb colorspace coordinates | |
| | | * | |
| | | * \param r number from 0 to 1, the intensity of the red channel | |
| | | * \param g number from 0 to 1, the intensity of the green channel | |
| | | * \param b number from 0 to 1, the intensity of the blue channel | |
| | | */ | |
| | | | |
| | | void SetColor( double r, double g, double b ); | |
| | | | |
| | | /** Set the C key of the Annotation dictionary, which defines the | |
| | | * color of the annotation, as per 8.4 of the pdf spec. Parameters | |
| | | * give the color in cmyk colorspace coordinates | |
| | | * | |
| | | * \param c number from 0 to 1, the intensity of the cyan channel | |
| | | * \param m number from 0 to 1, the intensity of the magneta channel | |
| | | * \param y number from 0 to 1, the intensity of the yellow channel | |
| | | * \param k number from 0 to 1, the intensity of the black channel | |
| | | */ | |
| | | | |
| | | void SetColor( double c, double m, double y, double k ); | |
| | | | |
| | | /** Set the C key of the Annotation dictionary, which defines the | |
| | | * color of the annotation, as per 8.4 of the pdf spec. Parameters | |
| | | * give the color in grayscale colorspace coordinates | |
| | | * | |
| | | * \param gray number from 0 to 1, the intensity of the black | |
| | | */ | |
| | | | |
| | | void SetColor( double gray ); | |
| | | | |
| | | /** Set the C key of the Annotation dictionary to an empty array, which | |
| | | , | |
| | | * as per 8.4 of the pdf spec., makes the annotation transparent | |
| | | * | |
| | | */ | |
| | | | |
| | | void SetColor(); | |
| | | | |
| /** Get the type of this annotation | | /** Get the type of this annotation | |
| * \returns the annotation type | | * \returns the annotation type | |
| */ | | */ | |
| inline EPdfAnnotation GetType() const; | | inline EPdfAnnotation GetType() const; | |
| | | | |
| /** Get the page of this PdfField | | /** Get the page of this PdfField | |
| * | | * | |
| * \returns the page of this PdfField | | * \returns the page of this PdfField | |
| */ | | */ | |
| inline PdfPage* GetPage() const; | | inline PdfPage* GetPage() const; | |
| | | | |
End of changes. 1 change blocks. |
| 0 lines changed or deleted | | 82 lines changed or added | |
|
| PdfArray.h | | PdfArray.h | |
| | | | |
| skipping to change at line 24 | | skipping to change at line 24 | |
| *
* | | *
* | |
| * You should have received a copy of the GNU Library General Public
* | | * You should have received a copy of the GNU Library General Public
* | |
| * License along with this program; if not, write to the
* | | * License along with this program; if not, write to the
* | |
| * Free Software Foundation, Inc.,
* | | * Free Software Foundation, Inc.,
* | |
| * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* | | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* | |
| **************************************************************************
*/ | | **************************************************************************
*/ | |
| | | | |
| #ifndef _PDF_ARRAY_H_ | | #ifndef _PDF_ARRAY_H_ | |
| #define _PDF_ARRAY_H_ | | #define _PDF_ARRAY_H_ | |
| | | | |
|
| | | #ifdef _WIN32 | |
| | | #ifdef _MSC_VER | |
| | | // IC: VS2008 suppress dll warning | |
| | | #pragma warning(disable: 4275) | |
| | | #endif // _MSC_VER | |
| | | #endif // _WIN32 | |
| | | | |
| #include "PdfDefines.h" | | #include "PdfDefines.h" | |
| #include "PdfDataType.h" | | #include "PdfDataType.h" | |
| #include "PdfObject.h" | | #include "PdfObject.h" | |
| | | | |
| namespace PoDoFo { | | namespace PoDoFo { | |
| | | | |
| /** This class represents a PdfArray | | /** This class represents a PdfArray | |
| * Use it for all arrays that are written to a PDF file. | | * Use it for all arrays that are written to a PDF file. | |
| * | | * | |
| * A PdfArray can hold any PdfVariant. | | * A PdfArray can hold any PdfVariant. | |
| * | | * | |
| * \see PdfVariant | | * \see PdfVariant | |
| */ | | */ | |
|
| class PODOFO_API PdfArray : public std::vector<PdfObject>, public PdfDataTy | | typedef std::vector<PdfObject> PdfArrayBaseClass; | |
| pe { | | | |
| | | class PODOFO_API PdfArray : private PdfArrayBaseClass, public PdfDataType { | |
| public: | | public: | |
|
| | | typedef PdfArrayBaseClass::iterator iterator; | |
| | | typedef PdfArrayBaseClass::const_iterator const_iterator; | |
| | | typedef PdfArrayBaseClass::reverse_iterator reverse_iterator; | |
| | | typedef PdfArrayBaseClass::const_reverse_iterator const_reverse_iterato | |
| | | r; | |
| | | | |
| /** Create an empty array | | /** Create an empty array | |
| */ | | */ | |
| PdfArray(); | | PdfArray(); | |
| | | | |
| /** Create an array and add one value to it. | | /** Create an array and add one value to it. | |
| * The value is copied. | | * The value is copied. | |
| * | | * | |
| * \param var add this object to the array. | | * \param var add this object to the array. | |
| */ | | */ | |
| | | | |
| skipping to change at line 92 | | skipping to change at line 105 | |
| */ | | */ | |
| bool ContainsString( const std::string& cmpString ) const; | | bool ContainsString( const std::string& cmpString ) const; | |
| | | | |
| /** Utility method to return the actual index in the | | /** Utility method to return the actual index in the | |
| * array which contains an object of ePdfDataType_String whose | | * array which contains an object of ePdfDataType_String whose | |
| * value is the passed string. | | * value is the passed string. | |
| * \param cmpString the string to compare against | | * \param cmpString the string to compare against | |
| * \returns true if success, false if not | | * \returns true if success, false if not | |
| */ | | */ | |
| size_t GetStringIndex( const std::string& cmpString ) const; | | size_t GetStringIndex( const std::string& cmpString ) const; | |
|
| | | | |
| | | /** Adds a PdfObject to the array | |
| | | * | |
| | | * \param var add a PdfObject to the array | |
| | | * | |
| | | * This will set the dirty flag of this object. | |
| | | * \see IsDirty | |
| | | */ | |
| | | inline void push_back( const PdfObject & var ); | |
| | | | |
| | | /** | |
| | | * \returns the size of the array | |
| | | */ | |
| | | inline size_t size() const; | |
| | | | |
| | | /** | |
| | | * \returns true if the array is empty. | |
| | | */ | |
| | | inline bool empty() const; | |
| | | | |
| | | inline PdfObject & operator[](size_type __n); | |
| | | inline const PdfObject & operator[](size_type __n) const; | |
| | | | |
| | | /** | |
| | | * Returns a read/write iterator that points to the first | |
| | | * element in the array. Iteration is done in ordinary | |
| | | * element order. | |
| | | */ | |
| | | inline iterator begin(); | |
| | | | |
| | | /** | |
| | | * Returns a read-only (constant) iterator that points to the | |
| | | * first element in the array. Iteration is done in ordinary | |
| | | * element order. | |
| | | */ | |
| | | inline const_iterator begin() const; | |
| | | | |
| | | /** | |
| | | * Returns a read/write iterator that points one past the last | |
| | | * element in the array. Iteration is done in ordinary | |
| | | * element order. | |
| | | */ | |
| | | inline iterator end(); | |
| | | | |
| | | /** | |
| | | * Returns a read-only (constant) iterator that points one past | |
| | | * the last element in the array. Iteration is done in | |
| | | * ordinary element order. | |
| | | */ | |
| | | inline const_iterator end() const; | |
| | | | |
| | | /** | |
| | | * Returns a read/write reverse iterator that points to the | |
| | | * last element in the array. Iteration is done in reverse | |
| | | * element order. | |
| | | */ | |
| | | inline reverse_iterator rbegin(); | |
| | | | |
| | | /** | |
| | | * Returns a read-only (constant) reverse iterator that points | |
| | | * to the last element in the array. Iteration is done in | |
| | | * reverse element order. | |
| | | */ | |
| | | inline const_reverse_iterator rbegin() const; | |
| | | | |
| | | /** | |
| | | * Returns a read/write reverse iterator that points to one | |
| | | * before the first element in the array. Iteration is done | |
| | | * in reverse element order. | |
| | | */ | |
| | | inline reverse_iterator rend(); | |
| | | | |
| | | /** | |
| | | * Returns a read-only (constant) reverse iterator that points | |
| | | * to one before the first element in the array. Iteration | |
| | | * is done in reverse element order. | |
| | | */ | |
| | | inline const_reverse_iterator rend() const; | |
| | | | |
| | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // workaround templa | |
| | | te-error in Visualstudio 6 | |
| | | inline void insert(iterator __position, | |
| | | iterator __first, | |
| | | iterator __last); | |
| | | #else | |
| | | template<typename _InputIterator> | |
| | | void insert(iterator __position, | |
| | | _InputIterator __first, | |
| | | _InputIterator __last); | |
| | | #endif | |
| | | | |
| | | inline PdfArray::iterator insert(iterator __position, const PdfObject & | |
| | | val ); | |
| | | | |
| | | inline void erase( iterator pos ); | |
| | | inline void erase( iterator first, iterator last ); | |
| | | | |
| | | inline void reserve(size_type __n); | |
| | | | |
| | | /** | |
| | | * \returns a read/write reference to the data at the first | |
| | | * element of the array. | |
| | | */ | |
| | | inline reference front(); | |
| | | | |
| | | /** | |
| | | * \returns a read-only (constant) reference to the data at the first | |
| | | * element of the array. | |
| | | */ | |
| | | inline const_reference front() const; | |
| | | | |
| | | /** | |
| | | * \returns a read/write reference to the data at the last | |
| | | * element of the array. | |
| | | */ | |
| | | inline reference back(); | |
| | | | |
| | | /** | |
| | | * \returns a read-only (constant) reference to the data at the | |
| | | * last element of the array. | |
| | | */ | |
| | | inline const_reference back() const; | |
| | | | |
| | | inline bool operator==( const PdfArray & rhs ) const; | |
| | | inline bool operator!=( const PdfArray & rhs ) const; | |
| | | | |
| | | /** The dirty flag is set if this variant | |
| | | * has been modified after construction. | |
| | | * | |
| | | * Usually the dirty flag is also set | |
| | | * if you call any non-const member function | |
| | | * as we cannot determine if you actually changed | |
| | | * something or not. | |
| | | * | |
| | | * \returns true if the value is dirty and has been | |
| | | * modified since construction | |
| | | */ | |
| | | virtual bool IsDirty() const; | |
| | | | |
| | | /** Sets the dirty flag of this PdfVariant | |
| | | * | |
| | | * \param bDirty true if this PdfVariant has been | |
| | | * modified from the outside | |
| | | * | |
| | | * \see IsDirty | |
| | | */ | |
| | | virtual void SetDirty( bool bDirty ); | |
| | | | |
| | | private: | |
| | | bool m_bDirty; ///< Indicates if this object was modified after | |
| | | construction | |
| | | | |
| }; | | }; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| void PdfArray::Clear() | | void PdfArray::Clear() | |
| { | | { | |
| this->clear(); | | this->clear(); | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| size_t PdfArray::GetSize() const | | size_t PdfArray::GetSize() const | |
| { | | { | |
| return this->size(); | | return this->size(); | |
| } | | } | |
| | | | |
|
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | void PdfArray::push_back( const PdfObject & var ) | |
| | | { | |
| | | PdfArrayBaseClass::push_back( var ); | |
| | | m_bDirty = true; | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | size_t PdfArray::size() const | |
| | | { | |
| | | return PdfArrayBaseClass::size(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | bool PdfArray::empty() const | |
| | | { | |
| | | return PdfArrayBaseClass::empty(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfObject& PdfArray::operator[](size_type __n) | |
| | | { | |
| | | m_bDirty = true; | |
| | | return PdfArrayBaseClass::operator[](__n); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | const PdfObject& PdfArray::operator[](size_type __n) const | |
| | | { | |
| | | return PdfArrayBaseClass::operator[](__n); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfArray::iterator PdfArray::begin() | |
| | | { | |
| | | return PdfArrayBaseClass::begin(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfArray::const_iterator PdfArray::begin() const | |
| | | { | |
| | | return PdfArrayBaseClass::begin(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfArray::iterator PdfArray::end() | |
| | | { | |
| | | return PdfArrayBaseClass::end(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfArray::const_iterator PdfArray::end() const | |
| | | { | |
| | | return PdfArrayBaseClass::end(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfArray::reverse_iterator PdfArray::rbegin() | |
| | | { | |
| | | return PdfArrayBaseClass::rbegin(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfArray::const_reverse_iterator PdfArray::rbegin() const | |
| | | { | |
| | | return PdfArrayBaseClass::rbegin(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfArray::reverse_iterator PdfArray::rend() | |
| | | { | |
| | | return PdfArrayBaseClass::rend(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfArray::const_reverse_iterator PdfArray::rend() const | |
| | | { | |
| | | return PdfArrayBaseClass::rend(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // workaround templa | |
| | | te-error in Visualstudio 6 | |
| | | void PdfArray::insert(PdfArray::iterator __position, | |
| | | PdfArray::iterator __first, | |
| | | PdfArray::iterator __last) | |
| | | #else | |
| | | template<typename _InputIterator> | |
| | | void PdfArray::insert(PdfArray::iterator __position, | |
| | | _InputIterator __first, | |
| | | _InputIterator __last) | |
| | | #endif | |
| | | { | |
| | | PdfArrayBaseClass::insert( __position, __first, __last ); | |
| | | m_bDirty = true; | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfArray::iterator PdfArray::insert(PdfArray::iterator __position, const Pd | |
| | | fObject & val ) | |
| | | { | |
| | | m_bDirty = true; | |
| | | return PdfArrayBaseClass::insert( __position, val ); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | void PdfArray::erase( iterator pos ) | |
| | | { | |
| | | PdfArrayBaseClass::erase( pos ); | |
| | | m_bDirty = true; | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | void PdfArray::erase( iterator first, iterator last ) | |
| | | { | |
| | | PdfArrayBaseClass::erase( first, last ); | |
| | | m_bDirty = true; | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | void PdfArray::reserve(size_type __n) | |
| | | { | |
| | | PdfArrayBaseClass::reserve( __n ); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfObject & PdfArray::front() | |
| | | { | |
| | | return PdfArrayBaseClass::front(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | const PdfObject & PdfArray::front() const | |
| | | { | |
| | | return PdfArrayBaseClass::front(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | PdfObject & PdfArray::back() | |
| | | { | |
| | | return PdfArrayBaseClass::back(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | const PdfObject & PdfArray::back() const | |
| | | { | |
| | | return PdfArrayBaseClass::back(); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | bool PdfArray::operator==( const PdfArray & rhs ) const | |
| | | { | |
| | | return (static_cast< PdfArrayBaseClass >(*this) == static_cast< PdfArra | |
| | | yBaseClass >(rhs) ); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | bool PdfArray::operator!=( const PdfArray & rhs ) const | |
| | | { | |
| | | return (static_cast< PdfArrayBaseClass >(*this) != static_cast< PdfArra | |
| | | yBaseClass >(rhs) ); | |
| | | } | |
| | | | |
| typedef PdfArray TVariantList; | | typedef PdfArray TVariantList; | |
| typedef PdfArray::iterator TIVariantList; | | typedef PdfArray::iterator TIVariantList; | |
| typedef PdfArray::const_iterator TCIVariantList; | | typedef PdfArray::const_iterator TCIVariantList; | |
| | | | |
| }; | | }; | |
| | | | |
| #endif // _PDF_ARRAY_H_ | | #endif // _PDF_ARRAY_H_ | |
| | | | |
End of changes. 5 change blocks. |
| 2 lines changed or deleted | | 378 lines changed or added | |
|
| PdfDefines.h | | PdfDefines.h | |
| | | | |
| skipping to change at line 32 | | skipping to change at line 32 | |
| #define _PDF_DEFINES_H_ | | #define _PDF_DEFINES_H_ | |
| | | | |
| /** \file PdfDefines.h | | /** \file PdfDefines.h | |
| * This file should be included as the FIRST file in every header of | | * This file should be included as the FIRST file in every header of | |
| * PoDoFo lib. It includes all standard files, defines some useful | | * PoDoFo lib. It includes all standard files, defines some useful | |
| * macros, some datatypes and all important enumeration types. On | | * macros, some datatypes and all important enumeration types. On | |
| * supporting platforms it will be precompiled to speed compilation. | | * supporting platforms it will be precompiled to speed compilation. | |
| */ | | */ | |
| | | | |
| #ifdef _MSC_VER | | #ifdef _MSC_VER | |
|
| | | #if _MSC_VER <= 1200 // Visual Studio 6 | |
| #pragma warning(disable: 4786) | | #pragma warning(disable: 4786) | |
| #pragma warning(disable: 4251) | | #pragma warning(disable: 4251) | |
|
| #endif | | #elif _MSC_VER <= 1400 // Visual Studio 2005 | |
| | | #pragma warning(disable: 4251) | |
| | | #pragma warning(disable: 4275) | |
| | | #endif // _MSC_VER | |
| | | #endif // _MSC_VER | |
| | | | |
| // Include common system files | | // Include common system files | |
| #include <cstdio> | | #include <cstdio> | |
| | | | |
| // Include common STL files | | // Include common STL files | |
| #include <map> | | #include <map> | |
| #include <string> | | #include <string> | |
| #include <vector> | | #include <vector> | |
| #include <set> | | #include <set> | |
| | | | |
| | | | |
| skipping to change at line 62 | | skipping to change at line 67 | |
| * more debuf output to the commandline from PoDoFo | | * more debuf output to the commandline from PoDoFo | |
| * | | * | |
| * Setting PDF_VERBOSE_DEBUG will make PoDoFo | | * Setting PDF_VERBOSE_DEBUG will make PoDoFo | |
| * EXTREMELY slow and verbose, so it's not practical | | * EXTREMELY slow and verbose, so it's not practical | |
| * even for regular debuggin. | | * even for regular debuggin. | |
| */ | | */ | |
| #ifndef PODOFO_VERBOSE_DEBUG | | #ifndef PODOFO_VERBOSE_DEBUG | |
| //#define PODOFO_VERBOSE_DEBUG | | //#define PODOFO_VERBOSE_DEBUG | |
| #endif //PODOFO_VERBOSE_DEBUG | | #endif //PODOFO_VERBOSE_DEBUG | |
| | | | |
|
| | | // Make sure that DEBUG is defined | |
| | | // for debug builds on Windows | |
| | | // as Visual Studio defines only _DEBUG | |
| | | #ifdef _DEBUG | |
| | | #ifndef DEBUG | |
| | | #define DEBUG 1 | |
| | | #endif // DEBUG | |
| | | #endif // _DEBUG | |
| | | | |
| #ifdef DEBUG | | #ifdef DEBUG | |
|
| | | #include <assert.h> | |
| #define PODOFO_ASSERT( x ) assert( x ); | | #define PODOFO_ASSERT( x ) assert( x ); | |
| #else | | #else | |
| #define PODOFO_ASSERT( x ) | | #define PODOFO_ASSERT( x ) | |
| #endif // DEBUG | | #endif // DEBUG | |
| | | | |
| // Should we do lots of extra (expensive) sanity checking? You should not | | // Should we do lots of extra (expensive) sanity checking? You should not | |
| // define this on production builds because of the runtime cost and because
it | | // define this on production builds because of the runtime cost and because
it | |
| // might cause the library to abort() if it notices something nasty. | | // might cause the library to abort() if it notices something nasty. | |
| // It may also change the size of some objects, and is thus not binary | | // It may also change the size of some objects, and is thus not binary | |
| // compatible. | | // compatible. | |
| | | | |
| skipping to change at line 133 | | skipping to change at line 148 | |
| ePdfVersion_1_0 = 0, /**< PDF 1.0 */ | | ePdfVersion_1_0 = 0, /**< PDF 1.0 */ | |
| ePdfVersion_1_1, /**< PDF 1.1 */ | | ePdfVersion_1_1, /**< PDF 1.1 */ | |
| ePdfVersion_1_2, /**< PDF 1.2 */ | | ePdfVersion_1_2, /**< PDF 1.2 */ | |
| ePdfVersion_1_3, /**< PDF 1.3 */ | | ePdfVersion_1_3, /**< PDF 1.3 */ | |
| ePdfVersion_1_4, /**< PDF 1.4 */ | | ePdfVersion_1_4, /**< PDF 1.4 */ | |
| ePdfVersion_1_5, /**< PDF 1.5 */ | | ePdfVersion_1_5, /**< PDF 1.5 */ | |
| ePdfVersion_1_6, /**< PDF 1.6 */ | | ePdfVersion_1_6, /**< PDF 1.6 */ | |
| ePdfVersion_1_7 /**< PDF 1.7 */ | | ePdfVersion_1_7 /**< PDF 1.7 */ | |
| }; | | }; | |
| | | | |
|
| | | /** The default PDF Version used by new PDF documents | |
| | | * in PoDoFo. | |
| | | */ | |
| | | const EPdfVersion ePdfVersion_Default = ePdfVersion_1_3; | |
| | | | |
| /** | | /** | |
| * Every PDF datatype that can occur in a PDF file | | * Every PDF datatype that can occur in a PDF file | |
| * is referenced by an own enum (e.g. Bool or String). | | * is referenced by an own enum (e.g. Bool or String). | |
| * | | * | |
| * \see PdfVariant | | * \see PdfVariant | |
| * | | * | |
| * Remember to update PdfVariant::GetDataTypeString() when adding members h
ere. | | * Remember to update PdfVariant::GetDataTypeString() when adding members h
ere. | |
| */ | | */ | |
| enum EPdfDataType { | | enum EPdfDataType { | |
| ePdfDataType_Bool, /**< Boolean datatype: Accepts the
values "true" and "false" */ | | ePdfDataType_Bool, /**< Boolean datatype: Accepts the
values "true" and "false" */ | |
| | | | |
| skipping to change at line 394 | | skipping to change at line 414 | |
| * \returns the maximum of x and y | | * \returns the maximum of x and y | |
| */ | | */ | |
| #define PDF_MAX(x,y) ((x)>(y)?(x):(y)) | | #define PDF_MAX(x,y) ((x)>(y)?(x):(y)) | |
| | | | |
| /** | | /** | |
| * \def PDF_MIN(x,y) | | * \def PDF_MIN(x,y) | |
| * \returns the minimum of x and y | | * \returns the minimum of x and y | |
| */ | | */ | |
| #define PDF_MIN(x,y) ((x)<(y)?(x):(y)) | | #define PDF_MIN(x,y) ((x)<(y)?(x):(y)) | |
| | | | |
|
| | | /** | |
| | | * \def PODOFO_UNUSED( x ) | |
| | | * Make a certain variable to be unused | |
| | | * in the code, without getting a compiler | |
| | | * warning. | |
| | | */ | |
| | | #ifndef _WIN32 | |
| | | template <typename T> | |
| | | inline void podofo_unused(T &t) { (void)t; } | |
| | | #define PODOFO_UNUSED( x ) podofo_unused( x ); | |
| | | #else | |
| | | #define PODOFO_UNUSED( x ) (void)x; | |
| | | #endif // _WIN32 | |
| /* | | /* | |
| This is needed to enable compilation with VC++ on Windows | | This is needed to enable compilation with VC++ on Windows | |
| */ | | */ | |
| #ifdef _MSC_VER | | #ifdef _MSC_VER | |
| #define snprintf _snprintf | | #define snprintf _snprintf | |
| #define vsnprintf _vsnprintf | | #define vsnprintf _vsnprintf | |
| #endif | | #endif | |
| | | | |
| /** | | /** | |
| * \mainpage | | * \mainpage | |
| | | | |
End of changes. 6 change blocks. |
| 1 lines changed or deleted | | 34 lines changed or added | |
|
| PdfDictionary.h | | PdfDictionary.h | |
| | | | |
| skipping to change at line 60 | | skipping to change at line 60 | |
| */ | | */ | |
| virtual ~PdfDictionary(); | | virtual ~PdfDictionary(); | |
| | | | |
| /** Asignment operator. | | /** Asignment operator. | |
| * Asign another PdfDictionary to this dictionary. This is a deep copy
; | | * Asign another PdfDictionary to this dictionary. This is a deep copy
; | |
| * all elements of the source dictionary are duplicated. | | * all elements of the source dictionary are duplicated. | |
| * | | * | |
| * \param rhs the PdfDictionary to copy. | | * \param rhs the PdfDictionary to copy. | |
| * | | * | |
| * \return this PdfDictionary | | * \return this PdfDictionary | |
|
| | | * | |
| | | * This will set the dirty flag of this object. | |
| | | * \see IsDirty | |
| */ | | */ | |
| const PdfDictionary & operator=( const PdfDictionary & rhs ); | | const PdfDictionary & operator=( const PdfDictionary & rhs ); | |
| | | | |
| /** | | /** | |
| * Comparison operator. If this dictionary contains all the same keys | | * Comparison operator. If this dictionary contains all the same keys | |
| * as the other dictionary, and for each key the values compare equal, | | * as the other dictionary, and for each key the values compare equal, | |
| * the dictionaries are considered equal. | | * the dictionaries are considered equal. | |
| */ | | */ | |
| bool operator==( const PdfDictionary& rhs ) const; | | bool operator==( const PdfDictionary& rhs ) const; | |
| | | | |
| | | | |
| skipping to change at line 85 | | skipping to change at line 88 | |
| /** Removes all keys from the dictionary | | /** Removes all keys from the dictionary | |
| */ | | */ | |
| void Clear(); | | void Clear(); | |
| | | | |
| /** Add a key to the dictionary. If an existing key of this name exists
, its | | /** Add a key to the dictionary. If an existing key of this name exists
, its | |
| * value is replaced and the old value object will be deleted. The pas
sed | | * value is replaced and the old value object will be deleted. The pas
sed | |
| * object is copied. | | * object is copied. | |
| * | | * | |
| * \param identifier the key is identified by this name in the diction
ary | | * \param identifier the key is identified by this name in the diction
ary | |
| * \param rObject a variant object containing the data. The object is
copied. | | * \param rObject a variant object containing the data. The object is
copied. | |
|
| | | * | |
| | | * This will set the dirty flag of this object. | |
| | | * \see IsDirty | |
| */ | | */ | |
| void AddKey( const PdfName & identifier, const PdfObject & rObject ); | | void AddKey( const PdfName & identifier, const PdfObject & rObject ); | |
| | | | |
| /** Add a key to the dictionary. If an existing key of this name exists
, | | /** Add a key to the dictionary. If an existing key of this name exists
, | |
| * its value is replaced and the old value object will be deleted. The | | * its value is replaced and the old value object will be deleted. The | |
| * passed object is copied. | | * passed object is copied. | |
| * | | * | |
| * This is an overloaded member function. | | * This is an overloaded member function. | |
| * | | * | |
| * \param identifier the key is identified by this name in the diction
ary | | * \param identifier the key is identified by this name in the diction
ary | |
| * \param rObject a variant object containing the data. The object is
copied. | | * \param rObject a variant object containing the data. The object is
copied. | |
|
| | | * | |
| | | * This will set the dirty flag of this object. | |
| | | * \see IsDirty | |
| */ | | */ | |
| void AddKey( const PdfName & identifier, const PdfObject* pObject ); | | void AddKey( const PdfName & identifier, const PdfObject* pObject ); | |
| | | | |
| /** Get the keys value out of the dictionary. | | /** Get the keys value out of the dictionary. | |
| * | | * | |
| * The returned value is a pointer to the internal object in the dictio
nary | | * The returned value is a pointer to the internal object in the dictio
nary | |
| * so it MUST not be deleted. | | * so it MUST not be deleted. | |
| * | | * | |
| * \param key look for the key names pszKey in the dictionary | | * \param key look for the key names pszKey in the dictionary | |
| * | | * | |
| | | | |
| skipping to change at line 125 | | skipping to change at line 134 | |
| * be deleted. | | * be deleted. | |
| * | | * | |
| * \param key look for the key named key in the dictionary | | * \param key look for the key named key in the dictionary | |
| * | | * | |
| * \returns the found value or 0 if the key was not found. | | * \returns the found value or 0 if the key was not found. | |
| */ | | */ | |
| PdfObject* GetKey( const PdfName & key ); | | PdfObject* GetKey( const PdfName & key ); | |
| | | | |
| long GetKeyAsLong( const PdfName & key, long lDefault = 0 ) const; | | long GetKeyAsLong( const PdfName & key, long lDefault = 0 ) const; | |
| | | | |
|
| | | double GetKeyAsReal( const PdfName & key, double dDefault = 0.0 ) const | |
| | | ; | |
| | | | |
| bool GetKeyAsBool( const PdfName & key, bool bDefault = false ) const; | | bool GetKeyAsBool( const PdfName & key, bool bDefault = false ) const; | |
| | | | |
| PdfName GetKeyAsName( const PdfName & key ) const; | | PdfName GetKeyAsName( const PdfName & key ) const; | |
| | | | |
| /** Allows to check if a dictionary contains a certain key. \param key | | /** Allows to check if a dictionary contains a certain key. \param key | |
| * look for the key named key.Name() in the dictionary | | * look for the key named key.Name() in the dictionary | |
| * | | * | |
| * \returns true if the key is part of the dictionary, otherwise false
. | | * \returns true if the key is part of the dictionary, otherwise false
. | |
| */ | | */ | |
| bool HasKey( const PdfName & key ) const; | | bool HasKey( const PdfName & key ) const; | |
| | | | |
| /** Remove a key from this dictionary. If the key does not exists, thi
s | | /** Remove a key from this dictionary. If the key does not exists, thi
s | |
| * function does nothing. | | * function does nothing. | |
| * | | * | |
| * \param identifier the name of the key to delete | | * \param identifier the name of the key to delete | |
| * | | * | |
| * \returns true if the key was found in the object and was removed if | | * \returns true if the key was found in the object and was removed if | |
| * there was is no key with this name, false is returned. | | * there was is no key with this name, false is returned. | |
|
| | | * | |
| | | * This will set the dirty flag of this object. | |
| | | * \see IsDirty | |
| */ | | */ | |
| bool RemoveKey( const PdfName & identifier ); | | bool RemoveKey( const PdfName & identifier ); | |
| | | | |
| /** Write the complete dictionary to a file. \param pDevice write the | | /** Write the complete dictionary to a file. \param pDevice write the | |
| * object to this device \returns ErrOk on success | | * object to this device \returns ErrOk on success | |
| * | | * | |
| * \param pEncrypt an encryption object which is used to encrypt this
object | | * \param pEncrypt an encryption object which is used to encrypt this
object | |
| * or NULL to not encrypt this object | | * or NULL to not encrypt this object | |
| */ | | */ | |
| inline void Write( PdfOutputDevice* pDevice, const PdfEncrypt* pEncrypt
= NULL ) const; | | inline void Write( PdfOutputDevice* pDevice, const PdfEncrypt* pEncrypt
= NULL ) const; | |
| | | | |
| skipping to change at line 172 | | skipping to change at line 186 | |
| void Write( PdfOutputDevice* pDevice, const PdfEncrypt* pEncrypt, const
PdfName & keyStop = | | void Write( PdfOutputDevice* pDevice, const PdfEncrypt* pEncrypt, const
PdfName & keyStop = | |
| PdfName::KeyNull ) const; | | PdfName::KeyNull ) const; | |
| | | | |
| /** Get access to the internal map of keys. | | /** Get access to the internal map of keys. | |
| * | | * | |
| * \returns all keys of this dictionary | | * \returns all keys of this dictionary | |
| */ | | */ | |
| inline const TKeyMap & GetKeys() const; | | inline const TKeyMap & GetKeys() const; | |
| | | | |
| /** Get access to the internal map of keys. \returns all keys of this | | /** Get access to the internal map of keys. \returns all keys of this | |
|
| * dictionary | | * dictionary | |
| */ | | */ | |
| inline TKeyMap & GetKeys(); | | inline TKeyMap & GetKeys(); | |
| | | | |
|
| | | /** The dirty flag is set if this variant | |
| | | * has been modified after construction. | |
| | | * | |
| | | * Usually the dirty flag is also set | |
| | | * if you call any non-const member function | |
| | | * as we cannot determine if you actually changed | |
| | | * something or not. | |
| | | * | |
| | | * \returns true if the value is dirty and has been | |
| | | * modified since construction | |
| | | */ | |
| | | virtual bool IsDirty() const; | |
| | | | |
| | | /** Sets the dirty flag of this PdfVariant | |
| | | * | |
| | | * \param bDirty true if this PdfVariant has been | |
| | | * modified from the outside | |
| | | * | |
| | | * \see IsDirty | |
| | | */ | |
| | | virtual void SetDirty( bool bDirty ); | |
| | | | |
| private: | | private: | |
| TKeyMap m_mapKeys; | | TKeyMap m_mapKeys; | |
|
| | | | |
| | | bool m_bDirty; ///< Indicates if this object was modified after | |
| | | construction | |
| }; | | }; | |
| | | | |
| typedef std::vector<PdfDictionary*> TVecDictionaries; | | typedef std::vector<PdfDictionary*> TVecDictionaries; | |
|
| typedef TVecDictionaries::iterator TIVecDictionaries; | | typedef TVecDictionaries::iterator oTIVecDictionaries; | |
| typedef TVecDictionaries::const_iterator TCIVecDictionaries; | | typedef TVecDictionaries::const_iterator TCIVecDictionaries; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| const TKeyMap & PdfDictionary::GetKeys() const | | const TKeyMap & PdfDictionary::GetKeys() const | |
| { | | { | |
| return m_mapKeys; | | return m_mapKeys; | |
| } | | } | |
| | | | |
| | | | |
End of changes. 9 change blocks. |
| 2 lines changed or deleted | | 42 lines changed or added | |
|
| PdfDocument.h | | PdfDocument.h | |
| | | | |
| skipping to change at line 139 | | skipping to change at line 139 | |
| | | | |
| /** Creates a PdfFont object | | /** Creates a PdfFont object | |
| * \param pszFontName name of the font as it is known to the system | | * \param pszFontName name of the font as it is known to the system | |
| * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | | * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | |
| * \param bEmbedd specifies whether this font should be embedded in th
e PDF file. | | * \param bEmbedd specifies whether this font should be embedded in th
e PDF file. | |
| * Embedding fonts is usually a good idea. | | * Embedding fonts is usually a good idea. | |
| * | | * | |
| * \returns PdfFont* a pointer to a new PdfFont object. | | * \returns PdfFont* a pointer to a new PdfFont object. | |
| * The returned object is owned by the PdfDocument. | | * The returned object is owned by the PdfDocument. | |
| */ | | */ | |
|
| PdfFont* CreateFont( const char* pszFontName, const PdfEncoding * const
pEncoding = &PdfFont::WinAnsiEncoding, | | PdfFont* CreateFont( const char* pszFontName, const PdfEncoding * const
pEncoding = PdfEncodingFactory::GlobalPdfDocEncodingInstance(), | |
| bool bEmbedd = true ); | | bool bEmbedd = true ); | |
| | | | |
| /** Creates a PdfFont object | | /** Creates a PdfFont object | |
| * \param pszFontName name of the font as it is known to the system | | * \param pszFontName name of the font as it is known to the system | |
| * \param bBold if true search for a bold font | | * \param bBold if true search for a bold font | |
| * \param bItalic if true search for an italic font | | * \param bItalic if true search for an italic font | |
| * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | | * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | |
| * \param bEmbedd specifies whether this font should be embedded in th
e PDF file. | | * \param bEmbedd specifies whether this font should be embedded in th
e PDF file. | |
| * Embedding fonts is usually a good idea. | | * Embedding fonts is usually a good idea. | |
| * \param optional: pszFileName path to a valid font file | | * \param optional: pszFileName path to a valid font file | |
| * | | * | |
| * \returns PdfFont* a pointer to a new PdfFont object. | | * \returns PdfFont* a pointer to a new PdfFont object. | |
| */ | | */ | |
| PdfFont* CreateFont( const char* pszFontName, bool bBold, bool bItalic, | | PdfFont* CreateFont( const char* pszFontName, bool bBold, bool bItalic, | |
|
| const PdfEncoding * const pEncoding = &PdfFont::Wi
nAnsiEncoding, | | const PdfEncoding * const pEncoding = PdfEncodingF
actory::GlobalPdfDocEncodingInstance(), | |
| bool bEmbedd = true, const char* pszFileName = NUL
L ); | | bool bEmbedd = true, const char* pszFileName = NUL
L ); | |
| | | | |
|
| | | #ifdef _WIN32 | |
| | | /** Creates a PdfFont object | |
| | | * \param pszFontName name of the font as it is known to the system | |
| | | * \param pEncoding the encoding of the font. The font will not take o | |
| | | wnership of this object. | |
| | | * \param bEmbedd specifies whether this font should be embedded in th | |
| | | e PDF file. | |
| | | * Embedding fonts is usually a good idea. | |
| | | * | |
| | | * \returns PdfFont* a pointer to a new PdfFont object. | |
| | | * The returned object is owned by the PdfDocument. | |
| | | * | |
| | | * This is an overloaded member function to allow working | |
| | | * with unicode characters. On Unix systes you can also path | |
| | | * UTF-8 to the const char* overload. | |
| | | */ | |
| | | PdfFont* CreateFont( const wchar_t* pszFontName, const PdfEncoding * co | |
| | | nst pEncoding = PdfEncodingFactory::GlobalPdfDocEncodingInstance(), | |
| | | bool bEmbedd = true ); | |
| | | | |
| | | /** Creates a PdfFont object | |
| | | * \param pszFontName name of the font as it is known to the system | |
| | | * \param bBold if true search for a bold font | |
| | | * \param bItalic if true search for an italic font | |
| | | * \param pEncoding the encoding of the font. The font will not take o | |
| | | wnership of this object. | |
| | | * \param bEmbedd specifies whether this font should be embedded in th | |
| | | e PDF file. | |
| | | * Embedding fonts is usually a good idea. | |
| | | * \param optional: pszFileName path to a valid font file | |
| | | * | |
| | | * \returns PdfFont* a pointer to a new PdfFont object. | |
| | | * | |
| | | * This is an overloaded member function to allow working | |
| | | * with unicode characters. On Unix systes you can also path | |
| | | * UTF-8 to the const char* overload. | |
| | | */ | |
| | | PdfFont* CreateFont( const wchar_t* pszFontName, bool bBold, bool bItal | |
| | | ic, | |
| | | const PdfEncoding * const pEncoding = PdfEncodingF | |
| | | actory::GlobalPdfDocEncodingInstance(), | |
| | | bool bEmbedd = true); | |
| | | #endif // _WIN32 | |
| | | | |
| /** Creates a PdfFont object | | /** Creates a PdfFont object | |
| * \param face a valid freetype font handle (will be free'd by PoDoFo) | | * \param face a valid freetype font handle (will be free'd by PoDoFo) | |
| * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | | * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | |
| * \param bEmbedd specifies whether this font should be embedded in th
e PDF file. | | * \param bEmbedd specifies whether this font should be embedded in th
e PDF file. | |
| * Embedding fonts is usually a good idea. | | * Embedding fonts is usually a good idea. | |
| * \returns PdfFont* a pointer to a new PdfFont object. | | * \returns PdfFont* a pointer to a new PdfFont object. | |
| * The returned object is owned by the PdfDocument. | | * The returned object is owned by the PdfDocument. | |
| */ | | */ | |
|
| PdfFont* CreateFont( FT_Face face, const PdfEncoding * const pEncoding | | PdfFont* CreateFont( FT_Face face, const PdfEncoding * const pEncoding | |
| = &PdfFont::WinAnsiEncoding, bool bEmbedd = true ); | | = PdfEncodingFactory::GlobalPdfDocEncodingInstance(), bool bEmbedd = true ) | |
| | | ; | |
| | | | |
| | | /** Creates a font subset which contains only a few characters and is e | |
| | | mbedded. | |
| | | * | |
| | | * THIS WORKS ONLY FOR TTF FONTS! | |
| | | * | |
| | | * \param pszFontName name of the font as it is known to the system | |
| | | * \param bBold if true search for a bold font | |
| | | * \param bItalic if true search for an italic font | |
| | | * \param pEncoding the encoding of the font. The font will not take o | |
| | | wnership of this object. | |
| | | * | |
| | | * \returns PdfFont* a pointer to a new PdfFont object. | |
| | | */ | |
| | | PdfFont* CreateFontSubset( const char* pszFontName, bool bBold, bool bI | |
| | | talic, | |
| | | const PdfEncoding * const = PdfEncodingFactor | |
| | | y::GlobalPdfDocEncodingInstance(), | |
| | | const char* pszFileName = NULL); | |
| | | | |
| | | #ifdef _WIN32 | |
| | | /** Creates a font subset which contains only a few characters and is e | |
| | | mbedded. | |
| | | * | |
| | | * THIS WORKS ONLY FOR TTF FONTS! | |
| | | * | |
| | | * \param pszFontName name of the font as it is known to the system | |
| | | * \param bBold if true search for a bold font | |
| | | * \param bItalic if true search for an italic font | |
| | | * \param pEncoding the encoding of the font. The font will not take o | |
| | | wnership of this object. | |
| | | * | |
| | | * \returns PdfFont* a pointer to a new PdfFont object. | |
| | | * | |
| | | * This is an overloaded member function to allow working | |
| | | * with unicode characters. On Unix systes you can also path | |
| | | * UTF-8 to the const char* overload. | |
| | | */ | |
| | | PdfFont* CreateFontSubset( const wchar_t* pszFontName, bool bBold, bool | |
| | | bItalic, | |
| | | const PdfEncoding * const = PdfEncodingFactor | |
| | | y::GlobalPdfDocEncodingInstance() ); | |
| | | #endif // _WIN32 | |
| | | | |
| | | // Peter Petrov 26 April 2008 | |
| | | /** Returns the font library from font cache | |
| | | * | |
| | | * \returns the internal handle to the freetype library | |
| | | */ | |
| | | inline FT_Library GetFontLibrary() const; | |
| | | | |
| /** Creates a new page object and inserts it into the internal | | /** Creates a new page object and inserts it into the internal | |
| * page tree. | | * page tree. | |
| * The returned page is owned by the PdfDocument | | * The returned page is owned by the PdfDocument | |
| * and will get deleted along with it! | | * and will get deleted along with it! | |
| * | | * | |
| * \param rSize a PdfRect spezifying the size of the page (i.e the /Me
diaBox key) in 1/1000th mm | | * \param rSize a PdfRect spezifying the size of the page (i.e the /Me
diaBox key) in 1/1000th mm | |
| * \returns a pointer to a PdfPage object | | * \returns a pointer to a PdfPage object | |
| */ | | */ | |
| PdfPage* CreatePage( const PdfRect & rSize ); | | PdfPage* CreatePage( const PdfRect & rSize ); | |
| | | | |
| skipping to change at line 452 | | skipping to change at line 531 | |
| * \param the object to be set | | * \param the object to be set | |
| */ | | */ | |
| void SetViewerPreference( const PdfName& whichPref, const PdfObject & v
alueObj ); | | void SetViewerPreference( const PdfName& whichPref, const PdfObject & v
alueObj ); | |
| void SetViewerPreference( const PdfName& whichPref, bool inValue ); | | void SetViewerPreference( const PdfName& whichPref, bool inValue ); | |
| | | | |
| /** Clear all internal variables | | /** Clear all internal variables | |
| * And reset PdfDocument to an intial state | | * And reset PdfDocument to an intial state | |
| */ | | */ | |
| void Clear(); | | void Clear(); | |
| | | | |
|
| | | protected: | |
| | | PdfFontCache m_fontCache; | |
| | | | |
| private: | | private: | |
| // Prevent use of copy constructor and assignment operator. These meth
ods | | // Prevent use of copy constructor and assignment operator. These meth
ods | |
| // should never be referenced (given that code referencing them outside | | // should never be referenced (given that code referencing them outside | |
| // PdfDocument won't compile), and calling them will result in a link e
rror | | // PdfDocument won't compile), and calling them will result in a link e
rror | |
| // as they're not defined. | | // as they're not defined. | |
| explicit PdfDocument(const PdfDocument&); | | explicit PdfDocument(const PdfDocument&); | |
| PdfDocument& operator=(const PdfDocument&); | | PdfDocument& operator=(const PdfDocument&); | |
| | | | |
| PdfVecObjects m_vecObjects; | | PdfVecObjects m_vecObjects; | |
| | | | |
| PdfObject* m_pTrailer; | | PdfObject* m_pTrailer; | |
| PdfObject* m_pCatalog; | | PdfObject* m_pCatalog; | |
| | | | |
| PdfInfo* m_pInfo; | | PdfInfo* m_pInfo; | |
| PdfOutlines* m_pOutlines; | | PdfOutlines* m_pOutlines; | |
| PdfNamesTree* m_pNamesTree; | | PdfNamesTree* m_pNamesTree; | |
| PdfPagesTree* m_pPagesTree; | | PdfPagesTree* m_pPagesTree; | |
| PdfAcroForm* m_pAcroForms; | | PdfAcroForm* m_pAcroForms; | |
| | | | |
| EPdfVersion m_eVersion; | | EPdfVersion m_eVersion; | |
|
| PdfFontCache m_fontCache; | | | |
| }; | | }; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| inline PdfPagesTree* PdfDocument::GetPagesTree() const | | inline PdfPagesTree* PdfDocument::GetPagesTree() const | |
| { | | { | |
| return m_pPagesTree; | | return m_pPagesTree; | |
| } | | } | |
| | | | |
| | | | |
| skipping to change at line 561 | | skipping to change at line 642 | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| inline const PdfVecObjects* PdfDocument::GetObjects() const | | inline const PdfVecObjects* PdfDocument::GetObjects() const | |
| { | | { | |
| return &m_vecObjects; | | return &m_vecObjects; | |
| } | | } | |
| | | | |
|
| | | // Peter Petrov 26 April 2008 | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | inline FT_Library PdfDocument::GetFontLibrary() const | |
| | | { | |
| | | return this->m_fontCache.GetFontLibrary(); | |
| | | } | |
| | | | |
| }; | | }; | |
| | | | |
| #endif // _PDF_DOCUMENT_H_ | | #endif // _PDF_DOCUMENT_H_ | |
| | | | |
End of changes. 7 change blocks. |
| 5 lines changed or deleted | | 111 lines changed or added | |
|
| PdfEncoding.h | | PdfEncoding.h | |
| | | | |
| skipping to change at line 25 | | skipping to change at line 25 | |
| * You should have received a copy of the GNU Library General Public
* | | * You should have received a copy of the GNU Library General Public
* | |
| * License along with this program; if not, write to the
* | | * License along with this program; if not, write to the
* | |
| * Free Software Foundation, Inc.,
* | | * Free Software Foundation, Inc.,
* | |
| * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* | | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* | |
| **************************************************************************
*/ | | **************************************************************************
*/ | |
| | | | |
| #ifndef _PDF_ENCODING_H_ | | #ifndef _PDF_ENCODING_H_ | |
| #define _PDF_ENCODING_H_ | | #define _PDF_ENCODING_H_ | |
| | | | |
| #include "PdfDefines.h" | | #include "PdfDefines.h" | |
|
| | | #include "PdfElement.h" | |
| #include "PdfName.h" | | #include "PdfName.h" | |
| #include "PdfString.h" | | #include "PdfString.h" | |
|
| | | #include "util/PdfMutex.h" | |
| | | | |
| | | #include <iterator> | |
| | | | |
| namespace PoDoFo { | | namespace PoDoFo { | |
| | | | |
| class PdfDictionary; | | class PdfDictionary; | |
| class PdfFont; | | class PdfFont; | |
| | | | |
| /** | | /** | |
| * A PdfEncoding is in PdfFont to transform a text string | | * A PdfEncoding is in PdfFont to transform a text string | |
| * into a representation so that it can be displayed in a | | * into a representation so that it can be displayed in a | |
| * PDF file. | | * PDF file. | |
| * | | * | |
| * PdfEncoding can also be used to convert strings from a | | * PdfEncoding can also be used to convert strings from a | |
| * PDF file back into a PdfString. | | * PDF file back into a PdfString. | |
| */ | | */ | |
| class PODOFO_API PdfEncoding { | | class PODOFO_API PdfEncoding { | |
| protected: | | protected: | |
|
| | | | |
| /** | | /** | |
| * Create a new PdfEncoding. | | * Create a new PdfEncoding. | |
| * | | * | |
| * \param nFirstChar the first supported character code | | * \param nFirstChar the first supported character code | |
| * (either a byte value in the current encoding or a
unicode value) | | * (either a byte value in the current encoding or a
unicode value) | |
| * \param nLastChar the last supported character code, must be larger
than nFirstChar | | * \param nLastChar the last supported character code, must be larger
than nFirstChar | |
| * (either a byte value in the current encoding or a
unicode value) | | * (either a byte value in the current encoding or a
unicode value) | |
| * | | * | |
| */ | | */ | |
| PdfEncoding( int nFirstChar, int nLastChar ); | | PdfEncoding( int nFirstChar, int nLastChar ); | |
| | | | |
| /** Get a unique ID for this encoding | | /** Get a unique ID for this encoding | |
| * which can used for comparisons! | | * which can used for comparisons! | |
| * | | * | |
| * \returns a unique id for this encoding! | | * \returns a unique id for this encoding! | |
| */ | | */ | |
| virtual const PdfName & GetID() const = 0; | | virtual const PdfName & GetID() const = 0; | |
| | | | |
| public: | | public: | |
|
| | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // ab Visual | |
| | | studio 6 | |
| | | class PODOFO_API const_iterator : public std::iterator< | |
| | | std::forward_iterator_tag, | |
| | | int, ptrdiff_t> { | |
| | | #else | |
| | | class PODOFO_API const_iterator : public std::iterator< | |
| | | std::forward_iterator_tag, | |
| | | int, std::ptrdiff_t, | |
| | | const int *, const int &> { | |
| | | #endif | |
| | | public: | |
| | | const_iterator( const PdfEncoding* pEncoding, int nCur ) | |
| | | : m_pEncoding( pEncoding ), m_nCur( nCur ) | |
| | | { | |
| | | } | |
| | | | |
| | | const_iterator( const const_iterator & rhs ) | |
| | | { | |
| | | this->operator=(rhs); | |
| | | } | |
| | | | |
| | | const const_iterator & operator=( const const_iterator & rhs ) | |
| | | { | |
| | | m_nCur = rhs.m_nCur; | |
| | | m_pEncoding = rhs.m_pEncoding; | |
| | | | |
| | | return *this; | |
| | | } | |
| | | | |
| | | inline bool operator==( const const_iterator & rhs ) const | |
| | | { | |
| | | return (m_nCur == rhs.m_nCur); | |
| | | } | |
| | | | |
| | | inline bool operator!=( const const_iterator & rhs ) const | |
| | | { | |
| | | return (m_nCur != rhs.m_nCur); | |
| | | } | |
| | | | |
| | | inline pdf_utf16be operator*() const | |
| | | { | |
| | | return m_pEncoding->GetCharCode( m_nCur ); | |
| | | } | |
| | | | |
| | | inline const_iterator & operator++() | |
| | | { | |
| | | m_nCur++; | |
| | | | |
| | | return *this; | |
| | | } | |
| | | | |
| | | private: | |
| | | const PdfEncoding* m_pEncoding; | |
| | | int m_nCur; | |
| | | }; | |
| | | | |
| virtual ~PdfEncoding(); | | virtual ~PdfEncoding(); | |
| | | | |
| /** Comparison operator. | | /** Comparison operator. | |
| * | | * | |
| * \param rhs the PdfEncoding to which this encoding should be compare
d | | * \param rhs the PdfEncoding to which this encoding should be compare
d | |
| * | | * | |
| * \returns true if both encodings are the same. | | * \returns true if both encodings are the same. | |
| */ | | */ | |
| inline bool operator==( const PdfEncoding & rhs ) const; | | inline bool operator==( const PdfEncoding & rhs ) const; | |
| | | | |
| skipping to change at line 131 | | skipping to change at line 189 | |
| /** | | /** | |
| * \returns the first character code that is defined for this encoding | | * \returns the first character code that is defined for this encoding | |
| */ | | */ | |
| inline int GetFirstChar() const; | | inline int GetFirstChar() const; | |
| | | | |
| /** | | /** | |
| * \returns the last character code that is defined for this encoding | | * \returns the last character code that is defined for this encoding | |
| */ | | */ | |
| inline int GetLastChar() const; | | inline int GetLastChar() const; | |
| | | | |
|
| | | /** Iterate over all unicode character points in this | |
| | | * encoding, beginning with the first. | |
| | | * | |
| | | * \returns iterator pointing to the first defined unicode character | |
| | | */ | |
| | | inline const_iterator begin() const; | |
| | | | |
| | | /** Iterate over all unicode character points in this | |
| | | * encoding, beginning with the first. | |
| | | * | |
| | | * \returns iterator pointing at the end | |
| | | */ | |
| | | inline const_iterator end() const; | |
| | | | |
| | | /** Get the unicode character code for this encoding | |
| | | * at the position nIndex. nIndex is a position between | |
| | | * GetFirstChar() and GetLastChar() | |
| | | * | |
| | | * \param nIndex character code at position index | |
| | | * \returns unicode character code | |
| | | * | |
| | | * \see GetFirstChar | |
| | | * \see GetLastChar | |
| | | * | |
| | | * Will throw an exception if nIndex is out of range. | |
| | | */ | |
| | | virtual pdf_utf16be GetCharCode( int nIndex ) const = 0; | |
| | | | |
| private: | | private: | |
| int m_nFirstChar; ///< The first defined character code | | int m_nFirstChar; ///< The first defined character code | |
| int m_nLastChar; ///< The last defined character code | | int m_nLastChar; ///< The last defined character code | |
| }; | | }; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| inline bool PdfEncoding::operator<( const PdfEncoding & rhs ) const | | inline bool PdfEncoding::operator<( const PdfEncoding & rhs ) const | |
| { | | { | |
| | | | |
| skipping to change at line 168 | | skipping to change at line 254 | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| inline int PdfEncoding::GetLastChar() const | | inline int PdfEncoding::GetLastChar() const | |
| { | | { | |
| return m_nLastChar; | | return m_nLastChar; | |
| } | | } | |
| | | | |
|
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | inline PdfEncoding::const_iterator PdfEncoding::begin() const | |
| | | { | |
| | | return PdfEncoding::const_iterator( this, this->GetFirstChar() ); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | inline PdfEncoding::const_iterator PdfEncoding::end() const | |
| | | { | |
| | | return PdfEncoding::const_iterator( this, this->GetLastChar() + 1 ); | |
| | | } | |
| | | | |
| /** | | /** | |
| * A common base class for standard PdfEncoding which are | | * A common base class for standard PdfEncoding which are | |
| * known by name. | | * known by name. | |
| * | | * | |
|
| | | * - PdfDocEncoding (only use this for strings which are not printed | |
| | | * in the document. This is for meta data in the PDF). | |
| * - MacRomanEncoding | | * - MacRomanEncoding | |
| * - WinAnsiEncoding | | * - WinAnsiEncoding | |
| * - MacExpertEncoding | | * - MacExpertEncoding | |
| * | | * | |
| * \see PdfWinAnsiEncoding | | * \see PdfWinAnsiEncoding | |
| * \see PdfMacRomanEncoding | | * \see PdfMacRomanEncoding | |
| * \see PdfMacExportEncoding | | * \see PdfMacExportEncoding | |
| * | | * | |
| */ | | */ | |
| class PODOFO_API PdfSimpleEncoding : public PdfEncoding { | | class PODOFO_API PdfSimpleEncoding : public PdfEncoding { | |
| public: | | public: | |
|
| | | | |
| /* | | /* | |
| * Create a new simple PdfEncoding which uses 1 byte. | | * Create a new simple PdfEncoding which uses 1 byte. | |
| * | | * | |
| * \param rName the name of a standard PdfEncoding | | * \param rName the name of a standard PdfEncoding | |
| * | | * | |
| * As of now possible values for rName are: | | * As of now possible values for rName are: | |
| * - MacRomanEncoding | | * - MacRomanEncoding | |
| * - WinAnsiEncoding | | * - WinAnsiEncoding | |
| * - MacExpertEncoding | | * - MacExpertEncoding | |
| * | | * | |
| | | | |
| skipping to change at line 260 | | skipping to change at line 363 | |
| * \returns true if this is a single byte encoding with a maximum of 2
56 values. | | * \returns true if this is a single byte encoding with a maximum of 2
56 values. | |
| */ | | */ | |
| inline virtual bool IsSingleByteEncoding() const; | | inline virtual bool IsSingleByteEncoding() const; | |
| | | | |
| /** Get the name of this encoding. | | /** Get the name of this encoding. | |
| * | | * | |
| * \returns the name of this encoding. | | * \returns the name of this encoding. | |
| */ | | */ | |
| inline const PdfName & GetName() const; | | inline const PdfName & GetName() const; | |
| | | | |
|
| | | /** Get the unicode character code for this encoding | |
| | | * at the position nIndex. nIndex is a position between | |
| | | * GetFirstChar() and GetLastChar() | |
| | | * | |
| | | * \param nIndex character code at position index | |
| | | * \returns unicode character code | |
| | | * | |
| | | * \see GetFirstChar | |
| | | * \see GetLastChar | |
| | | * | |
| | | * Will throw an exception if nIndex is out of range. | |
| | | */ | |
| | | virtual pdf_utf16be GetCharCode( int nIndex ) const; | |
| | | | |
| private: | | private: | |
| /** Initialize the internal table of mappings from unicode code points | | /** Initialize the internal table of mappings from unicode code points | |
| * to encoded byte values. | | * to encoded byte values. | |
| */ | | */ | |
| void InitEncodingTable(); | | void InitEncodingTable(); | |
| | | | |
| protected: | | protected: | |
| | | | |
| /** Get a unique ID for this encoding | | /** Get a unique ID for this encoding | |
| * which can used for comparisons! | | * which can used for comparisons! | |
| | | | |
| skipping to change at line 286 | | skipping to change at line 403 | |
| * big endian unicode code points that are assigned | | * big endian unicode code points that are assigned | |
| * to the 256 values of this encoding. | | * to the 256 values of this encoding. | |
| * | | * | |
| * This table is used internally to convert an encoded | | * This table is used internally to convert an encoded | |
| * string of this encoding to and from unicode. | | * string of this encoding to and from unicode. | |
| * | | * | |
| * \returns an array of 256 big endian unicode code points | | * \returns an array of 256 big endian unicode code points | |
| */ | | */ | |
| virtual const pdf_utf16be* GetToUnicodeTable() const = 0; | | virtual const pdf_utf16be* GetToUnicodeTable() const = 0; | |
| | | | |
|
| | | protected: | |
| | | Util::PdfMutex m_mutex; ///< Mutex for the creation of the encoding t | |
| | | able | |
| | | | |
| private: | | private: | |
| PdfName m_name; ///< The name of the encoding | | PdfName m_name; ///< The name of the encoding | |
| char* m_pEncodingTable; ///< The helper table for conversions into th
is encoding | | char* m_pEncodingTable; ///< The helper table for conversions into th
is encoding | |
| }; | | }; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| inline const PdfName & PdfSimpleEncoding::GetID() const | | inline const PdfName & PdfSimpleEncoding::GetID() const | |
| { | | { | |
| | | | |
| skipping to change at line 324 | | skipping to change at line 444 | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| inline const PdfName & PdfSimpleEncoding::GetName() const | | inline const PdfName & PdfSimpleEncoding::GetName() const | |
| { | | { | |
| return m_name; | | return m_name; | |
| } | | } | |
| | | | |
| /** | | /** | |
|
| | | * The PdfDocEncoding is the default encoding for | |
| | | * all strings in PoDoFo which are data in the PDF | |
| | | * file. | |
| | | * | |
| | | * Do not allocate this class yourself, as allocations | |
| | | * might be expensive. Try using PdfFont::DocEncoding. | |
| | | * | |
| | | * \see PdfFont::DocEncoding | |
| | | */ | |
| | | class PODOFO_API PdfDocEncoding : public PdfSimpleEncoding { | |
| | | public: | |
| | | | |
| | | /** Create a new PdfWinAnsiEncoding | |
| | | */ | |
| | | PdfDocEncoding() | |
| | | : PdfSimpleEncoding( PdfName("PdfDocEncoding") ) | |
| | | { | |
| | | | |
| | | } | |
| | | | |
| | | protected: | |
| | | | |
| | | /** Gets a table of 256 short values which are the | |
| | | * big endian unicode code points that are assigned | |
| | | * to the 256 values of this encoding. | |
| | | * | |
| | | * This table is used internally to convert an encoded | |
| | | * string of this encoding to and from unicode. | |
| | | * | |
| | | * \returns an array of 256 big endian unicode code points | |
| | | */ | |
| | | virtual const pdf_utf16be* GetToUnicodeTable() const; | |
| | | | |
| | | private: | |
| | | static const pdf_utf16be s_cEncoding[256]; ///< conversion table from W | |
| | | inAnsiEncoding to UTF16 | |
| | | | |
| | | }; | |
| | | | |
| | | /** | |
| * The WinAnsi Encoding is the default encoding in PoDoFo for | | * The WinAnsi Encoding is the default encoding in PoDoFo for | |
| * contents on PDF pages. | | * contents on PDF pages. | |
| * | | * | |
| * It is also called CP-1252 encoding. | | * It is also called CP-1252 encoding. | |
| * | | * | |
| * Do not allocate this class yourself, as allocations | | * Do not allocate this class yourself, as allocations | |
| * might be expensive. Try using PdfFont::WinAnsiEncoding. | | * might be expensive. Try using PdfFont::WinAnsiEncoding. | |
| * | | * | |
| * \see PdfFont::WinAnsiEncoding | | * \see PdfFont::WinAnsiEncoding | |
| */ | | */ | |
| class PODOFO_API PdfWinAnsiEncoding : public PdfSimpleEncoding { | | class PODOFO_API PdfWinAnsiEncoding : public PdfSimpleEncoding { | |
| public: | | public: | |
| | | | |
| /** Create a new PdfWinAnsiEncoding | | /** Create a new PdfWinAnsiEncoding | |
| */ | | */ | |
|
| inline PdfWinAnsiEncoding() | | PdfWinAnsiEncoding() | |
| : PdfSimpleEncoding( PdfName("WinAnsiEncoding") ) | | : PdfSimpleEncoding( PdfName("WinAnsiEncoding") ) | |
| { | | { | |
| | | | |
| } | | } | |
| | | | |
| protected: | | protected: | |
| | | | |
| /** Gets a table of 256 short values which are the | | /** Gets a table of 256 short values which are the | |
| * big endian unicode code points that are assigned | | * big endian unicode code points that are assigned | |
| * to the 256 values of this encoding. | | * to the 256 values of this encoding. | |
| * | | * | |
| * This table is used internally to convert an encoded | | * This table is used internally to convert an encoded | |
| * string of this encoding to and from unicode. | | * string of this encoding to and from unicode. | |
| * | | * | |
| * \returns an array of 256 big endian unicode code points | | * \returns an array of 256 big endian unicode code points | |
| */ | | */ | |
|
| inline virtual const pdf_utf16be* GetToUnicodeTable() const; | | virtual const pdf_utf16be* GetToUnicodeTable() const; | |
| | | | |
| private: | | private: | |
| static const pdf_utf16be s_cEncoding[256]; ///< conversion table from W
inAnsiEncoding to UTF16 | | static const pdf_utf16be s_cEncoding[256]; ///< conversion table from W
inAnsiEncoding to UTF16 | |
| | | | |
| }; | | }; | |
| | | | |
|
| // ----------------------------------------------------- | | | |
| // | | | |
| // ----------------------------------------------------- | | | |
| inline const pdf_utf16be* PdfWinAnsiEncoding::GetToUnicodeTable() const | | | |
| { | | | |
| return PdfWinAnsiEncoding::s_cEncoding; | | | |
| } | | | |
| | | | |
| /** | | /** | |
| * Do not allocate this class yourself, as allocations | | * Do not allocate this class yourself, as allocations | |
| * might be expensive. Try using PdfFont::MacRomanEncoding. | | * might be expensive. Try using PdfFont::MacRomanEncoding. | |
| * | | * | |
| * \see PdfFont::MacRomanEncoding | | * \see PdfFont::MacRomanEncoding | |
| */ | | */ | |
| class PODOFO_API PdfMacRomanEncoding : public PdfSimpleEncoding { | | class PODOFO_API PdfMacRomanEncoding : public PdfSimpleEncoding { | |
| public: | | public: | |
| | | | |
| /** Create a new PdfMacRomanEncoding | | /** Create a new PdfMacRomanEncoding | |
| */ | | */ | |
|
| inline PdfMacRomanEncoding() | | PdfMacRomanEncoding() | |
| : PdfSimpleEncoding( PdfName("MacRomanEncoding") ) | | : PdfSimpleEncoding( PdfName("MacRomanEncoding") ) | |
| { | | { | |
| | | | |
| } | | } | |
| | | | |
| protected: | | protected: | |
| | | | |
| /** Gets a table of 256 short values which are the | | /** Gets a table of 256 short values which are the | |
| * big endian unicode code points that are assigned | | * big endian unicode code points that are assigned | |
| * to the 256 values of this encoding. | | * to the 256 values of this encoding. | |
| * | | * | |
| * This table is used internally to convert an encoded | | * This table is used internally to convert an encoded | |
| * string of this encoding to and from unicode. | | * string of this encoding to and from unicode. | |
| * | | * | |
| * \returns an array of 256 big endian unicode code points | | * \returns an array of 256 big endian unicode code points | |
| */ | | */ | |
|
| inline virtual const pdf_utf16be* GetToUnicodeTable() const; | | virtual const pdf_utf16be* GetToUnicodeTable() const; | |
| | | | |
| private: | | private: | |
| static const pdf_utf16be s_cEncoding[256]; ///< conversion table from W
inAnsiEncoding to UTF16 | | static const pdf_utf16be s_cEncoding[256]; ///< conversion table from W
inAnsiEncoding to UTF16 | |
| | | | |
| }; | | }; | |
| | | | |
|
| // ----------------------------------------------------- | | | |
| // | | | |
| // ----------------------------------------------------- | | | |
| inline const pdf_utf16be* PdfMacRomanEncoding::GetToUnicodeTable() const | | | |
| { | | | |
| return PdfMacRomanEncoding::s_cEncoding; | | | |
| } | | | |
| | | | |
| /** | | /** | |
| */ | | */ | |
| class PODOFO_API PdfMacExpertEncoding : public PdfSimpleEncoding { | | class PODOFO_API PdfMacExpertEncoding : public PdfSimpleEncoding { | |
| public: | | public: | |
| | | | |
| /** Create a new PdfMacExpertEncoding | | /** Create a new PdfMacExpertEncoding | |
| */ | | */ | |
| inline PdfMacExpertEncoding() | | inline PdfMacExpertEncoding() | |
| : PdfSimpleEncoding( PdfName("MacExpertEncoding") ) | | : PdfSimpleEncoding( PdfName("MacExpertEncoding") ) | |
| { | | { | |
| | | | |
| skipping to change at line 437 | | skipping to change at line 580 | |
| }; | | }; | |
| | | | |
| /** PdfIdentityEncoding is a two-byte encoding which can be | | /** PdfIdentityEncoding is a two-byte encoding which can be | |
| * used with TrueType fonts to represent all characters | | * used with TrueType fonts to represent all characters | |
| * present in a font. If the font contains all unicode | | * present in a font. If the font contains all unicode | |
| * glyphs, PdfIdentityEncoding will support all unicode | | * glyphs, PdfIdentityEncoding will support all unicode | |
| * characters. | | * characters. | |
| */ | | */ | |
| class PODOFO_API PdfIdentityEncoding : public PdfEncoding { | | class PODOFO_API PdfIdentityEncoding : public PdfEncoding { | |
| public: | | public: | |
|
| | | | |
| /** | | /** | |
| * Create a new PdfIdentityEncoding. | | * Create a new PdfIdentityEncoding. | |
| * | | * | |
| * \param nFirstChar the first supported unicode character code (at le
ast 0) | | * \param nFirstChar the first supported unicode character code (at le
ast 0) | |
| * \param nLastChar the last supported unicode character code, | | * \param nLastChar the last supported unicode character code, | |
| * must be larger than nFirstChar (max value is 0xfff
f) | | * must be larger than nFirstChar (max value is 0xfff
f) | |
| * \param bAutoDelete if true the encoding is deleted by its owning fo
nt | | * \param bAutoDelete if true the encoding is deleted by its owning fo
nt | |
| */ | | */ | |
| PdfIdentityEncoding( int nFirstChar = 0, int nLastChar = 0xffff, bool b
AutoDelete = true ); | | PdfIdentityEncoding( int nFirstChar = 0, int nLastChar = 0xffff, bool b
AutoDelete = true ); | |
| | | | |
| | | | |
| skipping to change at line 489 | | skipping to change at line 631 | |
| * \returns true if this encoding should be deleted automatically with
the | | * \returns true if this encoding should be deleted automatically with
the | |
| * font. | | * font. | |
| */ | | */ | |
| virtual bool IsAutoDelete() const; | | virtual bool IsAutoDelete() const; | |
| | | | |
| /** | | /** | |
| * \returns true if this is a single byte encoding with a maximum of 2
56 values. | | * \returns true if this is a single byte encoding with a maximum of 2
56 values. | |
| */ | | */ | |
| virtual bool IsSingleByteEncoding() const; | | virtual bool IsSingleByteEncoding() const; | |
| | | | |
|
| | | /** Get the unicode character code for this encoding | |
| | | * at the position nIndex. nIndex is a position between | |
| | | * GetFirstChar() and GetLastChar() | |
| | | * | |
| | | * \param nIndex character code at position index | |
| | | * \returns unicode character code | |
| | | * | |
| | | * \see GetFirstChar | |
| | | * \see GetLastChar | |
| | | * | |
| | | * Will throw an exception if nIndex is out of range. | |
| | | */ | |
| | | virtual pdf_utf16be GetCharCode( int nIndex ) const; | |
| | | | |
| protected: | | protected: | |
| /** Get a unique ID for this encoding | | /** Get a unique ID for this encoding | |
| * which can used for comparisons! | | * which can used for comparisons! | |
| * | | * | |
| * \returns a unique id for this encoding! | | * \returns a unique id for this encoding! | |
| */ | | */ | |
| inline virtual const PdfName & GetID() const; | | inline virtual const PdfName & GetID() const; | |
| | | | |
| private: | | private: | |
|
| | | | |
| | | /** Gets the unicode value from a char code in this font | |
| | | * | |
| | | * \param lCharCode the character code (i.e. glyph id) | |
| | | * | |
| | | * \returns an unicode value | |
| | | */ | |
| | | pdf_utf16be GetUnicodeValue( long lCharCode ) const; | |
| | | | |
| | | private: | |
| bool m_bAutoDelete; ///< If true this encoding is deleted by it
s font. | | bool m_bAutoDelete; ///< If true this encoding is deleted by it
s font. | |
| PdfName m_id; ///< Unique ID of this encoding | | PdfName m_id; ///< Unique ID of this encoding | |
| }; | | }; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| inline const PdfName & PdfIdentityEncoding::GetID() const | | inline const PdfName & PdfIdentityEncoding::GetID() const | |
| { | | { | |
| return m_id; | | return m_id; | |
| | | | |
| skipping to change at line 526 | | skipping to change at line 692 | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| inline bool PdfIdentityEncoding::IsSingleByteEncoding() const | | inline bool PdfIdentityEncoding::IsSingleByteEncoding() const | |
| { | | { | |
| return false; | | return false; | |
| } | | } | |
| | | | |
|
| }; /* namespace RoMA */ | | }; /* namespace PoDoFo */ | |
| | | | |
| #endif // _PDF_ENCODING_H_ | | #endif // _PDF_ENCODING_H_ | |
| | | | |
End of changes. 21 change blocks. |
| 24 lines changed or deleted | | 193 lines changed or added | |
|
| PdfError.h | | PdfError.h | |
| | | | |
| skipping to change at line 31 | | skipping to change at line 31 | |
| #ifndef _PDF_ERROR_H_ | | #ifndef _PDF_ERROR_H_ | |
| #define _PDF_ERROR_H_ | | #define _PDF_ERROR_H_ | |
| | | | |
| // PdfError.h should not include PdfDefines.h, since it is included by it. | | // PdfError.h should not include PdfDefines.h, since it is included by it. | |
| // It should avoid depending on anything defined in PdfDefines.h . | | // It should avoid depending on anything defined in PdfDefines.h . | |
| | | | |
| #include "podofoapi.h" | | #include "podofoapi.h" | |
| #include <string> | | #include <string> | |
| #include <queue> | | #include <queue> | |
| | | | |
|
| #ifdef _MSC_VER // same pragma as in PdfDefines.h which we cannot include h
ere | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // same pragma as in PdfDefines
.h which we cannot include here | |
| #pragma warning(disable: 4251) | | #pragma warning(disable: 4251) | |
| #endif | | #endif | |
| | | | |
| /** \file PdfError.h | | /** \file PdfError.h | |
| * Error information and logging is implemented in this file. | | * Error information and logging is implemented in this file. | |
| */ | | */ | |
| | | | |
| namespace PoDoFo { | | namespace PoDoFo { | |
| | | | |
| /** Error Code defines which are used in PdfError to describe the error. | | /** Error Code defines which are used in PdfError to describe the error. | |
| | | | |
| skipping to change at line 96 | | skipping to change at line 96 | |
| ePdfError_UnsupportedFilter, /**< The requested filter is not ye
t implemented. */ | | ePdfError_UnsupportedFilter, /**< The requested filter is not ye
t implemented. */ | |
| ePdfError_UnsupportedFontFormat, /**< This font format is not suppor
ted by PoDoFO. */ | | ePdfError_UnsupportedFontFormat, /**< This font format is not suppor
ted by PoDoFO. */ | |
| ePdfError_ActionAlreadyPresent, /**< An Action was already present
when trying to add a Destination */ | | ePdfError_ActionAlreadyPresent, /**< An Action was already present
when trying to add a Destination */ | |
| | | | |
| ePdfError_MissingEndStream, /**< The required token endstream w
as not found. */ | | ePdfError_MissingEndStream, /**< The required token endstream w
as not found. */ | |
| ePdfError_Date, /**< Date/time error */ | | ePdfError_Date, /**< Date/time error */ | |
| ePdfError_Flate, /**< Error in zlib */ | | ePdfError_Flate, /**< Error in zlib */ | |
| ePdfError_FreeType, /**< Error in FreeType */ | | ePdfError_FreeType, /**< Error in FreeType */ | |
| ePdfError_SignatureError, /**< Error in signature */ | | ePdfError_SignatureError, /**< Error in signature */ | |
| | | | |
|
| | | ePdfError_MutexError, /**< Error during a mutex operation | |
| | | */ | |
| | | | |
| ePdfError_UnsupportedImageFormat, /**< This image format is not suppo
rted by PoDoFO. */ | | ePdfError_UnsupportedImageFormat, /**< This image format is not suppo
rted by PoDoFO. */ | |
| | | | |
|
| | | ePdfError_NotImplemented, /**< This feature is currently not | |
| | | implemented. */ | |
| | | | |
| ePdfError_Unknown = 0xffff /**< Unknown error */ | | ePdfError_Unknown = 0xffff /**< Unknown error */ | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * Used in PdfError::LogMessage to specify the log level. | | * Used in PdfError::LogMessage to specify the log level. | |
| * | | * | |
| * \see PdfError::LogMessage | | * \see PdfError::LogMessage | |
| */ | | */ | |
| enum ELogSeverity { | | enum ELogSeverity { | |
| eLogSeverity_Critical, /**< Critical unexpected error */ | | eLogSeverity_Critical, /**< Critical unexpected error */ | |
| | | | |
| skipping to change at line 153 | | skipping to change at line 157 | |
| // Woo for double-negatives. We define PODOFO_RAISE_LOGIC_IF unless we'
ve been told not to by NDEBUG. | | // Woo for double-negatives. We define PODOFO_RAISE_LOGIC_IF unless we'
ve been told not to by NDEBUG. | |
| #define PODOFO_RAISE_LOGIC_IF( x, y ) { if (x) throw ::PoDoFo::PdfError
( ePdfError_InternalLogic, __FILE__, __LINE__, y ); }; | | #define PODOFO_RAISE_LOGIC_IF( x, y ) { if (x) throw ::PoDoFo::PdfError
( ePdfError_InternalLogic, __FILE__, __LINE__, y ); }; | |
| #else | | #else | |
| #define PODOFO_RAISE_LOGIC_IF( x, y ) {}; | | #define PODOFO_RAISE_LOGIC_IF( x, y ) {}; | |
| #endif | | #endif | |
| | | | |
| class PODOFO_API PdfErrorInfo { | | class PODOFO_API PdfErrorInfo { | |
| public: | | public: | |
| PdfErrorInfo(); | | PdfErrorInfo(); | |
| PdfErrorInfo( int line, const char* pszFile, const char* pszInfo ); | | PdfErrorInfo( int line, const char* pszFile, const char* pszInfo ); | |
|
| PdfErrorInfo( const PdfErrorInfo & rhs ); | | PdfErrorInfo( int line, const char* pszFile, const wchar_t* pszInfo ); | |
| | | PdfErrorInfo( const PdfErrorInfo & rhs ); | |
| | | | |
| const PdfErrorInfo & operator=( const PdfErrorInfo & rhs ); | | const PdfErrorInfo & operator=( const PdfErrorInfo & rhs ); | |
| | | | |
| inline int GetLine() const { return m_nLine; } | | inline int GetLine() const { return m_nLine; } | |
| inline const std::string & GetFilename() const { return m_sFile; } | | inline const std::string & GetFilename() const { return m_sFile; } | |
| inline const std::string & GetInformation() const { return m_sInfo; } | | inline const std::string & GetInformation() const { return m_sInfo; } | |
|
| | | inline const std::wstring & GetInformationW() const { return m_swInfo;
} | |
| | | | |
| inline void SetInformation( const char* pszInfo ) { m_sInfo = pszInfo ?
pszInfo : ""; } | | inline void SetInformation( const char* pszInfo ) { m_sInfo = pszInfo ?
pszInfo : ""; } | |
|
| | | inline void SetInformation( const wchar_t* pszInfo ) { m_swInfo = pszIn
fo ? pszInfo : L""; } | |
| | | | |
| private: | | private: | |
|
| int m_nLine; | | int m_nLine; | |
| std::string m_sFile; | | std::string m_sFile; | |
| std::string m_sInfo; | | std::string m_sInfo; | |
| | | std::wstring m_swInfo; | |
| }; | | }; | |
| | | | |
| typedef std::deque<PdfErrorInfo> TDequeErrorInfo; | | typedef std::deque<PdfErrorInfo> TDequeErrorInfo; | |
| typedef TDequeErrorInfo::iterator TIDequeErrorInfo; | | typedef TDequeErrorInfo::iterator TIDequeErrorInfo; | |
| typedef TDequeErrorInfo::const_iterator TCIDequeErrorInfo; | | typedef TDequeErrorInfo::const_iterator TCIDequeErrorInfo; | |
| | | | |
| // This is required to generate the documentation with Doxygen. | | // This is required to generate the documentation with Doxygen. | |
| // Without this define doxygen thinks we have a class called PODOFO_EXCEPTI
ON_API(PODOFO_API) ... | | // Without this define doxygen thinks we have a class called PODOFO_EXCEPTI
ON_API(PODOFO_API) ... | |
| #define PODOFO_EXCEPTION_API_DOXYGEN PODOFO_EXCEPTION_API(PODOFO_API) | | #define PODOFO_EXCEPTION_API_DOXYGEN PODOFO_EXCEPTION_API(PODOFO_API) | |
| | | | |
| | | | |
| skipping to change at line 280 | | skipping to change at line 288 | |
| */ | | */ | |
| inline void SetError( const EPdfError & eCode, const char* pszFile = NU
LL, int line = 0, const char* pszInformation = NULL ); | | inline void SetError( const EPdfError & eCode, const char* pszFile = NU
LL, int line = 0, const char* pszInformation = NULL ); | |
| | | | |
| /** Set additional error informatiom | | /** Set additional error informatiom | |
| * \param pszInformation additional information on the error. | | * \param pszInformation additional information on the error. | |
| * e.g. how to fix the error. This string is intended to | | * e.g. how to fix the error. This string is intended to | |
| * be shown to the user. | | * be shown to the user. | |
| */ | | */ | |
| inline void SetErrorInformation( const char* pszInformation ); | | inline void SetErrorInformation( const char* pszInformation ); | |
| | | | |
|
| /** Add callstack information to an error object. Always call this func | | /** Set additional error informatiom | |
| tion | | * \param pszInformation additional information on the error. | |
| | | * e.g. how to fix the error. This string is intended to | |
| | | * be shown to the user. | |
| | | */ | |
| | | inline void SetErrorInformation( const wchar_t* pszInformation ); | |
| | | | |
| | | /** Add callstack information to an error object. Always call this f | |
| | | unction | |
| * if you get an error object but do not handle the error but throw it
again. | | * if you get an error object but do not handle the error but throw it
again. | |
| * | | * | |
| * \param pszFile the filename of the source file causing | | * \param pszFile the filename of the source file causing | |
| * the error or NULL. Typically you will use | | * the error or NULL. Typically you will use | |
| * the gcc macro __FILE__ here. | | * the gcc macro __FILE__ here. | |
| * \param line the line of source causing the error | | * \param line the line of source causing the error | |
| * or 0. Typically you will use the gcc | | * or 0. Typically you will use the gcc | |
| * macro __LINE__ here. | | * macro __LINE__ here. | |
| * \param pszInformation additional information on the error. | | * \param pszInformation additional information on the error. | |
| * e.g. how to fix the error. This string is intended to | | * e.g. how to fix the error. This string is intended to | |
| | | | |
| skipping to change at line 329 | | skipping to change at line 344 | |
| * is available. | | * is available. | |
| */ | | */ | |
| static const char* ErrorMessage( EPdfError eCode ); | | static const char* ErrorMessage( EPdfError eCode ); | |
| | | | |
| /** Log a message to the logging system defined for PoDoFo. | | /** Log a message to the logging system defined for PoDoFo. | |
| * \param eLogSeverity the sevirity of the log message | | * \param eLogSeverity the sevirity of the log message | |
| * \param pszMsg the message to be logged | | * \param pszMsg the message to be logged | |
| */ | | */ | |
| static void LogMessage( ELogSeverity eLogSeverity, const char* pszMsg,
... ); | | static void LogMessage( ELogSeverity eLogSeverity, const char* pszMsg,
... ); | |
| | | | |
|
| | | /** Log a message to the logging system defined for PoDoFo. | |
| | | * \param eLogSeverity the sevirity of the log message | |
| | | * \param pszMsg the message to be logged | |
| | | */ | |
| | | static void LogMessage( ELogSeverity eLogSeverity, const wchar_t* pszMs | |
| | | g, ... ); | |
| | | | |
| | | /** Enable or disable Logging | |
| | | * \param bEnable enable (true) or disable (false) | |
| | | */ | |
| | | static void EnableLogging( bool bEnable ) { PdfError::s_LogEnabled = bE | |
| | | nable; } | |
| | | | |
| | | /** Is the display of debugging messages enabled or not? | |
| | | */ | |
| | | static bool LoggingEnabled() { return PdfError::s_LogEnabled; } | |
| | | | |
| /** Log a message to the logging system defined for PoDoFo for debuggin
g | | /** Log a message to the logging system defined for PoDoFo for debuggin
g | |
| * \param pszMsg the message to be logged | | * \param pszMsg the message to be logged | |
| */ | | */ | |
| static void DebugMessage( const char* pszMsg, ... ); | | static void DebugMessage( const char* pszMsg, ... ); | |
| | | | |
| /** Enable or disable the display of debugging messages | | /** Enable or disable the display of debugging messages | |
| * \param bEnable enable (true) or disable (false) | | * \param bEnable enable (true) or disable (false) | |
| */ | | */ | |
| static void EnableDebug( bool bEnable ) { PdfError::s_DgbEnabled = bEna
ble; } | | static void EnableDebug( bool bEnable ) { PdfError::s_DgbEnabled = bEna
ble; } | |
| | | | |
| /** Is the display of debugging messages enabled or not? | | /** Is the display of debugging messages enabled or not? | |
| */ | | */ | |
| static bool DebugEnabled() { return PdfError::s_DgbEnabled; } | | static bool DebugEnabled() { return PdfError::s_DgbEnabled; } | |
| | | | |
| private: | | private: | |
| EPdfError m_error; | | EPdfError m_error; | |
| | | | |
| TDequeErrorInfo m_callStack; | | TDequeErrorInfo m_callStack; | |
| | | | |
| static bool s_DgbEnabled; | | static bool s_DgbEnabled; | |
|
| | | static bool s_LogEnabled; | |
| }; | | }; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| EPdfError PdfError::GetError() const | | EPdfError PdfError::GetError() const | |
| { | | { | |
| return m_error; | | return m_error; | |
| } | | } | |
| | | | |
| | | | |
| skipping to change at line 396 | | skipping to change at line 427 | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| void PdfError::SetErrorInformation( const char* pszInformation ) | | void PdfError::SetErrorInformation( const char* pszInformation ) | |
| { | | { | |
| if( m_callStack.size() ) | | if( m_callStack.size() ) | |
| m_callStack.front().SetInformation( pszInformation ? pszInformation
: "" ); | | m_callStack.front().SetInformation( pszInformation ? pszInformation
: "" ); | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
|
| | | void PdfError::SetErrorInformation( const wchar_t* pszInformation ) | |
| | | { | |
| | | if( m_callStack.size() ) | |
| | | m_callStack.front().SetInformation( pszInformation ? pszInformation | |
| | | : L"" ); | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| bool PdfError::IsError() const | | bool PdfError::IsError() const | |
| { | | { | |
| return (m_error != ePdfError_ErrOk); | | return (m_error != ePdfError_ErrOk); | |
| } | | } | |
| | | | |
| }; | | }; | |
| | | | |
| #endif /* _PDF_ERROR_H_ */ | | #endif /* _PDF_ERROR_H_ */ | |
| | | | |
End of changes. 11 change blocks. |
| 7 lines changed or deleted | | 52 lines changed or added | |
|
| PdfFont.h | | PdfFont.h | |
| | | | |
| skipping to change at line 27 | | skipping to change at line 27 | |
| * Free Software Foundation, Inc.,
* | | * Free Software Foundation, Inc.,
* | |
| * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* | | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* | |
| **************************************************************************
*/ | | **************************************************************************
*/ | |
| | | | |
| #ifndef _PDF_FONT_H_ | | #ifndef _PDF_FONT_H_ | |
| #define _PDF_FONT_H_ | | #define _PDF_FONT_H_ | |
| | | | |
| #include "PdfDefines.h" | | #include "PdfDefines.h" | |
| #include "PdfName.h" | | #include "PdfName.h" | |
| #include "PdfElement.h" | | #include "PdfElement.h" | |
|
| #include "PdfEncoding.h" | | #include "PdfEncodingFactory.h" | |
| #include "PdfFontMetrics.h" | | #include "PdfFontMetrics.h" | |
| | | | |
| namespace PoDoFo { | | namespace PoDoFo { | |
| | | | |
| class PdfObject; | | class PdfObject; | |
| class PdfPage; | | class PdfPage; | |
| class PdfWriter; | | class PdfWriter; | |
| | | | |
| /** Before you can draw text on a PDF document, you have to create | | /** Before you can draw text on a PDF document, you have to create | |
| * a font object first. You can reuse this font object as often | | * a font object first. You can reuse this font object as often | |
| | | | |
| skipping to change at line 51 | | skipping to change at line 51 | |
| * It will choose a correct subclass using PdfFontFactory. | | * It will choose a correct subclass using PdfFontFactory. | |
| * | | * | |
| * This is only an abstract base class which is implemented | | * This is only an abstract base class which is implemented | |
| * for different font formats. | | * for different font formats. | |
| */ | | */ | |
| class PODOFO_API PdfFont : public PdfElement { | | class PODOFO_API PdfFont : public PdfElement { | |
| friend class PdfFontFactory; | | friend class PdfFontFactory; | |
| | | | |
| public: | | public: | |
| | | | |
|
| /** Always use this static declaration, | | | |
| * if you need an instance of PdfWinAnsiEncoding | | | |
| * as heap allocation is expensive for PdfWinAnsiEncoding. | | | |
| */ | | | |
| static const PdfWinAnsiEncoding WinAnsiEncoding; | | | |
| | | | |
| /** Always use this static declaration, | | | |
| * if you need an instance of PdfWinAnsiEncoding | | | |
| * as heap allocation is expensive for PdfWinAnsiEncoding. | | | |
| */ | | | |
| static const PdfMacRomanEncoding MacRomanEncoding; | | | |
| | | | |
| /** Create a new PdfFont object which will introduce itself | | /** Create a new PdfFont object which will introduce itself | |
| * automatically to every page object it is used on. | | * automatically to every page object it is used on. | |
| * | | * | |
| * The font has a default font size of 12.0pt. | | * The font has a default font size of 12.0pt. | |
| * | | * | |
| * \param pMetrics pointer to a font metrics object. The font in the P
DF | | * \param pMetrics pointer to a font metrics object. The font in the P
DF | |
| * file will match this fontmetrics object. The metrics object
is | | * file will match this fontmetrics object. The metrics object
is | |
| * deleted along with the font. | | * deleted along with the font. | |
| * \param pEncoding the encoding of this font. The font will not take
ownership of this object. | | * \param pEncoding the encoding of this font. The font will not take
ownership of this object. | |
| * \param pParent parent of the font object | | * \param pParent parent of the font object | |
| * | | * | |
| */ | | */ | |
| PdfFont( PdfFontMetrics* pMetrics, const PdfEncoding* const pEncoding,
PdfVecObjects* pParent ); | | PdfFont( PdfFontMetrics* pMetrics, const PdfEncoding* const pEncoding,
PdfVecObjects* pParent ); | |
| | | | |
|
| | | /** Create a PdfFont based on an existing PdfObject | |
| | | * \param pMetrics pointer to a font metrics object. The font in the P | |
| | | DF | |
| | | * file will match this fontmetrics object. The metrics object | |
| | | is | |
| | | * deleted along with the font. | |
| | | * \param pEncoding the encoding of this font. The font will not take | |
| | | ownership of this object. | |
| | | * \param pObject an existing PdfObject | |
| | | */ | |
| | | PdfFont( PdfFontMetrics* pMetrics, const PdfEncoding* const pEncoding, | |
| | | PdfObject* pObject ); | |
| | | | |
| virtual ~PdfFont(); | | virtual ~PdfFont(); | |
| | | | |
| /** Set the font size before drawing with this font. | | /** Set the font size before drawing with this font. | |
| * \param fSize font size in points | | * \param fSize font size in points | |
| */ | | */ | |
| inline void SetFontSize( float fSize ); | | inline void SetFontSize( float fSize ); | |
| | | | |
| /** Retrieve the current font size of this font object | | /** Retrieve the current font size of this font object | |
| * \returns the current font size | | * \returns the current font size | |
| */ | | */ | |
| | | | |
End of changes. 3 change blocks. |
| 13 lines changed or deleted | | 14 lines changed or added | |
|
| PdfFontCache.h | | PdfFontCache.h | |
| | | | |
| skipping to change at line 26 | | skipping to change at line 26 | |
| * License along with this program; if not, write to the
* | | * License along with this program; if not, write to the
* | |
| * Free Software Foundation, Inc.,
* | | * Free Software Foundation, Inc.,
* | |
| * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* | | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* | |
| **************************************************************************
*/ | | **************************************************************************
*/ | |
| | | | |
| #ifndef _PDF_FONT_CACHE_H_ | | #ifndef _PDF_FONT_CACHE_H_ | |
| #define _PDF_FONT_CACHE_H_ | | #define _PDF_FONT_CACHE_H_ | |
| | | | |
| #include "PdfDefines.h" | | #include "PdfDefines.h" | |
| #include "Pdf3rdPtyForwardDecl.h" | | #include "Pdf3rdPtyForwardDecl.h" | |
|
| | | #include "PdfEncoding.h" | |
| | | #include "PdfEncodingFactory.h" | |
| #include "PdfFont.h" | | #include "PdfFont.h" | |
| | | | |
| namespace PoDoFo { | | namespace PoDoFo { | |
| | | | |
| class PdfFontMetrics; | | class PdfFontMetrics; | |
| class PdfVecObjects; | | class PdfVecObjects; | |
| | | | |
| /** A private structure, | | /** A private structure, | |
| * which represents a font in the cache. | | * which represents a font in the cache. | |
| */ | | */ | |
| struct TFontCacheElement { | | struct TFontCacheElement { | |
| TFontCacheElement() | | TFontCacheElement() | |
| : m_pFont( NULL ), | | : m_pFont( NULL ), | |
|
| m_pEncoding( NULL ), | | m_pEncoding( NULL ), | |
| m_bBold( false ), | | m_bBold( false ), | |
| m_bItalic( false ) | | m_bItalic( false ) | |
| { | | { | |
| } | | } | |
| | | | |
|
| | | TFontCacheElement( const char* pszFontName, bool bBold, bool bItalic, | |
| | | const PdfEncoding * const pEncoding ) | |
| | | : m_pFont(NULL), m_pEncoding( pEncoding ), m_bBold( bBold ), | |
| | | m_bItalic( bItalic ), m_sFontName( reinterpret_cast<const pdf_utf | |
| | | 8*>(pszFontName) ) | |
| | | { | |
| | | } | |
| | | | |
| | | #ifdef _WIN32 | |
| | | TFontCacheElement( const wchar_t* pszFontName, bool bBold, bool bItalic | |
| | | , | |
| | | const PdfEncoding * const pEncoding ) | |
| | | : m_pFont(NULL), m_pEncoding( pEncoding ), m_bBold( bBold ), | |
| | | m_bItalic( bItalic ), m_sFontName( pszFontName ) | |
| | | { | |
| | | } | |
| | | #endif // _WIN32 | |
| | | | |
| TFontCacheElement( const TFontCacheElement & rhs ) | | TFontCacheElement( const TFontCacheElement & rhs ) | |
| { | | { | |
| this->operator=(rhs); | | this->operator=(rhs); | |
| } | | } | |
| | | | |
| const TFontCacheElement & operator=( const TFontCacheElement & rhs ) | | const TFontCacheElement & operator=( const TFontCacheElement & rhs ) | |
| { | | { | |
| m_pFont = rhs.m_pFont; | | m_pFont = rhs.m_pFont; | |
| m_pEncoding = rhs.m_pEncoding; | | m_pEncoding = rhs.m_pEncoding; | |
| m_bBold = rhs.m_bBold; | | m_bBold = rhs.m_bBold; | |
| | | | |
| skipping to change at line 79 | | skipping to change at line 97 | |
| else | | else | |
| return m_bBold < rhs.m_bBold; | | return m_bBold < rhs.m_bBold; | |
| } | | } | |
| else | | else | |
| return *m_pEncoding < *rhs.m_pEncoding; | | return *m_pEncoding < *rhs.m_pEncoding; | |
| } | | } | |
| else | | else | |
| return (m_sFontName < rhs.m_sFontName); | | return (m_sFontName < rhs.m_sFontName); | |
| } | | } | |
| | | | |
|
| | | inline bool operator()( const TFontCacheElement& r1, | |
| | | const TFontCacheElement& r2 ) const | |
| | | { | |
| | | return r1 < r2; | |
| | | } | |
| | | | |
| PdfFont* m_pFont; | | PdfFont* m_pFont; | |
| const PdfEncoding* m_pEncoding; | | const PdfEncoding* m_pEncoding; | |
| bool m_bBold; | | bool m_bBold; | |
| bool m_bItalic; | | bool m_bItalic; | |
|
| std::string m_sFontName; | | PdfString m_sFontName; ///< We use PdfString here as it can ea
sily handle unicode on windows | |
| }; | | }; | |
| | | | |
| /** | | /** | |
| * This class assists PdfDocument | | * This class assists PdfDocument | |
| * with caching font information. | | * with caching font information. | |
| * | | * | |
| * Additional to font caching, this class is also | | * Additional to font caching, this class is also | |
| * responsible for font matching. | | * responsible for font matching. | |
| * | | * | |
| * PdfFont is an actual font that can be used in | | * PdfFont is an actual font that can be used in | |
| * a PDF file (i.e. it does also font embedding) | | * a PDF file (i.e. it does also font embedding) | |
| * and PdfFontMetrics provides only metrics informations. | | * and PdfFontMetrics provides only metrics informations. | |
| * | | * | |
| * This class is an internal class of PoDoFo | | * This class is an internal class of PoDoFo | |
| * and should not be used in user applications | | * and should not be used in user applications | |
| * | | * | |
| * \see PdfDocument | | * \see PdfDocument | |
| */ | | */ | |
| class PODOFO_API PdfFontCache { | | class PODOFO_API PdfFontCache { | |
|
| | | typedef std::vector<TFontCacheElement> TSortedFontList; | |
| | | typedef TSortedFontList::iterator TISortedFontList; | |
| | | typedef TSortedFontList::const_iterator TCISortedFontList; | |
| | | | |
| public: | | public: | |
| /** Create an empty font cache | | /** Create an empty font cache | |
| * | | * | |
| * \param pParent a PdfVecObjects which is required | | * \param pParent a PdfVecObjects which is required | |
| * to create new font objects | | * to create new font objects | |
| */ | | */ | |
| PdfFontCache( PdfVecObjects* pParent ); | | PdfFontCache( PdfVecObjects* pParent ); | |
| | | | |
| /** Destroy and empty the font cache | | /** Destroy and empty the font cache | |
| */ | | */ | |
| ~PdfFontCache(); | | ~PdfFontCache(); | |
| | | | |
| /** | | /** | |
| * Empty the internal font cache. | | * Empty the internal font cache. | |
| * This should be done when ever a new document | | * This should be done when ever a new document | |
| * is created or openened. | | * is created or openened. | |
| */ | | */ | |
| void EmptyCache(); | | void EmptyCache(); | |
| | | | |
| /** Get a font from the cache. If the font does not yet | | /** Get a font from the cache. If the font does not yet | |
|
| | | * exist, add it to the cache. This font is created | |
| | | * from an existing object. | |
| | | * | |
| | | * \param pObject a PdfObject that is a font | |
| | | * | |
| | | * \returns a PdfFont object or NULL if the font could | |
| | | * not be created or found. | |
| | | */ | |
| | | PdfFont* GetFont( PdfObject* pObject ); | |
| | | | |
| | | /** Get a font from the cache. If the font does not yet | |
| * exist, add it to the cache. | | * exist, add it to the cache. | |
| * | | * | |
| * \param pszFontName a valid fontname | | * \param pszFontName a valid fontname | |
| * \param bBold if true search for a bold font | | * \param bBold if true search for a bold font | |
| * \param bItalic if true search for an italic font | | * \param bItalic if true search for an italic font | |
| * \param bEmbedd if true a font for embedding into | | * \param bEmbedd if true a font for embedding into | |
| * PDF will be created | | * PDF will be created | |
| * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | | * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | |
| * \param optional: pszFileName path to a valid font file | | * \param optional: pszFileName path to a valid font file | |
| * | | * | |
| * \returns a PdfFont object or NULL if the font could | | * \returns a PdfFont object or NULL if the font could | |
| * not be created or found. | | * not be created or found. | |
| */ | | */ | |
| PdfFont* GetFont( const char* pszFontName, bool bBold, bool bItalic, | | PdfFont* GetFont( const char* pszFontName, bool bBold, bool bItalic, | |
|
| bool bEmbedd, const PdfEncoding * const = &PdfFont::W | | bool bEmbedd, | |
| inAnsiEncoding, | | const PdfEncoding * const = PdfEncodingFactory::Global | |
| | | PdfDocEncodingInstance(), | |
| const char* pszFileName = NULL ); | | const char* pszFileName = NULL ); | |
| | | | |
|
| | | #ifdef _WIN32 | |
| | | /** Get a font from the cache. If the font does not yet | |
| | | * exist, add it to the cache. | |
| | | * | |
| | | * \param pszFontName a valid fontname | |
| | | * \param bBold if true search for a bold font | |
| | | * \param bItalic if true search for an italic font | |
| | | * \param bEmbedd if true a font for embedding into | |
| | | * PDF will be created | |
| | | * \param pEncoding the encoding of the font. The font will not take o | |
| | | wnership of this object. | |
| | | * | |
| | | * \returns a PdfFont object or NULL if the font could | |
| | | * not be created or found. | |
| | | * | |
| | | * This is an overloaded member function to allow working | |
| | | * with unicode characters. On Unix systes you can also path | |
| | | * UTF-8 to the const char* overload. | |
| | | */ | |
| | | PdfFont* GetFont( const wchar_t* pszFontName, bool bBold, bool bItalic, | |
| | | bool bEmbedd, const PdfEncoding * const = PdfEncoding | |
| | | Factory::GlobalPdfDocEncodingInstance() ); | |
| | | #endif // _WIN32 | |
| | | | |
| /** Get a font from the cache. If the font does not yet | | /** Get a font from the cache. If the font does not yet | |
| * exist, add it to the cache. | | * exist, add it to the cache. | |
| * | | * | |
| * \param face a valid freetype font face (will be free'd by PoDoFo) | | * \param face a valid freetype font face (will be free'd by PoDoFo) | |
| * \param bEmbedd if true a font for embedding into | | * \param bEmbedd if true a font for embedding into | |
| * PDF will be created | | * PDF will be created | |
| * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | | * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | |
| * | | * | |
| * \returns a PdfFont object or NULL if the font could | | * \returns a PdfFont object or NULL if the font could | |
| * not be created or found. | | * not be created or found. | |
| */ | | */ | |
|
| PdfFont* GetFont( FT_Face face, bool bEmbedd, const PdfEncoding * const
= &PdfFont::WinAnsiEncoding ); | | PdfFont* GetFont( FT_Face face, bool bEmbedd, const PdfEncoding * const
= PdfEncodingFactory::GlobalPdfDocEncodingInstance() ); | |
| | | | |
| /** Get a fontsubset from the cache. If the font does not yet | | /** Get a fontsubset from the cache. If the font does not yet | |
| * exist, add it to the cache. | | * exist, add it to the cache. | |
| * | | * | |
| * \param pszFontName a valid fontname | | * \param pszFontName a valid fontname | |
| * \param bBold if true search for a bold font | | * \param bBold if true search for a bold font | |
| * \param bItalic if true search for an italic font | | * \param bItalic if true search for an italic font | |
|
| * \param vecGlyphs a list of Unicode glyph indeces that should be emb | | * \param pEncoding the encoding of the font. All characters | |
| edded in the subset | | * of the encoding will be included in this subset. | |
| | | * The font will not take ownership of this object. | |
| | | * \param optional: pszFileName path to a valid font file | |
| * | | * | |
| * \returns a PdfFont object or NULL if the font could | | * \returns a PdfFont object or NULL if the font could | |
| * not be created or found. | | * not be created or found. | |
| */ | | */ | |
|
| /* | | PdfFont* GetFontSubset( const char* pszFontName, bool bBold, bool bItal | |
| PdfFont* GetFontSubset( const char* pszFontName, bool bBold, | | ic, | |
| bool bItalic, const std::vector<int> & vecGlyph | | const PdfEncoding * const = PdfEncodingFactory:: | |
| s ); | | GlobalPdfDocEncodingInstance(), | |
| */ | | const char* pszFileName = NULL); | |
| | | | |
| #if defined(HAVE_FONTCONFIG) | | #if defined(HAVE_FONTCONFIG) | |
| /** Get the path of a font file on a Unix system using fontconfig | | /** Get the path of a font file on a Unix system using fontconfig | |
| * | | * | |
| * This method is only available if PoDoFo was compiled with | | * This method is only available if PoDoFo was compiled with | |
| * fontconfig support. | | * fontconfig support. | |
| * | | * | |
| * \param pConfig a handle to an initialized fontconfig library | | * \param pConfig a handle to an initialized fontconfig library | |
| * \param pszFontName name of the requested font | | * \param pszFontName name of the requested font | |
| * \param bBold if true find a bold font | | * \param bBold if true find a bold font | |
| * \param bItalic if true find an italic font | | * \param bItalic if true find an italic font | |
| * \returns the path to the fontfile or an empty string | | * \returns the path to the fontfile or an empty string | |
| */ | | */ | |
| static std::string GetFontConfigFontPath( FcConfig* pConfig, const char
* pszFontName, bool bBold, bool bItalic ); | | static std::string GetFontConfigFontPath( FcConfig* pConfig, const char
* pszFontName, bool bBold, bool bItalic ); | |
|
| #endif // (HAVE_FONTCONFIG) | | #endif // defined(HAVE_FONTCONFIG) | |
| | | | |
| | | // Peter Petrov: 26 April 2008 | |
| | | /** Returns the font library from font cache | |
| | | * | |
| | | * \returns the internal handle to the freetype library | |
| | | */ | |
| | | inline FT_Library GetFontLibrary() const; | |
| | | | |
| private: | | private: | |
| /** | | /** | |
| * Get the path to a font file for a certain fontname | | * Get the path to a font file for a certain fontname | |
| * | | * | |
| * \param pszFontName a valid fontname | | * \param pszFontName a valid fontname | |
| * \param bBold if true search for a bold font | | * \param bBold if true search for a bold font | |
| * \param bItalic if true search for an italic font | | * \param bItalic if true search for an italic font | |
| * | | * | |
| * \returns the path to the fonts file if it was found. | | * \returns the path to the fonts file if it was found. | |
| */ | | */ | |
| std::string GetFontPath( const char* pszFontName, bool bBold, bool bIta
lic ); | | std::string GetFontPath( const char* pszFontName, bool bBold, bool bIta
lic ); | |
| | | | |
| /** Create a font and put it into the fontcache | | /** Create a font and put it into the fontcache | |
|
| | | * | |
| | | * \param itSorted iterator pointing to a location in vecContainer | |
| | | * where a sorted insert can be made | |
| | | * \param vecContainer container where the font object should be added | |
| * \param pMetrics a font metrics | | * \param pMetrics a font metrics | |
| * \param bEmbedd if true the font will be embedded in the pdf file | | * \param bEmbedd if true the font will be embedded in the pdf file | |
| * \param bBold if true this font will be treated as bold font | | * \param bBold if true this font will be treated as bold font | |
| * \param bItalic if true this font will be treated as italic font | | * \param bItalic if true this font will be treated as italic font | |
| * \param pszFontName a font name for debug output | | * \param pszFontName a font name for debug output | |
| * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | | * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | |
| * | | * | |
| * \returns a font handle or NULL in case of error | | * \returns a font handle or NULL in case of error | |
| */ | | */ | |
|
| PdfFont* CreateFontObject( PdfFontMetrics* pMetrics, bool bEmbedd, bool | | PdfFont* CreateFontObject( TISortedFontList itSorted, TSortedFontList & | |
| bBold, | | vecContainer, | |
| | | PdfFontMetrics* pMetrics, bool bEmbedd, bool | |
| | | bBold, | |
| bool bItalic, const char* pszFontName, const
PdfEncoding * const pEncoding ); | | bool bItalic, const char* pszFontName, const
PdfEncoding * const pEncoding ); | |
| | | | |
| /** Create a font subset. | | /** Create a font subset. | |
| * \param pMetrics a font metrics | | * \param pMetrics a font metrics | |
| * \param pszFontName a font name for debug output | | * \param pszFontName a font name for debug output | |
| * \param bBold if true this font will be treated as bold font | | * \param bBold if true this font will be treated as bold font | |
| * \param bItalic if true this font will be treated as italic font | | * \param bItalic if true this font will be treated as italic font | |
|
| * \param vecGlyphs the list of all glyphs that should get embedded in
to this subset | | * \param vecCharacters a list of Unicode character indeces that shoul
d be embedded in the subset | |
| * | | * | |
| * \returns a font handle or NULL in case of error | | * \returns a font handle or NULL in case of error | |
| */ | | */ | |
| /* | | /* | |
| PdfFont* CreateFontSubset( PdfFontMetrics* pMetrics, const char* pszFon
tName, bool bBold, | | PdfFont* CreateFontSubset( PdfFontMetrics* pMetrics, const char* pszFon
tName, bool bBold, | |
|
| bool bItalic, const std::vector<int> & vecGl
yphs ); | | bool bItalic, const std::vector<int> & vecCh
aracters ); | |
| */ | | */ | |
| #ifdef _WIN32 | | #ifdef _WIN32 | |
| /** Load and create a font with windows API calls | | /** Load and create a font with windows API calls | |
| * | | * | |
| * This method is only available on Windows systems. | | * This method is only available on Windows systems. | |
| * | | * | |
|
| * \param pszFontName a fontnanme | | * \param itSorted iterator pointing to a location in vecContainer | |
| | | * where a sorted insert can be made | |
| | | * \param vecContainer container where the font object should be added | |
| | | * \param pszFontName a fontname | |
| * \param bBold if true search for a bold font | | * \param bBold if true search for a bold font | |
| * \param bItalic if true search for an italic font | | * \param bItalic if true search for an italic font | |
| * \param bEmbedd if true embedd the font | | * \param bEmbedd if true embedd the font | |
| * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | | * \param pEncoding the encoding of the font. The font will not take o
wnership of this object. | |
| * | | * | |
| * \returns a font handle or NULL in case of error | | * \returns a font handle or NULL in case of error | |
| */ | | */ | |
|
| PdfFont* GetWin32Font( const char* pszFontName, bool bBold, bool bItali | | PdfFont* GetWin32Font( TISortedFontList itSorted, TSortedFontList & vec | |
| c, bool bEmbedd, const PdfEncoding * const pEncoding ); | | Container, const char* pszFontName, | |
| | | bool bBold, bool bItalic, bool bEmbed | |
| | | d, const PdfEncoding * const pEncoding ); | |
| | | | |
| | | PdfFont* GetWin32Font( TISortedFontList itSorted, TSortedFontList & vec | |
| | | Container, const wchar_t* pszFontName, | |
| | | bool bBold, bool bItalic, bool bEmbed | |
| | | d, const PdfEncoding * const pEncoding ); | |
| #endif // _WIN32 | | #endif // _WIN32 | |
| | | | |
| private: | | private: | |
|
| typedef std::vector<TFontCacheElement> TSortedFontList; | | | |
| typedef TSortedFontList::iterator TISortedFontList; | | | |
| typedef TSortedFontList::const_iterator TCISortedFontList; | | | |
| | | | |
| TSortedFontList m_vecFonts; ///< Sorted list of all fonts,
currently in the cache | | TSortedFontList m_vecFonts; ///< Sorted list of all fonts,
currently in the cache | |
| TSortedFontList m_vecFontSubsets; | | TSortedFontList m_vecFontSubsets; | |
| FT_Library m_ftLibrary; ///< Handle to the freetype li
brary | | FT_Library m_ftLibrary; ///< Handle to the freetype li
brary | |
| | | | |
| void* m_pFcConfig; ///< Handle to fontconfig on u
nix systems | | void* m_pFcConfig; ///< Handle to fontconfig on u
nix systems | |
| | | | |
| PdfVecObjects* m_pParent; ///< Handle to parent for crea
ting new fonts and objects | | PdfVecObjects* m_pParent; ///< Handle to parent for crea
ting new fonts and objects | |
| }; | | }; | |
| | | | |
|
| | | // Peter Petrov: 26 April 2008 | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | FT_Library PdfFontCache::GetFontLibrary() const | |
| | | { | |
| | | return this->m_ftLibrary; | |
| | | } | |
| | | | |
| }; | | }; | |
| | | | |
| #endif /* _PDF_FONT_CACHE_H_ */ | | #endif /* _PDF_FONT_CACHE_H_ */ | |
| | | | |
End of changes. 21 change blocks. |
| 26 lines changed or deleted | | 122 lines changed or added | |
|
| PdfFontMetrics.h | | PdfFontMetrics.h | |
| | | | |
| skipping to change at line 35 | | skipping to change at line 35 | |
| #include "Pdf3rdPtyForwardDecl.h" | | #include "Pdf3rdPtyForwardDecl.h" | |
| #include "PdfString.h" | | #include "PdfString.h" | |
| | | | |
| #ifndef PODOFO_CONVERSION_CONSTANT | | #ifndef PODOFO_CONVERSION_CONSTANT | |
| #define PODOFO_CONVERSION_CONSTANT 0.002834645669291339 | | #define PODOFO_CONVERSION_CONSTANT 0.002834645669291339 | |
| #endif // PODOFO_CONVERSION_CONSTANT | | #endif // PODOFO_CONVERSION_CONSTANT | |
| | | | |
| namespace PoDoFo { | | namespace PoDoFo { | |
| | | | |
| class PdfArray; | | class PdfArray; | |
|
| | | class PdfObject; | |
| class PdfVariant; | | class PdfVariant; | |
| | | | |
| /** | | /** | |
| * Enum for the different font formats supported by PoDoFo | | * Enum for the different font formats supported by PoDoFo | |
| */ | | */ | |
| enum EPdfFontType { | | enum EPdfFontType { | |
| ePdfFontType_TrueType, | | ePdfFontType_TrueType, | |
| ePdfFontType_Type1Pfa, | | ePdfFontType_Type1Pfa, | |
| ePdfFontType_Type1Pfb, | | ePdfFontType_Type1Pfb, | |
| | | | |
| ePdfFontType_Unknown = 0xff | | ePdfFontType_Unknown = 0xff | |
| }; | | }; | |
| | | | |
| class PODOFO_API PdfFontMetrics { | | class PODOFO_API PdfFontMetrics { | |
| public: | | public: | |
| /** Create a font metrics object for a given true type file | | /** Create a font metrics object for a given true type file | |
| * \param pLibrary handle to an initialized FreeType2 library handle | | * \param pLibrary handle to an initialized FreeType2 library handle | |
| * \param pszFilename filename of a truetype file | | * \param pszFilename filename of a truetype file | |
|
| | | * \param pszSubsetPrefix unique prefix for font subsets (see GetFontS
ubsetPrefix) | |
| */ | | */ | |
|
| PdfFontMetrics( FT_Library* pLibrary, const char* pszFilename ); | | PdfFontMetrics( FT_Library* pLibrary, const char* pszFilename, | |
| | | const char* pszSubsetPrefix = NULL ); | |
| | | | |
| /** Create a font metrics object for a given memory buffer | | /** Create a font metrics object for a given memory buffer | |
| * \param pLibrary handle to an initialized FreeType2 library handle | | * \param pLibrary handle to an initialized FreeType2 library handle | |
| * \param pBuffer block of memory representing the font data (PdfFontM
etrics will copy the buffer) | | * \param pBuffer block of memory representing the font data (PdfFontM
etrics will copy the buffer) | |
| * \param nBufLen the length of the buffer | | * \param nBufLen the length of the buffer | |
|
| */ | | * \param pszSubsetPrefix unique prefix for font subsets (see GetFontS | |
| PdfFontMetrics( FT_Library* pLibrary, const char* pBuffer, unsigned int | | ubsetPrefix) | |
| nBufLen ); | | */ | |
| | | PdfFontMetrics( FT_Library* pLibrary, const char* pBuffer, unsigned int | |
| | | nBufLen, | |
| | | const char* pszSubsetPrefix = NULL); | |
| | | | |
| /** Create a font metrics object for a given true type file | | /** Create a font metrics object for a given true type file | |
| * \param pLibrary handle to an initialized FreeType2 library handle | | * \param pLibrary handle to an initialized FreeType2 library handle | |
| * \param rBuffer a buffer containing a font file | | * \param rBuffer a buffer containing a font file | |
|
| | | * \param pszSubsetPrefix unique prefix for font subsets (see GetFontS
ubsetPrefix) | |
| */ | | */ | |
|
| PdfFontMetrics( FT_Library* pLibrary, const PdfRefCountedBuffer & rBuff | | PdfFontMetrics( FT_Library* pLibrary, const PdfRefCountedBuffer & rBuff | |
| er ); | | er, | |
| | | const char* pszSubsetPrefix = NULL); | |
| | | | |
| /** Create a font metrics object for a given freetype font. | | /** Create a font metrics object for a given freetype font. | |
| * \param pLibrary handle to an initialized FreeType2 library handle | | * \param pLibrary handle to an initialized FreeType2 library handle | |
| * \param face a valid freetype font face | | * \param face a valid freetype font face | |
|
| | | * \param pszSubsetPrefix unique prefix for font subsets (see GetFontS | |
| | | ubsetPrefix) | |
| | | */ | |
| | | PdfFontMetrics( FT_Library* pLibrary, FT_Face face, | |
| | | const char* pszSubsetPrefix = NULL); | |
| | | | |
| | | /** Create a font metrics object based on an existing PdfObject | |
| | | * | |
| | | * \param pLibrary handle to an initialized FreeType2 library handle | |
| | | * \param pObject an existing font descriptor object | |
| */ | | */ | |
|
| PdfFontMetrics( FT_Library* pLibrary, FT_Face face ); | | PdfFontMetrics( FT_Library* pLibrary, PdfObject* pDescriptor ); | |
| | | | |
| virtual ~PdfFontMetrics(); | | virtual ~PdfFontMetrics(); | |
| | | | |
| /** Create a width array for this font which is a required part | | /** Create a width array for this font which is a required part | |
| * of every font dictionary. | | * of every font dictionary. | |
| * \param var the final width array is written to this PdfVariant | | * \param var the final width array is written to this PdfVariant | |
| * \param nFirst first character to be in the array | | * \param nFirst first character to be in the array | |
| * \param nLast last character code to be in the array | | * \param nLast last character code to be in the array | |
| */ | | */ | |
| void GetWidthArray( PdfVariant & var, unsigned int nFirst, unsigned int
nLast ) const; | | void GetWidthArray( PdfVariant & var, unsigned int nFirst, unsigned int
nLast ) const; | |
| | | | |
| skipping to change at line 115 | | skipping to change at line 131 | |
| inline double StringWidth( const PdfString & rsString ) const; | | inline double StringWidth( const PdfString & rsString ) const; | |
| | | | |
| /** Retrieve the width of a given text string in PDF units when | | /** Retrieve the width of a given text string in PDF units when | |
| * drawn with the current font | | * drawn with the current font | |
| * \param pszText a text string of which the width should be calculate
d | | * \param pszText a text string of which the width should be calculate
d | |
| * \param nLength if != 0 only the width of the nLength first characte
rs is calculated | | * \param nLength if != 0 only the width of the nLength first characte
rs is calculated | |
| * \returns the width in PDF units | | * \returns the width in PDF units | |
| */ | | */ | |
| double StringWidth( const char* pszText, unsigned int nLength = 0 ) con
st; | | double StringWidth( const char* pszText, unsigned int nLength = 0 ) con
st; | |
| | | | |
|
| | | /** Retrieve the width of a given text string in PDF units when | |
| | | * drawn with the current font | |
| | | * \param pszText a text string of which the width should be calculate | |
| | | d | |
| | | * \param nLength if != 0 only the width of the nLength first characte | |
| | | rs is calculated | |
| | | * \returns the width in PDF units | |
| | | */ | |
| | | double StringWidth( const pdf_utf16be* pszText, unsigned int nLength = | |
| | | 0 ) const; | |
| | | | |
| | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // nicht f | |
| | | #else | |
| | | /** Retrieve the width of a given text string in PDF units when | |
| | | * drawn with the current font | |
| | | * \param pszText a text string of which the width should be calculate | |
| | | d | |
| | | * \param nLength if != 0 only the width of the nLength first characte | |
| | | rs is calculated | |
| | | * \returns the width in PDF units | |
| | | */ | |
| | | double StringWidth( const wchar_t* pszText, unsigned int nLength = 0 ) | |
| | | const; | |
| | | #endif | |
| | | | |
| /** Retrieve the width of a given text string in 1/1000th mm when | | /** Retrieve the width of a given text string in 1/1000th mm when | |
| * drawn with the current font | | * drawn with the current font | |
| * \param pszText a text string of which the width should be calculate
d | | * \param pszText a text string of which the width should be calculate
d | |
| * \param nLength if != 0 only the width of the nLength first characte
rs is calculated | | * \param nLength if != 0 only the width of the nLength first characte
rs is calculated | |
| * \returns the width in 1/1000th mm | | * \returns the width in 1/1000th mm | |
| */ | | */ | |
| unsigned long StringWidthMM( const char* pszText, unsigned int nLength
= 0 ) const; | | unsigned long StringWidthMM( const char* pszText, unsigned int nLength
= 0 ) const; | |
| | | | |
|
| | | /** Retrieve the width of a given text string in 1/1000th mm when | |
| | | * drawn with the current font | |
| | | * \param pszText a text string of which the width should be calculate | |
| | | d | |
| | | * \param nLength if != 0 only the width of the nLength first characte | |
| | | rs is calculated | |
| | | * \returns the width in 1/1000th mm | |
| | | */ | |
| | | unsigned long StringWidthMM( const pdf_utf16be* pszText, unsigned int n | |
| | | Length = 0 ) const; | |
| | | | |
| | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // nicht f | |
| | | #else | |
| | | /** Retrieve the width of a given text string in 1/1000th mm when | |
| | | * drawn with the current font | |
| | | * \param pszText a text string of which the width should be calculate | |
| | | d | |
| | | * \param nLength if != 0 only the width of the nLength first characte | |
| | | rs is calculated | |
| | | * \returns the width in 1/1000th mm | |
| | | */ | |
| | | unsigned long StringWidthMM( const wchar_t* pszText, unsigned int nLeng | |
| | | th = 0 ) const; | |
| | | #endif | |
| | | | |
| /** Retrieve the width of the given character in PDF units in the curre
nt font | | /** Retrieve the width of the given character in PDF units in the curre
nt font | |
| * \param c character | | * \param c character | |
| * \returns the width in PDF units | | * \returns the width in PDF units | |
| */ | | */ | |
| double CharWidth( unsigned char c ) const; | | double CharWidth( unsigned char c ) const; | |
| | | | |
| /** Retrieve the width of the given character in 1/1000th mm in the cur
rent font | | /** Retrieve the width of the given character in 1/1000th mm in the cur
rent font | |
| * \param c character | | * \param c character | |
| * \returns the width in 1/1000th mm | | * \returns the width in 1/1000th mm | |
| */ | | */ | |
| | | | |
| skipping to change at line 213 | | skipping to change at line 267 | |
| /** Get the length of the actual font data - if it was loaded from memo
ry. | | /** Get the length of the actual font data - if it was loaded from memo
ry. | |
| * \returns a the length of the font data | | * \returns a the length of the font data | |
| */ | | */ | |
| inline unsigned int GetFontDataLen() const; | | inline unsigned int GetFontDataLen() const; | |
| | | | |
| /** Get a string with the postscript name of the font. | | /** Get a string with the postscript name of the font. | |
| * \returns the postscript name of the font or NULL string if no posts
cript name is available. | | * \returns the postscript name of the font or NULL string if no posts
cript name is available. | |
| */ | | */ | |
| const char* GetFontname() const; | | const char* GetFontname() const; | |
| | | | |
|
| | | /** | |
| | | * \returns NULL or a 6 uppercase letter and "+" sign prefix | |
| | | * used for font subsets | |
| | | */ | |
| | | const char* GetSubsetFontnamePrefix() const; | |
| | | | |
| /** Get the weight of this font. | | /** Get the weight of this font. | |
| * Used to build the font dictionay | | * Used to build the font dictionay | |
| * \returns the weight of this font (500 is normal). | | * \returns the weight of this font (500 is normal). | |
| */ | | */ | |
| inline unsigned int GetWeight() const; | | inline unsigned int GetWeight() const; | |
| | | | |
| /** Get the ascent of this font in PDF | | /** Get the ascent of this font in PDF | |
| * units for the current font size. | | * units for the current font size. | |
| * | | * | |
| * \returns the ascender for this font | | * \returns the ascender for this font | |
| | | | |
| skipping to change at line 358 | | skipping to change at line 418 | |
| | | | |
| std::string m_sFilename; | | std::string m_sFilename; | |
| PdfRefCountedBuffer m_bufFontData; | | PdfRefCountedBuffer m_bufFontData; | |
| float m_fFontSize; | | float m_fFontSize; | |
| float m_fFontScale; | | float m_fFontScale; | |
| float m_fFontCharSpace; | | float m_fFontCharSpace; | |
| | | | |
| std::vector<double> m_vecWidth; | | std::vector<double> m_vecWidth; | |
| | | | |
| EPdfFontType m_eFontType; | | EPdfFontType m_eFontType; | |
|
| | | std::string m_sFontSubsetPrefix; | |
| }; | | }; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| double PdfFontMetrics::StringWidth( const PdfString & rsString ) const | | double PdfFontMetrics::StringWidth( const PdfString & rsString ) const | |
| { | | { | |
|
| return this->StringWidth( rsString.GetString() ); | | return (rsString.IsUnicode() ? this->StringWidth( rsString.GetUnicode(
) ) : this->StringWidth( rsString.GetString() )); | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| double PdfFontMetrics::GetLineSpacing() const | | double PdfFontMetrics::GetLineSpacing() const | |
| { | | { | |
| return m_dLineSpacing; | | return m_dLineSpacing; | |
| } | | } | |
| | | | |
| | | | |
End of changes. 13 change blocks. |
| 8 lines changed or deleted | | 83 lines changed or added | |
|
| PdfMemDocument.h | | PdfMemDocument.h | |
| | | | |
| skipping to change at line 84 | | skipping to change at line 84 | |
| * \param pszFilename filename of the file which is going to be parsed
/opened | | * \param pszFilename filename of the file which is going to be parsed
/opened | |
| * | | * | |
| * This might throw a PdfError( ePdfError_InvalidPassword ) exception | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| * if a password is required to read this PDF. | | * if a password is required to read this PDF. | |
| * Call SetPassword with the correct password in this case. | | * Call SetPassword with the correct password in this case. | |
| * | | * | |
| * \see SetPassword | | * \see SetPassword | |
| */ | | */ | |
| PdfMemDocument( const char* pszFilename ); | | PdfMemDocument( const char* pszFilename ); | |
| | | | |
|
| | | #ifdef _WIN32 | |
| | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // nicht f | |
| | | #else | |
| | | /** Construct a PdfMemDocument from an existing PDF (on disk) | |
| | | * \param pszFilename filename of the file which is going to be parsed | |
| | | /opened | |
| | | * | |
| | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| | | * if a password is required to read this PDF. | |
| | | * Call SetPassword with the correct password in this case. | |
| | | * | |
| | | * This is an overloaded member function to allow working | |
| | | * with unicode characters. On Unix systes you can also path | |
| | | * UTF-8 to the const char* overload. | |
| | | * | |
| | | * \see SetPassword | |
| | | */ | |
| | | PdfMemDocument( const wchar_t* pszFilename ); | |
| | | #endif | |
| | | #endif // _WIN32 | |
| | | | |
| /** Close down/destruct the PdfMemDocument | | /** Close down/destruct the PdfMemDocument | |
| */ | | */ | |
| virtual ~PdfMemDocument(); | | virtual ~PdfMemDocument(); | |
| | | | |
| /** Load a PdfMemDocument from a file | | /** Load a PdfMemDocument from a file | |
| * | | * | |
| * \param pszFilename filename of the file which is going to be parsed
/opened | | * \param pszFilename filename of the file which is going to be parsed
/opened | |
| * | | * | |
| * This might throw a PdfError( ePdfError_InvalidPassword ) exception | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| * if a password is required to read this PDF. | | * if a password is required to read this PDF. | |
| * Call SetPassword with the correct password in this case. | | * Call SetPassword with the correct password in this case. | |
| * | | * | |
| * \see SetPassword | | * \see SetPassword | |
| */ | | */ | |
| void Load( const char* pszFilename ); | | void Load( const char* pszFilename ); | |
| | | | |
|
| | | #ifdef _WIN32 | |
| | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // nicht f | |
| | | #else | |
| | | /** Load a PdfMemDocument from a file | |
| | | * | |
| | | * \param pszFilename filename of the file which is going to be parsed | |
| | | /opened | |
| | | * | |
| | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| | | * if a password is required to read this PDF. | |
| | | * Call SetPassword with the correct password in this case. | |
| | | * | |
| | | * This is an overloaded member function to allow working | |
| | | * with unicode characters. On Unix systes you can also path | |
| | | * UTF-8 to the const char* overload. | |
| | | * | |
| | | * \see SetPassword | |
| | | */ | |
| | | void Load( const wchar_t* pszFilename ); | |
| | | #endif | |
| | | #endif // _WIN32 | |
| | | | |
| /** Load a PdfMemDocument from a buffer in memory | | /** Load a PdfMemDocument from a buffer in memory | |
| * | | * | |
| * \param pBuffer a memory area containing the PDF data | | * \param pBuffer a memory area containing the PDF data | |
| * \param lLen length of the buffer | | * \param lLen length of the buffer | |
| * | | * | |
| * This might throw a PdfError( ePdfError_InvalidPassword ) exception | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| * if a password is required to read this PDF. | | * if a password is required to read this PDF. | |
| * Call SetPassword with the correct password in this case. | | * Call SetPassword with the correct password in this case. | |
| * | | * | |
| * \see SetPassword | | * \see SetPassword | |
| | | | |
| skipping to change at line 135 | | skipping to change at line 176 | |
| /** Writes the complete document to a file | | /** Writes the complete document to a file | |
| * | | * | |
| * \param pszFilename filename of the document | | * \param pszFilename filename of the document | |
| * | | * | |
| * \see Write | | * \see Write | |
| * | | * | |
| * This is an overloaded member function for your convinience. | | * This is an overloaded member function for your convinience. | |
| */ | | */ | |
| void Write( const char* pszFilename ); | | void Write( const char* pszFilename ); | |
| | | | |
|
| | | #ifdef _WIN32 | |
| | | /** Writes the complete document to a file | |
| | | * | |
| | | * \param pszFilename filename of the document | |
| | | * | |
| | | * \see Write | |
| | | * | |
| | | * This is an overloaded member function to allow working | |
| | | * with unicode characters. On Unix systes you can also path | |
| | | * UTF-8 to the const char* overload. | |
| | | * | |
| | | * This is an overloaded member function for your convinience. | |
| | | */ | |
| | | void Write( const wchar_t* pszFilename ); | |
| | | #endif // _WIN32 | |
| | | | |
| /** Writes the complete document to an output device | | /** Writes the complete document to an output device | |
| * | | * | |
| * \param pDevice write to this output device | | * \param pDevice write to this output device | |
| */ | | */ | |
| void Write( PdfOutputDevice* pDevice ); | | void Write( PdfOutputDevice* pDevice ); | |
| | | | |
| /** Set the PDF Version of the document. Has to be called before Write(
) to | | /** Set the PDF Version of the document. Has to be called before Write(
) to | |
| * have an effect. | | * have an effect. | |
| * \param eVersion version of the pdf document | | * \param eVersion version of the pdf document | |
| */ | | */ | |
| | | | |
| skipping to change at line 254 | | skipping to change at line 311 | |
| /** Get access to the StructTreeRoot dictionary | | /** Get access to the StructTreeRoot dictionary | |
| * \returns PdfObject the StructTreeRoot dictionary | | * \returns PdfObject the StructTreeRoot dictionary | |
| */ | | */ | |
| PdfObject* GetStructTreeRoot() const { return GetNamedObjectFromCatalog
( "StructTreeRoot" ); } | | PdfObject* GetStructTreeRoot() const { return GetNamedObjectFromCatalog
( "StructTreeRoot" ); } | |
| | | | |
| /** Get access to the Metadata stream | | /** Get access to the Metadata stream | |
| * \returns PdfObject the Metadata stream (should be in XML, using XMP
grammar) | | * \returns PdfObject the Metadata stream (should be in XML, using XMP
grammar) | |
| */ | | */ | |
| PdfObject* GetMetadata() const { return GetNamedObjectFromCatalog( "Met
adata" ); } | | PdfObject* GetMetadata() const { return GetNamedObjectFromCatalog( "Met
adata" ); } | |
| | | | |
|
| | | /** Creates a PdfFont object from an existing font. | |
| | | * | |
| | | * \param pObject a PdfObject that is a font | |
| | | | |
| | | * \returns PdfFont* a pointer to a new PdfFont object. | |
| | | * The returned object is owned by the PdfDocument. | |
| | | */ | |
| | | PdfFont* GetFont( PdfObject* pObject ); | |
| | | | |
| /** Copies one or more pages from another PdfMemDocument to this docume
nt | | /** Copies one or more pages from another PdfMemDocument to this docume
nt | |
| * \param rDoc the document to append | | * \param rDoc the document to append | |
| * \param inFirstPage the first page number to copy (0-based) | | * \param inFirstPage the first page number to copy (0-based) | |
| * \param inNumPages the number of pages to copy | | * \param inNumPages the number of pages to copy | |
| * \returns this document | | * \returns this document | |
| */ | | */ | |
| const PdfMemDocument & InsertPages( const PdfMemDocument & rDoc, int in
FirstPage, int inNumPages ); | | const PdfMemDocument & InsertPages( const PdfMemDocument & rDoc, int in
FirstPage, int inNumPages ); | |
| | | | |
| /** Deletes one or more pages from this document | | /** Deletes one or more pages from this document | |
| * \param inFirstPage the first page number to delete (0-based) | | * \param inFirstPage the first page number to delete (0-based) | |
| | | | |
| skipping to change at line 341 | | skipping to change at line 407 | |
| | | | |
| /** Checks if it is allowed to print a high quality version of this doc
ument | | /** Checks if it is allowed to print a high quality version of this doc
ument | |
| * Every PDF consuming applications has to adhere this value! | | * Every PDF consuming applications has to adhere this value! | |
| * | | * | |
| * \returns true if you are allowed to print a high quality version of
this document | | * \returns true if you are allowed to print a high quality version of
this document | |
| * | | * | |
| * \see PdfEncrypt to set own document permissions. | | * \see PdfEncrypt to set own document permissions. | |
| */ | | */ | |
| inline virtual bool IsHighPrintAllowed() const; | | inline virtual bool IsHighPrintAllowed() const; | |
| | | | |
|
| | | /** Tries to free all memory allocated by the given | |
| | | * PdfObject (variables and streams) and reads | |
| | | * it from disk again if it is requested another time. | |
| | | * | |
| | | * This will only work if load on demand is used. Other- | |
| | | * wise any call to this method will be ignored. Load on | |
| | | * demand is currently always enabled when using PdfMemDocument. | |
| | | * If the object is dirty if will not be free'd. | |
| | | * | |
| | | * \param rRef free all memory allocated by the object | |
| | | * with this reference. | |
| | | * \param bForce if true the object will be free'd | |
| | | * even if IsDirty() returns true. | |
| | | * So you will loose any changes made | |
| | | * to this object. | |
| | | * | |
| | | * This is an overloaded member for your convinience. | |
| | | */ | |
| | | void FreeObjectMemory( const PdfReference & rRef, bool bForce = false ) | |
| | | ; | |
| | | | |
| | | /** Tries to free all memory allocated by the given | |
| | | * PdfObject (variables and streams) and reads | |
| | | * it from disk again if it is requested another time. | |
| | | * | |
| | | * This will only work if load on demand is used. Other- | |
| | | * wise any call to this method will be ignored. Load on | |
| | | * demand is currently always enabled when using PdfMemDocument. | |
| | | * If the object is dirty if will not be free'd. | |
| | | * | |
| | | * \param pObj free object from memory | |
| | | * \param bForce if true the object will be free'd | |
| | | * even if IsDirty() returns true. | |
| | | * So you will loose any changes made | |
| | | * to this object. | |
| | | * | |
| | | * \see IsDirty | |
| | | */ | |
| | | void FreeObjectMemory( PdfObject* pObj, bool bForce = false ); | |
| | | | |
| private: | | private: | |
| /** Get a dictioary from the catalog dictionary by its name. | | /** Get a dictioary from the catalog dictionary by its name. | |
| * \param pszName will be converted into a PdfName | | * \param pszName will be converted into a PdfName | |
| * \returns the dictionary if it was found or NULL | | * \returns the dictionary if it was found or NULL | |
| */ | | */ | |
| PdfObject* GetNamedObjectFromCatalog( const char* pszName ) const; | | PdfObject* GetNamedObjectFromCatalog( const char* pszName ) const; | |
| | | | |
| /** Internal method to load all objects from a PdfParser object. | | /** Internal method to load all objects from a PdfParser object. | |
| * The objects will be removed from the parser and are now | | * The objects will be removed from the parser and are now | |
| * owned by the PdfMemDocument. | | * owned by the PdfMemDocument. | |
| */ | | */ | |
| void InitFromParser( PdfParser* pParser ); | | void InitFromParser( PdfParser* pParser ); | |
| | | | |
| /** Clear all internal variables | | /** Clear all internal variables | |
| */ | | */ | |
| void Clear(); | | void Clear(); | |
| | | | |
|
| /** Recursively changes every PdfReference in the PdfObject and in any | | | |
| child | | | |
| * that is either an PdfArray or a direct object. | | | |
| * The reference is changed so that difference is added to the object | | | |
| number | | | |
| * if the reference. | | | |
| * \param pObject object to change | | | |
| * \param difference add this value to every reference that is encount | | | |
| ered | | | |
| */ | | | |
| void FixObjectReferences( PdfObject* pObject, int difference ); | | | |
| | | | |
| /** Low level APIs for setting a viewer preference | | /** Low level APIs for setting a viewer preference | |
| * \param whichPrefs the dictionary key to set | | * \param whichPrefs the dictionary key to set | |
| * \param the object to be set | | * \param the object to be set | |
| */ | | */ | |
| void SetViewerPreference( const PdfName& whichPref, const PdfObject & v
alueObj ) const; | | void SetViewerPreference( const PdfName& whichPref, const PdfObject & v
alueObj ) const; | |
| void SetViewerPreference( const PdfName& whichPref, bool inValue ) cons
t; | | void SetViewerPreference( const PdfName& whichPref, bool inValue ) cons
t; | |
| | | | |
| private: | | private: | |
| // Prevent use of copy constructor and assignment operator. These meth
ods | | // Prevent use of copy constructor and assignment operator. These meth
ods | |
| // should never be referenced (given that code referencing them outside | | // should never be referenced (given that code referencing them outside | |
| | | | |
End of changes. 6 change blocks. |
| 12 lines changed or deleted | | 108 lines changed or added | |
|
| PdfPagesTree.h | | PdfPagesTree.h | |
| | | | |
| skipping to change at line 34 | | skipping to change at line 34 | |
| #include "PdfArray.h" | | #include "PdfArray.h" | |
| #include "PdfDefines.h" | | #include "PdfDefines.h" | |
| #include "PdfElement.h" | | #include "PdfElement.h" | |
| | | | |
| namespace PoDoFo { | | namespace PoDoFo { | |
| | | | |
| class PdfObject; | | class PdfObject; | |
| class PdfPage; | | class PdfPage; | |
| class PdfRect; | | class PdfRect; | |
| | | | |
|
| typedef std::deque< PdfPage* > PdfPageObjects; | | | |
| | | | |
| typedef enum { | | typedef enum { | |
| PageInsertBeforeFirstPage = -1, | | PageInsertBeforeFirstPage = -1, | |
| PageInsertLastPage = -2, | | PageInsertLastPage = -2, | |
| PageInsertAllPages = -3, | | PageInsertAllPages = -3, | |
| PageInsertOddPagesOnly = -4, | | PageInsertOddPagesOnly = -4, | |
| PageInsertEvenPagesOnly = -5 | | PageInsertEvenPagesOnly = -5 | |
| } PageInsertionPoints; | | } PageInsertionPoints; | |
| | | | |
| /** Class for managing the tree of Pages in a PDF document | | /** Class for managing the tree of Pages in a PDF document | |
| * Don't use this class directly. Use PdfDocument instead. | | * Don't use this class directly. Use PdfDocument instead. | |
| * | | * | |
| * \see PdfDocument | | * \see PdfDocument | |
| */ | | */ | |
| class PODOFO_API PdfPagesTree : public PdfElement | | class PODOFO_API PdfPagesTree : public PdfElement | |
| { | | { | |
|
| | | typedef std::deque< PdfPage* > PdfPageObjects; | |
| public: | | public: | |
| /** Construct a new PdfPagesTree | | /** Construct a new PdfPagesTree | |
| */ | | */ | |
| PdfPagesTree( PdfVecObjects* pParent ); | | PdfPagesTree( PdfVecObjects* pParent ); | |
| | | | |
| /** Construct a PdfPagesTree from the root /Pages object | | /** Construct a PdfPagesTree from the root /Pages object | |
| * \param pPagesRoot pointer to page tree dictionary | | * \param pPagesRoot pointer to page tree dictionary | |
| */ | | */ | |
| PdfPagesTree( PdfObject* pPagesRoot ); | | PdfPagesTree( PdfObject* pPagesRoot ); | |
| | | | |
| | | | |
| skipping to change at line 115 | | skipping to change at line 114 | |
| * page tree. | | * page tree. | |
| * The returned page is owned by the pages tree and will get deleted a
long | | * The returned page is owned by the pages tree and will get deleted a
long | |
| * with it! | | * with it! | |
| * | | * | |
| * \param rSize a PdfRect specifying the size of the page (i.e the /Me
diaBox key) in PDF units | | * \param rSize a PdfRect specifying the size of the page (i.e the /Me
diaBox key) in PDF units | |
| * \returns a pointer to a PdfPage object | | * \returns a pointer to a PdfPage object | |
| */ | | */ | |
| PdfPage* CreatePage( const PdfRect & rSize ); | | PdfPage* CreatePage( const PdfRect & rSize ); | |
| | | | |
| /** Delete the specified page object from the internal pages tree. | | /** Delete the specified page object from the internal pages tree. | |
|
| * It does NOT remove anything from memory - just the reference from | | * It does NOT remove any PdfObjects from memory - just the reference | |
| the tree | | from the tree | |
| | | * | |
| | | * \param inPageNumber the page number (0-based) to be removed | |
| * | | * | |
|
| * \param inPageNumber the page number (0-based) to be removed | | * The PdfPage object refering to this page will be deleted by this c
all! | |
| */ | | */ | |
| void DeletePage( int inPageNumber ); | | void DeletePage( int inPageNumber ); | |
| | | | |
| private: | | private: | |
| PdfPagesTree(); // don't allow construction from nothing! | | PdfPagesTree(); // don't allow construction from nothing! | |
| | | | |
| /** Private method for actually traversing the /Pages tree | | /** Private method for actually traversing the /Pages tree | |
|
| | | * | |
| | | * \param rListOfParents all parents of the page node will be added to | |
| | | this lists, | |
| | | * so that the PdfPage can later access inherite | |
| | | d attributes | |
| */ | | */ | |
|
| PdfObject* GetPageNode( int nPageNum, PdfObject* pPagesObject ); | | PdfObject* GetPageNode( int nPageNum, PdfObject* pPagesObject, std::deq
ue<PdfObject*> & rListOfParents ); | |
| | | | |
| /** Private method for actually traversing the /Pages tree | | /** Private method for actually traversing the /Pages tree | |
| * This method directly traverses the tree and does no | | * This method directly traverses the tree and does no | |
| * optimization for nodes with only one element like GetPageNode does. | | * optimization for nodes with only one element like GetPageNode does. | |
|
| | | * | |
| | | * \param rListOfParents all parents of the page node will be added to | |
| | | this lists, | |
| | | * so that the PdfPage can later access inherite | |
| | | d attributes | |
| */ | | */ | |
|
| PdfObject* GetPageNodeFromTree( int nPageNum, const PdfArray & kidsArra
y ); | | PdfObject* GetPageNodeFromTree( int nPageNum, const PdfArray & kidsArra
y, std::deque<PdfObject*> & rListOfParents ); | |
| | | | |
| /** Private method to access the Root of the tree using a logical name | | /** Private method to access the Root of the tree using a logical name | |
| */ | | */ | |
| PdfObject* GetRoot() { return m_pObject; } | | PdfObject* GetRoot() { return m_pObject; } | |
| const PdfObject* GetRoot() const { return m_pObject; } | | const PdfObject* GetRoot() const { return m_pObject; } | |
| | | | |
| /** Private method for getting the Parent of a node in the /Pages tree | | /** Private method for getting the Parent of a node in the /Pages tree | |
| */ | | */ | |
| static PdfObject* GetParent( PdfObject* inObject ); | | static PdfObject* GetParent( PdfObject* inObject ); | |
| | | | |
| | | | |
End of changes. 8 change blocks. |
| 7 lines changed or deleted | | 18 lines changed or added | |
|
| PdfPainter.h | | PdfPainter.h | |
| | | | |
| skipping to change at line 377 | | skipping to change at line 377 | |
| | | | |
| /** Draw a single line of text horizontally aligned. | | /** Draw a single line of text horizontally aligned. | |
| * \param dX the x coordinate of the text line | | * \param dX the x coordinate of the text line | |
| * \param dY the y coordinate of the text line | | * \param dY the y coordinate of the text line | |
| * \param dWidth the width of the text line | | * \param dWidth the width of the text line | |
| * \param rsText the text to draw | | * \param rsText the text to draw | |
| * \param eAlignmet alignment of the text line | | * \param eAlignmet alignment of the text line | |
| */ | | */ | |
| void DrawTextAligned( double dX, double dY, double dWidth, const PdfStr
ing & rsText, EPdfAlignment eAlignment ); | | void DrawTextAligned( double dX, double dY, double dWidth, const PdfStr
ing & rsText, EPdfAlignment eAlignment ); | |
| | | | |
|
| | | /** Begin drawing multiple text strings on a page using a given font ob | |
| | | ject. | |
| | | * You have to call SetFont before calling this function. | |
| | | * | |
| | | * If you want more simpler text output and do not need | |
| | | * the advanced text position features of MoveTextPos | |
| | | * use DrawText which is easier. | |
| | | * | |
| | | * \param dX the x coordinate | |
| | | * \param dY the y coordinate | |
| | | * | |
| | | * \see SetFont() | |
| | | * \see AddText() | |
| | | * \see MoveTextPos() | |
| | | * \see EndText() | |
| | | */ | |
| | | void BeginText( double dX, double dY ); | |
| | | | |
| | | /** Draw a string on a page. | |
| | | * You have to call BeginText before the first call of this function | |
| | | * and EndText after the last call. | |
| | | * | |
| | | * If you want more simpler text output and do not need | |
| | | * the advanced text position features of MoveTextPos | |
| | | * use DrawText which is easier. | |
| | | * | |
| | | * \param sText the text string which should be printed | |
| | | * | |
| | | * \see SetFont() | |
| | | * \see MoveTextPos() | |
| | | * \see EndText() | |
| | | */ | |
| | | void AddText( const PdfString & sText ); | |
| | | | |
| | | /** Draw a string on a page. | |
| | | * You have to call BeginText before the first call of this function | |
| | | * and EndText after the last call. | |
| | | * | |
| | | * If you want more simpler text output and do not need | |
| | | * the advanced text position features of MoveTextPos | |
| | | * use DrawText which is easier. | |
| | | * | |
| | | * \param sText the text string which should be printed | |
| | | * \param lLen draw only lLen characters of pszText | |
| | | * | |
| | | * \see SetFont() | |
| | | * \see MoveTextPos() | |
| | | * \see EndText() | |
| | | */ | |
| | | void AddText( const PdfString & sText, long lStringLen ); | |
| | | | |
| | | /** Move position for text drawing on a page. | |
| | | * You have to call BeginText before calling this function | |
| | | * | |
| | | * If you want more simpler text output and do not need | |
| | | * the advanced text position features of MoveTextPos | |
| | | * use DrawText which is easier. | |
| | | * | |
| | | * \param dX the x offset relative to pos of BeginText or last MoveTex | |
| | | tPos | |
| | | * \param dY the y offset relative to pos of BeginText or last MoveTex | |
| | | tPos | |
| | | * | |
| | | * \see BeginText() | |
| | | * \see AddText() | |
| | | * \see EndText() | |
| | | */ | |
| | | void MoveTextPos( double dX, double dY ); | |
| | | | |
| | | /** End drawing multiple text strings on a page | |
| | | * | |
| | | * If you want more simpler text output and do not need | |
| | | * the advanced text position features of MoveTextPos | |
| | | * use DrawText which is easier. | |
| | | * | |
| | | * \see BeginText() | |
| | | * \see AddText() | |
| | | * \see MoveTextPos() | |
| | | */ | |
| | | void EndText(); | |
| | | | |
| /** Draw an image on the current page. | | /** Draw an image on the current page. | |
| * \param dX the x coordinate (bottom left position of the image) | | * \param dX the x coordinate (bottom left position of the image) | |
| * \param dY the y coordinate (bottom position of the image) | | * \param dY the y coordinate (bottom position of the image) | |
| * \param pObject an PdfXObject | | * \param pObject an PdfXObject | |
| * \param dScaleX option scaling factor in x direction | | * \param dScaleX option scaling factor in x direction | |
| * \param dScaleY option scaling factor in y direction | | * \param dScaleY option scaling factor in y direction | |
| */ | | */ | |
|
| void DrawImage( double dX, double dY, PdfImage* pObject, double dScaleX
= 1.0, double dScaleY = 1.0); | | void DrawImage( double dX, double dY, PdfImage* pObject, double dSca
leX = 1.0, double dScaleY = 1.0); | |
| | | | |
| /** Draw an XObject on the current page. For PdfImage use DrawImage. | | /** Draw an XObject on the current page. For PdfImage use DrawImage. | |
| * | | * | |
| * \param dX the x coordinate (bottom left position of the XObject) | | * \param dX the x coordinate (bottom left position of the XObject) | |
| * \param dY the y coordinate (bottom position of the XObject) | | * \param dY the y coordinate (bottom position of the XObject) | |
| * \param pObject an PdfXObject | | * \param pObject an PdfXObject | |
| * \param dScaleX option scaling factor in x direction | | * \param dScaleX option scaling factor in x direction | |
| * \param dScaleY option scaling factor in y direction | | * \param dScaleY option scaling factor in y direction | |
| * | | * | |
| * \see DrawImage | | * \see DrawImage | |
| | | | |
| skipping to change at line 632 | | skipping to change at line 710 | |
| /** Expand all tab characters in a string | | /** Expand all tab characters in a string | |
| * using spaces. | | * using spaces. | |
| * | | * | |
| * \param rsString expand all tabs in this string using spaces | | * \param rsString expand all tabs in this string using spaces | |
| * \param lLen use only lLen characters of rsString | | * \param lLen use only lLen characters of rsString | |
| * \returns an expanded copy of the passed string | | * \returns an expanded copy of the passed string | |
| * \see SetTabWidth | | * \see SetTabWidth | |
| */ | | */ | |
| PdfString ExpandTabs( const PdfString & rsString, long lLen ) const; | | PdfString ExpandTabs( const PdfString & rsString, long lLen ) const; | |
| | | | |
|
| | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // MSC 6.0 has a template-bu | |
| | | g | |
| | | PdfString ExpandTabs_char( const char* pszText, long lStringLen, int nT | |
| | | abCnt, const char cTab, const char cSpace ) const; | |
| | | PdfString ExpandTabs_pdf_utf16be( const pdf_utf16be* pszText, long lStr | |
| | | ingLen, int nTabCnt, const pdf_utf16be cTab, const pdf_utf16be cSpace ) con | |
| | | st; | |
| | | #else | |
| template<typename C> | | template<typename C> | |
| PdfString ExpandTabsPrivate( const C* pszText, long lStringLen, int
nTabCnt, const C cTab, const C cSpace ) const; | | PdfString ExpandTabsPrivate( const C* pszText, long lStringLen, int
nTabCnt, const C cTab, const C cSpace ) const; | |
|
| | | #endif | |
| | | | |
| protected: | | protected: | |
| /** All drawing operations work on this stream. | | /** All drawing operations work on this stream. | |
| * This object may not be NULL. If it is NULL any function accessing i
t should | | * This object may not be NULL. If it is NULL any function accessing i
t should | |
| * return ERROR_PDF_INVALID_HANDLE | | * return ERROR_PDF_INVALID_HANDLE | |
| */ | | */ | |
| PdfStream* m_pCanvas; | | PdfStream* m_pCanvas; | |
| | | | |
| /** The page object is needed so that fonts etc. can be added | | /** The page object is needed so that fonts etc. can be added | |
| * to the page resource dictionary as appropriate. | | * to the page resource dictionary as appropriate. | |
| | | | |
| skipping to change at line 664 | | skipping to change at line 747 | |
| unsigned short m_nTabWidth; | | unsigned short m_nTabWidth; | |
| | | | |
| /** The current color space for non stroking colors | | /** The current color space for non stroking colors | |
| */ | | */ | |
| EPdfColorSpace m_eCurColorSpace; | | EPdfColorSpace m_eCurColorSpace; | |
| | | | |
| /** Save the current color | | /** Save the current color | |
| */ | | */ | |
| double m_curColor1, m_curColor2, m_curColor3, m_curColor4; | | double m_curColor1, m_curColor2, m_curColor3, m_curColor4; | |
| | | | |
|
| | | /** Is between BT and ET | |
| | | */ | |
| | | bool m_isTextOpen; | |
| | | | |
| /** temporary stream buffer | | /** temporary stream buffer | |
| */ | | */ | |
| std::ostringstream m_oss; | | std::ostringstream m_oss; | |
| | | | |
| double lpx, lpy, lpx2, lpy2, lpx3, lpy3, // points fo
r this operation | | double lpx, lpy, lpx2, lpy2, lpx3, lpy3, // points fo
r this operation | |
| lcx, lcy, // l
ast "current" point | | lcx, lcy, // l
ast "current" point | |
| lrx, lry; // "
reflect points" | | lrx, lry; // "
reflect points" | |
| }; | | }; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| | | | |
End of changes. 5 change blocks. |
| 1 lines changed or deleted | | 95 lines changed or added | |
|
| PdfParser.h | | PdfParser.h | |
| | | | |
| skipping to change at line 78 | | skipping to change at line 78 | |
| * file in memory. | | * file in memory. | |
| * | | * | |
| * This might throw a PdfError( ePdfError_InvalidPassword ) exception | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| * if a password is required to read this PDF. | | * if a password is required to read this PDF. | |
| * Call SetPassword with the correct password in this case. | | * Call SetPassword with the correct password in this case. | |
| * | | * | |
| * \see SetPassword | | * \see SetPassword | |
| */ | | */ | |
| PdfParser( PdfVecObjects* pVecObjects, const char* pszFilename, bool bL
oadOnDemand = true ); | | PdfParser( PdfVecObjects* pVecObjects, const char* pszFilename, bool bL
oadOnDemand = true ); | |
| | | | |
|
| | | #ifdef _WIN32 | |
| | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // nicht f | |
| | | #else | |
| | | /** Create a new PdfParser object and open a PDF file and parse | |
| | | * it into memory. | |
| | | * | |
| | | * \param pVecObjects vector to write the parsed PdfObjects to | |
| | | * \param pszFilename filename of the file which is going to be parsed | |
| | | * \param bLoadOnDemand If true all objects will be read from the file | |
| | | at | |
| | | * the time they are accesed first. | |
| | | * If false all objects will be read immediately. | |
| | | * This is faster if you do not need the complete | |
| | | PDF | |
| | | * file in memory. | |
| | | * | |
| | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| | | * if a password is required to read this PDF. | |
| | | * Call SetPassword with the correct password in this case. | |
| | | * | |
| | | * This is an overloaded member function to allow working | |
| | | * with unicode characters. On Unix systes you can also path | |
| | | * UTF-8 to the const char* overload. | |
| | | * | |
| | | * \see SetPassword | |
| | | */ | |
| | | PdfParser( PdfVecObjects* pVecObjects, const wchar_t* pszFilename, bool | |
| | | bLoadOnDemand = true ); | |
| | | #endif | |
| | | #endif // _WIN32 | |
| | | | |
| /** Create a new PdfParser object and open a PDF file and parse | | /** Create a new PdfParser object and open a PDF file and parse | |
| * it into memory. | | * it into memory. | |
| * | | * | |
| * \param pVecObjects vector to write the parsed PdfObjects to | | * \param pVecObjects vector to write the parsed PdfObjects to | |
| * \param pBuffer buffer containing a PDF file in memory | | * \param pBuffer buffer containing a PDF file in memory | |
| * \param lLen length of the buffer containing the PDF file | | * \param lLen length of the buffer containing the PDF file | |
| * \param bLoadOnDemand If true all objects will be read from the file
at | | * \param bLoadOnDemand If true all objects will be read from the file
at | |
| * the time they are accesed first. | | * the time they are accesed first. | |
| * If false all objects will be read immediately. | | * If false all objects will be read immediately. | |
| * This is faster if you do not need the complete
PDF | | * This is faster if you do not need the complete
PDF | |
| | | | |
| skipping to change at line 140 | | skipping to change at line 168 | |
| * | | * | |
| * | | * | |
| * This might throw a PdfError( ePdfError_InvalidPassword ) exception | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| * if a password is required to read this PDF. | | * if a password is required to read this PDF. | |
| * Call SetPassword with the correct password in this case. | | * Call SetPassword with the correct password in this case. | |
| * | | * | |
| * \see SetPassword | | * \see SetPassword | |
| */ | | */ | |
| void ParseFile( const char* pszFilename, bool bLoadOnDemand = true ); | | void ParseFile( const char* pszFilename, bool bLoadOnDemand = true ); | |
| | | | |
|
| | | #ifdef _WIN32 | |
| | | /** Open a PDF file and parse it. | |
| | | * | |
| | | * \param pszFilename filename of the file which is going to be parsed | |
| | | * \param bLoadOnDemand If true all objects will be read from the file | |
| | | at | |
| | | * the time they are accesed first. | |
| | | * If false all objects will be read immediately. | |
| | | * This is faster if you do not need the complete | |
| | | PDF | |
| | | * file in memory. | |
| | | * | |
| | | * | |
| | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| | | * if a password is required to read this PDF. | |
| | | * Call SetPassword with the correct password in this case. | |
| | | * | |
| | | * This is an overloaded member function to allow working | |
| | | * with unicode characters. On Unix systes you can also path | |
| | | * UTF-8 to the const char* overload. | |
| | | * | |
| | | * \see SetPassword | |
| | | */ | |
| | | void ParseFile( const wchar_t* pszFilename, bool bLoadOnDemand = true ) | |
| | | ; | |
| | | #endif // _WIN32 | |
| | | | |
| /** Open a PDF file and parse it. | | /** Open a PDF file and parse it. | |
| * | | * | |
| * \param pBuffer buffer containing a PDF file in memory | | * \param pBuffer buffer containing a PDF file in memory | |
| * \param lLen length of the buffer containing the PDF file | | * \param lLen length of the buffer containing the PDF file | |
| * \param bLoadOnDemand If true all objects will be read from the file
at | | * \param bLoadOnDemand If true all objects will be read from the file
at | |
| * the time they are accesed first. | | * the time they are accesed first. | |
| * If false all objects will be read immediately. | | * If false all objects will be read immediately. | |
| * This is faster if you do not need the complete
PDF | | * This is faster if you do not need the complete
PDF | |
| * file in memory. | | * file in memory. | |
| * | | * | |
| * | | * | |
| * This might throw a PdfError( ePdfError_InvalidPassword ) exception | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| * if a password is required to read this PDF. | | * if a password is required to read this PDF. | |
| * Call SetPassword with the correct password in this case. | | * Call SetPassword with the correct password in this case. | |
| * | | * | |
| * \see SetPassword | | * \see SetPassword | |
| */ | | */ | |
|
| void ParseFile( const char* pBuffer, long lLen, bool bLoadOnDemand = t
rue ); | | void ParseFile( const char* pBuffer, long lLen, bool bLoadOnDemand = tr
ue ); | |
| | | | |
| /** Open a PDF file and parse it. | | /** Open a PDF file and parse it. | |
| * | | * | |
| * \param rDevice the input device to read from | | * \param rDevice the input device to read from | |
| * \param bLoadOnDemand If true all objects will be read from the file
at | | * \param bLoadOnDemand If true all objects will be read from the file
at | |
| * the time they are accesed first. | | * the time they are accesed first. | |
| * If false all objects will be read immediately. | | * If false all objects will be read immediately. | |
| * This is faster if you do not need the complete
PDF | | * This is faster if you do not need the complete
PDF | |
| * file in memory. | | * file in memory. | |
| * | | * | |
| * | | * | |
| * This might throw a PdfError( ePdfError_InvalidPassword ) exception | | * This might throw a PdfError( ePdfError_InvalidPassword ) exception | |
| * if a password is required to read this PDF. | | * if a password is required to read this PDF. | |
| * Call SetPassword with the correct password in this case. | | * Call SetPassword with the correct password in this case. | |
| * | | * | |
| * \see SetPassword | | * \see SetPassword | |
| */ | | */ | |
| void ParseFile( const PdfRefCountedInputDevice & rDevice, bool bLoadOnD
emand = true ); | | void ParseFile( const PdfRefCountedInputDevice & rDevice, bool bLoadOnD
emand = true ); | |
| | | | |
|
| | | /** Quick method to detect secured PDF files, i.e. | |
| | | * a PDF with an /Encrypt key in the trailer directory. | |
| | | * | |
| | | * \returns true if document is secured, false otherwise | |
| | | */ | |
| | | bool QuickEncryptedCheck( const char* pszFilename ); | |
| | | | |
| /** Get a reference to the sorted internal objects vector. | | /** Get a reference to the sorted internal objects vector. | |
| * \returns the internal objects vector. | | * \returns the internal objects vector. | |
| */ | | */ | |
| inline const PdfVecObjects* GetObjects() const; | | inline const PdfVecObjects* GetObjects() const; | |
| | | | |
| /** Get the file format version of the pdf | | /** Get the file format version of the pdf | |
| * \returns the file format version as enum | | * \returns the file format version as enum | |
| */ | | */ | |
| inline EPdfVersion GetPdfVersion() const; | | inline EPdfVersion GetPdfVersion() const; | |
| | | | |
| | | | |
| skipping to change at line 413 | | skipping to change at line 472 | |
| long m_nXRefLinearizedOffset; | | long m_nXRefLinearizedOffset; | |
| size_t m_nFileSize; | | size_t m_nFileSize; | |
| | | | |
| TVecOffsets m_offsets; | | TVecOffsets m_offsets; | |
| PdfVecObjects* m_vecObjects; | | PdfVecObjects* m_vecObjects; | |
| | | | |
| PdfObject* m_pTrailer; | | PdfObject* m_pTrailer; | |
| PdfObject* m_pLinearization; | | PdfObject* m_pLinearization; | |
| PdfEncrypt* m_pEncrypt; | | PdfEncrypt* m_pEncrypt; | |
| | | | |
|
| bool m_xrefSizeUnknown; | | | |
| | | | |
| std::set<int> m_setObjectStreams; | | std::set<int> m_setObjectStreams; | |
| }; | | }; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| bool PdfParser::GetLoadOnDemand() const | | bool PdfParser::GetLoadOnDemand() const | |
| { | | { | |
| return m_bLoadOnDemand; | | return m_bLoadOnDemand; | |
| } | | } | |
| | | | |
End of changes. 5 change blocks. |
| 3 lines changed or deleted | | 66 lines changed or added | |
|
| PdfStreamedDocument.h | | PdfStreamedDocument.h | |
| | | | |
| skipping to change at line 82 | | skipping to change at line 82 | |
| * immediately. | | * immediately. | |
| * | | * | |
| * \param pDevice an output device | | * \param pDevice an output device | |
| * \param eVersion the PDF version of the document to write. | | * \param eVersion the PDF version of the document to write. | |
| * The PDF version can only be set in the constructor | | * The PDF version can only be set in the constructor | |
| * as it is the first item written to the document on
disk. | | * as it is the first item written to the document on
disk. | |
| * \param pEncrypt pointer to an encryption object or NULL. If not NUL
L | | * \param pEncrypt pointer to an encryption object or NULL. If not NUL
L | |
| * the PdfEncrypt object will be copied and used to en
crypt the | | * the PdfEncrypt object will be copied and used to en
crypt the | |
| * created document. | | * created document. | |
| */ | | */ | |
|
| PdfStreamedDocument( PdfOutputDevice* pDevice, EPdfVersion eVersion = e
PdfVersion_1_5, PdfEncrypt* pEncrypt = NULL ); | | PdfStreamedDocument( PdfOutputDevice* pDevice, EPdfVersion eVersion = e
PdfVersion_Default, PdfEncrypt* pEncrypt = NULL ); | |
| | | | |
| /** Create a new PdfStreamedDocument. | | /** Create a new PdfStreamedDocument. | |
| * All data is written to a file immediately. | | * All data is written to a file immediately. | |
| * | | * | |
| * \param pszFilename resulting PDF file | | * \param pszFilename resulting PDF file | |
| * \param eVersion the PDF version of the document to write. | | * \param eVersion the PDF version of the document to write. | |
| * The PDF version can only be set in the constructor | | * The PDF version can only be set in the constructor | |
| * as it is the first item written to the document on
disk. | | * as it is the first item written to the document on
disk. | |
| * \param pEncrypt pointer to an encryption object or NULL. If not NUL
L | | * \param pEncrypt pointer to an encryption object or NULL. If not NUL
L | |
| * the PdfEncrypt object will be copied and used to en
crypt the | | * the PdfEncrypt object will be copied and used to en
crypt the | |
| * created document. | | * created document. | |
| */ | | */ | |
|
| PdfStreamedDocument( const char* pszFilename, EPdfVersion eVersion = eP | | PdfStreamedDocument( const char* pszFilename, EPdfVersion eVersion = eP | |
| dfVersion_1_5, PdfEncrypt* pEncrypt = NULL ); | | dfVersion_Default, PdfEncrypt* pEncrypt = NULL ); | |
| | | | |
| | | #ifdef _WIN32 | |
| | | /** Create a new PdfStreamedDocument. | |
| | | * All data is written to a file immediately. | |
| | | * | |
| | | * \param pszFilename resulting PDF file | |
| | | * \param eVersion the PDF version of the document to write. | |
| | | * The PDF version can only be set in the constructor | |
| | | * as it is the first item written to the document on | |
| | | disk. | |
| | | * \param pEncrypt pointer to an encryption object or NULL. If not NUL | |
| | | L | |
| | | * the PdfEncrypt object will be copied and used to en | |
| | | crypt the | |
| | | * created document. | |
| | | * | |
| | | * This is an overloaded member function to allow working | |
| | | * with unicode characters. On Unix systes you can also path | |
| | | * UTF-8 to the const char* overload. | |
| | | */ | |
| | | PdfStreamedDocument( const wchar_t* pszFilename, EPdfVersion eVersion = | |
| | | ePdfVersion_Default, PdfEncrypt* pEncrypt = NULL ); | |
| | | #endif // _WIN32 | |
| | | | |
| ~PdfStreamedDocument(); | | ~PdfStreamedDocument(); | |
| | | | |
| /** Close the document. The PDF file on disk is finished. | | /** Close the document. The PDF file on disk is finished. | |
| * No other member function of this class maybe called | | * No other member function of this class maybe called | |
| * after calling this function. | | * after calling this function. | |
| */ | | */ | |
| void Close(); | | void Close(); | |
| | | | |
| /** Get the PDF version of the document | | /** Get the PDF version of the document | |
| | | | |
| skipping to change at line 198 | | skipping to change at line 217 | |
| private: | | private: | |
| /** Initialize the PdfStreamedDocument with an output device | | /** Initialize the PdfStreamedDocument with an output device | |
| * \param pDevice write to this device | | * \param pDevice write to this device | |
| * \param eVersion the PDF version of the document to write. | | * \param eVersion the PDF version of the document to write. | |
| * The PDF version can only be set in the constructor | | * The PDF version can only be set in the constructor | |
| * as it is the first item written to the document on
disk. | | * as it is the first item written to the document on
disk. | |
| * \param pEncrypt pointer to an encryption object or NULL. If not NUL
L | | * \param pEncrypt pointer to an encryption object or NULL. If not NUL
L | |
| * the PdfEncrypt object will be copied and used to en
crypt the | | * the PdfEncrypt object will be copied and used to en
crypt the | |
| * created document. | | * created document. | |
| */ | | */ | |
|
| void Init( PdfOutputDevice* pDevice, EPdfVersion eVersion = ePdfVersion
_1_5, PdfEncrypt* pEncrypt = NULL ); | | void Init( PdfOutputDevice* pDevice, EPdfVersion eVersion = ePdfVersion
_Default, PdfEncrypt* pEncrypt = NULL ); | |
| | | | |
| private: | | private: | |
| PdfImmediateWriter* m_pWriter; | | PdfImmediateWriter* m_pWriter; | |
| PdfOutputDevice* m_pDevice; | | PdfOutputDevice* m_pDevice; | |
| | | | |
| PdfEncrypt* m_pEncrypt; | | PdfEncrypt* m_pEncrypt; | |
| | | | |
| bool m_bOwnDevice; ///< If true m_pDevice is owned by th
is object and has to be deleted | | bool m_bOwnDevice; ///< If true m_pDevice is owned by th
is object and has to be deleted | |
| }; | | }; | |
| | | | |
| | | | |
End of changes. 3 change blocks. |
| 4 lines changed or deleted | | 27 lines changed or added | |
|
| PdfString.h | | PdfString.h | |
| | | | |
| skipping to change at line 32 | | skipping to change at line 32 | |
| #define _PDF_STRING_H_ | | #define _PDF_STRING_H_ | |
| | | | |
| #include "PdfDefines.h" | | #include "PdfDefines.h" | |
| #include "PdfDataType.h" | | #include "PdfDataType.h" | |
| #include "PdfRefCountedBuffer.h" | | #include "PdfRefCountedBuffer.h" | |
| | | | |
| namespace PoDoFo { | | namespace PoDoFo { | |
| | | | |
| #define PDF_STRING_BUFFER_SIZE 24 | | #define PDF_STRING_BUFFER_SIZE 24 | |
| | | | |
|
| | | class PdfEncoding; | |
| class PdfOutputDevice; | | class PdfOutputDevice; | |
| | | | |
| enum EPdfStringConversion { | | enum EPdfStringConversion { | |
| ePdfStringConversion_Strict, | | ePdfStringConversion_Strict, | |
| ePdfStringConversion_Lenient | | ePdfStringConversion_Lenient | |
| }; | | }; | |
| | | | |
| /** A string that can be written to a PDF document. | | /** A string that can be written to a PDF document. | |
| * If it contains binary data it is automatically | | * If it contains binary data it is automatically | |
| * converted into a hex string, otherwise a normal PDF | | * converted into a hex string, otherwise a normal PDF | |
| | | | |
| skipping to change at line 70 | | skipping to change at line 71 | |
| * The internal string buffer is guaranteed to be always terminated | | * The internal string buffer is guaranteed to be always terminated | |
| * by 2 zeros. | | * by 2 zeros. | |
| */ | | */ | |
| class PODOFO_API PdfString : public PdfDataType{ | | class PODOFO_API PdfString : public PdfDataType{ | |
| public: | | public: | |
| | | | |
| /** Create an empty and invalid string | | /** Create an empty and invalid string | |
| */ | | */ | |
| PdfString(); | | PdfString(); | |
| | | | |
|
| /** Construct a new PdfString from a std::string. | | /** Construct a new PdfString from a std::string. | |
| * The input string will be copied. | | * The input string will be copied. | |
| * If the first to bytes of the string are 0xFE and 0xFF | | * If the first to bytes of the string are 0xFE and 0xFF | |
| * this string is treated as UTF-16BE encoded unicode string. | | * this string is treated as UTF-16BE encoded unicode string. | |
| * | | * | |
| * \param sString the string to copy | | * \param sString the string to copy | |
| */ | | * \param pEncoding the encoding of this string, if it is no unicode s | |
| PdfString( const std::string& sString ); | | tring. | |
| | | * This is ignored for unicode strings. If NULL PdfDocEncodi | |
| | | ng will be used as a default. | |
| | | */ | |
| | | PdfString( const std::string& sString, const PdfEncoding * const pEncod | |
| | | ing = NULL ); | |
| | | | |
| | | /** Construct a new PdfString from a 0 terminated | |
| | | * string. | |
| | | * The input string will be copied. | |
| | | * | |
| | | * \param pszString the string to copy | |
| | | * \param pEncoding the encoding of this string, if it is no unicod | |
| | | e string. | |
| | | * This is ignored for unicode strings. If NULL PdfDocEncodi | |
| | | ng will be used as a default. | |
| | | */ | |
| | | PdfString( const char* pszString, const PdfEncoding * const pEncoding = | |
| | | NULL ); | |
| | | | |
| /** Construct a new PdfString from a 0 terminated | | /** Construct a new PdfString from a 0 terminated | |
| * string. | | * string. | |
| * The input string will be copied. | | * The input string will be copied. | |
| * | | * | |
| * \param pszString the string to copy | | * \param pszString the string to copy | |
| */ | | */ | |
|
| PdfString( const char* pszString ); | | #if defined(_MSC_VER) && _MSC_VER <= 1200 // nicht f | |
| | | #else | |
| | | PdfString( const wchar_t* pszString ); | |
| | | #endif | |
| | | | |
| /** Construct a new PdfString from a string. | | /** Construct a new PdfString from a string. | |
| * The input string will be copied. | | * The input string will be copied. | |
| * If the first to bytes of the string are 0xFE and 0xFF | | * If the first to bytes of the string are 0xFE and 0xFF | |
| * this string is treated as UTF-16BE encoded unicode string. | | * this string is treated as UTF-16BE encoded unicode string. | |
| * | | * | |
| * \param pszString the string to copy | | * \param pszString the string to copy | |
| * \param lLen length of the string data to encode | | * \param lLen length of the string data to encode | |
| * \param bHex if true the data will be | | * \param bHex if true the data will be | |
| * hex encoded during writeout of the string and IsHex() w
ill return true. | | * hex encoded during writeout of the string and IsHex() w
ill return true. | |
|
| | | * \param pEncoding the encoding of this string, if it is no unicod | |
| | | e string. | |
| | | * This is ignored for unicode strings. If NULL PdfDocEncodi | |
| | | ng will be used as a default. | |
| */ | | */ | |
|
| PdfString( const char* pszString, long lLen, bool bHex = false ); | | PdfString( const char* pszString, long lLen, bool bHex = false, const P
dfEncoding * const pEncoding = NULL ); | |
| | | | |
| /** Construct a new PdfString from an UTF-8 encoded string. | | /** Construct a new PdfString from an UTF-8 encoded string. | |
| * | | * | |
| * The string is converted to UTF-16BE internally. | | * The string is converted to UTF-16BE internally. | |
| * | | * | |
| * \param pszStringUtf8 a UTF-8 encoded string. | | * \param pszStringUtf8 a UTF-8 encoded string. | |
| */ | | */ | |
| PdfString( const pdf_utf8* pszStringUtf8 ); | | PdfString( const pdf_utf8* pszStringUtf8 ); | |
| | | | |
| /** Construct a new PdfString from an UTF-16be encoded zero terminated
string. | | /** Construct a new PdfString from an UTF-16be encoded zero terminated
string. | |
| | | | |
| skipping to change at line 122 | | skipping to change at line 140 | |
| | | | |
| /** Construct a new PdfString from an UTF-8 encoded string. | | /** Construct a new PdfString from an UTF-8 encoded string. | |
| * | | * | |
| * The string is converted to UTF-16BE internally. | | * The string is converted to UTF-16BE internally. | |
| * | | * | |
| * \param pszStringUtf8 a UTF-8 encoded string. | | * \param pszStringUtf8 a UTF-8 encoded string. | |
| * \param lLen number of bytes to convert | | * \param lLen number of bytes to convert | |
| */ | | */ | |
| PdfString( const pdf_utf8* pszStringUtf8, long lLen ); | | PdfString( const pdf_utf8* pszStringUtf8, long lLen ); | |
| | | | |
|
| | | /** Construct a new PdfString from an UTF-16be encoded zero terminated | |
| | | string. | |
| | | * | |
| | | * \param pszStringUtf16 a UTF-16BE encoded string. | |
| | | * \param lLen number of words to convert | |
| | | */ | |
| | | PdfString( const pdf_utf16be* pszStringUtf16, long lLen ); | |
| | | | |
| /** Copy an existing PdfString | | /** Copy an existing PdfString | |
| * \param rhs another PdfString to copy | | * \param rhs another PdfString to copy | |
| */ | | */ | |
| PdfString( const PdfString & rhs ); | | PdfString( const PdfString & rhs ); | |
| | | | |
| ~PdfString(); | | ~PdfString(); | |
| | | | |
| /** Set hex encoded data as the strings data. | | /** Set hex encoded data as the strings data. | |
| * \param pszHex must be hex encoded data. | | * \param pszHex must be hex encoded data. | |
| * \param lLen length of the hex encoded data. | | * \param lLen length of the hex encoded data. | |
| | | | |
| skipping to change at line 212 | | skipping to change at line 237 | |
| * The strings contents are always returned as | | * The strings contents are always returned as | |
| * UTF8 by this function. Works for unicode strings | | * UTF8 by this function. Works for unicode strings | |
| * and for non unicode strings. | | * and for non unicode strings. | |
| * | | * | |
| * This is the prefered way to access the strings contents. | | * This is the prefered way to access the strings contents. | |
| * | | * | |
| * \returns the string contents always as UTF8. | | * \returns the string contents always as UTF8. | |
| */ | | */ | |
| inline const std::string & GetStringUtf8() const; | | inline const std::string & GetStringUtf8() const; | |
| | | | |
|
| | | #ifdef _WIN32 | |
| | | /** The contents of the string as wide character string. | |
| | | * | |
| | | * \returns the string contents as wide character string. | |
| | | */ | |
| | | const std::wstring GetStringW() const; | |
| | | #endif // _WIN32 | |
| | | | |
| /** The length of the string data returned by GetString() | | /** The length of the string data returned by GetString() | |
| * in bytes not including terminating zeros. | | * in bytes not including terminating zeros. | |
| * | | * | |
| * \returns the length of the string. | | * \returns the length of the string. | |
| * | | * | |
| * \see GetCharacterLength to determine the number of characters in th
e string | | * \see GetCharacterLength to determine the number of characters in th
e string | |
| */ | | */ | |
| inline long GetLength() const; | | inline long GetLength() const; | |
| | | | |
| /** The length of the string data returned by GetUnicode() | | /** The length of the string data returned by GetUnicode() | |
| | | | |
| skipping to change at line 389 | | skipping to change at line 422 | |
| static const char* s_pszUnicodeMarkerHex; ///< The unicode marke
r converted to HEX | | static const char* s_pszUnicodeMarkerHex; ///< The unicode marke
r converted to HEX | |
| static const pdf_utf16be s_cPdfDocEncoding[256]; ///< conversion table
from PDFDocEncoding to UTF16 | | static const pdf_utf16be s_cPdfDocEncoding[256]; ///< conversion table
from PDFDocEncoding to UTF16 | |
| | | | |
| private: | | private: | |
| PdfRefCountedBuffer m_buffer; ///< String data (alwa
ys binary), may contain 0 bytes | | PdfRefCountedBuffer m_buffer; ///< String data (alwa
ys binary), may contain 0 bytes | |
| | | | |
| bool m_bHex; ///< This string is co
nverted to hex during write out | | bool m_bHex; ///< This string is co
nverted to hex during write out | |
| bool m_bUnicode; ///< This string conta
ins unicode data | | bool m_bUnicode; ///< This string conta
ins unicode data | |
| | | | |
| std::string m_sUtf8; ///< The UTF8 version
of the strings contents. | | std::string m_sUtf8; ///< The UTF8 version
of the strings contents. | |
|
| | | const PdfEncoding* m_pEncoding; ///< Encoding for non
Unicode strings. NULL for unicode strings. | |
| }; | | }; | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| bool PdfString::IsValid() const | | bool PdfString::IsValid() const | |
| { | | { | |
| return (m_buffer.GetBuffer() != NULL); | | return (m_buffer.GetBuffer() != NULL); | |
| } | | } | |
| | | | |
| | | | |
End of changes. 8 change blocks. |
| 10 lines changed or deleted | | 53 lines changed or added | |
|
| PdfVariant.h | | PdfVariant.h | |
| | | | |
| skipping to change at line 55 | | skipping to change at line 55 | |
| * The data can be parsed directly from a string or set by one of the membe
rs. | | * The data can be parsed directly from a string or set by one of the membe
rs. | |
| * One can also convert the variant back to a string after setting the valu
es. | | * One can also convert the variant back to a string after setting the valu
es. | |
| * | | * | |
| * \warning All methods not marked otherwise may trigger a deferred load. T
his means | | * \warning All methods not marked otherwise may trigger a deferred load. T
his means | |
| * that they are unsafe to call while a deferred load is already i
n progress | | * that they are unsafe to call while a deferred load is already i
n progress | |
| * (as recursion will occurr). | | * (as recursion will occurr). | |
| * | | * | |
| * TODO: domseichter: Make this class implicitly shared | | * TODO: domseichter: Make this class implicitly shared | |
| */ | | */ | |
| class PODOFO_API PdfVariant { | | class PODOFO_API PdfVariant { | |
|
| | | friend class PdfArray; | |
| | | friend class PdfDictionary; | |
| | | | |
| public: | | public: | |
| | | | |
| static PdfVariant NullValue; | | static PdfVariant NullValue; | |
| | | | |
| /** Construct an empty variant type | | /** Construct an empty variant type | |
| * IsNull() will return true. | | * IsNull() will return true. | |
| */ | | */ | |
| PdfVariant(); | | PdfVariant(); | |
| | | | |
| /** Construct a PdfVariant that is a bool. | | /** Construct a PdfVariant that is a bool. | |
| | | | |
| skipping to change at line 134 | | skipping to change at line 137 | |
| virtual ~PdfVariant(); | | virtual ~PdfVariant(); | |
| | | | |
| /** \returns true if this PdfVariant is empty. | | /** \returns true if this PdfVariant is empty. | |
| * i.e. m_eDataType == ePdfDataType_Null | | * i.e. m_eDataType == ePdfDataType_Null | |
| */ | | */ | |
| inline bool IsEmpty() const; | | inline bool IsEmpty() const; | |
| | | | |
| /** Clear all internal member variables and free the memory | | /** Clear all internal member variables and free the memory | |
| * they have allocated. | | * they have allocated. | |
| * Sets the datatype to ePdfDataType_Null | | * Sets the datatype to ePdfDataType_Null | |
|
| | | * | |
| | | * This will reset the dirty flag of this object to be clean. | |
| | | * \see IsDirty | |
| */ | | */ | |
| void Clear(); | | void Clear(); | |
| | | | |
| /** \returns the datatype of this object or ePdfDataType_Unknown | | /** \returns the datatype of this object or ePdfDataType_Unknown | |
| * if it does not have a value. | | * if it does not have a value. | |
| */ | | */ | |
| inline EPdfDataType GetDataType() const; | | inline EPdfDataType GetDataType() const; | |
| | | | |
| /** \returns a human readable string representation of GetDataType() | | /** \returns a human readable string representation of GetDataType() | |
| * The returned string must not be free'd. | | * The returned string must not be free'd. | |
| | | | |
| skipping to change at line 218 | | skipping to change at line 224 | |
| virtual void Write( PdfOutputDevice* pDevice, const PdfEncrypt* pEncryp
t, const PdfName & keyStop ) const; | | virtual void Write( PdfOutputDevice* pDevice, const PdfEncrypt* pEncryp
t, const PdfName & keyStop ) const; | |
| | | | |
| /** Converts the current object into a string representation | | /** Converts the current object into a string representation | |
| * which can be written directly to a PDF file on disc. | | * which can be written directly to a PDF file on disc. | |
| * \param rsData the object string is returned in this object. | | * \param rsData the object string is returned in this object. | |
| */ | | */ | |
| void ToString( std::string & rsData ) const; | | void ToString( std::string & rsData ) const; | |
| | | | |
| /** Set the value of this object as bool | | /** Set the value of this object as bool | |
| * \param b the value as bool. | | * \param b the value as bool. | |
|
| | | * | |
| | | * This will set the dirty flag of this object. | |
| | | * \see IsDirty | |
| */ | | */ | |
| inline void SetBool( bool b ); | | inline void SetBool( bool b ); | |
| | | | |
| /** Get the value if this object is a bool. | | /** Get the value if this object is a bool. | |
| * \returns the bool value. | | * \returns the bool value. | |
| */ | | */ | |
| inline bool GetBool() const; | | inline bool GetBool() const; | |
| | | | |
| /** Set the value of this object as long | | /** Set the value of this object as long | |
| * \param l the value as long. | | * \param l the value as long. | |
|
| | | * | |
| | | * This will set the dirty flag of this object. | |
| | | * \see IsDirty | |
| */ | | */ | |
| inline void SetNumber( long l ); | | inline void SetNumber( long l ); | |
| | | | |
| /** Get the value of the object as long. | | /** Get the value of the object as long. | |
| * \return the value of the number | | * \return the value of the number | |
| */ | | */ | |
| inline long GetNumber() const; | | inline long GetNumber() const; | |
| | | | |
| /** Set the value of this object as double | | /** Set the value of this object as double | |
| * \param d the value as double. | | * \param d the value as double. | |
|
| | | * | |
| | | * This will set the dirty flag of this object. | |
| | | * \see IsDirty | |
| */ | | */ | |
| inline void SetReal( double d ); | | inline void SetReal( double d ); | |
| | | | |
| /** Get the value of the object as double. | | /** Get the value of the object as double. | |
| * \return the value of the number | | * \return the value of the number | |
| */ | | */ | |
| inline double GetReal() const; | | inline double GetReal() const; | |
| | | | |
| /** \returns the value of the object as string. | | /** \returns the value of the object as string. | |
| */ | | */ | |
| | | | |
| skipping to change at line 279 | | skipping to change at line 294 | |
| /** Returns the dictionary value of this object | | /** Returns the dictionary value of this object | |
| * \returns a PdfDictionary | | * \returns a PdfDictionary | |
| */ | | */ | |
| inline PdfDictionary & GetDictionary(); | | inline PdfDictionary & GetDictionary(); | |
| | | | |
| /** Get the reference values of this object. | | /** Get the reference values of this object. | |
| * \returns a PdfReference | | * \returns a PdfReference | |
| */ | | */ | |
| inline const PdfReference & GetReference() const; | | inline const PdfReference & GetReference() const; | |
| | | | |
|
| /** Get the reference values of this object. | | | |
| * \returns a PdfReference | | | |
| */ | | | |
| inline PdfReference & GetReference(); | | | |
| | | | |
| /** Assign the values of another PdfVariant to this one. | | /** Assign the values of another PdfVariant to this one. | |
| * \param rhs an existing variant which is copied. | | * \param rhs an existing variant which is copied. | |
|
| | | * | |
| | | * This will set the dirty flag of this object. | |
| | | * \see IsDirty | |
| */ | | */ | |
| const PdfVariant & operator=( const PdfVariant & rhs ); | | const PdfVariant & operator=( const PdfVariant & rhs ); | |
| | | | |
| /** | | /** | |
| * Test to see if the value contained by this variant is the same | | * Test to see if the value contained by this variant is the same | |
| * as the value of the other variant. | | * as the value of the other variant. | |
| */ | | */ | |
| bool operator==( const PdfVariant & rhs ) const; | | bool operator==( const PdfVariant & rhs ) const; | |
| | | | |
| /** | | /** | |
| * \see operator== | | * \see operator== | |
| */ | | */ | |
| inline bool operator!=( const PdfVariant & rhs) const; | | inline bool operator!=( const PdfVariant & rhs) const; | |
| | | | |
|
| | | /** The dirty flag is set if this variant | |
| | | * has been modified after construction. | |
| | | * | |
| | | * Usually the dirty flag is also set | |
| | | * if you call any non-const member function | |
| | | * (e.g. GetDictionary()) as PdfVariant cannot | |
| | | * determine if you actually changed the dictionary | |
| | | * or not. | |
| | | * | |
| | | * \returns true if the value is dirty and has been | |
| | | * modified since construction | |
| | | */ | |
| | | inline bool IsDirty() const; | |
| | | | |
| protected: | | protected: | |
| | | | |
|
| | | /** Sets the dirty flag of this PdfVariant | |
| | | * | |
| | | * \param bDirty true if this PdfVariant has been | |
| | | * modified from the outside | |
| | | * | |
| | | * \see IsDirty | |
| | | */ | |
| | | inline void SetDirty( bool bDirty ); | |
| | | | |
| /** | | /** | |
| * Dynamically load the contents of this object from a PDF file by call
ing | | * Dynamically load the contents of this object from a PDF file by call
ing | |
| * the virtual method DelayedLoadImpl() if the object is not already lo
aded. | | * the virtual method DelayedLoadImpl() if the object is not already lo
aded. | |
| * | | * | |
| * For objects complete created in memory and those that do not support | | * For objects complete created in memory and those that do not support | |
| * deferred loading this function does nothing, since deferred loading | | * deferred loading this function does nothing, since deferred loading | |
| * will not be enabled. | | * will not be enabled. | |
| */ | | */ | |
| inline void DelayedLoad() const; | | inline void DelayedLoad() const; | |
| | | | |
| | | | |
| skipping to change at line 415 | | skipping to change at line 451 | |
| */ | | */ | |
| PdfDataType* pData; | | PdfDataType* pData; | |
| | | | |
| bool bBoolValue; | | bool bBoolValue; | |
| double dNumber; | | double dNumber; | |
| long nNumber; | | long nNumber; | |
| } UVariant; | | } UVariant; | |
| | | | |
| UVariant m_Data; | | UVariant m_Data; | |
| | | | |
|
| | | bool m_bDirty; ///< Indicates if this object was modified after | |
| | | construction | |
| | | | |
| /** Datatype of the variant. | | /** Datatype of the variant. | |
| * required to access the correct member of | | * required to access the correct member of | |
| * the union UVariant. | | * the union UVariant. | |
| */ | | */ | |
| EPdfDataType m_eDataType; | | EPdfDataType m_eDataType; | |
| | | | |
| // No touchy. Only for use by PdfVariant's internal tracking of the del
ayed | | // No touchy. Only for use by PdfVariant's internal tracking of the del
ayed | |
| // loading state. Use DelayedLoadDone() to test this if you need to. | | // loading state. Use DelayedLoadDone() to test this if you need to. | |
| mutable bool m_bDelayedLoadDone; | | mutable bool m_bDelayedLoadDone; | |
| | | | |
| | | | |
| skipping to change at line 495 | | skipping to change at line 533 | |
| void PdfVariant::SetBool( bool b ) | | void PdfVariant::SetBool( bool b ) | |
| { | | { | |
| DelayedLoad(); | | DelayedLoad(); | |
| | | | |
| if( !IsBool() ) | | if( !IsBool() ) | |
| { | | { | |
| PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | | PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | |
| } | | } | |
| | | | |
| m_Data.bBoolValue = b; | | m_Data.bBoolValue = b; | |
|
| | | SetDirty( true ); | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| bool PdfVariant::GetBool() const | | bool PdfVariant::GetBool() const | |
| { | | { | |
| DelayedLoad(); | | DelayedLoad(); | |
| | | | |
| if( !IsBool() ) | | if( !IsBool() ) | |
| | | | |
| skipping to change at line 528 | | skipping to change at line 567 | |
| | | | |
| if( !IsReal() && !IsNumber() ) | | if( !IsReal() && !IsNumber() ) | |
| { | | { | |
| PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | | PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | |
| } | | } | |
| | | | |
| if ( IsReal() ) | | if ( IsReal() ) | |
| m_Data.dNumber = static_cast<double>(l); | | m_Data.dNumber = static_cast<double>(l); | |
| else | | else | |
| m_Data.nNumber = l; | | m_Data.nNumber = l; | |
|
| | | | |
| | | SetDirty( true ); | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| long PdfVariant::GetNumber() const | | long PdfVariant::GetNumber() const | |
| { | | { | |
| DelayedLoad(); | | DelayedLoad(); | |
| | | | |
| if( !IsReal() && !IsNumber() ) | | if( !IsReal() && !IsNumber() ) | |
| | | | |
| skipping to change at line 564 | | skipping to change at line 605 | |
| | | | |
| if( !IsReal() && !IsNumber() ) | | if( !IsReal() && !IsNumber() ) | |
| { | | { | |
| PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | | PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | |
| } | | } | |
| | | | |
| if ( IsReal() ) | | if ( IsReal() ) | |
| m_Data.dNumber = d; | | m_Data.dNumber = d; | |
| else | | else | |
| m_Data.nNumber = static_cast<long>(floor( d )); | | m_Data.nNumber = static_cast<long>(floor( d )); | |
|
| | | | |
| | | SetDirty( true ); | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| double PdfVariant::GetReal() const | | double PdfVariant::GetReal() const | |
| { | | { | |
| DelayedLoad(); | | DelayedLoad(); | |
| | | | |
| if( !IsReal() && !IsNumber() ) | | if( !IsReal() && !IsNumber() ) | |
| | | | |
| skipping to change at line 623 | | skipping to change at line 666 | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| const PdfArray & PdfVariant::GetArray() const | | const PdfArray & PdfVariant::GetArray() const | |
| { | | { | |
| DelayedLoad(); | | DelayedLoad(); | |
| return GetArray_NoDL(); | | return GetArray_NoDL(); | |
| } | | } | |
| | | | |
|
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| const PdfArray & PdfVariant::GetArray_NoDL() const | | const PdfArray & PdfVariant::GetArray_NoDL() const | |
| { | | { | |
| // Test against eDataType directly not GetDataType() since | | // Test against eDataType directly not GetDataType() since | |
| // we don't want to trigger a delayed load (and if required one has | | // we don't want to trigger a delayed load (and if required one has | |
| // already been triggered). | | // already been triggered). | |
| if( m_eDataType != ePdfDataType_Array ) | | if( m_eDataType != ePdfDataType_Array ) | |
| { | | { | |
| PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | | PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | |
| } | | } | |
| | | | |
| | | | |
| skipping to change at line 645 | | skipping to change at line 691 | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| PdfArray & PdfVariant::GetArray() | | PdfArray & PdfVariant::GetArray() | |
| { | | { | |
| DelayedLoad(); | | DelayedLoad(); | |
| return GetArray_NoDL(); | | return GetArray_NoDL(); | |
| } | | } | |
| | | | |
|
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| PdfArray & PdfVariant::GetArray_NoDL() | | PdfArray & PdfVariant::GetArray_NoDL() | |
| { | | { | |
| // Test against eDataType directly not GetDataType() since | | // Test against eDataType directly not GetDataType() since | |
| // we don't want to trigger a delayed load (and if required one has | | // we don't want to trigger a delayed load (and if required one has | |
| // already been triggered). | | // already been triggered). | |
| if( m_eDataType != ePdfDataType_Array ) | | if( m_eDataType != ePdfDataType_Array ) | |
| { | | { | |
| PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | | PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | |
| } | | } | |
|
| | | | |
| return *(reinterpret_cast<PdfArray* const>(m_Data.pData)); | | return *(reinterpret_cast<PdfArray* const>(m_Data.pData)); | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| const PdfDictionary & PdfVariant::GetDictionary() const | | const PdfDictionary & PdfVariant::GetDictionary() const | |
| { | | { | |
| DelayedLoad(); | | DelayedLoad(); | |
| return GetDictionary_NoDL(); | | return GetDictionary_NoDL(); | |
| } | | } | |
| | | | |
|
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| const PdfDictionary & PdfVariant::GetDictionary_NoDL() const | | const PdfDictionary & PdfVariant::GetDictionary_NoDL() const | |
| { | | { | |
| // Test against eDataType directly not GetDataType() since | | // Test against eDataType directly not GetDataType() since | |
| // we don't want to trigger a delayed load (and if required one has | | // we don't want to trigger a delayed load (and if required one has | |
| // already been triggered). | | // already been triggered). | |
| if( m_eDataType != ePdfDataType_Dictionary ) | | if( m_eDataType != ePdfDataType_Dictionary ) | |
| { | | { | |
| PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | | PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | |
| } | | } | |
| | | | |
| | | | |
| skipping to change at line 689 | | skipping to change at line 740 | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| PdfDictionary & PdfVariant::GetDictionary() | | PdfDictionary & PdfVariant::GetDictionary() | |
| { | | { | |
| DelayedLoad(); | | DelayedLoad(); | |
| return GetDictionary_NoDL(); | | return GetDictionary_NoDL(); | |
| } | | } | |
| | | | |
|
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| PdfDictionary & PdfVariant::GetDictionary_NoDL() | | PdfDictionary & PdfVariant::GetDictionary_NoDL() | |
| { | | { | |
| // Test against eDataType directly not GetDataType() since | | // Test against eDataType directly not GetDataType() since | |
| // we don't want to trigger a delayed load (and if required one has | | // we don't want to trigger a delayed load (and if required one has | |
| // already been triggered). | | // already been triggered). | |
| if( m_eDataType != ePdfDataType_Dictionary ) | | if( m_eDataType != ePdfDataType_Dictionary ) | |
| { | | { | |
| PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | | PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | |
| } | | } | |
| | | | |
| | | | |
| skipping to change at line 720 | | skipping to change at line 774 | |
| { | | { | |
| PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | | PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | |
| } | | } | |
| | | | |
| return *(reinterpret_cast<PdfReference* const>(m_Data.pData)); | | return *(reinterpret_cast<PdfReference* const>(m_Data.pData)); | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
|
| inline PdfReference & PdfVariant::GetReference() | | | |
| { | | | |
| DelayedLoad(); | | | |
| | | | |
| if( !IsReference() ) | | | |
| { | | | |
| PODOFO_RAISE_ERROR( ePdfError_InvalidDataType ); | | | |
| } | | | |
| | | | |
| return *(reinterpret_cast<PdfReference* const>(m_Data.pData)); | | | |
| } | | | |
| | | | |
| // ----------------------------------------------------- | | | |
| // | | | |
| // ----------------------------------------------------- | | | |
| bool PdfVariant::DelayedLoadDone() const | | bool PdfVariant::DelayedLoadDone() const | |
| { | | { | |
| return m_bDelayedLoadDone; | | return m_bDelayedLoadDone; | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| void PdfVariant::EnableDelayedLoading() | | void PdfVariant::EnableDelayedLoading() | |
| { | | { | |
| | | | |
| skipping to change at line 766 | | skipping to change at line 805 | |
| } | | } | |
| | | | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| // | | // | |
| // ----------------------------------------------------- | | // ----------------------------------------------------- | |
| bool PdfVariant::operator!=( const PdfVariant & rhs) const | | bool PdfVariant::operator!=( const PdfVariant & rhs) const | |
| { | | { | |
| return !(*this == rhs); | | return !(*this == rhs); | |
| } | | } | |
| | | | |
|
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | bool PdfVariant::IsDirty() const | |
| | | { | |
| | | // If this is a object with | |
| | | // stream, the streams dirty | |
| | | // flag might be set. | |
| | | if( m_bDirty ) | |
| | | return m_bDirty; | |
| | | | |
| | | switch( m_eDataType ) | |
| | | { | |
| | | case ePdfDataType_Array: | |
| | | case ePdfDataType_Dictionary: | |
| | | // Arrays and Dictionaries | |
| | | // handle dirty status by themselfes | |
| | | return m_Data.pData->IsDirty(); | |
| | | | |
| | | case ePdfDataType_Bool: | |
| | | case ePdfDataType_Number: | |
| | | case ePdfDataType_Real: | |
| | | case ePdfDataType_HexString: | |
| | | case ePdfDataType_String: | |
| | | case ePdfDataType_Name: | |
| | | case ePdfDataType_RawData: | |
| | | case ePdfDataType_Reference: | |
| | | case ePdfDataType_Null: | |
| | | case ePdfDataType_Unknown: | |
| | | default: | |
| | | return m_bDirty; | |
| | | }; | |
| | | } | |
| | | | |
| | | // ----------------------------------------------------- | |
| | | // | |
| | | // ----------------------------------------------------- | |
| | | void PdfVariant::SetDirty( bool bDirty ) | |
| | | { | |
| | | m_bDirty = bDirty; | |
| | | | |
| | | if( !m_bDirty ) | |
| | | { | |
| | | // Propogate new dirty state to subclasses | |
| | | switch( m_eDataType ) | |
| | | { | |
| | | case ePdfDataType_Array: | |
| | | case ePdfDataType_Dictionary: | |
| | | // Arrays and Dictionaries | |
| | | // handle dirty status by themselfes | |
| | | m_Data.pData->SetDirty( m_bDirty ); | |
| | | | |
| | | case ePdfDataType_Bool: | |
| | | case ePdfDataType_Number: | |
| | | case ePdfDataType_Real: | |
| | | case ePdfDataType_HexString: | |
| | | case ePdfDataType_String: | |
| | | case ePdfDataType_Name: | |
| | | case ePdfDataType_RawData: | |
| | | case ePdfDataType_Reference: | |
| | | case ePdfDataType_Null: | |
| | | case ePdfDataType_Unknown: | |
| | | default: | |
| | | break; | |
| | | }; | |
| | | } | |
| | | } | |
| | | | |
| }; | | }; | |
| | | | |
| #endif // _PDF_VARIANT_H_ | | #endif // _PDF_VARIANT_H_ | |
| | | | |
End of changes. 20 change blocks. |
| 21 lines changed or deleted | | 129 lines changed or added | |
|