Вернуться к разделу "OpenOCR".


Бесклассовый подход

1.Создание

Создает страницу
Handle CED_CreatePage(char * _imageName,EDSIZE _sizeOfImage,EDSIZE _dpi,int _turn,
			  int _pageNumber,EDSIZE _sizeInTwips, EDRECT _pageBordersInTwips, 				char _unrecogChar, Bool32 _resizeToFit)
Параметры:
	imageName;	//Null terminated Имя файла изображения. Если путь не указан, 					ищется в одном 	каталоге с ed файлом. Может быть 0.
	sizeOfImage;	//Размеры исходного изображения в пикселях
	dpi;		//Разрешение сканера для этого изображения по горизонтали и 					вертикали
	turn;		//Тангенс угла поворота картинки относительно вертикали*2048
	pageNumber;	//Номер страницы(=0 не в пакетном режиме)
	pageSizeInTwips;//Размер страницы в твипах(1дюйм=1440твипов) для текстового 					//редактора
	pageBordersInTwips;//Поля страницы в твипах(1дюйм=1440твипов) для 						//текстового редактора
	unrecogChar;	//Код, которым обозначается нераспознанный символ (обычно '~')
	resizeToFit;	//TRUE, если верикальный размер страницы должен быть увеличен так, 				чтобы вместить весь файл на одну страницу
			//FALSE - размер страницы жестко задан
!!! Если какой либо из числовых параметров требуется оставить по умолчанию - устанавливем его в -1

Создать  шрифт

Bool32 CED_CreateFont(Handle hEdPage, BYTE fontNumber, BYTE fontPitchAndFamily, BYTE fontCharset,char* fontName)
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове CreatePage, на 				которой создается шрифт
	fontNumber - 	номер шрифта, под которым он будет фигурировать фнутри файла

	fontPitchAndFamily - ширина и семейство шрифта
			  младшие 4 бита означают ширину шрифта и могут быть:
		DEFAULT_PITCH 
		FIXED_PITCH    -моноширинный шрифт
		VARIABLE_PITCH -шрифт с переменной шириной
  	старшие 4 бита - семейство
		FF_DECORATIVE Novelty fonts. Old English is an example. 
		FF_DONTCARE Don't care or don't know. 
		FF_MODERN Fonts with constant stroke width, with or without serifs. Pica, Elite, and 			Courier NewR are examples. 
		FF_ROMAN Fonts with variable stroke width and with serifs. MSR Serif is an example. 
		FF_SCRIPT Fonts designed to look like handwriting. Script and Cursive are examples. 
		FF_SWISS Fonts with variable stroke width and without serifs. MS Sans Serif is an 			example. 
  		константы определены в wingdi.h, используются в вызове CreateFont
	fontCharset - набор символов в шрифте
	ANSI_CHARSET
  	BALTIC_CHARSET
  	CHINESEBIG5_CHARSET
  	DEFAULT_CHARSET
  	EASTEUROPE_CHARSET
  	GB2312_CHARSET
  	GREEK_CHARSET
  	HANGUL_CHARSET
  	MAC_CHARSET
  	OEM_CHARSET
  	RUSSIAN_CHARSET
  	SHIFTJIS_CHARSET
  	SYMBOL_CHARSET
  	TURKISH_CHARSET 
  	константы определены в wingdi.h, используются в вызове CreateFont
fontName - нуль-терминейтед (последний символ с кодом 0) имя шрифта. Внутри библиотеки 			создается копия этой строки.

!!!Работа с картинками!!!
Делается следующим образом: в файле хранится глобольная таблица картинок, в которую помещаются все встречающиеся в тексте картинки. Все картинки нумеруются. В том месте, где картинка появляется в тексте, следует вставить произвольный символ шрифтом ED_PICT_BASE+номер картинки. 
Создаёт картинку
Bool32 CED_CreatePicture(Handle hEdPage, int pictNumber, EDSIZE pictSize, EDSIZE pictGoal, int pictAlign , int type, void * data, int len);
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове CreatePage, на 				которой создается картинка
	pictNumber - 	номер картинки, под которым она будет фигурировать внутри файла
	pictSize -	размер картинки в точках
	pictGoal - 	желаемый размер картинки на экране в твипах
	pictAlign - 	расположение текста, идущего за картинкой:
		ED_ALIGN_BOT                    // align picture bottom to base line
		ED_ALIGN_MIDDLE                 // center picture vertically to baseline
		ED_ALIGN_TOP                    // align picture top to base line
	type - 		тип картинки:
			1 - DIB
			2 - Windows MetaFile
	data - 		указатель на собственно картинку. Внутри библиотеки 						создается копия этого массива.
	len - 		длина картинки в байтах

Конвертирует картинку
Bool32 CED_DIB2Metafile(Handle hEdPage, int pict);
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове CreatePage, на 				которой создается картинка
pict 	- номер картинки, под которым она фигурирует внутри файла, указанный в CreatePicture

