PoDoFo
0.9.6
|
#include <PdfMemDocument.h>
Public Member Functions | |
PdfMemDocument () | |
PdfMemDocument (bool bOnlyTrailer) | |
PdfMemDocument (const char *pszFilename, bool bForUpdate=false) | |
virtual | ~PdfMemDocument () |
void | Load (const char *pszFilename, bool bForUpdate=false) |
void | LoadFromBuffer (const char *pBuffer, long lLen, bool bForUpdate=false) |
void | LoadFromDevice (const PdfRefCountedInputDevice &rDevice, bool bForUpdate=false) |
bool | IsLoaded (void) const |
void | Write (const char *pszFilename) |
void | Write (PdfOutputDevice *pDevice) |
void | WriteUpdate (const char *pszFilename) |
void | WriteUpdate (PdfOutputDevice *pDevice, bool bTruncate=true) |
void | SetWriteMode (EPdfWriteMode eWriteMode) |
virtual EPdfWriteMode | GetWriteMode () const |
void | SetPdfVersion (EPdfVersion eVersion) |
EPdfVersion | GetPdfVersion () const |
void | AddPdfExtension (const char *ns, pdf_int64 level) |
bool | HasPdfExtension (const char *ns, pdf_int64 level) const |
void | RemovePdfExtension (const char *ns, pdf_int64 level) |
std::vector< PdfExtension > | GetPdfExtensions () const |
void | SetPassword (const std::string &sPassword) |
void | SetEncrypted (const std::string &userPassword, const std::string &ownerPassword, int protection=PdfEncrypt::ePdfPermissions_Print|PdfEncrypt::ePdfPermissions_Edit|PdfEncrypt::ePdfPermissions_Copy|PdfEncrypt::ePdfPermissions_EditNotes|PdfEncrypt::ePdfPermissions_FillAndSign|PdfEncrypt::ePdfPermissions_Accessible|PdfEncrypt::ePdfPermissions_DocAssembly|PdfEncrypt::ePdfPermissions_HighPrint, PdfEncrypt::EPdfEncryptAlgorithm eAlgorithm=PdfEncrypt::ePdfEncryptAlgorithm_AESV2, PdfEncrypt::EPdfKeyLength eKeyLength=PdfEncrypt::ePdfKeyLength_40) |
void | SetEncrypted (const PdfEncrypt &pEncrypt) |
bool | GetEncrypted () const |
bool | IsLinearized () const |
const PdfVecObjects & | GetObjects () const |
PdfVecObjects & | GetObjects () |
PdfObject * | GetCatalog () |
const PdfObject * | GetCatalog () const |
const PdfObject * | GetTrailer () const |
PdfObject * | GetStructTreeRoot () const |
PdfObject * | GetMetadata () const |
PdfObject * | GetMarkInfo () const |
PdfObject * | GetLanguage () const |
PdfFont * | GetFont (PdfObject *pObject) |
const PdfMemDocument & | InsertPages (const PdfMemDocument &rDoc, int inFirstPage, int inNumPages) |
void | DeletePages (int inFirstPage, int inNumPages) |
virtual bool | IsPrintAllowed () const |
virtual bool | IsEditAllowed () const |
virtual bool | IsCopyAllowed () const |
virtual bool | IsEditNotesAllowed () const |
virtual bool | IsFillAndSignAllowed () const |
virtual bool | IsAccessibilityAllowed () const |
virtual bool | IsDocAssemblyAllowed () const |
virtual bool | IsHighPrintAllowed () const |
void | FreeObjectMemory (const PdfReference &rRef, bool bForce=false) |
void | FreeObjectMemory (PdfObject *pObj, bool bForce=false) |
const PdfEncrypt * | GetEncrypt () const |
![]() | |
virtual | ~PdfDocument () |
PdfInfo * | GetInfo () const |
PdfOutlines * | GetOutlines (bool bCreate=ePdfCreateObject) |
PdfNamesTree * | GetNamesTree (bool bCreate=ePdfCreateObject) |
PdfAcroForm * | GetAcroForm (bool bCreate=ePdfCreateObject, EPdfAcroFormDefaulAppearance eDefaultAppearance=ePdfAcroFormDefaultAppearance_BlackText12pt) |
PdfPagesTree * | GetPagesTree () const |
int | GetPageCount () const |
PdfPage * | GetPage (int nIndex) const |
PdfFont * | CreateFont (const char *pszFontName, bool bSymbolCharset=false, const PdfEncoding *const pEncoding=PdfEncodingFactory::GlobalWinAnsiEncodingInstance(), PdfFontCache::EFontCreationFlags eFontCreationFlags=PdfFontCache::eFontCreationFlags_AutoSelectBase14, bool bEmbedd=true) |
PdfFont * | CreateFont (const char *pszFontName, bool bBold, bool bItalic, bool bSymbolCharset=false, const PdfEncoding *const pEncoding=PdfEncodingFactory::GlobalWinAnsiEncodingInstance(), PdfFontCache::EFontCreationFlags eFontCreationFlags=PdfFontCache::eFontCreationFlags_AutoSelectBase14, bool bEmbedd=true, const char *pszFileName=NULL) |
PdfFont * | CreateFont (FT_Face face, bool bSymbolCharset=false, const PdfEncoding *const pEncoding=PdfEncodingFactory::GlobalWinAnsiEncodingInstance(), bool bEmbedd=true) |
PdfFont * | CreateDuplicateFontType1 (PdfFont *pFont, const char *pszSuffix) |
PdfFont * | CreateFontSubset (const char *pszFontName, bool bBold, bool bItalic, bool bSymbolCharset=false, const PdfEncoding *const pEncoding=PdfEncodingFactory::GlobalWinAnsiEncodingInstance(), const char *pszFileName=NULL) |
FT_Library | GetFontLibrary () const |
void | EmbedSubsetFonts () |
PdfPage * | CreatePage (const PdfRect &rSize) |
void | CreatePages (const std::vector< PdfRect > &vecSizes) |
PdfPage * | InsertPage (const PdfRect &rSize, int atIndex) |
const PdfDocument & | Append (const PdfMemDocument &rDoc, bool bAppendAll=true) |
const PdfDocument & | InsertExistingPageAt (const PdfMemDocument &rDoc, int nPageIndex, int nAtIndex) |
PdfRect | FillXObjectFromDocumentPage (PdfXObject *pXObj, const PdfMemDocument &rDoc, int nPage, bool bUseTrimBox) |
PdfRect | FillXObjectFromExistingPage (PdfXObject *pXObj, int nPage, bool bUseTrimBox) |
PdfRect | FillXObjectFromPage (PdfXObject *pXObj, const PdfPage *pPage, bool bUseTrimBox, unsigned int difference) |
void | AttachFile (const PdfFileSpec &rFileSpec) |
PdfFileSpec * | GetAttachment (const PdfString &rName) |
void | AddNamedDestination (const PdfDestination &rDest, const PdfString &rsName) |
void | SetPageMode (EPdfPageMode inMode) |
EPdfPageMode | GetPageMode (void) const |
void | SetUseFullScreen (void) |
void | SetPageLayout (EPdfPageLayout inLayout) |
void | SetHideToolbar (void) |
void | SetHideMenubar (void) |
void | SetHideWindowUI (void) |
void | SetFitWindow (void) |
void | SetCenterWindow (void) |
void | SetDisplayDocTitle (void) |
void | SetPrintScaling (PdfName &inScalingType) |
void | SetBaseURI (const std::string &inBaseURI) |
void | SetLanguage (const std::string &inLanguage) |
void | SetBindingDirection (PdfName &inDirection) |
PdfVecObjects * | GetObjects () |
const PdfVecObjects * | GetObjects () const |
void | SetFontConfigWrapper (const PdfFontConfigWrapper &rFontConfig) |
Additional Inherited Members | |
![]() | |
PdfDocument (bool bEmpty=false) | |
void | SetInfo (PdfInfo *pInfo) |
PdfObject * | GetCatalog () |
const PdfObject * | GetCatalog () const |
void | SetCatalog (PdfObject *pObject) |
PdfObject * | GetTrailer () |
const PdfObject * | GetTrailer () const |
void | SetTrailer (PdfObject *pObject) |
PdfObject * | GetNamedObjectFromCatalog (const char *pszName) const |
void | InitPagesTree () |
void | FixObjectReferences (PdfObject *pObject, int difference) |
void | SetViewerPreference (const PdfName &whichPref, const PdfObject &valueObj) |
void | SetViewerPreference (const PdfName &whichPref, bool inValue) |
void | Clear () |
PdfMemDocument is the core class for reading and manipulating PDF files and writing them back to disk.
PdfMemDocument was designed to allow easy access to the object structur of a PDF file.
PdfMemDocument should be used whenever you want to change the object structure of a PDF file.
When you are only creating PDF files, please use PdfStreamedDocument which is usually faster for creating PDFs.
PoDoFo::PdfMemDocument::PdfMemDocument | ( | ) |
Construct a new (empty) PdfMemDocument
PoDoFo::PdfMemDocument::PdfMemDocument | ( | bool | bOnlyTrailer | ) |
Construct a new (empty) PdfMemDocument
PoDoFo::PdfMemDocument::PdfMemDocument | ( | const char * | pszFilename, |
bool | bForUpdate = false |
||
) |
Construct a PdfMemDocument from an existing PDF (on disk)
pszFilename | filename of the file which is going to be parsed/opened |
bForUpdate | whether to load for incremental update |
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.
When the bForUpdate is set to true, the pszFilename is copied for later use by WriteUpdate.
|
virtual |
Close down/destruct the PdfMemDocument
void PoDoFo::PdfMemDocument::AddPdfExtension | ( | const char * | ns, |
pdf_int64 | level | ||
) |
Add a vendor-specific extension to the current PDF version.
ns | namespace of the extension |
level | level of the extension |
void PoDoFo::PdfMemDocument::DeletePages | ( | int | inFirstPage, |
int | inNumPages | ||
) |
Deletes one or more pages from this document It does NOT remove any PdfObjects from memory - just the reference from the pages tree. If you want to delete resources of this page, you have to delete them yourself, but the resources might be used by other pages, too.
inFirstPage | the first page number to delete (0-based) |
inNumPages | the number of pages to delete |
void PoDoFo::PdfMemDocument::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.
rRef | free all memory allocated by the object with this reference. |
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 PoDoFo::PdfMemDocument::FreeObjectMemory | ( | PdfObject * | pObj, |
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.
pObj | free object from memory |
bForce | if true the object will be free'd even if IsDirty() returns true. So you will loose any changes made to this object. |
|
inline |
Get access to the internal Catalog dictionary or root object.
|
inline |
Get access to the internal Catalog dictionary or root object.
|
inline |
|
inline |
Creates a PdfFont object from an existing font.
pObject | a PdfObject that is a font |
|
inline |
Get access to the RFC 3066 natural language id for the document (ISO 32000-1:2008 14.9.2.1)
|
inline |
Get access to the MarkInfo dictionary (ISO 32000-1:2008 14.7.1)
|
inline |
Get access to the Metadata stream
|
inline |
Get a reference to the sorted internal objects vector. This is an overloaded function for your convinience.
|
inline |
Get a reference to the sorted internal objects vector.
std::vector< PdfExtension > PoDoFo::PdfMemDocument::GetPdfExtensions | ( | ) | const |
Return the list of all vendor-specific extensions to the current PDF version.
ns | namespace of the extension |
level | level of the extension |
|
inlinevirtual |
Get the PDF version of the document
Implements PoDoFo::PdfDocument.
|
inline |
Get access to the StructTreeRoot dictionary
|
inline |
Get the trailer dictionary which can be written unmodified to a pdf file.
|
inlinevirtual |
bool PoDoFo::PdfMemDocument::HasPdfExtension | ( | const char * | ns, |
pdf_int64 | level | ||
) | const |
Checks whether the documents is tagged to imlpement a vendor-specific extension to the current PDF version.
ns | namespace of the extension |
level | level of the extension |
const PdfMemDocument & PoDoFo::PdfMemDocument::InsertPages | ( | const PdfMemDocument & | rDoc, |
int | inFirstPage, | ||
int | inNumPages | ||
) |
Copies one or more pages from another PdfMemDocument to this document
rDoc | the document to append |
inFirstPage | the first page number to copy (0-based) |
inNumPages | the number of pages to copy |
|
inlinevirtual |
Checks if it is allowed to extract text and graphics to support users with disabillities Every PDF consuming applications has to adhere this value!
Implements PoDoFo::PdfDocument.
|
inlinevirtual |
Checks if text and graphics extraction is allowed. Every PDF consuming applications has to adhere this value!
Implements PoDoFo::PdfDocument.
|
inlinevirtual |
Checks if it is allowed to insert, create, rotate, delete pages or add bookmarks Every PDF consuming applications has to adhere this value!
Implements PoDoFo::PdfDocument.
|
inlinevirtual |
Checks if modifiying this document (besides annotations, form fields or changing pages) is allowed. Every PDF consuming applications has to adhere this value!
Implements PoDoFo::PdfDocument.
|
inlinevirtual |
Checks if it is allowed to add or modify annotations or form fields Every PDF consuming applications has to adhere this value!
Implements PoDoFo::PdfDocument.
|
inlinevirtual |
Checks if it is allowed to fill in existing form or signature fields Every PDF consuming applications has to adhere this value!
Implements PoDoFo::PdfDocument.
|
inlinevirtual |
Checks if it is allowed to print a high quality version of this document Every PDF consuming applications has to adhere this value!
Implements PoDoFo::PdfDocument.
|
inlinevirtual |
Returns wether this PDF document is linearized, aka weboptimized
Implements PoDoFo::PdfDocument.
|
inline |
Returns whether the document is fully loaded.
|
inlinevirtual |
Checks if printing this document is allowed. Every PDF consuming applications has to adhere this value!
Implements PoDoFo::PdfDocument.
void PoDoFo::PdfMemDocument::Load | ( | const char * | pszFilename, |
bool | bForUpdate = false |
||
) |
Load a PdfMemDocument from a file
pszFilename | filename of the file which is going to be parsed/opened |
bForUpdate | whether to load for incremental update |
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.
When the bForUpdate is set to true, the pszFilename is copied for later use by WriteUpdate.
void PoDoFo::PdfMemDocument::LoadFromBuffer | ( | const char * | pBuffer, |
long | lLen, | ||
bool | bForUpdate = false |
||
) |
Load a PdfMemDocument from a buffer in memory
pBuffer | a memory area containing the PDF data |
lLen | length of the buffer |
bForUpdate | whether to load for incremental update |
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.
When the bForUpdate is set to true, the memory buffer is copied for later use by WriteUpdate.
void PoDoFo::PdfMemDocument::LoadFromDevice | ( | const PdfRefCountedInputDevice & | rDevice, |
bool | bForUpdate = false |
||
) |
Load a PdfMemDocument from a PdfRefCountedInputDevice
rDevice | the input device containing the PDF |
bForUpdate | whether to load for incremental update |
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.
When the bForUpdate is set to true, the rDevice is referenced for later use by WriteUpdate.
void PoDoFo::PdfMemDocument::RemovePdfExtension | ( | const char * | ns, |
pdf_int64 | level | ||
) |
Remove a vendor-specific extension to the current PDF version.
ns | namespace of the extension |
level | level of the extension |
void PoDoFo::PdfMemDocument::SetEncrypted | ( | const PdfEncrypt & | pEncrypt | ) |
Encrypt the document during writing using a PdfEncrypt object
pEncrypt | an encryption object that will be owned by PdfMemDocument |
void PoDoFo::PdfMemDocument::SetEncrypted | ( | const std::string & | userPassword, |
const std::string & | ownerPassword, | ||
int | protection = PdfEncrypt::ePdfPermissions_Print | PdfEncrypt::ePdfPermissions_Edit | PdfEncrypt::ePdfPermissions_Copy | PdfEncrypt::ePdfPermissions_EditNotes | PdfEncrypt::ePdfPermissions_FillAndSign | PdfEncrypt::ePdfPermissions_Accessible | PdfEncrypt::ePdfPermissions_DocAssembly | PdfEncrypt::ePdfPermissions_HighPrint , |
||
PdfEncrypt::EPdfEncryptAlgorithm | eAlgorithm = PdfEncrypt::ePdfEncryptAlgorithm_AESV2 , |
||
PdfEncrypt::EPdfKeyLength | eKeyLength = PdfEncrypt::ePdfKeyLength_40 |
||
) |
Encrypt the document during writing.
userPassword | the user password (if empty the user does not have to enter a password to open the document) |
ownerPassword | the owner password |
protection | several EPdfPermissions values or'ed together to set the users permissions for this document |
eAlgorithm | the revision of the encryption algorithm to be used |
eKeyLength | the length of the encryption key ranging from 40 to 256 bits (only used if eAlgorithm >= ePdfEncryptAlgorithm_RC4V2) |
void PoDoFo::PdfMemDocument::SetPassword | ( | const std::string & | sPassword | ) |
If you try to open an encrypted PDF file, which requires a password to open, PoDoFo will throw a PdfError( ePdfError_InvalidPassword ) exception.
If you got such an exception, you have to set a password which should be used for opening the PDF.
The usual way will be to ask the user for the password and set the password using this method.
PdfParser will immediately continue to read the PDF file.
sPassword | a user or owner password which can be used to open an encrypted PDF file If the password is invalid, a PdfError( ePdfError_InvalidPassword ) exception is thrown! |
|
inline |
Set the PDF Version of the document. Has to be called before Write() to have an effect.
eVersion | version of the pdf document |
|
inline |
Set the write mode to use when writing the PDF.
eWriteMode | write mode |
void PoDoFo::PdfMemDocument::Write | ( | const char * | pszFilename | ) |
Writes the complete document to a file
pszFilename | filename of the document |
This is an overloaded member function for your convenience.
TODO: We will get problems here on linux, if we write to the same filename we read the document from. Because the PdfParserObjects will read there streams data from the file while we are writing it. The problem is that the stream data won't exist at this time as we truncated the file already to zero length by opening it writeable.
void PoDoFo::PdfMemDocument::Write | ( | PdfOutputDevice * | pDevice | ) |
Writes the complete document to an output device
pDevice | write to this output device |
TODO: We will get problems here on linux, if we write to the same filename we read the document from. Because the PdfParserObjects will read there streams data from the file while we are writing it. The problem is that the stream data won't exist at this time as we truncated the file already to zero length by opening it writeable.
void PoDoFo::PdfMemDocument::WriteUpdate | ( | const char * | pszFilename | ) |
Writes the document changes to a file
pszFilename | filename of the document |
Writes the document changes to a file as an incremental update. The document should be loaded with bForUpdate = true, otherwise an exception is thrown.
Beware when overwriting existing files. Plain file overwrite is allowed only if the document was loaded with the same filename (and the same overloaded function), otherwise the destination file cannot be the same as the source file, because the destination file is truncated first and only then the source file content is copied into it.
This is an overloaded member function for your convenience.
void PoDoFo::PdfMemDocument::WriteUpdate | ( | PdfOutputDevice * | pDevice, |
bool | bTruncate = true |
||
) |
Writes the document changes to an output device
pDevice | write to this output device |
bTruncate | whether to truncate the pDevice first and fill it with the content of the source document; the default is true. |
Writes the document changes to the output device as an incremental update. The document should be loaded with bForUpdate = true, otherwise an exception is thrown.
The bTruncate is used to determine whether saving to the same file or not. In case the bTruncate is true, a new source stream is opened and its whole content is copied to the pDevice first. Otherwise the pDevice is the same file which had been loaded and the caller is responsible to position the pDevice at the place, where the update should be written (basically at the end of the stream).
TODO: We will get problems here on linux, if we write to the same filename we read the document from. Because the PdfParserObjects will read there streams data from the file while we are writing it. The problem is that the stream data won't exist at this time as we truncated the file already to zero length by opening it writeable.