Files
DocumentServer-v-9.2.0/core/PdfFile/SrcReader/PdfAnnot.h
T
Yajbir Singh f1b860b25c
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

704 lines
25 KiB
C++

/*
* (c) Copyright Ascensio System SIA 2010-2023
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#ifndef _PDF_READER_ANNOT_H
#define _PDF_READER_ANNOT_H
#include <string>
#include <vector>
#include "../lib/xpdf/PDFDoc.h"
#include "../lib/xpdf/AcroForm.h"
#include "../../DesktopEditor/graphics/pro/Fonts.h"
#include "../../DesktopEditor/graphics/pro/Graphics.h"
#include "../../DesktopEditor/graphics/pro/js/wasm/src/serialize.h"
#include "RendererOutputDev.h"
namespace PdfReader
{
//------------------------------------------------------------------------
// PdfReader::CAction
//------------------------------------------------------------------------
class CAction
{
public:
virtual ~CAction() { RELEASEOBJECT(pNext); }
virtual void ToWASM(NSWasm::CData& oRes);
std::string sType;
CAction* pNext;
protected:
CAction() : pNext(NULL) {}
};
struct CActionGoTo final : public CAction
{
unsigned int unPage;
unsigned int unKindFlag;
double pRect[4];
BYTE nKind;
void ToWASM(NSWasm::CData& oRes) override;
};
struct CActionURI final : public CAction
{
std::string sURI;
void ToWASM(NSWasm::CData& oRes) override;
};
struct CActionNamed final : public CAction
{
std::string sNamed;
void ToWASM(NSWasm::CData& oRes) override;
};
struct CActionJavaScript final : public CAction
{
std::string sJavaScript;
void ToWASM(NSWasm::CData& oRes) override;
};
struct CActionHide final : public CAction
{
bool bHideFlag;
std::vector<std::string> arrAnnotName;
void ToWASM(NSWasm::CData& oRes) override;
};
struct CActionResetForm final : public CAction
{
CActionResetForm()
{
unFlags = 0;
}
unsigned int unFlags;
std::vector<std::string> arrAnnotName;
void ToWASM(NSWasm::CData& oRes) override;
};
//------------------------------------------------------------------------
// PdfReader::CAnnotAP
//------------------------------------------------------------------------
class CAnnotAP final
{
public:
CAnnotAP(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CPdfFontList* pFontList, int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, const char* sView, const char* sButtonView, AcroFormField* pField, int nStartRefID);
CAnnotAP(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CPdfFontList* pFontList, int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex, const char* sView, Object* oAnnotRef, int nStartRefID);
~CAnnotAP();
void ToWASM(NSWasm::CData& oRes);
private:
struct CAnnotAPView final
{
BYTE nBlendMode;
std::string sAPName;
std::string sASName;
BYTE* pAP;
};
void WriteAppearance(unsigned int nColor, CAnnotAPView* pView);
BYTE GetBlendMode();
void Init(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CPdfFontList* pFontList, int nRasterW, int nRasterH, int nBackgroundColor, int nPageIndex);
void Init(Object* oAnnot);
void Draw(PDFDoc* pdfDoc, Object* oAP, int nRasterH, int nBackgroundColor, int nPageIndex, AcroFormField* pField, const char* sView, const char* sButtonView);
void Draw(PDFDoc* pdfDoc, Object* oAP, int nRasterH, int nBackgroundColor, Object* oAnnotRef, const char* sView);
void Clear();
unsigned int m_unRefNum; // Номер ссылки на объект
double m_dx1, m_dy1, m_dx2, m_dy2;
double m_dCropX, m_dCropY;
double m_dWScale, m_dHScale;
double m_dRWScale, m_dRHScale;
double m_dWTale, m_dHTale;
double m_dRx1, m_dRy1;
int m_nWidth, m_nHeight;
std::vector<CAnnotAPView*> m_arrAP;
bool m_bIsStamp;
Gfx* m_gfx;
CBgraFrame* m_pFrame;
RendererOutputDev* m_pRendererOut;
NSGraphics::IGraphicsRenderer* m_pRenderer;
};
//------------------------------------------------------------------------
// PdfReader::CAnnot
//------------------------------------------------------------------------
class CAnnot
{
public:
virtual ~CAnnot();
virtual void ToWASM(NSWasm::CData& oRes);
void SetPage(unsigned int nPage) { m_unPage = nPage; }
struct CBorderType final
{
CBorderType()
{
nType = 0;
dWidth = 1;
}
void ToWASM(NSWasm::CData& oRes);
BYTE nType;
double dWidth;
std::vector<double> arrDash;
};
protected:
CAnnot(PDFDoc* pdfDoc, AcroFormField* pField, int nStartRefID);
CAnnot(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
std::string DictLookupString(Object* pObj, const char* sName, int nByte);
unsigned int m_unAFlags;
unsigned int m_unFlags;
double m_dHeight; // Высота холста, для Y трансформации
double m_dX; // Смещение по X для трансформации
double m_pRect[4]; // Координаты
std::vector<double> m_arrC; // Специальный цвет
private:
unsigned int m_unAnnotFlag; // Флаг аннотации - F
unsigned int m_unRefNum; // Номер ссылки на объект
unsigned int m_unPage; // Страница
std::pair<BYTE, double> m_pBE; // Эффекты границы
std::string m_sContents; // Отображаемый текст
std::string m_sNM; // Уникальное имя
std::string m_sM; // Дата последнего изменения
std::string m_sOUserID; // OO User ID
std::string m_sOMetadata; // OO метаданные формы
CBorderType* m_pBorder; // Граница
};
//------------------------------------------------------------------------
// PdfReader::CWidgetAnnot
//------------------------------------------------------------------------
class CAnnotWidget : public CAnnot
{
public:
virtual ~CAnnotWidget();
void SetFont(PDFDoc* pdfDoc, AcroFormField* pField, NSFonts::IFontManager* pFontManager, CPdfFontList *pFontList);
void SetButtonFont(PDFDoc* pdfDoc, AcroFormField* pField, NSFonts::IFontManager* pFontManager, CPdfFontList *pFontList);
unsigned int GetRefNumParent() { return m_unRefNumParent; }
const std::string& GetFullName() { return m_sFullName; }
void SetFullName(const std::string& sFullName) { m_sFullName = sFullName; }
bool ChangeFullName(const std::string& sPrefixForm);
void ClearActions();
virtual std::string GetType() = 0;
virtual void ToWASM(NSWasm::CData& oRes) override;
bool m_bChangeFullName;
protected:
CAnnotWidget(PDFDoc* pdfDoc, AcroFormField* pField, int nStartRefID);
std::string FieldLookupString(AcroFormField* pField, const char* sName, int nByte);
BYTE m_nType; // Тип - FT + флаги
unsigned int m_unFieldFlag; // Флаг - Ff
private:
unsigned int m_unR; // Поворот аннотации относительно страницы - R
unsigned int m_unRefNumParent; // Номер ссылки на объект родителя
unsigned int m_unFontStyle; // Стиль шрифта - из DA
unsigned int m_unMEOptions; // MEOptions
double m_dFontSize; // Размер шрифта - из DA
std::vector<double> m_arrTC; // Цвет текста - из DA
std::vector<double> m_arrBC; // Цвет границ - BC
std::vector<double> m_arrBG; // Цвет фона - BG
std::vector<CAction*> m_arrAction; // Действия
BYTE m_nQ; // Выравнивание текста - Q
BYTE m_nH; // Режим выделения - H
std::string m_sTU; // Альтернативное имя поля, используется во всплывающей подсказке и сообщениях об ошибке - TU
std::string m_sDS; // Строка стиля по умолчанию - DS
std::string m_sDV; // Значение по-умолчанию - DV
std::string m_sT; // Частичное имя поля - T
std::string m_sFontKey; // Уникальный идентификатор шрифта
std::string m_sFullName; // Полное имя поля
std::string m_sFontName; // Имя шрифта - из DA
std::string m_sActualFontName; // Имя замененного шрифта
std::string m_sButtonFontName; // Имя шрифта кнопки
};
class CAnnotWidgetBtn final : public CAnnotWidget
{
public:
CAnnotWidgetBtn(PDFDoc* pdfDoc, AcroFormField* pField, int nStartRefID);
virtual std::string GetType() override { return "Btn"; }
void ToWASM(NSWasm::CData& oRes) override;
private:
BYTE m_nStyle;
BYTE m_nTP;
BYTE m_nSW;
BYTE m_nS;
unsigned int m_unIFFlag;
std::string m_sV;
std::string m_sCA;
std::string m_sRC;
std::string m_sAC;
std::string m_sAP_N_Yes;
double m_dA1, m_dA2;
};
class CAnnotWidgetTx final : public CAnnotWidget
{
public:
CAnnotWidgetTx(PDFDoc* pdfDoc, AcroFormField* pField, int nStartRefID);
virtual std::string GetType() override { return "Tx"; }
void ToWASM(NSWasm::CData& oRes) override;
private:
std::string m_sV;
unsigned int m_unMaxLen;
std::string m_sRV;
};
class CAnnotWidgetCh final : public CAnnotWidget
{
public:
CAnnotWidgetCh(PDFDoc* pdfDoc, AcroFormField* pField, int nStartRefID);
virtual std::string GetType() override { return "Ch"; }
void ToWASM(NSWasm::CData& oRes) override;
private:
std::string m_sV;
std::vector<std::string> m_arrV;
std::vector<int> m_arrI;
std::vector< std::pair<std::string, std::string> > m_arrOpt;
unsigned int m_unTI;
};
class CAnnotWidgetSig final : public CAnnotWidget
{
public:
CAnnotWidgetSig(PDFDoc* pdfDoc, AcroFormField* pField, int nStartRefID);
virtual std::string GetType() override { return "Sig"; }
void ToWASM(NSWasm::CData& oRes) override;
};
//------------------------------------------------------------------------
// PdfReader::CAnnotPopup
//------------------------------------------------------------------------
class CAnnotPopup final : public CAnnot
{
public:
CAnnotPopup(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void ToWASM(NSWasm::CData& oRes) override;
private:
unsigned int m_unFlags;
unsigned int m_unRefNumParent; // Номер ссылки на объект родителя
};
//------------------------------------------------------------------------
// PdfReader::CAnnotMarkup
//------------------------------------------------------------------------
class CAnnotMarkup : public CAnnot
{
public:
struct CFontData final
{
bool bFind;
BYTE nAlign;
unsigned int unFontFlags; // 0 Bold, 1 Italic, 3 зачеркнутый, 4 подчеркнутый, 5 vertical-align, 6 actual font, 7 RTL
double dFontSise;
double dVAlign;
double dColor[3];
std::string sFontFamily;
std::string sActualFont;
std::string sText;
CFontData() : bFind(false), nAlign(0), unFontFlags(4), dFontSise(10), dVAlign(0), dColor{0, 0, 0} {}
CFontData(const CFontData& oFont) : bFind(oFont.bFind), nAlign(oFont.nAlign), unFontFlags(oFont.unFontFlags), dFontSise(oFont.dFontSise), dVAlign(oFont.dVAlign),
dColor{oFont.dColor[0], oFont.dColor[1], oFont.dColor[2]}, sFontFamily(oFont.sFontFamily), sActualFont(oFont.sActualFont), sText(oFont.sText) {}
};
void SetFont(PDFDoc* pdfDoc, Object* oAnnotRef, NSFonts::IFontManager* pFontManager, CPdfFontList *pFontList);
static std::vector<CAnnotMarkup::CFontData*> ReadRC(const std::string& sRC);
protected:
CAnnotMarkup(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
virtual ~CAnnotMarkup();
virtual void ToWASM(NSWasm::CData& oRes) override;
std::vector<CFontData*> m_arrRC; // Форматированный текст
private:
BYTE m_nRT; // Тип аннотации-ответа
unsigned int m_unRefNumPopup; // Номер ссылки на всплывающую аннотацию
unsigned int m_unRefNumIRT; // Номер ссылки на аннотацию-ответ
double m_dCA; // Значение непрозрачности
std::string m_sT; // Текстовая метка, пользователь добавивший аннотацию
std::string m_sCreationDate; // Дата создания
std::string m_sSubj; // Краткое описание
};
//------------------------------------------------------------------------
// PdfReader::CAnnotText
//------------------------------------------------------------------------
class CAnnotText final : public CAnnotMarkup
{
public:
CAnnotText(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void ToWASM(NSWasm::CData& oRes) override;
private:
BYTE m_nName; // Иконка
BYTE m_nState; // Состояние
BYTE m_nStateModel; // Модель состояния
};
//------------------------------------------------------------------------
// PdfReader::CAnnotInk
//------------------------------------------------------------------------
class CAnnotInk final : public CAnnotMarkup
{
public:
CAnnotInk(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void ToWASM(NSWasm::CData& oRes) override;
private:
std::vector< std::vector<double> > m_arrInkList; // Путь
};
//------------------------------------------------------------------------
// PdfReader::CAnnotLine
//------------------------------------------------------------------------
class CAnnotLine final : public CAnnotMarkup
{
public:
CAnnotLine(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void ToWASM(NSWasm::CData& oRes) override;
private:
BYTE m_nIT; // Назначение аннотации
BYTE m_nCP; // Расположение заголовка аннотации
double m_dLL; // Длина линий выноски
double m_dLLE; // Продолжение линий выноски
double m_dLLO; // Длина смещения выноски
BYTE m_nLE[2]; // Стили окончания линии
double m_pL[4]{}; // Координаты линии
double m_pCO[2]; // Смещение текста подписи
std::vector<double> m_arrIC; // Цвет окончаний линии
// TODO Measure Показатели масштаба, единиц измерения
};
//------------------------------------------------------------------------
// PdfReader::CAnnotTextMarkup
//------------------------------------------------------------------------
class CAnnotTextMarkup final : public CAnnotMarkup
{
public:
CAnnotTextMarkup(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void ToWASM(NSWasm::CData& oRes) override;
private:
BYTE m_nSubtype; // Подтип TextMarkup аннотации
std::vector<double> m_arrQuadPoints; // Координаты
};
//------------------------------------------------------------------------
// PdfReader::CAnnotSquareCircle
//------------------------------------------------------------------------
class CAnnotSquareCircle final : public CAnnotMarkup
{
public:
CAnnotSquareCircle(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void ToWASM(NSWasm::CData& oRes) override;
private:
BYTE m_nSubtype; // Подтип Square или Circle аннотации
double m_pRD[4]{}; // Различия Rect и фактического размера
std::vector<double> m_arrIC; // Цвет заполнения
};
//------------------------------------------------------------------------
// PdfReader::CAnnotPolygonPolyline
//------------------------------------------------------------------------
class CAnnotPolygonLine final : public CAnnotMarkup
{
public:
CAnnotPolygonLine(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void ToWASM(NSWasm::CData& oRes) override;
private:
BYTE m_nIT; // Назначение аннотации
BYTE m_nSubtype; // Подтип Polygon или Polyline аннотации
BYTE m_nLE[2]; // Стили окончания линии
std::vector<double> m_arrIC; // Цвет заполнения
std::vector<double> m_arrVertices; // Координаты вершин
// TODO Measure Показатели масштаба, единиц измерения
};
//------------------------------------------------------------------------
// PdfReader::CAnnotFreeText
//------------------------------------------------------------------------
class CAnnotFreeText final : public CAnnotMarkup
{
public:
CAnnotFreeText(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void ToWASM(NSWasm::CData& oRes) override;
private:
BYTE m_nQ; // Выравнивание текста - Q
BYTE m_nIT; // Назначение аннотации
BYTE m_nLE; // Стиль окончания линии
int m_nRotate;
std::string m_sDS; // Строка стиля по умолчанию - DS
double m_pRD[4]{}; // Различия Rect и фактического размера
std::vector<double> m_arrCFromDA; // Цвет границы
std::vector<double> m_arrCL; // Координаты выноски
};
//------------------------------------------------------------------------
// PdfReader::CAnnotCaret
//------------------------------------------------------------------------
class CAnnotCaret final : public CAnnotMarkup
{
public:
CAnnotCaret(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void ToWASM(NSWasm::CData& oRes) override;
private:
BYTE m_nSy; // Связанный символ - Sy
double m_pRD[4]{}; // Различия Rect и фактического размера
};
//------------------------------------------------------------------------
// PdfReader::CAnnotFileAttachment
//------------------------------------------------------------------------
class CAnnotFileAttachment final : public CAnnotMarkup
{
public:
CAnnotFileAttachment(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
virtual ~CAnnotFileAttachment();
void ToWASM(NSWasm::CData& oRes) override;
struct CEmbeddedFile
{
BYTE* pFile;
int nLength;
bool bFree;
CEmbeddedFile() : pFile(NULL), nLength(0), bFree(true) {}
~CEmbeddedFile() { if (bFree) RELEASEARRAYOBJECTS(pFile); }
};
struct CEmbeddedFiles
{
CEmbeddedFile* m_pF;
CEmbeddedFile* m_pUF;
CEmbeddedFile* m_pDOS;
CEmbeddedFile* m_pMac;
CEmbeddedFile* m_pUnix;
CEmbeddedFiles() : m_pF(NULL), m_pUF(NULL), m_pDOS(NULL), m_pMac(NULL), m_pUnix(NULL) {}
~CEmbeddedFiles()
{
RELEASEOBJECT(m_pF);
RELEASEOBJECT(m_pUF);
RELEASEOBJECT(m_pDOS);
RELEASEOBJECT(m_pMac);
RELEASEOBJECT(m_pUnix);
}
};
private:
std::string m_sName; // Иконка
std::string m_sFS; // Файловая система
std::string m_sDesc; // Описание файла
std::string m_sF; // Спецификация файла (обратная совместимость)
std::string m_sUF; // Спецификация файла (кросс-платформенная и межъязыковая совместимость)
std::string m_sDOS; // Спецификация файла DOS
std::string m_sMac; // Спецификация файла Mac
std::string m_sUnix; // Спецификация файла Unix
std::pair<std::string, std::string> m_sID; // Идентификатор файла
CEmbeddedFiles* m_pEF; // EF содержит F/UF/DOS/Mac/Unix со ссылками на встроенные файловые потоки по соответствующим спецификациях
// TODO RF содержит F/UF/DOS/Mac/Unix с массивами связанных файлов по соответствующим спецификациях
// TODO Cl коллекция для создания пользовательского интерфейса
};
//------------------------------------------------------------------------
// PdfReader::CAnnotStamp
//------------------------------------------------------------------------
class CAnnotStamp final : public CAnnotMarkup
{
public:
CAnnotStamp(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void ToWASM(NSWasm::CData& oRes) override;
private:
std::string m_sName; // Иконка
double m_dRotate;
double m_dX1, m_dY1, m_dX2, m_dY2, m_dX3, m_dY3, m_dX4, m_dY4;
};
//------------------------------------------------------------------------
// PdfReader::CAnnotRedact
//------------------------------------------------------------------------
class CAnnotRedact final : public CAnnotMarkup
{
public:
CAnnotRedact(PDFDoc* pdfDoc, Object* oAnnotRef, int nPageIndex, int nStartRefID);
void SetFont(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CPdfFontList *pFontList, Object* oAnnotRef);
void ToWASM(NSWasm::CData& oRes) override;
private:
BYTE m_nQ; // Выравнивание текста
unsigned int m_unFontStyle; // Стиль шрифта - из DA
double m_dFontSize; // Размер шрифта - из DA
std::string m_sFontName; // Имя шрифта - из DA
std::string m_sActualFontName; // Имя замененного шрифта
std::string m_sOverlayText; // Текст наложения
std::vector<double> m_arrQuadPoints; // Координаты
std::vector<double> m_arrIC; // Цвет заполнения
std::vector<double> m_arrCFromDA; // Цвет текста
};
//------------------------------------------------------------------------
// PdfReader::CAnnots
//------------------------------------------------------------------------
class CAnnots
{
public:
CAnnots(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CPdfFontList *pFontList, int nStartPage, int nStartRefID);
~CAnnots();
void ToWASM(NSWasm::CData& oRes);
bool ChangeFullNameAnnot(int nAnnot, const std::string& sPrefixForm);
bool ChangeFullNameParent(int nParent, const std::string& sPrefixForm);
const std::vector<CAnnotWidget*>& GetAnnots() { return m_arrAnnots; }
private:
struct CAnnotParent final
{
CAnnotParent()
{
unFlags = 0;
unRefNum = 0;
unRefNumParent = 0;
bChangeFullName = false;
}
~CAnnotParent()
{
ClearActions();
}
void ClearActions();
void ToWASM(NSWasm::CData& oRes);
bool bChangeFullName;
unsigned int unFlags;
unsigned int unRefNum; // Номер ссылки на объект
unsigned int unMaxLen; // Ограничение на максимальную длину text field
unsigned int unFieldFlag; // Флаг Ff
unsigned int unMEOptions; // MEOptions
unsigned int unRefNumParent; // Номер ссылки на объект родителя
std::vector<int> arrI;
std::vector<std::string> arrV;
std::vector< std::pair<std::string, std::string> > arrOpt;
std::vector<CAction*> arrAction; // Действия
std::string sT;
std::string sV;
std::string sDV;
std::string sTU;
std::string sFullName;
};
void getParents(PDFDoc* pdfDoc, Object* oFieldRef, int nStartRefID);
std::vector<int> m_arrCO; // Порядок вычислений - CO
std::vector<CAnnotParent*> m_arrParents; // Родительские Fields
std::vector<CAnnotWidget*> m_arrAnnots;
};
//------------------------------------------------------------------------
// PdfReader::CAnnotFonts
//------------------------------------------------------------------------
class CAnnotFonts final
{
public:
static bool IsBaseFont(const std::wstring& wsName);
static std::map<std::wstring, std::wstring> GetAllFonts(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CPdfFontList* pFontList, bool bIsNeedCMap);
static std::wstring GetFontData(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CPdfFontList *pFontList, Object* oFontRef, std::string& sFontName, std::string& sActualFontName, bool& bBold, bool& bItalic, bool bIsNeedCMap = false);
static bool GetFontFromAP(PDFDoc* pdfDoc, AcroFormField* pField, Object* oFontRef, std::string& sFontKey);
static std::map<std::wstring, std::wstring> GetAnnotFont(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CPdfFontList *pFontList, Object* oAnnotRef);
static std::map<std::wstring, std::wstring> GetFreeTextFont(PDFDoc* pdfDoc, NSFonts::IFontManager* pFontManager, CPdfFontList* pFontList, Object* oAnnotRef, std::vector<CAnnotMarkup::CFontData*>& arrRC);
static bool FindFonts(Object* oStream, int nDepth, Object* oResFonts);
};
}
#endif // _PDF_READER_ANNOT_H