Создает раздел
Handle CED_CreateSection(Handle hEdPage,EDRECT border, int colInterval, int numOfCols, EDCOL *colInfo, char sectionBreak, int width, int height, char orientation, int headerY, int footerY);
			    Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове CreatePage, на 				которой создается раздел
	borders;	//отступы от края бумаги
	colInterval - 	интервал между колонками, если все колонки имеют одинаковую ширину
		      	если колонка одна или колонки имеют разную ширину - игнорируется
	numOfCols - 	количество колонок на странице, по которым будет "извиваться" текст.
			Может быть не равно кол-ву созданных колонок (CreateColumn)
	colInfo	 - 	массив из numOfCols элементов описателей колонок. Если все колонки 				одинаковой ширины - то 0.
	colInfo.width -	 	ее ширина, 
	colInfo.space- 		расстояние до следующей. Всё в твипах.
	sectionBreak; - 	способ разрыва раздела                                                                
			ED_SECT_CONTINUE = 0 - раздел начинается на текущей странице                                             
			ED_SECT_NEW_PAGE=1 - раздел начинается на следующей странице                                           
	width;	-	размеры бумаги в твипах. Ширина - всегда размер слева
	height;	-	на право, независимо от orientation
	orientation;  - 	ориентация листа: 
			ED_ORIENT_PORTRAIT= 0 -книжная(портрет), 
			ED_ORIENT_LANDSCAPE =1-альбоимная (ландшафт) 
	Положение колонтитулов 
	headerY; - 	Header is N twips from the top of the page (the default is 720). 
	footerY; - 	Footer is N twips from the bottom of the page (the default is 720).                        
!!! Если какой либо из числовых параметров требуется оставить по умолчанию - устанавливем его в -1

Установить рисование линии между колонками
Bool32 CED_SetSectLineBetCol( Handle hEdSection, Bool32 lineBetCol);
Параметры:
	hEdSection - 	хэндл раздела, полученный(например) при вызове CreateSection, для 				которого меняется параметр
	lineBetCol - 	рисовать ли линию между колонками.
Если эта функция явно не вызывается, то считается, что линию рисовать не надо.

Создает колонку
Handle CED_CreateColumn( Handle hEdSection);
Параметры:
	hEdSection - 	хэндл раздела, полученный(например) при вызове CreateSection, в 					котором создается колонка
Создает фрейм
Handle CED_CreateFrame( Handle hEdSection, Handle hEdColumn, EDBOX rect, char position, DWORD borderSpace, DWORD dxfrtextx, DWORD dxfrtexty);
Параметры:
	hEdSection - 	хэндл раздела, полученный(например) при вызове CreateSection, в 					котором создается фрейм
	hEdColumn - 	хэндл колонки, полученный(например) при вызове CreateСolumn, в 				которой создается фрейм
	rect - 		размер в твипах:
	rect.x - 		x координата левого верхнего угла или одна из следующих констант:
			ED_POSXR - Positions the paragraph to the right within the reference frame.
			ED_POSXC - Centers the frame horizontally within the reference frame.
	rect.h - 		высота в твипах, если положительная - то это мин. высота, если 					отрицательная - точная, если 0 - то высота ровно по содержимому, т.е.
			N is the height of the frame in twips. A positive number indicates the minimum 
			height of the frame and a negative number indicates the exact height of the 
			frame. A value of zero indicates that the height of the frame adjusts to the 
			contents of the frame. This is the default for frames where no height is given.
	position - 	Позиция фрейма на экране. 
			Младшие 4 бита - позиция по y:
           			VPOS_PAGE - относительно верхнего края листа
           			VPOS_MRG - относительно края верхней границы листа
           			VPOS_PARA - относительно верхнего края следующего обычного абзаца = 
			     относительно нижнего края предыдущего обычного абзаца
			старшие 4 бита - позиция по x:
           			HPOS_PAGE - относительно левого края листа
			HPOS_MRG - относительно левой границы листа
			HPOS_COL- относительно левой границы колонки
	borderSpace - 	Space in twips between borders and the paragraph
	dxfrtextx - 	is the horizontal distance in twips from text on both sides of the frame.
	dxfrtexty - 	is the vertical distance in twips from text on both sides of the frame.
!!! Если какой либо из 3х последних параметров требуется оставить по умолчанию - устанавливем его в -1
Изменяет параметры фрейма
Bool32 CED_SetFrameFlag(Handle hEdFrame, int flag);
Параметры:
	hEdFrame - 	хэндл фрейма, полученный(например) при вызове CreateFrame, в 					котором меняются параметры
	flag - 		комбинация битовых флагов:
			ED_DROPCAP  - фрейм является буквицей

Небольшое отступление по поводу буквицы. Если есть желание указать в точности положение буквице в тексте, следует создать фрейм с указанием этого положения, учитывая, что размеры (ширину и высоту) указывать бессмысленно - всё равно они будут изменены так, чтобы вмещать весь текст заданным кеглем. Если нет желания указывать положение (буквица в левом верхнем углу колонки, тект её обтекает), то указывайте нулевые координаты угла, а также 
HPOS_COL| VPOS_PARA в поле position.
	
