From 0634a1bf2a8a7fbdf9e76bdc8da146912048559f Mon Sep 17 00:00:00 2001 From: Kulikova Svetlana Date: Tue, 8 Aug 2023 16:53:55 +0300 Subject: [PATCH] Create CAnnotFieldInfo, Change inheritance IAnnotField --- DesktopEditor/graphics/AnnotField.cpp | 54 +++++++++++++++++++ DesktopEditor/graphics/AnnotField.h | 19 +++++++ DesktopEditor/graphics/FormField.cpp | 40 -------------- DesktopEditor/graphics/FormField.h | 19 +------ DesktopEditor/graphics/IRenderer.h | 9 +--- DesktopEditor/graphics/MetafileToRenderer.cpp | 29 ++++++++-- PdfFile/PdfFile.cpp | 4 +- PdfFile/PdfFile.h | 2 +- PdfFile/PdfWriter.cpp | 11 +++- PdfFile/PdfWriter.h | 3 +- PdfFile/PdfWriter_empty.cpp | 2 +- 11 files changed, 117 insertions(+), 75 deletions(-) diff --git a/DesktopEditor/graphics/AnnotField.cpp b/DesktopEditor/graphics/AnnotField.cpp index 159266fcd0..4b7ca8bc49 100644 --- a/DesktopEditor/graphics/AnnotField.cpp +++ b/DesktopEditor/graphics/AnnotField.cpp @@ -31,3 +31,57 @@ */ #include "./AnnotField.h" + + +CAnnotFieldInfo::CAnnotFieldInfo() +{ + m_nType = 0; + + m_dX = 0; + m_dY = 0; + m_dW = 0; + m_dH = 0; + + m_dBaseLineOffset = 0; +} +CAnnotFieldInfo::~CAnnotFieldInfo() +{ +} + +void CAnnotFieldInfo::SetType(int nType) +{ + m_nType = nType; +} +bool CAnnotFieldInfo::IsValid() const +{ + return (m_nType != 0); +} + +// Common +void CAnnotFieldInfo::SetBounds(const double& dX, const double& dY, const double& dW, const double& dH) +{ + m_dX = dX; + m_dY = dY; + m_dW = dW; + m_dH = dH; +} +void CAnnotFieldInfo::GetBounds(double& dX, double& dY, double& dW, double& dH) const +{ + dX = m_dX; + dY = m_dY; + dW = m_dW; + dH = m_dH; +} +void CAnnotFieldInfo::SetBaseLineOffset(const double& dOffset) +{ + m_dBaseLineOffset = dOffset; +} +double CAnnotFieldInfo::GetBaseLineOffset() const +{ + return m_dBaseLineOffset; +} + +bool CAnnotFieldInfo::isWidget() const +{ + return (m_nType != 0 && m_nType < 7); +} diff --git a/DesktopEditor/graphics/AnnotField.h b/DesktopEditor/graphics/AnnotField.h index ed9960fdb1..30165ff6c4 100644 --- a/DesktopEditor/graphics/AnnotField.h +++ b/DesktopEditor/graphics/AnnotField.h @@ -43,6 +43,25 @@ public: void SetType(int nType); bool IsValid() const; + + // Common + void SetBounds(const double& dX, const double& dY, const double& dW, const double& dH); + void GetBounds(double& dX, double& dY, double& dW, double& dH) const; + + void SetBaseLineOffset(const double& dOffset); + double GetBaseLineOffset() const; + + bool isWidget() const; + +protected: + int m_nType; + +private: + double m_dX; + double m_dY; + double m_dW; + double m_dH; + double m_dBaseLineOffset; }; #endif // _BUILD_ANNOTFIELD_H_ diff --git a/DesktopEditor/graphics/FormField.cpp b/DesktopEditor/graphics/FormField.cpp index e1c3e776cf..b51267ae1a 100644 --- a/DesktopEditor/graphics/FormField.cpp +++ b/DesktopEditor/graphics/FormField.cpp @@ -414,15 +414,6 @@ const std::wstring& CFormFieldInfo::CDateTimeFormPr::GetFormat() const // CFormFieldInfo::CFormFieldInfo() { - m_nType = 0; - - m_dX = 0; - m_dY = 0; - m_dW = 0; - m_dH = 0; - - m_dBaseLineOffset = 0; - m_bRequired = false; m_bPlaceHolder = false; @@ -441,38 +432,7 @@ CFormFieldInfo::~CFormFieldInfo() { } -void CFormFieldInfo::SetType(int nType) -{ - m_nType = nType; -} -bool CFormFieldInfo::IsValid() const -{ - return 0 != m_nType; -} - // Common -void CFormFieldInfo::SetBounds(const double& dX, const double& dY, const double& dW, const double& dH) -{ - m_dX = dX; - m_dY = dY; - m_dW = dW; - m_dH = dH; -} -void CFormFieldInfo::GetBounds(double& dX, double& dY, double& dW, double& dH) const -{ - dX = m_dX; - dY = m_dY; - dW = m_dW; - dH = m_dH; -} -void CFormFieldInfo::SetBaseLineOffset(const double& dOffset) -{ - m_dBaseLineOffset = dOffset; -} -double CFormFieldInfo::GetBaseLineOffset() const -{ - return m_dBaseLineOffset; -} void CFormFieldInfo::SetKey(const std::wstring& wsKey) { m_wsKey = wsKey; diff --git a/DesktopEditor/graphics/FormField.h b/DesktopEditor/graphics/FormField.h index 1b38070345..1851e97133 100644 --- a/DesktopEditor/graphics/FormField.h +++ b/DesktopEditor/graphics/FormField.h @@ -33,9 +33,9 @@ #define _BUILD_FORMFIELD_H_ #include "config.h" -#include "IRenderer.h" +#include "AnnotField.h" -class GRAPHICS_DECL CFormFieldInfo : public IFormField +class GRAPHICS_DECL CFormFieldInfo : public CAnnotFieldInfo { public: enum EScaleType @@ -266,16 +266,7 @@ public: CFormFieldInfo(); virtual ~CFormFieldInfo(); - void SetType(int nType); - bool IsValid() const; - // Common - void SetBounds(const double& dX, const double& dY, const double& dW, const double& dH); - void GetBounds(double& dX, double& dY, double& dW, double& dH) const; - - void SetBaseLineOffset(const double& dOffset); - double GetBaseLineOffset() const; - void SetKey(const std::wstring& wsKey); const std::wstring& GetKey() const; @@ -326,12 +317,6 @@ public: const CDateTimeFormPr* GetDateTimePr() const; private: - int m_nType; - double m_dX; - double m_dY; - double m_dW; - double m_dH; - double m_dBaseLineOffset; std::wstring m_wsKey; std::wstring m_wsHelpText; bool m_bRequired; diff --git a/DesktopEditor/graphics/IRenderer.h b/DesktopEditor/graphics/IRenderer.h index 7a70fa05a9..515f0d9de3 100644 --- a/DesktopEditor/graphics/IRenderer.h +++ b/DesktopEditor/graphics/IRenderer.h @@ -133,13 +133,6 @@ const int c_nAdditionalParamBreak = 0x00; // типы команд const long c_nCommandLongTypeOnlyText = 0x1000; -class IFormField -{ -public: - IFormField() {} - virtual ~IFormField() {} -}; - class IAnnotField { public: @@ -342,7 +335,7 @@ public: } virtual HRESULT AddHyperlink(const double& dX, const double& dY, const double& dW, const double& dH, const std::wstring& wsUrl, const std::wstring& wsTooltip) {return S_OK;} virtual HRESULT AddLink(const double& dX, const double& dY, const double& dW, const double& dH, const double& dDestX, const double& dDestY, const int& nPage) {return S_OK;} - virtual HRESULT AddFormField(IFormField* pField) {return S_OK;} + virtual HRESULT AddAnnotField(IAnnotField* pField) {return S_OK;} virtual HRESULT DocInfo(const std::wstring& wsTitle, const std::wstring& wsCreator, const std::wstring& wsSubject, const std::wstring& wsKeywords) {return S_OK;} virtual HRESULT IsExistAdditionalParam(const int& type) {return S_FALSE;} diff --git a/DesktopEditor/graphics/MetafileToRenderer.cpp b/DesktopEditor/graphics/MetafileToRenderer.cpp index 2c6def2911..337985a3bc 100644 --- a/DesktopEditor/graphics/MetafileToRenderer.cpp +++ b/DesktopEditor/graphics/MetafileToRenderer.cpp @@ -37,6 +37,7 @@ #include "../raster/BgraFrame.h" #include "../common/StringExt.h" #include "./FormField.h" +#include "./AnnotField.h" #if !defined(_WIN32) && !defined(_WIN64) #include "../common/StringExt.h" @@ -1065,14 +1066,14 @@ namespace NSOnlineOfficeBinToPdf int nFlags = ReadInt(current, curindex); - if (nFlags & 1) + if (nFlags & (1 << 0)) oInfo.SetKey(ReadString(current, curindex)); - if (nFlags & 2) + if (nFlags & (1 << 1)) oInfo.SetHelpText(ReadString(current, curindex)); - oInfo.SetRequired(nFlags & 4); - oInfo.SetPlaceHolder(nFlags & 8); + oInfo.SetRequired(nFlags & (1 << 2)); + oInfo.SetPlaceHolder(nFlags & (1 << 3)); if (nFlags & (1 << 6)) { @@ -1241,6 +1242,26 @@ namespace NSOnlineOfficeBinToPdf int nLen = ReadInt(current, curindex); + double dX = ReadDouble(current, curindex); + double dY = ReadDouble(current, curindex); + double dW = ReadDouble(current, curindex); + double dH = ReadDouble(current, curindex); + + CAnnotFieldInfo oInfo; + oInfo.SetBounds(dX, dY, dW, dH); + oInfo.SetBaseLineOffset(ReadDouble(current, curindex)); + + int nFlags = ReadInt(current, curindex); + + // TODO + + oInfo.SetType(ReadInt(current, curindex)); + + // TODO + + if (oInfo.IsValid()) + pRenderer->AddAnnotField(&oInfo); + current = nStartPos + nLen; curindex = nStartIndex + nLen; diff --git a/PdfFile/PdfFile.cpp b/PdfFile/PdfFile.cpp index 0408e6dd01..7edca01a73 100644 --- a/PdfFile/PdfFile.cpp +++ b/PdfFile/PdfFile.cpp @@ -1533,11 +1533,11 @@ HRESULT CPdfFile::AddLink(const double& dX, const double& dY, const double& dW, return S_FALSE; return m_pInternal->pWriter->AddLink(dX, dY, dW, dH, dDestX, dDestY, nPage); } -HRESULT CPdfFile::AddFormField(IFormField* pFieldInfo) +HRESULT CPdfFile::AddAnnotField(IAnnotField* pFieldInfo) { if (!m_pInternal->pWriter) return S_FALSE; - return m_pInternal->pWriter->AddFormField(m_pInternal->pAppFonts, pFieldInfo); + return m_pInternal->pWriter->AddAnnotField(m_pInternal->pAppFonts, pFieldInfo); } HRESULT CPdfFile::DocInfo(const std::wstring& wsTitle, const std::wstring& wsCreator, const std::wstring& wsSubject, const std::wstring& wsKeywords) { diff --git a/PdfFile/PdfFile.h b/PdfFile/PdfFile.h index 3f43318ff4..2d98eeefef 100644 --- a/PdfFile/PdfFile.h +++ b/PdfFile/PdfFile.h @@ -283,7 +283,7 @@ public: virtual HRESULT CommandString(const LONG& lType, const std::wstring& sCommand); virtual HRESULT AddHyperlink(const double& dX, const double& dY, const double& dW, const double& dH, const std::wstring& wsUrl, const std::wstring& wsTooltip); virtual HRESULT AddLink(const double& dX, const double& dY, const double& dW, const double& dH, const double& dDestX, const double& dDestY, const int& nPage); - virtual HRESULT AddFormField(IFormField* pFieldInfo); + virtual HRESULT AddAnnotField(IAnnotField* pFieldInfo); virtual HRESULT DocInfo(const std::wstring& wsTitle, const std::wstring& wsCreator, const std::wstring& wsSubject, const std::wstring& wsKeywords); private: diff --git a/PdfFile/PdfWriter.cpp b/PdfFile/PdfWriter.cpp index 925b9c9d3c..7f693e1091 100644 --- a/PdfFile/PdfWriter.cpp +++ b/PdfFile/PdfWriter.cpp @@ -52,6 +52,7 @@ #include "../../DesktopEditor/graphics/pro/Image.h" #include "../../DesktopEditor/common/StringExt.h" #include "../../DesktopEditor/graphics/FormField.h" +#include "../../DesktopEditor/graphics/AnnotField.h" #include "../../DesktopEditor/graphics/GraphicsPath.h" #include "../../UnicodeConverter/UnicodeConverter.h" @@ -1077,7 +1078,7 @@ HRESULT CPdfWriter::AddLink(const double& dX, const double& dY, const double& dW return S_OK; } -HRESULT CPdfWriter::AddFormField(NSFonts::IApplicationFonts* pAppFonts, IFormField* pFieldInfo) +HRESULT CPdfWriter::AddFormField(NSFonts::IApplicationFonts* pAppFonts, IAnnotField* pFieldInfo) { unsigned int unPagesCount = m_pDocument->GetPagesCount(); if (!m_pDocument || 0 == unPagesCount || !pFieldInfo) @@ -1668,6 +1669,14 @@ HRESULT CPdfWriter::AddFormField(NSFonts::IApplicationFonts* pAppFonts, IFormFie return S_OK; } +HRESULT CPdfWriter::AddAnnotField(NSFonts::IApplicationFonts* pAppFonts, IAnnotField* pFieldInfo) +{ + CAnnotFieldInfo& oInfo = *((CAnnotFieldInfo*)pFieldInfo); + + if (oInfo.isWidget()) + return AddFormField(pAppFonts, pFieldInfo); + return S_OK; +} //---------------------------------------------------------------------------------------- // Дополнительные функции Pdf рендерера //---------------------------------------------------------------------------------------- diff --git a/PdfFile/PdfWriter.h b/PdfFile/PdfWriter.h index b6f3afb90e..e212a6764d 100644 --- a/PdfFile/PdfWriter.h +++ b/PdfFile/PdfWriter.h @@ -189,7 +189,8 @@ public: //---------------------------------------------------------------------------------------- HRESULT AddHyperlink(const double& dX, const double& dY, const double& dW, const double& dH, const std::wstring& wsUrl, const std::wstring& wsTooltip); HRESULT AddLink(const double& dX, const double& dY, const double& dW, const double& dH, const double& dDestX, const double& dDestY, const int& nPage); - HRESULT AddFormField(NSFonts::IApplicationFonts* pAppFonts, IFormField* pFiledInfo); + HRESULT AddFormField (NSFonts::IApplicationFonts* pAppFonts, IAnnotField* pFieldInfo); + HRESULT AddAnnotField(NSFonts::IApplicationFonts* pAppFonts, IAnnotField* pFieldInfo); //---------------------------------------------------------------------------------------- // Дополнительные функции Pdf рендерера //---------------------------------------------------------------------------------------- diff --git a/PdfFile/PdfWriter_empty.cpp b/PdfFile/PdfWriter_empty.cpp index 763bc22b85..1fe71dcd56 100644 --- a/PdfFile/PdfWriter_empty.cpp +++ b/PdfFile/PdfWriter_empty.cpp @@ -130,7 +130,7 @@ HRESULT CPdfWriter::GetTransform(double* dM11, double* dM12, double* dM21, doubl HRESULT CPdfWriter::ResetTransform() { return 0; } HRESULT CPdfWriter::AddHyperlink(const double& dX, const double& dY, const double& dW, const double& dH, const std::wstring& wsUrl, const std::wstring& wsTooltip) { return 0; } HRESULT CPdfWriter::AddLink(const double& dX, const double& dY, const double& dW, const double& dH, const double& dDestX, const double& dDestY, const int& nPage) { return 0; } -HRESULT CPdfWriter::AddFormField(NSFonts::IApplicationFonts* pAppFonts, IFormField* pInfo) { return 0; } +HRESULT CPdfWriter::AddFormField(NSFonts::IApplicationFonts* pAppFonts, IAnnotField* pInfo) { return 0; } HRESULT CPdfWriter::DrawImage1bpp(NSImages::CPixJbig2* pImageBuffer, const unsigned int& unWidth, const unsigned int& unHeight, const double& dX, const double& dY, const double& dW, const double& dH) { return 0; } HRESULT CPdfWriter::EnableBrushRect(const LONG& lEnable) { return 0; } HRESULT CPdfWriter::SetLinearGradient(const double& dX1, const double& dY1, const double& dX2, const double& dY2) { return 0; }