Files
core/PdfReader/Src/PDFDoc.h
Ilya.Kirillov 65d72ae4ec Убраны лишние файлы. Все файлы сконвертированы в UTF8.
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@62550 954022d7-b5bf-4e40-9824-e11837661b57
2016-05-21 00:02:55 +03:00

212 lines
6.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _PDF_READER_PDF_DOC_H
#define _PDF_READER_PDF_DOC_H
#include <stdio.h>
#include "XRef.h"
#include "Catalog.h"
#include "Page.h"
#include "ErrorConstants.h"
namespace PdfReader
{
class StringExt;
class BaseStream;
class OutputDev;
class Links;
class LinkAction;
class LinkDest;
class Outline;
//-------------------------------------------------------------------------------------------------------------------------------
// PDFDoc
//-------------------------------------------------------------------------------------------------------------------------------
class PDFDoc
{
public:
PDFDoc(GlobalParams *pGlobalParams, const wchar_t* wsFileName, StringExt *seOwnerPassword = NULL, StringExt *seUserPassword = NULL);
~PDFDoc();
// Нормально ли открылся PDF файл?
bool CheckValidation()
{
return m_bValid;
}
// Получаем код ошибки, если PDF файл не открылся.
EError GetErrorCode()
{
return m_eErrorCode;
}
// Считываем имя файла.
std::wstring 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;
}
private:
bool Setup(StringExt *seOwnerPassword, StringExt *seUserPassword);
void CheckHeader();
bool CheckEncryption(StringExt *seOwnerPassword, StringExt *seUserPassword);
private:
std::wstring m_wsFileName; // Имя исходного файла.
FILE* m_pFile; // Указатель на файловый поток
unsigned char* m_pFileBuffer; // Буфер для файла
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 файл
EError m_eErrorCode; // Код ошибки
GlobalParams* m_pGlobalParams;
};
}
#endif // _PDF_READER_PDF_DOC_H