mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
217 lines
5.7 KiB
C++
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 */
|