Создать таблицу
Handle CED_CreateTable(  Handle hEdSection, Handle hObject);
Параметры:
	hEdSection - 	хэндл раздела, полученный(например) при вызове CreateSection, в 					котором создается таблица
	hObject - 	хэндл колонки либо фрейма, полученный(например) при вызове 					CreateСolumn либо CreateFrame, в котором создается таблица

Создать строку таблицы
Handle CED_CreateTableRow(Handle hEdSection, Handle hEdTable, int left, int rowHeight, int leftBrdrType, int leftBrdrWidth, int rightBrdrType, int rightBrdrWidth, int topBrdrType, int topBrdrWidth, int bottomBrdrType, int bottomBrdrWidth, int gaph, int position, Bool32 header);
Параметры:
	hEdSection - 	хэндл раздела, полученный(например) при вызове CreateSection, в 					котором создается строка
	hEdTable - 	хэндл таблицы, полученный(например) при вызове 						CreateTable, в которой создается строка
	left - 		Position of the leftmost edge of the table with respect to the left edge of its 				column. Т.е. расстояние в твипах от края колонки до самой левой ячейки 				таблицы. Если position!=TP_LEFT_ALLIGN - игнорируется.
	rowHeight - 	высота строки в твипах:0 - если по высоте содержимого, >0 - если 				минимальная,<0 - если точная. Т.е. Height of a table row in twips. When 0, 				the height is sufficient for all the text in the line; when positive, the height is 				guaranteed to be at least the specified height; when negative, the absolute value 				of the height is used, regardless of the height of the text in the line.
	leftBrdrType	- информация о границах ячеек в строке.
	leftBrdrWidth	…BrdrType - тип соотв. границы:
	rightBrdrType	0 - нет границы, 1 - граница одинарной толщины и т. д., см. ED_BRDR_...
	rightBrdrWidth	…BrdrWidth - толщина в твипах pen'а, которым рисуют границу.
	topBrdrType	Не должна превышать 75.
	topBrdrWidth
	bottomBrdrType
	bottomBrdrWidth
На данный момент(12.01.00) информация о границах строки ни на что не влияет (в редакторе и конверторе в rtf) в связи с непонятностью, на что именно она должна влиять.
	gaph -		(горизонтальное расстояния между ячейками в строке - толщина линии)/2,
			т.е. расстояние от края ячейки с текстом до верт. разделяющей линии в 				твипах.
			Т.е.  Half the space between the cells of a table row in twips.
	position - 	горизонтальное положение строки относительно границ колонки
			т.е. Left-justifies, Right-justifies or Centers a table row with respect to its 				containing column.
			Значения:
			TP_LEFT_ALLIGN - выравниваение по левому краю
			TP_RIGHT_ALLIGN - выравнивание по правому краю
			TP_CENTER - выравнивание по центру
	header - 		если строка находится в загловке таблицы. Заголовок появляется на 				каждой новой странице, куда распространяется таблица. Т.е. 
			Table row header. This row should appear at the top of every page the current 				table appears on.
!!! Если какой либо из параметров, задающих толщину границы, требуется оставить по умолчанию - устанавливем его в -1


Создать ячейку таблицы
Handle CED_CreateCell(Handle hEdSection,Handle hEdRow, int cellX, int merging, int vertTextAlign, int leftBrdrType, int leftBrdrWidth, int rightBrdrType, int rightBrdrWidth, int topBrdrType, int topBrdrWidth, int bottomBrdrType, int bottomBrdrWidth, EDBOX layout, int shading, int color)
Параметры:
	hEdSection - 	хэндл раздела, полученный(например) при вызове CreateSection, в 					котором создается строка
	hEdRow - 	хэндл строки таблицы, полученный(например) при вызове 					CreateTableRow, в которой создается ячейка
	cellX - 		правая граница ячейки в твипах относительно левого края строки таблицы
	merging - 	является ли ячейка первой/следующеей в верт. наборе объединяемых ячеек
			0 - ячейка сама по себе
			ED_CELL_MRGF - ячейка первая в объединяемой группе
			ED_CELL_MRG - ячейка очередная в объедияемой группе, т.е.
				Contents of the table cell are merged with those of the preceding cell.
	vertTextAlign	выравнивание теста в ячейке по вертикали
			0 - по верху
			1 - по центру
			2 - по низу		
	leftBrdrType
leftBrdrWidth	…BrdrType - тип соотв. границы:
	rightBrdrType	0 - нет границы, 1 - граница одинарной толщины и т. д., см. ED_BRDR_...
	rightBrdrWidth	…BrdrWidth - толщина в твипах pen'а, которым рисуют границу.
	topBrdrType	Не должна превышать 75.
	topBrdrWidth
	bottomBrdrType
	bottomBrdrWidth
	layout - 		нереализовано
	color - 		нереализовано
	shading - 	the shading of the paragraph in hundredths of a percent(50%=5000)
			100% - весь фон цвета color(сейчас черного), 5% - фон белый с редкими 				вкраплениями цвета
!!! Если какой либо из 3х последних параметров или один из параметров, задающих толщину границы, требуется оставить по умолчанию - устанавливем его в -1

Изменяет параметры ячейки
Bool32 CED_SetCellFlag(Handle hEdCell, int flag);
Параметры:
	hEdCell - 	хэндл ячейки, полученный(например) при вызове CreateCell, в 					которой меняются параметры
	flag - 		комбинация битовых флагов:
			ED_TDIR_UP  - направление текста снизу вверх
			ED_TDIR_DOWN - направление текста сверху вниз


Создает абзац
Handle CED_CreateParagraph(Handle hEdSection, Handle hObject, int align, EDRECT indent, int UserNum,int FlagBorder, EDSIZE interval, EDBOX layout, int  color, int  shading, int spaceBetweenLines, char spcBtwLnsMult, char  keep	);
Параметры:
	hEdSection - 	хэндл раздела, полученный(например) при вызове CreateSection, в 					котором создается абзац
	hObject - 	хэндл колонки, фрейма или ячейки таблицы, полученный(например) при 				вызове CreateСolumn, CreateFrame, CreateСell, в котором создается абзац
	align - 		TP_LEFT_ALLIGN = 2 - выравниваение по левому краю
			TP_RIGHT_ALLIGN = 4 - выравнивание по правому краю
			TP_LEFT_ALLIGN|TP_RIGHT_ALLIGN = 6 - выравнивание по ширине
			TP_CENTER = 8 - выравнивание по центру
	indent - 		//Отступы: left=левый, right=правый,top=красн.строка(в твипах)
	userNum - 	присвоенный пользователем номер фрагмента, в котором находился 				абзац при фрагментации
	FlagBorder - 	нереализовано
	interval -	cx-отступ перед абзацем, cy- после в твипах
	layout - 		нереализовано
	color - 		нереализовано
	shading - 	the shading of the paragraph in hundredths of a percent(50%=5000)
			100% - весь фон цвета color(сейчас черного), 5% - фон белый с редкими 				вкраплениями цвета
	spaceBetweenLines - расстояние между строками
	        		If 0 is used, the line spacing is automatically determined by the tallest character 
        			In the line; if N is a positive value, this size is used only if it is taller than 
        			the tallest character (otherwise, the tallest character is used); if N is a negative 
        			value, the absolute value of N is used, even if it is shorter than the tallest 				character.
	spcBtwLnsMult - Line spacing multiple. Indicates that the current line spacing is 
    			a multiple of "Single" line spacing. 
			Если там 0 - "At Least" or "Exactly" line spacing.
			Если там 1 - Multiple line spacing, relative to "Single."
   			 Другими словами - если тут 0,то межстрочный интервал измеряется в 				твипах, указанных в spaceBetweenLines,
			если тут 1 - то интервал меряется в разах - это отношение 						spaceBetweenLines к 240
      			(к примеру двойной интервал - 480)
	keep - 	0й бит - если 1 - не разрывать абзац(переносить целиком на следующую страницу)
       		1й бит - если 1 - не отрывать от следующего абзаца(т.е. последняя строка 				данного абзаца всегда на той же странице, что и следующий абзац)
!!! Если какой либо из числовых параметров требуется оставить по умолчанию - устанавливем его в -1.
!!!Значение spaceBetweenLines анализируется, если spcBtwLnsMult==0 или spcBtwLnsMult==1.
В противном случае оно игнорируется.
Задать границы абзаца
Bool32 CED_SetParaBorders(Handle hEdParagraph,
					  int leftBrdrType, int leftBrdrWidth, 
					  int rightBrdrType, int rightBrdrWidth, 
					  int topBrdrType, int topBrdrWidth, 
					  int bottomBrdrType, int bottomBrdrWidth, int brdrBtw);
Параметры:
	hEdParagraph - 	хэндл абзаца, полученный(например) при вызове CreateParagraph, в 				котором задаются границы
	leftBrdrType
leftBrdrWidth	…BrdrType - тип соотв. границы:
	rightBrdrType	0 - нет границы, 1 - граница одинарной толщины и т. д., см. ED_BRDR_...

	rightBrdrWidth	…BrdrWidth - толщина в твипах pen'а, которым рисуют границу.
	topBrdrType	Не должна превышать 75.
	topBrdrWidth
	bottomBrdrType
	bottomBrdrWidth
brdrBtw -	Consecutive paragraphs with identical border formatting are considered part of a single group with the border information applying to the entire group. To have borders around individual paragraphs within the group, the brdrBtw control must be specified for that paragraph. Т.е. если абзацы с одинаковыми границами идут в общей рамке - тут FALSE, если каждый в своей - TRUE

Создает строку
Handle CED_CreateLine(Handle hEdParagraph, Bool32 hardBreak, int defChrFontHeight);
Параметры:
	hEdParagraph - 	хэндл абзаца, полученный(например) при вызове CreateParagraph, в 				котором создается строка
	hardBreak - TRUE - разделять строки внутри абзаца (вставлять после каждой символ 				lineBreak);
	defChrFontHeight - высота символов в строке по умолчанию

Изменяет параметры строки
Bool32 CED_SetLineParams(Handle hEdLine, Bool32 hardBreak, int defChrFontHeight);
Параметры:
	hEdLine - 	хэндл строки, полученный(например) при вызове CreateLine, у 				которой меняются параметры
	hardBreak - TRUE - разделять строки внутри абзаца (вставлять после каждой символ 				lineBreak);
	defChrFontHeight - высота символов в строке по умолчанию

