Commit deb7375c authored by Ilya Kirillov's avatar Ilya Kirillov

Сделаны функции получения всех автофигур и URL всех картинок в документе.

parent a85a3c89
......@@ -323,8 +323,11 @@ CSelectedContent.prototype =
this.DrawingObjects = [];
this.Comments = [];
this.Maths = [];
this.HaveShape = false;
this.HaveShape = false;
this.MoveDrawing = false; // Только для переноса автофигур
this.HaveMath = false;
},
Add : function(Element)
......@@ -16929,6 +16932,32 @@ CDocumentSectionsInfo.prototype =
}
},
Get_AllDrawingObjects : function(arrDrawings)
{
for (var nIndex = 0, nCount = this.Elements.length; nIndex < nCount; ++nIndex)
{
var SectPr = this.Elements[nIndex].SectPr;
if (null != SectPr.HeaderFirst)
SectPr.HeaderFirst.Get_AllDrawingObjects(arrDrawings);
if (null != SectPr.HeaderDefault)
SectPr.HeaderDefault.Get_AllDrawingObjects(arrDrawings);
if (null != SectPr.HeaderEven)
SectPr.HeaderEven.Get_AllDrawingObjects(arrDrawings);
if (null != SectPr.FooterFirst)
SectPr.FooterFirst.Get_AllDrawingObjects(arrDrawings);
if (null != SectPr.FooterDefault)
SectPr.FooterDefault.Get_AllDrawingObjects(arrDrawings);
if (null != SectPr.FooterEven)
SectPr.FooterEven.Get_AllDrawingObjects(arrDrawings);
}
},
Document_CreateFontMap : function(FontMap)
{
var Count = this.Elements.length;
......
......@@ -1204,21 +1204,6 @@ CDocumentContent.prototype.Draw = function(nPageIndex,
pGraphics.End_Command();
}
};
// Составляем полный массив всех ParaDrawing используемых в данном классе (с учетом всех вложенных DocumentContent)
CDocumentContent.prototype.Get_AllDrawingObjects = function(DrawingObjs)
{
if (undefined === DrawingObjs)
DrawingObjs = [];
var Count = this.Content.length;
for (var Pos = 0; Pos < Count; Pos++)
{
var Item = this.Content[Pos];
Item.Get_AllDrawingObjects(DrawingObjs);
}
return DrawingObjs;
};
CDocumentContent.prototype.Get_AllComments = function(AllComments)
{
if (undefined === AllComments)
......
......@@ -11,12 +11,12 @@
*/
function CDocumentContentBase()
{
this.StartPage = 0; // Номер стартовой страницы в родительском классе
this.CurPage = 0; // Номер текущей страницы
this.StartPage = 0; // Номер стартовой страницы в родительском классе
this.CurPage = 0; // Номер текущей страницы
this.Content = [];
this.Content = [];
this.ReindexStartPos = 0;
this.ReindexStartPos = 0;
}
/**
......@@ -24,16 +24,59 @@ function CDocumentContentBase()
*/
CDocumentContentBase.prototype.Update_ContentIndexing = function()
{
if (-1 !== this.ReindexStartPos)
{
for (var Index = this.ReindexStartPos, Count = this.Content.length; Index < Count; Index++)
{
this.Content[Index].Index = Index;
}
this.ReindexStartPos = -1;
}
if (-1 !== this.ReindexStartPos)
{
for (var Index = this.ReindexStartPos, Count = this.Content.length; Index < Count; Index++)
{
this.Content[Index].Index = Index;
}
this.ReindexStartPos = -1;
}
};
/**
* Получаем массив всех автофигур.
* @param {Array} arrDrawings - Если задан массив, тогда мы дополняем данный массив и возвращаем его.
* @returns {Array}
*/
CDocumentContentBase.prototype.Get_AllDrawingObjects = function(arrDrawings)
{
if (undefined === arrDrawings || null === arrDrawings)
arrDrawings = [];
if (this instanceof CDocument)
{
this.SectionsInfo.Get_AllDrawingObjects(arrDrawings);
}
for (var nPos = 0, nCount = this.Content.length; nPos < nCount; ++nPos)
{
this.Content[nPos].Get_AllDrawingObjects(arrDrawings);
}
return arrDrawings;
};
/**
* Получаем массив URL всех картинок в документе.
* @param {Array} arrUrls - Если задан массив, тогда мы дополняем данный массив и возвращаем его.
* @returns {Array}
*/
CDocumentContentBase.prototype.Get_AllImageUrls = function(arrUrls)
{
if (undefined === arrDrawings || null === arrDrawings)
arrUrls = [];
var arrDrawings = this.Get_AllDrawingObjects();
for (var nIndex = 0, nCount = arrDrawings.length; nIndex < nCount; ++nIndex)
{
var oParaDrawing = arrDrawings[nIndex];
oParaDrawing.GraphicObj.getAllRasterImages(arrUrls);
}
return arrUrls;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private area
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -43,8 +86,8 @@ CDocumentContentBase.prototype.Update_ContentIndexing = function()
*/
CDocumentContentBase.prototype.private_ReindexContent = function(StartPos)
{
if (-1 === this.ReindexStartPos || this.ReindexStartPos > StartPos)
this.ReindexStartPos = StartPos;
if (-1 === this.ReindexStartPos || this.ReindexStartPos > StartPos)
this.ReindexStartPos = StartPos;
};
/**
* Специальная функия для рассчета пустого параграфа с разрывом секции.
......@@ -56,32 +99,32 @@ CDocumentContentBase.prototype.private_ReindexContent = function(StartPos)
*/
CDocumentContentBase.prototype.private_RecalculateEmptySectionParagraph = function(Element, PrevElement, PageIndex, ColumnIndex, ColumnsCount)
{
var LastVisibleBounds = PrevElement.Get_LastRangeVisibleBounds();
var ___X = LastVisibleBounds.X + LastVisibleBounds.W;
var ___Y = LastVisibleBounds.Y;
// Чтобы у нас знак разрыва секции рисовался красиво и где надо делаем небольшую хитрость:
// перед пересчетом данного параграфа меняем в нем в скомпилированных настройках прилегание и
// отступы, а после пересчета помечаем, что настройки нужно скомпилировать заново.
var CompiledPr = Element.Get_CompiledPr2(false).ParaPr;
CompiledPr.Jc = align_Left;
CompiledPr.Ind.FirstLine = 0;
CompiledPr.Ind.Left = 0;
CompiledPr.Ind.Right = 0;
// Делаем предел по X минимум 10 мм, чтобы всегда было видно элемент разрыва секции
Element.Reset(___X, ___Y, Math.max(___X + 10, LastVisibleBounds.XLimit), 10000, PageIndex, ColumnIndex, ColumnsCount);
Element.Recalculate_Page(0);
Element.Recalc_CompiledPr();
// Меняем насильно размер строки и страницы данного параграфа, чтобы у него границы попадания и
// селект были ровно такие же как и у последней строки предыдущего элемента.
Element.Pages[0].Y = ___Y;
Element.Lines[0].Top = 0;
Element.Lines[0].Y = LastVisibleBounds.BaseLine;
Element.Lines[0].Bottom = LastVisibleBounds.H;
Element.Pages[0].Bounds.Top = ___Y;
Element.Pages[0].Bounds.Bottom = ___Y + LastVisibleBounds.H;
var LastVisibleBounds = PrevElement.Get_LastRangeVisibleBounds();
var ___X = LastVisibleBounds.X + LastVisibleBounds.W;
var ___Y = LastVisibleBounds.Y;
// Чтобы у нас знак разрыва секции рисовался красиво и где надо делаем небольшую хитрость:
// перед пересчетом данного параграфа меняем в нем в скомпилированных настройках прилегание и
// отступы, а после пересчета помечаем, что настройки нужно скомпилировать заново.
var CompiledPr = Element.Get_CompiledPr2(false).ParaPr;
CompiledPr.Jc = align_Left;
CompiledPr.Ind.FirstLine = 0;
CompiledPr.Ind.Left = 0;
CompiledPr.Ind.Right = 0;
// Делаем предел по X минимум 10 мм, чтобы всегда было видно элемент разрыва секции
Element.Reset(___X, ___Y, Math.max(___X + 10, LastVisibleBounds.XLimit), 10000, PageIndex, ColumnIndex, ColumnsCount);
Element.Recalculate_Page(0);
Element.Recalc_CompiledPr();
// Меняем насильно размер строки и страницы данного параграфа, чтобы у него границы попадания и
// селект были ровно такие же как и у последней строки предыдущего элемента.
Element.Pages[0].Y = ___Y;
Element.Lines[0].Top = 0;
Element.Lines[0].Y = LastVisibleBounds.BaseLine;
Element.Lines[0].Bottom = LastVisibleBounds.H;
Element.Pages[0].Bounds.Top = ___Y;
Element.Pages[0].Bounds.Bottom = ___Y + LastVisibleBounds.H;
};
\ No newline at end of file
......@@ -876,6 +876,11 @@ CHeaderFooter.prototype =
return this.Content.Get_AllParagraphs(Props, ParaArray);
},
Get_AllDrawingObjects : function(arrDrawings)
{
return this.Content.Get_AllDrawingObjects(arrDrawings);
},
Get_PrevElementEndInfo : function(CurElement)
{
return null;
......
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