1// Copyright 2014 PDFium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7#ifndef _PDF_TXTPROC_H_ 8#define _PDF_TXTPROC_H_ 9class CTextColumn : public CFX_Object 10{ 11public: 12 FX_FLOAT m_AvgPos; 13 int m_Count; 14 int m_TextPos; 15}; 16class CTextBox : public CFX_Object 17{ 18public: 19 CFX_WideString m_Text; 20 FX_FLOAT m_Left; 21 FX_FLOAT m_Right; 22 FX_FLOAT m_SpaceWidth; 23 FX_FLOAT m_Top; 24 FX_FLOAT m_Bottom; 25 FX_FLOAT m_FontSizeV; 26 CTextColumn* m_pColumn; 27}; 28class CTextBaseLine : public CFX_Object 29{ 30public: 31 CTextBaseLine(); 32 ~CTextBaseLine(); 33 void InsertTextBox(FX_FLOAT leftx, FX_FLOAT rightx, FX_FLOAT topy, FX_FLOAT bottomy, 34 FX_FLOAT spacew, FX_FLOAT fontsize_v, const CFX_WideString& str); 35 FX_BOOL GetWidth(FX_FLOAT& leftx, FX_FLOAT& rightx); 36 FX_BOOL CanMerge(CTextBaseLine* pOther); 37 void Merge(CTextBaseLine* pOther); 38 void MergeBoxes(); 39 void CountChars(int& count, FX_FLOAT& width, int& minchars); 40 void WriteOutput(CFX_WideString& str, FX_FLOAT leftx, FX_FLOAT width, int iWidth); 41 FX_FLOAT m_BaseLine; 42 FX_FLOAT m_Top; 43 FX_FLOAT m_Bottom; 44 FX_FLOAT m_MaxFontSizeV; 45 CFX_PtrArray m_TextList; 46}; 47class CPDF_PageObject; 48class CPDF_TextObject; 49class CTextPage : public CFX_Object 50{ 51public: 52 CTextPage(); 53 ~CTextPage(); 54 void ProcessObject(CPDF_PageObject* pObj); 55 CTextBaseLine* InsertTextBox(CTextBaseLine* pBaseLine, FX_FLOAT basey, FX_FLOAT leftx, 56 FX_FLOAT rightx, FX_FLOAT topy, FX_FLOAT bottomy, FX_FLOAT spacew, FX_FLOAT fontsize_v, 57 CFX_ByteString& str, CPDF_Font* pFont); 58 void WriteOutput(CFX_WideStringArray& lines, int iMinWidth); 59 FX_BOOL m_bAutoWidth; 60 FX_BOOL m_bKeepColumn; 61 FX_BOOL m_bBreakSpace; 62 FX_BOOL m_bOCR; 63private: 64 CFX_PtrArray m_BaseLines; 65 CFX_PtrArray m_TextColumns; 66 void FindColumns(); 67 CTextColumn* FindColumn(FX_FLOAT xpos); 68 void BreakSpace(CPDF_TextObject* pTextObj); 69}; 70#endif 71