!!!Работа с картинками!!!
Делается следующим образом: в файле хранится глобольная таблица картинок, в которую помещаются все встречающиеся в тексте картинки. Все картинки нумеруются. В том месте, где картинка появляется в тексте, следует вставить произвольный символ шрифтом ED_PICT_BASE+номер картинки. 

!!!Работа с полями!!!
Делается следующим образом: всё содержание поля (\field in RTF) отписывается шрифтом 0xffffffff,
последнее вычисленное значение для поля (\fldrslt in RTF) пишется шрифтом 0xfffffffe пошется следом за самим полем.

Создает символ
Handle CED_CreateChar(Handle hEdLine, EDRECT layout, LETTER* alternatives, int fontHeight, int fontNum, int fontAttribs, int fontLang, int foregroundColor, int backgroundColor);
Параметры
	hEdLine - 	хэндл строки, полученный(например) при вызове CreateLine, в 					котором создается символ
	layout  - 	//Размещение символа на исходном изображении(в 						//пикселях)
	fontHeight	- кегль
	fontNum	- номер шрифта из таблицы шрифтов
	fontAttribs;	//параметры шрифта
			1- dblunderlined - подчеркнутый двойной линией
			2 - hidden - скрытый
			4 - bold       - жирный
			  8 - light     
			 16 - italic   - курсивный
			 32 - protect - защищенный 
			 64 - underlined - подчеркнутый
			128 - strike - перечеркнутый
			256 - super - верхний индекс
			512 - sub - нижний индекс
			1024 - не реализовано - footnote - является ли текст сноской.1 - да, 0 - нет 
		A footnote is anchored to the character that immediately precedes the footnote destination 		(that is, the footnote moves with the character to which it is anchored). 
	FontLang - язык, на котором был распознан символ - список языков в файле lang_gef.h
	foregroundColor - цвет символа из таблицы цветов
	backgroundColor - цвет фона под символом

	letterEx * alternatives;	//Массив альтернатив
		Может быть =0.
		Символ - это,последовательность пар: альтернативный полиграфический
		символ, его вероятность.Символ и вероятность занимают по одному байту.
		Ноль в младшем бите вероятности служит признаком конца последова-
		тельности. Символ,обладающий наибольшей вероятностью в пределах
		заданной последовательности, до правки оператором стоит первым.

		Теперь то же, но моими словами. В файле хранится
		несколько различных вариантов распознавания этого сивола, т.е.
		подряд идущих структур

		struct LETTER
		{
	    		BYTE    alternative;          //  ASCII code.  >= ' '.
	    		BYTE    probability;          
		};

		alternative - распознанная буква
		probability - достоверность распознавания

		Если поле probability содержит 1 в младшем бите(т.е. probability &1==1), то это не
		последняя альтернатива - следует считать еще одну такую же структуру. Иначе-
		последняя, далее идет новый блок. Если мы сделаем (probability & 254), то получим
		достоверность определения соответствующей буквы. По идее среди всевозможных
		вариантов надо выбрать тот, у которого эта достоверность максимальна.

Удаляет страницу со всем содержимым
void CED_DeletePage(Handle hEdPage);
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове CreatePage, которую 				мы удаляем.

2. Отладка

void CED_ShowTree(char * name, Handle hEdPage);
	переведена в раздел сэмплов;
	выводит содержимое страницы, на которую указывает hEdPage (handle страницы), в файл 	с именем name
	Компилируется только в debug версии

void CED_SetLogFileName(const char * name));
Задает имя файла, в который будет записан лог вызовов функций из CED. В файл записываются переданные параметры и возвращенный результат. Файл открывается по CreatePage и закрывается по DeletePage. Если CreatePage была вызвана второй раз до DeletePage - выводится сообщение 'ERROR: Page Was Not Deleted Properly'. Чтобы прекратить вывод лога следует вызвать эту ф-цию, пердав ей указатель на пустую строку (name[0]=0).

3. Чтение/запись

Считывет структуру
Handle CED_ReadFormattedEd(char * lpEdFile, Bool32 readFromFile, Word32 bufLen)
Параметры:
	lpEdFile - указатель либо на строку с именем записываемого файла, либо на массив в 			   памяти
	readFromFile - селектор чтения из файла/из памяти:
		Если readFromFile=TRUE, то lpEdFile должен содержать имя файла, bufLen - 				игнорируется
		Если readFromFile=FALSE, то lpEdFile - указатель на область в памяти, где лежит 				ed, bufLen - размер этого буфера

Записывает структуру
В формате fed:
Bool32 CED_WriteFormattedEd(char * lpEdFileName, Handle hEdPage);
Параметры:
	lpEdFile - указатель на строку с именем записываемого файла
	hEdPage - хэндл страницы, которая записывается в файл

В формате rtf:
Bool32 CED_WriteFormattedRtf(const char * fileName, Handle hEdPage);
Параметры:
	lpEdFile - указатель на строку с именем записываемого файла
	hEdPage - хэндл страницы, которая записывается в файл

