Commit 9f924e71 authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander Trofimov

Все файлы перекодированы в UTF8. Сделано, чтобы пути, которые задаются...

Все файлы перекодированы в UTF8. Сделано, чтобы пути, которые задаются читались и как относительные и как абсолютные (начиная с корневой директории). Исправлен баг с чтением патов. Исправлен баг с некоторыми относительными командами в патах. Переделано рисование дуг эллипсов, теперь эллипсы определяются абсолютно точно, и сама дуга аппроксимируется кривыми Безье, а не линиями как раньше.

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@63568 954022d7-b5bf-4e40-9824-e11837661b57
parent 10325828
#include "XpsFile.h" #include "XpsFile.h"
#include "XpsLib/Document.h" #include "XpsLib/Document.h"
#include "../DesktopEditor/common/File.h" #include "../DesktopEditor/common/File.h"
...@@ -16,7 +16,7 @@ CXpsFile::CXpsFile(CApplicationFonts* pAppFonts) ...@@ -16,7 +16,7 @@ CXpsFile::CXpsFile(CApplicationFonts* pAppFonts)
{ {
m_pAppFonts = pAppFonts; m_pAppFonts = pAppFonts;
// // Создаем менеджер шрифтов с собственным кэшем
m_pFontManager = pAppFonts->GenerateFontManager(); m_pFontManager = pAppFonts->GenerateFontManager();
CFontsCache* pMeasurerCache = new CFontsCache(); CFontsCache* pMeasurerCache = new CFontsCache();
pMeasurerCache->SetStreams(pAppFonts->GetStreams()); pMeasurerCache->SetStreams(pAppFonts->GetStreams());
...@@ -55,7 +55,7 @@ bool CXpsFile::LoadFromFile(const std::wstring& wsSrcFileName, const std ...@@ -55,7 +55,7 @@ bool CXpsFile::LoadFromFile(const std::wstring& wsSrcFileName, const std
{ {
Close(); Close();
// Zip- // Распаковываем Zip-архив в темповую папку
COfficeUtils oUtils(NULL); COfficeUtils oUtils(NULL);
if (S_OK != oUtils.ExtractToDirectory(wsSrcFileName, m_wsTempFolder, NULL, 0)) if (S_OK != oUtils.ExtractToDirectory(wsSrcFileName, m_wsTempFolder, NULL, 0))
return false; return false;
......
#ifndef _XPS_FILE_H #ifndef _XPS_FILE_H
#define _XPS_FILE_H #define _XPS_FILE_H
#include <string> #include <string>
......
...@@ -102,13 +102,13 @@ void main() ...@@ -102,13 +102,13 @@ void main()
{ {
clock_t oBeginTime = clock(); clock_t oBeginTime = clock();
//ConvertFolderToRaster(L"D:/Test Files//Xps//"); ConvertFolderToRaster(L"D:/Test Files//Xps//");
ConvertFolderToPdf(L"D:/Test Files//Xps//"); ConvertFolderToPdf(L"D:/Test Files//Xps//");
clock_t oEndTime = clock(); clock_t oEndTime = clock();
double dElapsedSecs = double(oEndTime - oBeginTime) / CLOCKS_PER_SEC; double dElapsedSecs = double(oEndTime - oBeginTime) / CLOCKS_PER_SEC;
printf("%fseconds\n", dElapsedSecs); printf("%fseconds\n", dElapsedSecs);
char q; //char q;
std::cin >> q; //std::cin >> q;
} }
#include "ContextState.h" #include "ContextState.h"
#include "StaticResources.h" #include "StaticResources.h"
#ifndef xpsUnitToMM #ifndef xpsUnitToMM
......
#ifndef _XPS_XPSLIB_CONTEXTSTATE_H #ifndef _XPS_XPSLIB_CONTEXTSTATE_H
#define _XPS_XPSLIB_CONTEXTSTATE_H #define _XPS_XPSLIB_CONTEXTSTATE_H
#include "Utils.h" #include "Utils.h"
......
#include "Document.h" #include "Document.h"
#include "StaticResources.h" #include "StaticResources.h"
#include "../../Common/DocxFormat/Source/XML/xmlutils.h" #include "../../Common/DocxFormat/Source/XML/xmlutils.h"
#include "../../DesktopEditor/common/File.h"
namespace XPS namespace XPS
{ {
...@@ -23,16 +24,9 @@ namespace XPS ...@@ -23,16 +24,9 @@ namespace XPS
XmlUtils::CXmlLiteReader oReader; XmlUtils::CXmlLiteReader oReader;
std::wstring wsRelsPath = NormalizePath(wsPath + L"_rels/.rels"); std::wstring wsRelsPath = NormalizePath(wsPath + L"_rels/.rels");
clock_t oBeginTime = clock();
if (!oReader.FromFile(wsRelsPath)) if (!oReader.FromFile(wsRelsPath))
return false; return false;
clock_t oEndTime = clock();
double dElapsedSecs = double(oEndTime - oBeginTime) / CLOCKS_PER_SEC;
printf("%S %fseconds\n", wsRelsPath.c_str(), dElapsedSecs);
if (!oReader.ReadNextNode()) if (!oReader.ReadNextNode())
return false; return false;
...@@ -40,7 +34,7 @@ namespace XPS ...@@ -40,7 +34,7 @@ namespace XPS
if (L"Relationships" != wsName) if (L"Relationships" != wsName)
return false; return false;
std::wstring wsFile; std::wstring wsTargetFile;
while (oReader.ReadNextNode()) while (oReader.ReadNextNode())
{ {
wsName = oReader.GetName(); wsName = oReader.GetName();
...@@ -51,26 +45,28 @@ namespace XPS ...@@ -51,26 +45,28 @@ namespace XPS
if (L"http://schemas.microsoft.com/xps/2005/06/fixedrepresentation" == wsAttr) if (L"http://schemas.microsoft.com/xps/2005/06/fixedrepresentation" == wsAttr)
{ {
ReadAttribute(oReader, L"Target", wsFile); ReadAttribute(oReader, L"Target", wsTargetFile);
break; break;
} }
} }
} }
if (wsFile.empty()) if (wsTargetFile.empty())
return false; return false;
oReader.Clear(); oReader.Clear();
oBeginTime = clock(); std::wstring wsTargerFullPath = m_wsPath + wsTargetFile;
if (!NSFile::CFileBinary::Exists(wsTargerFullPath))
if (!oReader.FromFile(wsPath + wsFile)) {
wsTargerFullPath = GetPath(wsRelsPath) + wsTargetFile;
if (!NSFile::CFileBinary::Exists(wsTargerFullPath))
return false;
}
if (!oReader.FromFile(wsTargerFullPath))
return false; return false;
oEndTime = clock();
dElapsedSecs = double(oEndTime - oBeginTime) / CLOCKS_PER_SEC;
printf("%S %fseconds\n", (wsPath + wsFile).c_str(), dElapsedSecs);
if (!oReader.ReadNextNode()) if (!oReader.ReadNextNode())
return false; return false;
...@@ -78,30 +74,33 @@ namespace XPS ...@@ -78,30 +74,33 @@ namespace XPS
if (L"FixedDocumentSequence" != wsName) if (L"FixedDocumentSequence" != wsName)
return false; return false;
wsFile.clear(); std::wstring wsSourceFile;
while (oReader.ReadNextNode()) while (oReader.ReadNextNode())
{ {
wsName = oReader.GetName(); wsName = oReader.GetName();
if (L"DocumentReference" == wsName) if (L"DocumentReference" == wsName)
{ {
ReadAttribute(oReader, L"Source", wsFile); ReadAttribute(oReader, L"Source", wsSourceFile);
break; break;
} }
} }
if (wsFile.empty()) if (wsSourceFile.empty())
return false; return false;
oReader.Clear(); oReader.Clear();
oBeginTime = clock();
if (!oReader.FromFile(m_wsPath + wsFile)) std::wstring wsSourceFullPath = m_wsPath + wsSourceFile;
return false; if (!NSFile::CFileBinary::Exists(wsSourceFullPath))
{
wsSourceFullPath = GetPath(wsTargerFullPath) + wsSourceFile;
if (!NSFile::CFileBinary::Exists(wsSourceFullPath))
return false;
}
oEndTime = clock(); if (!oReader.FromFile(wsSourceFullPath))
dElapsedSecs = double(oEndTime - oBeginTime) / CLOCKS_PER_SEC; return false;
printf("%S %fseconds\n", (m_wsPath + wsFile).c_str(), dElapsedSecs);
if (!oReader.ReadNextNode()) if (!oReader.ReadNextNode())
return false; return false;
...@@ -110,7 +109,7 @@ namespace XPS ...@@ -110,7 +109,7 @@ namespace XPS
if (L"FixedDocument" != wsName) if (L"FixedDocument" != wsName)
return false; return false;
std::wstring wsFilePath = GetPath(m_wsPath + wsFile); std::wstring wsFilePath = GetPath(wsSourceFullPath);
std::wstring wsPagePath; std::wstring wsPagePath;
std::wstring wsSource; std::wstring wsSource;
...@@ -122,10 +121,14 @@ namespace XPS ...@@ -122,10 +121,14 @@ namespace XPS
if (L"PageContent" == wsName) if (L"PageContent" == wsName)
{ {
ReadAttribute(oReader, L"Source", wsSource); ReadAttribute(oReader, L"Source", wsSource);
if ('/' == wsSource[0])
wsPagePath = m_wsPath + wsSource; std::wstring wsPagePath = m_wsPath + wsSource;
else if (!NSFile::CFileBinary::Exists(wsPagePath))
{
wsPagePath = wsFilePath + wsSource; wsPagePath = wsFilePath + wsSource;
if (!NSFile::CFileBinary::Exists(wsPagePath))
continue;
}
m_mPages.insert(std::pair<int, XPS::Page*>(nIndex++, new XPS::Page(wsPagePath, wsPath, &m_oFontList, m_pFontManager, this))); m_mPages.insert(std::pair<int, XPS::Page*>(nIndex++, new XPS::Page(wsPagePath, wsPath, &m_oFontList, m_pFontManager, this)));
} }
......
#ifndef _XPS_XPSLIB_DOCUMENT_H #ifndef _XPS_XPSLIB_DOCUMENT_H
#define _XPS_XPSLIB_DOCUMENT_H #define _XPS_XPSLIB_DOCUMENT_H
#include "FontList.h" #include "FontList.h"
......
#ifndef _XPS_XPSLIB_FONTLIST_H #ifndef _XPS_XPSLIB_FONTLIST_H
#define _XPS_XPSLIB_FONTLIST_H #define _XPS_XPSLIB_FONTLIST_H
#include <map> #include <map>
......
#include "Page.h" #include "Page.h"
#include <stdio.h> #include <stdio.h>
#include "../../DesktopEditor/common/String.h" #include "../../DesktopEditor/common/String.h"
#include "../../DesktopEditor/graphics/structures.h" #include "../../DesktopEditor/graphics/structures.h"
...@@ -548,9 +548,9 @@ namespace XPS ...@@ -548,9 +548,9 @@ namespace XPS
return; return;
} }
// , , // Сначала задается матрица преобразования, потом клип, потому что даже
// , , // если преобразование задано в дочерней ноде, а клип задан в атрибутах данной ноды,
// . // то преобразование влияется на клип все равно.
if (!wsTransform.empty()) if (!wsTransform.empty())
{ {
bTransform = TransformToRenderer(wsTransform.c_str(), pState); bTransform = TransformToRenderer(wsTransform.c_str(), pState);
...@@ -656,7 +656,7 @@ namespace XPS ...@@ -656,7 +656,7 @@ namespace XPS
CWString Page::ReadClip(XmlUtils::CXmlLiteReader& oReader) CWString Page::ReadClip(XmlUtils::CXmlLiteReader& oReader)
{ {
CWString wsClip; CWString wsClip;
// TODO: Clip // TODO: Реализовать чтение Clip
return wsClip; return wsClip;
} }
void Page::DrawPath(XmlUtils::CXmlLiteReader& oReader, IRenderer* pRenderer, CContextState* pState) void Page::DrawPath(XmlUtils::CXmlLiteReader& oReader, IRenderer* pRenderer, CContextState* pState)
...@@ -843,9 +843,9 @@ namespace XPS ...@@ -843,9 +843,9 @@ namespace XPS
RELEASEOBJECT(pBrush); RELEASEOBJECT(pBrush);
} }
// , , // Сначала задается матрица преобразования, потом клип, потому что даже
// , , // если преобразование задано в дочерней ноде, а клип задан в атрибутах данной ноды,
// . // то преобразование влияется на клип все равно.
if (!wsTransform.empty()) if (!wsTransform.empty())
{ {
bTransform = TransformToRenderer(wsTransform.c_str(), pState); bTransform = TransformToRenderer(wsTransform.c_str(), pState);
......
#ifndef _XPS_XPSLIB_PAGE_H #ifndef _XPS_XPSLIB_PAGE_H
#define _XPS_XPSLIB_PAGE_H #define _XPS_XPSLIB_PAGE_H
#include "../../DesktopEditor/graphics/IRenderer.h" #include "../../DesktopEditor/graphics/IRenderer.h"
......
#include "StaticResources.h" #include "StaticResources.h"
#include "../../Common/DocxFormat/Source/XML/xmlutils.h" #include "../../Common/DocxFormat/Source/XML/xmlutils.h"
#include "../../DesktopEditor/graphics/IRenderer.h" #include "../../DesktopEditor/graphics/IRenderer.h"
...@@ -383,8 +383,8 @@ namespace XPS ...@@ -383,8 +383,8 @@ namespace XPS
{ {
CBrush* pBrush = NULL; CBrush* pBrush = NULL;
// TODO: 1. , // TODO: 1. Трансформы здесь не реализованы, потому что их невозможно учесть с текущим интерфейсом рендерера
// 2. VisualBrush // 2. Не реализован VisualBrush
if (!oReader.IsEmptyNode()) if (!oReader.IsEmptyNode())
{ {
CWString wsNodeName; CWString wsNodeName;
......
#ifndef _XPS_XPSLIB_STATICRESOURCES_H #ifndef _XPS_XPSLIB_STATICRESOURCES_H
#define _XPS_XPSLIB_STATICRESOURCES_H #define _XPS_XPSLIB_STATICRESOURCES_H
#include "Utils.h" #include "Utils.h"
......
This diff is collapsed.
#ifndef _XPS_XPSLIB_UTILS_H #ifndef _XPS_XPSLIB_UTILS_H
#define _XPS_XPSLIB_UTILS_H #define _XPS_XPSLIB_UTILS_H
#include <string> #include <string>
...@@ -85,7 +85,7 @@ namespace XPS ...@@ -85,7 +85,7 @@ namespace XPS
void ReadTransform (XmlUtils::CXmlLiteReader& oReader, CWString& wsTransform, CWString* pwsKey = NULL); void ReadTransform (XmlUtils::CXmlLiteReader& oReader, CWString& wsTransform, CWString* pwsKey = NULL);
void ReadPathGeometry(XmlUtils::CXmlLiteReader& oReader, CWString& wsData, CWString& wsTransform, CWString* pwsKey = NULL); void ReadPathGeometry(XmlUtils::CXmlLiteReader& oReader, CWString& wsData, CWString& wsTransform, CWString* pwsKey = NULL);
void ReadPathFigure (XmlUtils::CXmlLiteReader& oReader, CWString& _wsData, bool bEvenOdd); void ReadPathFigure (XmlUtils::CXmlLiteReader& oReader, std::wstring&, bool bEvenOdd);
void ReadGradientStops(XmlUtils::CXmlLiteReader& oReader, std::vector<LONG>& vColors, std::vector<double>& vPositions, const double& dOpacity); void ReadGradientStops(XmlUtils::CXmlLiteReader& oReader, std::vector<LONG>& vColors, std::vector<double>& vPositions, const double& dOpacity);
} }
......
#include "WString.h" #include "WString.h"
#include "Utils.h" #include "Utils.h"
#include "../../DesktopEditor/common/String.h" #include "../../DesktopEditor/common/String.h"
......
#ifndef _XPS_XPSLIB_WSTRING_H #ifndef _XPS_XPSLIB_WSTRING_H
#define _XPS_XPSLIB_WSTRING_H #define _XPS_XPSLIB_WSTRING_H
#include <vector> #include <vector>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment