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 "../DesktopEditor/common/File.h"
......@@ -16,7 +16,7 @@ CXpsFile::CXpsFile(CApplicationFonts* pAppFonts)
{
m_pAppFonts = pAppFonts;
//
// Создаем менеджер шрифтов с собственным кэшем
m_pFontManager = pAppFonts->GenerateFontManager();
CFontsCache* pMeasurerCache = new CFontsCache();
pMeasurerCache->SetStreams(pAppFonts->GetStreams());
......@@ -55,7 +55,7 @@ bool CXpsFile::LoadFromFile(const std::wstring& wsSrcFileName, const std
{
Close();
// Zip-
// Распаковываем Zip-архив в темповую папку
COfficeUtils oUtils(NULL);
if (S_OK != oUtils.ExtractToDirectory(wsSrcFileName, m_wsTempFolder, NULL, 0))
return false;
......
#ifndef _XPS_FILE_H
#ifndef _XPS_FILE_H
#define _XPS_FILE_H
#include <string>
......
......@@ -102,13 +102,13 @@ void main()
{
clock_t oBeginTime = clock();
//ConvertFolderToRaster(L"D:/Test Files//Xps//");
ConvertFolderToRaster(L"D:/Test Files//Xps//");
ConvertFolderToPdf(L"D:/Test Files//Xps//");
clock_t oEndTime = clock();
double dElapsedSecs = double(oEndTime - oBeginTime) / CLOCKS_PER_SEC;
printf("%fseconds\n", dElapsedSecs);
char q;
std::cin >> q;
//char q;
//std::cin >> q;
}
#include "ContextState.h"
#include "ContextState.h"
#include "StaticResources.h"
#ifndef xpsUnitToMM
......
#ifndef _XPS_XPSLIB_CONTEXTSTATE_H
#ifndef _XPS_XPSLIB_CONTEXTSTATE_H
#define _XPS_XPSLIB_CONTEXTSTATE_H
#include "Utils.h"
......
#include "Document.h"
#include "Document.h"
#include "StaticResources.h"
#include "../../Common/DocxFormat/Source/XML/xmlutils.h"
#include "../../DesktopEditor/common/File.h"
namespace XPS
{
......@@ -23,16 +24,9 @@ namespace XPS
XmlUtils::CXmlLiteReader oReader;
std::wstring wsRelsPath = NormalizePath(wsPath + L"_rels/.rels");
clock_t oBeginTime = clock();
if (!oReader.FromFile(wsRelsPath))
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())
return false;
......@@ -40,7 +34,7 @@ namespace XPS
if (L"Relationships" != wsName)
return false;
std::wstring wsFile;
std::wstring wsTargetFile;
while (oReader.ReadNextNode())
{
wsName = oReader.GetName();
......@@ -51,26 +45,28 @@ namespace XPS
if (L"http://schemas.microsoft.com/xps/2005/06/fixedrepresentation" == wsAttr)
{
ReadAttribute(oReader, L"Target", wsFile);
ReadAttribute(oReader, L"Target", wsTargetFile);
break;
}
}
}
if (wsFile.empty())
if (wsTargetFile.empty())
return false;
oReader.Clear();
oBeginTime = clock();
if (!oReader.FromFile(wsPath + wsFile))
std::wstring wsTargerFullPath = m_wsPath + wsTargetFile;
if (!NSFile::CFileBinary::Exists(wsTargerFullPath))
{
wsTargerFullPath = GetPath(wsRelsPath) + wsTargetFile;
if (!NSFile::CFileBinary::Exists(wsTargerFullPath))
return false;
}
if (!oReader.FromFile(wsTargerFullPath))
return false;
oEndTime = clock();
dElapsedSecs = double(oEndTime - oBeginTime) / CLOCKS_PER_SEC;
printf("%S %fseconds\n", (wsPath + wsFile).c_str(), dElapsedSecs);
if (!oReader.ReadNextNode())
return false;
......@@ -78,30 +74,33 @@ namespace XPS
if (L"FixedDocumentSequence" != wsName)
return false;
wsFile.clear();
std::wstring wsSourceFile;
while (oReader.ReadNextNode())
{
wsName = oReader.GetName();
if (L"DocumentReference" == wsName)
{
ReadAttribute(oReader, L"Source", wsFile);
ReadAttribute(oReader, L"Source", wsSourceFile);
break;
}
}
if (wsFile.empty())
if (wsSourceFile.empty())
return false;
oReader.Clear();
oBeginTime = clock();
if (!oReader.FromFile(m_wsPath + wsFile))
return false;
std::wstring wsSourceFullPath = m_wsPath + wsSourceFile;
if (!NSFile::CFileBinary::Exists(wsSourceFullPath))
{
wsSourceFullPath = GetPath(wsTargerFullPath) + wsSourceFile;
if (!NSFile::CFileBinary::Exists(wsSourceFullPath))
return false;
}
oEndTime = clock();
dElapsedSecs = double(oEndTime - oBeginTime) / CLOCKS_PER_SEC;
printf("%S %fseconds\n", (m_wsPath + wsFile).c_str(), dElapsedSecs);
if (!oReader.FromFile(wsSourceFullPath))
return false;
if (!oReader.ReadNextNode())
return false;
......@@ -110,7 +109,7 @@ namespace XPS
if (L"FixedDocument" != wsName)
return false;
std::wstring wsFilePath = GetPath(m_wsPath + wsFile);
std::wstring wsFilePath = GetPath(wsSourceFullPath);
std::wstring wsPagePath;
std::wstring wsSource;
......@@ -122,10 +121,14 @@ namespace XPS
if (L"PageContent" == wsName)
{
ReadAttribute(oReader, L"Source", wsSource);
if ('/' == wsSource[0])
wsPagePath = m_wsPath + wsSource;
else
std::wstring wsPagePath = m_wsPath + wsSource;
if (!NSFile::CFileBinary::Exists(wsPagePath))
{
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)));
}
......
#ifndef _XPS_XPSLIB_DOCUMENT_H
#ifndef _XPS_XPSLIB_DOCUMENT_H
#define _XPS_XPSLIB_DOCUMENT_H
#include "FontList.h"
......
#ifndef _XPS_XPSLIB_FONTLIST_H
#ifndef _XPS_XPSLIB_FONTLIST_H
#define _XPS_XPSLIB_FONTLIST_H
#include <map>
......
#include "Page.h"
#include "Page.h"
#include <stdio.h>
#include "../../DesktopEditor/common/String.h"
#include "../../DesktopEditor/graphics/structures.h"
......@@ -548,9 +548,9 @@ namespace XPS
return;
}
// , ,
// , ,
// .
// Сначала задается матрица преобразования, потом клип, потому что даже
// если преобразование задано в дочерней ноде, а клип задан в атрибутах данной ноды,
// то преобразование влияется на клип все равно.
if (!wsTransform.empty())
{
bTransform = TransformToRenderer(wsTransform.c_str(), pState);
......@@ -656,7 +656,7 @@ namespace XPS
CWString Page::ReadClip(XmlUtils::CXmlLiteReader& oReader)
{
CWString wsClip;
// TODO: Clip
// TODO: Реализовать чтение Clip
return wsClip;
}
void Page::DrawPath(XmlUtils::CXmlLiteReader& oReader, IRenderer* pRenderer, CContextState* pState)
......@@ -843,9 +843,9 @@ namespace XPS
RELEASEOBJECT(pBrush);
}
// , ,
// , ,
// .
// Сначала задается матрица преобразования, потом клип, потому что даже
// если преобразование задано в дочерней ноде, а клип задан в атрибутах данной ноды,
// то преобразование влияется на клип все равно.
if (!wsTransform.empty())
{
bTransform = TransformToRenderer(wsTransform.c_str(), pState);
......
#ifndef _XPS_XPSLIB_PAGE_H
#ifndef _XPS_XPSLIB_PAGE_H
#define _XPS_XPSLIB_PAGE_H
#include "../../DesktopEditor/graphics/IRenderer.h"
......
#include "StaticResources.h"
#include "StaticResources.h"
#include "../../Common/DocxFormat/Source/XML/xmlutils.h"
#include "../../DesktopEditor/graphics/IRenderer.h"
......@@ -383,8 +383,8 @@ namespace XPS
{
CBrush* pBrush = NULL;
// TODO: 1. ,
// 2. VisualBrush
// TODO: 1. Трансформы здесь не реализованы, потому что их невозможно учесть с текущим интерфейсом рендерера
// 2. Не реализован VisualBrush
if (!oReader.IsEmptyNode())
{
CWString wsNodeName;
......
#ifndef _XPS_XPSLIB_STATICRESOURCES_H
#ifndef _XPS_XPSLIB_STATICRESOURCES_H
#define _XPS_XPSLIB_STATICRESOURCES_H
#include "Utils.h"
......
This diff is collapsed.
#ifndef _XPS_XPSLIB_UTILS_H
#ifndef _XPS_XPSLIB_UTILS_H
#define _XPS_XPSLIB_UTILS_H
#include <string>
......@@ -85,7 +85,7 @@ namespace XPS
void ReadTransform (XmlUtils::CXmlLiteReader& oReader, 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);
}
......
#include "WString.h"
#include "WString.h"
#include "Utils.h"
#include "../../DesktopEditor/common/String.h"
......
#ifndef _XPS_XPSLIB_WSTRING_H
#ifndef _XPS_XPSLIB_WSTRING_H
#define _XPS_XPSLIB_WSTRING_H
#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