Bool32 CED_MergeFormattedRtf(const char * fileName, Handle hEdPage);
Дописывает существующий файл. Если не может прочитать исходный файл - возвращает FALSE и ничего не записывает:
Параметры:
	lpEdFile - указатель на строку с именем записываемого файла
	hEdPage - хэндл страницы, которая записывается в файл

4. Доступ

!!!Все функции, котороые имеют тип возвращаемого параметра Handle, об ошибке сообщают, возвращая 0.

Получить соотв. параметры страницы
!!! Если какой либо из числовых параметров равен -1, значит требуется оставить его по умолчанию 
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове ReadFormattedEd, параметры которой извлекаются
 
char* CED_GetPageImageName(Handle hEdPage);
Возвращает:
//Null terminated Имя файла изображения. Если путь не указан, 					ищется в одном 	каталоге с ed файлом. Может быть 0.

EDSIZE CED_GetPageImageSize(Handle hEdPage);//в точках tif'а
Возвращает:
//Размеры исходного изображения в пикселях

EDSIZE CED_GetPageDpi(Handle hEdPage);
Возвращает:
//Разрешение сканера для этого изображения по горизонтали и 					вертикали

Word32 CED_GetPageTurn(Handle hEdPage);
Возвращает:
//Тангенс угла поворота картинки относительно вертикали*2048

Word32 CED_GetPageNumber(Handle hEdPage);
Возвращает:
//Номер страницы(=0 не в пакетном режиме)

EDSIZE СED_GetPageSize(Handle hEdPage);//В twip'ах - размер бумаги для редактора
Возвращает:
//Размер страницы в твипах(1дюйм=1440твипов) для текстового 					//редактора


EDRECT CED_GetPageBorders(Handle hEdPage);
Возвращает:
//Поля страницы в твипах(1дюйм=1440твипов) для 						//текстового редактора

char CED_GetPageUnrecogChar(Handle hEdPage);
Возвращает:
//Код, которым обозначается нераспознанный символ (обычно '~')

Bool32 CED_GetPageResize(Handle hEdPage);
Возвращает:
//TRUE, если верикальный размер страницы должен быть увеличен так, 				чтобы вместить весь файл на одну страницу
//FALSE - размер страницы жестко задан

Получить шрифт

!!! Если какой либо из числовых параметров равен -1, значит требуется оставить его по умолчанию 

Bool32 CED_GetFont(Handle hEdPage,int number, BYTE* fontNumber, BYTE* fontPitchAndFamily, BYTE* fontCharset,char** fontName)
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове ReadFormattedEd, в 				которой содержится шрифт
	number - порядковый номер шрифта (с нуля)
	fontName - указатель на текстовую строку внутри библиотеки. Не следует освобождать его 	- шрифты сами удалятся при вызове DetetePage
	остальные - см. CED_CreateFont
	Если какой- либо параметр не нужен - вместо указателя на переменную передаем 0
	Возвращает false, если общее число шрифтов меньше number.

Получить кол-во шрифтов
Word32 CED_GetNumOfFonts(Handle hEdPage)
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове ReadFormattedEd, в 				которой содержатся шрифты
	Возвращает общее число шрифтов в документе. number в вызове GetFont не должен превышать это число.

Получить картинку (не исходное изображение!)

!!! Если какой либо из числовых параметров равен -1, значит требуется оставить его по умолчанию 

Bool32 CED_GetPicture(Handle hEdPage,int number, int* pictNumber, EDSIZE* pictSize, EDSIZE* pictGoal, int* pictAlign , int* type, void ** data, int* len);
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове ReadFormattedEd, в 				которой содержится картинка
	number - порядковый номер картинки (с нуля)
	остальные - см. CED_CreatePicture
	data - указатель на массив данных излбражения внутри библиотеки. Не следует освобождать его - картинки сами удалятся при вызове DetetePage
	Если какой- либо параметр не нужен - вместо указателя на переменную передаем 0
	Возвращает false, если общее число картинок меньше number.

Получить кол-во картинок
Word32 CED_GetNumOfPics(Handle hEdPage)
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове ReadFormattedEd, в 				которой содержатся картинки
	Возвращает общее число картинок в документе. number в вызове GetPicture не должен превышать это число.

Получить полное количество абзацев на странице,
включая фиктивные (описывающие форматирование - колонки/фреймы/таблицы)
Word32 CED_GetNumberOfParagraphs(Handle hEdPage);

Получить абзац
номер _num (включая фиктивные) ( Фиктивный - хранящий информацию по форматированию)
Handle CED_GetParagraph(Handle hEdPage,int _num);

Получить количество разделов
Word32 CED_GetCountSection(Handle hEdPage);
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове ReadFormattedEd, в 				которой содержатся разделы

Получить раздел
Handle CED_GetSection(Handle hEdPage, Word32 number);
Параметры:
	hEdPage - 	хэндл страницы, полученный(например) при вызове ReadFormattedEd, в 				которой содержатся разделы
	number - порядковый номер раздела

Получить границы
EDRECT CED_GetSectionBorder(Handle hEdSection);
Параметры:
	hEdSection - 	хэндл раздела, полученный(например) при вызове GetSection

