Commit deb7375c authored by Ilya Kirillov's avatar Ilya Kirillov

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

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