Files
core/ASCOfficePDFReader/PDFDoc.h

217 lines
5.7 KiB
C++

#ifndef _PDF_DOC_H
#define _PDF_DOC_H
#include <stdio.h>
#include "XRef.h"
#include "Catalog.h"
#include "Page.h"
class StringExt;
class BaseStream;
class OutputDev;
class Links;
class LinkAction;
class LinkDest;
class Outline;
//-------------------------------------------------------------------------------------------------------------------------------
// PDFDoc
//-------------------------------------------------------------------------------------------------------------------------------
class PDFDoc
{
public:
PDFDoc(GlobalParams *pGlobalParams, CString wsFileName, StringExt *seOwnerPassword = NULL, StringExt *seUserPassword = NULL);
PDFDoc(GlobalParams *pGlobalParams, wchar_t *sFileName, int nFileNameLen, StringExt *seOwnerPassword = NULL, StringExt *seUserPassword = NULL);
PDFDoc(GlobalParams *pGlobalParams, BaseStream *pStream, StringExt *seOwnerPassword = NULL, StringExt *seUserPassword = NULL);
~PDFDoc();
// Íîðìàëüíî ëè îòêðûëñÿ PDF ôàéë?
BOOL CheckValidation()
{
return m_bValid;
}
// Ïîëó÷àåì êîä îøèáêè, åñëè PDF ôàéë íå îòêðûëñÿ.
int GetErrorCode()
{
return m_nErrorCode;
}
// Ñ÷èòûâàåì èìÿ ôàéëà.
CString GetFileName()
{
return m_wsFileName;
}
// Ñ÷èòûâàåì òàáëèöó Xref.
XRef *GetXRef()
{
return m_pXref;
}
// Ñ÷èòûâàåì îáúåêò Ñatalog.
Catalog *GetCatalog()
{
return m_pCatalog;
}
// Ñ÷èòûâàåì ïîòîê.
BaseStream *GetBaseStream()
{
return m_pStream;
}
// C÷èòûâàåì ïàðàìåòðû ñòðàíèöû.
double GetPageMediaWidth (int nPageIndex)
{
return m_pCatalog->GetPage(nPageIndex)->GetMediaWidth();
}
double GetPageMediaHeight(int nPageIndex)
{
return m_pCatalog->GetPage(nPageIndex)->GetMediaHeight();
}
double GetPageCropWidth (int nPageIndex)
{
return m_pCatalog->GetPage(nPageIndex)->GetCropWidth();
}
double GetPageCropHeight (int nPageIndex)
{
return m_pCatalog->GetPage(nPageIndex)->GetCropHeight();
}
int GetPageRotate (int nPageIndex)
{
return m_pCatalog->GetPage(nPageIndex)->GetRotate();
}
// Ñ÷èòûâàåì êîëè÷åñòâî ñòðàíèö.
int GetPagesCount()
{
return m_pCatalog->GetPagesCount();
}
// Âîçâðàùàåì ñîäåðæèìîå ïîòîêà ìåòàäàííûõ îáúåêòà Catalog.
StringExt *ReadMetadata()
{
return m_pCatalog->ReadMetadata();
}
// Âîçâðàùàåì îáúåêò StructureTreeRoot.
Object *GetStructTreeRoot()
{
return m_pCatalog->GetStructTreeRoot();
}
// Âûâîäèì äàííóþ ñòðàíèöó íà óñòðîéñòâî pOut.
void DisplayPage(OutputDev *pOut, int nPageIndex, double dHorDPI, double dVerDPI, int nRotate, BOOL bUseMediaBox, BOOL bCrop, BOOL bPrinting, BOOL (*pAbortCheckCbk)(void *pData) = NULL, void *pAbortCheckCbkData = NULL);
// Âûâîäèì ñðàçó íåñêîëüêî ñòðàíèö.
void DisplayPages(OutputDev *pOut, int nFirstPageIndex, int nLastPageIndex, double dHorDPI, double dVerDPI, int nRotate, BOOL bUseMediaBox, BOOL bCrop, BOOL bPrinting, BOOL (*pAbortCheckCbk)(void *pData) = NULL, void *pAbortCheckCbkData = NULL);
// Âûâîäèì ÷àñòü ñòðàíèöû.
void DisplayPageSlice(OutputDev *pOut, int nPageIndex, double dHorDPI, double dVerDPI, int nRotate, BOOL bUseMediaBox, BOOL bCrop, BOOL bPrinting, int nSliceX, int nSliceY, int nSliceW, int nSliceH, BOOL (*pAbortCheckCbk)(void *pData) = NULL, void *pAbortCheckCbkData = NULL);
// Èùåì ñòðàíèöó ïî åå îáúåêòíûì íîìåðàì. Âîçâðàùàåì 0, åñëè ñòðàíèöà íå íàéäåíà.
int FindPage(int nNum, int nGen)
{
return m_pCatalog->FindPage( nNum, nGen );
}
// Âîçâðàùàåì Links äëÿ òåêóùåé ñòðàíèöû.
Links *GetLinks(int nPageIndex);
// Èùåì Destination ïî èìåíè. Âîçâðàùàåì Link destination èëè NULL, åñëè <seName> íå îáúåêò Destination.
LinkDestination *FindDest(StringExt *seName)
{
return m_pCatalog->FindDest( seName );
}
// Îáðàáàòûâàåì Links äëÿ äàííîé ñòðàíèöû.
void ProcessLinks(OutputDev *pOut, int nPageIndex);
// Âîçâðàùàåì îáúåêò Îutline.
Outline *GetOutline()
{
return m_pOutline;
}
// Çàøèôðîâàí ëè ôàéë?
BOOL IsEncrypted()
{
return m_pXref->CheckEncrypted();
}
// Ïðîâåðÿåì ðàçëè÷íûå îãðàíè÷åíèÿ.
BOOL CheckPrint (BOOL bIgnoreOwnerPassword = FALSE)
{
return m_pXref->CheckPrint( bIgnoreOwnerPassword );
}
BOOL CheckChange (BOOL bIgnoreOwnerPassword = FALSE)
{
return m_pXref->CheckChange( bIgnoreOwnerPassword );
}
BOOL CheckCopy (BOOL bIgnoreOwnerPassword = FALSE)
{
return m_pXref->CheckCopy( bIgnoreOwnerPassword );
}
BOOL CheckAddNotes(BOOL bIgnoreOwnerPassword = FALSE)
{
return m_pXref->CheckAddNotes( bIgnoreOwnerPassword );
}
// Äàííûé PDF ôàéë ÿâëÿåòñÿ ëèíåàðèçèðîâàííûì (ñì. Linearized PDF)
BOOL IsLinearized();
// Âîîçâðàùàåì îáúåê Info.
Object *GetDocInfo(Object *pObject)
{
return m_pXref->GetDocInfo( pObject );
}
Object *GetDocInfoCopy(Object *pObject)
{
return m_pXref->GetDocInfoCopy( pObject );
}
// Âîçâðàùàåì âåðñèþ PDF ôàéëà.
double GetPDFVersion()
{
return m_dPDFVersion;
}
// Ñîõðàíÿåì êîïèþ äàííîãî ôàéëà.
BOOL SaveAs(CStringW wsName);
private:
BOOL Setup(StringExt *seOwnerPassword, StringExt *seUserPassword);
void CheckHeader();
BOOL CheckEncryption(StringExt *seOwnerPassword, StringExt *seUserPassword);
private:
CString m_wsFileName; // Èìÿ èñõîäíîãî ôàéëà.
FILE *m_pFile; // Óêàçàòåëü íà ôàéëîâûé ïîòîê
char *m_pFileBuffer;
HANDLE m_hFile;
HANDLE m_hMapFile;
BaseStream *m_pStream; // Ïîòîê, â êîòîðûé ñ÷èòàí âåñü ôàéë
double m_dPDFVersion; // Âåðèñèÿ PDF ôàéëà (1.1 - 1.7)
XRef *m_pXref; // Òàáëèöà Xref
Catalog *m_pCatalog; // Óêàçàòåëü íà îáúåêò Catalog
Outline *m_pOutline; // Óêàçàòåëü íà Outline (ìåíþ)
BOOL m_bValid; // Íîðìàëüíî ëè îòêðûëñÿ PDF ôàéë
int m_nErrorCode; // Êîä îøèáêè
GlobalParams *m_pGlobalParams;
};
#endif /* _PDF_DOC_H */