Надо ли рисовать линию между колонками
Bool32 CED_GetSectLineBetCol( Handle hEdSection);
Параметры:
	hEdSection - 	хэндл раздела, полученный(например) при вызове GetSection

Получить параметры колонок
Word32 CED_GetNumSnakeCols(Handle hEdSection);
!!! Если следующие две функции возвращают -1, значит все колонки одинаковой ширины
Int32 CED_GetSnakeColumnWidth(Handle hEdSection,int number);
Int32 CED_GetSnakeColumnSpacing(Handle hEdSection,int number);

Получить параметры раздела
!!! Если какой либо из числовых параметров равен -1, значит требуется оставить его по умолчанию 

Bool32 CED_GetSectionParams(Handle hEdSection,EDRECT* border, int* colInterval, char* sectionBreak, int* width, int* height, char* orientation, int* headerY, int* footerY);
Параметры:
	остальные - см. CED_CreateSection
	Если какой- либо параметр не нужен - вместо указателя на переменную передаем 0
	Возвращает false, если hEdSection - не хэндл раздела.

Получить кол-во колонок
Word32 CED_GetCountColumn(Handle hEdSection);

Получить колонку.
Возвращает 0, если number>=CED_GetCountColumn
Handle CED_GetColumn(Handle hEdSection,int number);

!!!Значит так!!!. С фреймами работа идет следующим способом: при переборе абзацев с помощью ф-ций CED_GetFirstObject и CED_GetNextObject фреймы тоже попадаются, причем если фрейм по вертикали позиционирован относит. некоторого абзаца, то он и идет перед этим абзацем
Получить параметры фрейма
EDBOX CED_GetFrameRect(Handle hEdFrame);
Int32 CED_GetFramePosition(Handle hEdFrame);
Int32 CED_GetFrameBorderSpace(Handle hEdFrame);
Int32 CED_GetFrameDxfrtextx (Handle hEdFrame);
Int32 CED_GetFrameDxfrtexty (Handle hEdFrame);
Int32 CED_GetFrameFlag (Handle hEdFrame);
См. соответствующие параметры CreateFrame и SetFrameFlag

Получить первый
 абзац/таблицу/фрейм в hObect (колонке/фрейме/ячейке). 0 - если там пусто
Handle CED_GetFirstObject(Handle hObject);

Получить следующий объект.
 0 - если дальше ничего нет
Handle CED_GetNextObject(Handle hObject);

Определение типа полученного объекта
Bool32 CED_IsTable(Handle hObject);
Bool32 CED_IsFrame(Handle hObject);
Bool32 CED_IsParagraph(Handle hObject);

Определить, не фиктивный ли абзац (фиктивные абзацы могут получиться при использовании функцииции CED_GetParagraph) ( Фиктивный - хранящий информацию по форматированию)
Bool32 CED_IsFictive(Handle hEdParagraph)
(btw CED_IsFictive(Handle hEdParagraph) = !CED_IsParagraph(Handle hObject))

		Получить число строк в таблице
Word32 CED_GetCountRow(Handle hEdTable)

		Получить хэндл строки таблицы
Handle CED_GetTableRow(Handle hEdTable,int num);
Параметры:
	hEdTable - хэндл таблицы, полученный(например) при вызове GetNext, в 					 	которой содержится строка
	num - 	порядковый номер строки в таблице, с нуля


Получить соответствующие параметры строки таблицы
!!! Если какой либо из числовых параметров равен -1, значит требуется оставить его по умолчанию 

Bool32 CED_GetTableRowParams(Handle hEdRow, 
	int* left, int* rowHeight, 
	int* leftBrdrType, int* leftBrdrWidth, 
	int* rightBrdrType, int* rightBrdrWidth, 
	int* topBrdrType, int* topBrdrWidth, 
	int* bottomBrdrType, int* bottomBrdrWidth, 
	int* gaph, int* position, Bool32* header);
Параметры:
	hEdRow - 	хэндл строки таблицы, полученный(например) при вызове 					GetTableRow
	остальные - см. CED_CreateTableRow
	Если какой- либо параметр не нужен - вместо указателя на переменную передаем 0
	Возвращает false, если hEdRow - не хэндл строки.
Получить количество ячеек в строке
Word32 CED_GetCountCell(Handle hEdRow)

Получить ячейку таблицы.
Handle CED_GetCell(Handle hEdRow, int number)
Параметры:
	hEdRow - 	хэндл строки таблицы, полученный(например) при вызове 					GetTableRow
	number -	номер ячейки с нуля

Получить параметры ячейки таблицы
!!! Если какой либо из числовых параметров равен -1, значит требуется оставить его по умолчанию 

Bool32 CED_GetCellParams (Handle hEdCell, int* cellX, int* merging, int* vertTextAlign, int* leftBrdrType, int* leftBrdrWidth, int* rightBrdrType, int* rightBrdrWidth, int* topBrdrType, int* topBrdrWidth, int* bottomBrdrType, int* bottomBrdrWidth, EDBOX* layout, int* shading, int* color)
Параметры:
	hEdCell - 	хэндл ячейки таблицы, полученный(например) при вызове 					GetCell
	остальные - см. CED_CreateCell
	Если какой- либо параметр не нужен - вместо указателя на переменную передаем 0
	Возвращает false, если hEdCell - не хэндл ячейки.

!!! Альтернативный способ доступа к таблице!!! Нижеперечисленные ф-ции могут использоваться независимо для доступа к таблице в формате, принятом в старом ed

Возвращает размеры таблицы: cx и cy - кол-во ячеек по горизонтали и вертикали
EDSIZE CED_GetSize(Handle hEdTable);

Возвращает массив из cx *cy элементов, описывающих структуру таблицы. Память, куда указывает указатель, освобождается автоматически при удалении таблицы.
Word32* CED_GetTableOfCells (Handle hEdTable);
Например, таблице такого вида:
     
   
   
Соответствует массив 0,0,1,2,3,3,2,4,5:
0 0 1
2 3 3
2 4 5
Т.е. объединенные ячейки содержат один и тот же номер.
 
Получить реальное количество логических ячеек в таблице
Word32 CED_GetCountLogicalCell(Handle hEdTable)
В предыдущем примере вернет 

Получить логическую ячейку таблицы. Cell - номер ячейки, расположенной соответственно структуре таблицы(GetTableOfCells). В пред. примере при cell=2 будет получена левая-нижняя ячейка.
Handle CED_GetLogicalCell(Handle hEdTable, int cell)

Получить x координаты линий разгафки таблицы в tif'е(в точках) - массив из cx+1 числа (cx- гориз. число ячеек). Память, куда указывает указатель, освобождается автоматически при удалении таблицы.
Int32* CED_GetLinesX(Handle hEdTable);

Получить расстояния между горизонтальными линиями разгафки таблицы в tif'е(в точках) - массив из cy+1 числа (cy-верт. число ячеек). Элемент массива номер0 всегда равен нулю, 1й - высота первой строки таблицы. Значения могут быть как положительными, так и отрицательными - см. CtreateTable.Память, куда указывает указатель, освобождается автоматически при удалении таблицы.
Int32* CED_GetLinesHeights(Handle hEdTable);


Получить отступы абзаца
left=левый отступ, right=ширина абзаца, top=красн.строка (всё в твипах)
EDRECT CED_GetIndent(Handle hEdParagraph)

Возвращает выравнивание абзаца
Word32 CED_GetAlignment(Handle hEdParagraph);
 
Возвращает положение абзаца на tif'е (в точках)
edBox CED_GetLayout(Handle hEdParagraph);
!Нереализовано

Возвращает номер, 
данный пользователем на этапе фрагментаци фрагменту, откуда взят этот абзац
Word32 CED_GetUserNumber(Handle hEdParagraph);

Возвращает интерваля до -cx и после - cy абзаца
EDSIZE CED_GetInterval(Handle hEdParagraph)

Возвращает различные параметры абзаца
Bool32 CED_GetParaParams(Handle hEdParagraph, int*  color, int*  shading, 
				int* spaceBetweenLines, char* spcBtwLnsMult, char*  keep)
Параметры:
hEdParagraph - 	хэндл абзаца, полученный(например) при вызове 	CED_GetNextObject или CED_GetАшкыеObject	
остальные - см. CED_CreateParagraph
	Если какой- либо параметр не нужен - вместо указателя на переменную передаем 0.

Возвращает границы абзаца
Bool32 CED_GetParaBorders(Handle hEdParagraph,
					  int* leftBrdrType, int* leftBrdrWidth, 
					  int* rightBrdrType, int* rightBrdrWidth, 
					  int* topBrdrType, int* topBrdrWidth, 
					  int* bottomBrdrType, int* bottomBrdrWidth,int* brdrBtw);

Возвращает количество строк
Word32 CED_GetCountLine(Handle hEdParagraph);

Возвращает строку
Handle CED_GetLine(Handle hEdParagraph,int number);

Получить параметры строки
Bool32 CED_GetLineHardBreak (Handle hEdLine);
Возвращает, надо ли вставлять разрыв строки после строки hEdLine.

Возвращает количество символов
Word32 CED_GetCountChar(Handle hEdLine);

Возвращает символ
Handle CED_GetChar(Handle hEdLine,int number);

Определяет тип символа
Bool32 CED_IsPicture(Handle hEdChar);
Возвращает true, если символ на самом деле  - картинка.

Возвращает указатель на массив альтернатив
struct letter* CED_GetAlternatives(Handle hEdChar)

Возвращает положение символа в tif'е (в точках)
EDRECT CED_GetCharLayout(Handle hEdChar)

Возвращает параметры шрифта для символа
Word32 CED_GetCharFontHeight(Handle hEdChar)
Word32 CED_GetCharFontAttribs(Handle hEdChar)
Word32 CED_GetCharFontNum(Handle hEdChar);
Word32 CED_GetCharFontLang(Handle hEdChar);
Word32 CED_GetCharForegroundColor(Handle hEdChar);
Word32 CED_GetCharBackgroundColor(Handle hEdChar);

Hosted by uCoz