#include <GDIPlus.au3>
Global $aStrings[][] = [["раз","два","три"],["четыре","пять","шесть"],["семь","восемь","девять"]]
_GDIPlus_Startup()
$hGUI = GUICreate("")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
GUIDelete($hGUI)
; создаём шрифт и необходимые атрибуты
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 12)
$hFormat = _GDIPlus_StringFormatCreate()
_GDIPlus_StringFormatSetAlign($hFormat, 1)
$tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
; находим самую длинную строку (высота у всех строк одинаковая)
$iWidth = 0
For $i = 0 To UBound($aStrings, 1) - 1
For $j = 0 To UBound($aStrings, 2) - 1
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $aStrings[$i][$j], $hFont, $tLayout, $hFormat)
If $iWidth < $aInfo[0].Width Then $iWidth = $aInfo[0].Width
Next
Next
$iWidth = Ceiling($iWidth) ; максимальная ширина
$iHeight = Ceiling($aInfo[0].Height) ; одинаковая высота
; создаём объекты рисования
$hImage = _GDIPlus_BitmapCreateFromGraphics($iWidth * UBound($aStrings, 1) + 1, $iHeight * UBound($aStrings, 2) + 1, $hGraphic)
_GDIPlus_GraphicsDispose($hGraphic)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
_GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
; рисуем таблицу
$tLayout.Width = $iWidth
$tLayout.Height = $iHeight
For $i = 0 To UBound($aStrings, 1) - 1
$tLayout.Y = $i * $iHeight
For $j = 0 To UBound($aStrings, 2) - 1
$tLayout.X = $j * $iWidth
_GDIPlus_GraphicsDrawRect($hGraphic, $tLayout.X, $tLayout.Y, $iWidth, $iHeight)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $aStrings[$i][$j], $hFont, $tLayout, $hFormat, $hBrush)
Next
Next
; сохраняем рисунок
_GDIPlus_ImageSaveToFile($hImage, "table.png")
ShellExecute("table.png")
; очищаем память
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
Круто!Пример рисования таблицы с одинаковой шириной столбцов
Dim $aTable[][] = _
[ _
['col1(font,color,bkcolor)', 'col2(font,color,bkcolor)', 'col3(font,color,bkcolor)'], _
['row1(font,color,bkcolor)', 'row2(font,color,bkcolor)', 'row3(font,color,bkcolor)'] _
]
Func _GDIPlus_ImageDrawCell($aTable)
EndFunc
Картинка не отображается, поэтому сделал, как смогвот такой примерно
#include <GDIPlus.au3>
_GDIPlus_Startup()
; Пример 1
Global $aStrings[][] = [["раз|0xFFFF0000|0xFFFFFF00","два|0xFF00FF00|0xFF0000FF","три|0xFF0000FF|0xFFF00FFF"], _
["четыре|0xFF800080|0xFF121212","пять|0xFF101010|0xFF80FF00","шесть|0xFF000000|0xFFC0C0C0"], _
["семь|0xFF808000|0xFF646464","восемь|0xFF008000|0xFFC0FFFF","девять|0xFF8080C0|0xFFC080FF"]]
$hImg = _Table2Image($aStrings)
_GDIPlus_ImageSaveToFile($hImg, "table1.png")
If Not @error Then ShellExecute("table1.png")
_GDIPlus_ImageDispose($hImg)
; Пример 2
Global $aStrings[][] = [["семь,,","восемь,,0xFFFF0000","девять,0xFFFF0000,"]]
$hImg = _Table2Image($aStrings, ",", "Courier New", 20, 1, 0, False)
_GDIPlus_ImageSaveToFile($hImg, "table2.png")
If Not @error Then ShellExecute("table2.png")
_GDIPlus_ImageDispose($hImg)
_GDIPlus_Shutdown()
; ============================================================================================
; Имя функции : _Table2Image
; Описание : Преобразует двумерный массив в изображение
; Синтаксис : _Table2Image(Const ByRef $aTable[, $sDelim = "|"[, $sFont = "Arial"[, $iSize = 12[, $iStyle = 0[, $iAlign = 1[, $fGrid = True]]]]]])
; Параметры : $aTable - двумерный массив в формате "текст|цвет_текста|цвет_фона"
; : $sDelim - разделитель формата (по умолчанию "|")
; : $sFont - имя шрифта (по умолчанию "Arial")
; : $iSize - размер шрифта (по умолчанию 12)
; : $iStyle - стиль шрифта
; : 0 - нормальный (по умолчанию)
; : 1 - жирный
; : 2 - курсив
; : 4 - подчёркнутый
; : 8 - зачёркнутый
; : $iAlign - выравнивание шрифта
; : 0 - по левому краю
; : 1 - по центру (по умолчанию)
; : 2 - по правому краю
; : $fGrid - отображать границы ячеек (по умолчанию True)
; Возвращает : Успех - объект Bitmap GDI+
; : Неудача - 0 и устанавливает @error
; : @error = 1 - первый параметр не массив или массив не двумерный
; : @error = 2 - ошибка формата элементов массива
; : @error = 3 - ошибка создания шрифта
; Автор : InnI
; Примечание : Стили шрифта можно суммировать (6 = 2 + 4 : подчёркнутый курсив)
; ============================================================================================
Func _Table2Image(Const ByRef $aTable, $sDelim = "|", $sFont = "Arial", $iSize = 12, $iStyle = 0, $iAlign = 1, $fGrid = True)
If Not IsArray($aTable) Or UBound($aTable, 0) <> 2 Then Return SetError(1, 0, 0)
For $i = 0 To UBound($aTable, 1) - 1
For $j = 0 To UBound($aTable, 2) - 1
If UBound(StringSplit($aTable[$i][$j], $sDelim, 3)) <> 3 Then Return SetError(2, 0, 0)
Next
Next
Local $hDC, $hGraphic, $hFamily, $hFont, $hFormat, $tLayout, $hBrush, $iWidth, $iHeight, $hBitmap, $aData
$hDC = _WinAPI_GetDC(0)
$hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC)
_WinAPI_ReleaseDC(0, $hDC)
; создание шрифта и необходимых атрибутов
$hFamily = _GDIPlus_FontFamilyCreate($sFont)
$hFont = _GDIPlus_FontCreate($hFamily, $iSize, $iStyle)
If @error Then Return SetError(3, 0, 0)
$hFormat = _GDIPlus_StringFormatCreate()
_GDIPlus_StringFormatSetAlign($hFormat, $iAlign)
$tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
$hBrush = _GDIPlus_BrushCreateSolid()
; расчёт размеров ячеек
Local $aWidth[UBound($aTable, 2)]
For $i = 0 To UBound($aTable, 1) - 1
For $j = 0 To UBound($aTable, 2) - 1
$aData = StringSplit($aTable[$i][$j], $sDelim, 3)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $aData[0], $hFont, $tLayout, $hFormat)
If $aWidth[$j] < $aInfo[0].Width Then $aWidth[$j] = Ceiling($aInfo[0].Width)
If $iHeight < $aInfo[0].Height Then $iHeight = Ceiling($aInfo[0].Height)
Next
Next
; создание объектов рисования
For $i = 0 To UBound($aWidth) - 1
$iWidth += $aWidth[$i]
Next
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth + $fGrid, $iHeight * UBound($aTable, 1) + $fGrid, $hGraphic)
_GDIPlus_GraphicsDispose($hGraphic)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap)
; рисование таблицы
$tLayout.Height = $iHeight
For $i = 0 To UBound($aTable, 1) - 1
$tLayout.Y = $i * $iHeight
For $j = 0 To UBound($aTable, 2) - 1
$tLayout.Width = $aWidth[$j]
$tLayout.X = ($j = 0) ? 0 : $tLayout.X + $aWidth[$j - 1]
$aData = StringSplit($aTable[$i][$j], $sDelim, 3)
If Not $aData[2] Then $aData[2] = 0xFFFFFFFF
If Not $aData[1] Then $aData[1] = 0xFF000000
_GDIPlus_BrushSetSolidColor($hBrush, $aData[2])
_GDIPlus_GraphicsFillRect($hGraphic, $tLayout.X, $tLayout.Y, $aWidth[$j], $iHeight, $hBrush)
If $fGrid Then _GDIPlus_GraphicsDrawRect($hGraphic, $tLayout.X, $tLayout.Y, $aWidth[$j], $iHeight)
_GDIPlus_BrushSetSolidColor($hBrush, $aData[1])
_GDIPlus_GraphicsDrawStringEx($hGraphic, $aData[0], $hFont, $tLayout, $hFormat, $hBrush)
Next
Next
; очистка памяти
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
Return $hBitmap
EndFunc ;==>_Table2Image
применить на практике
#include <GDIPlus.au3>
_GDIPlus_Startup()
Global $aStrings[][] = [["Day|0xFFC16100|","From time|0xFFC16100|","To time|0xFFC16100|","Holiday 150%|0xFFC16100|","Holiday 200%|0xFFC16100|","Holiday Full 150%|0xFFC16100|","Holiday In|0xFFC16100|","100% hours|0xFFC16100|","125% hours|0xFFC16100|","150% hours|0xFFC16100|","175% hours|0xFFC16100|","200% hours|0xFFC16100|","Total hours|0xFFC16100|","Notes|0xFFC16100|"], _
["01 (Fr)||0xFFDDDDFF","13:00||","21:00||","False||","False||","False||","False||","4||","0||","3.5||","0||","0||","7.5||0xFF00FF00","||"], _
["09 (Sa)||0xFFFF8282","00:00||","00:00||","False||","False||","False||","False||","4||","0||","0||","0||","0||","0||0xFF00FF00","||"], _
["28 (Th)||0xFFDDDDFF","16:30||","23:00||","False||","False||","False||","False||","6||","0||","0||","0||","0||","6||0xFF00FF00","Missing checkout time||"]]
$hImg = _Table2Image($aStrings, "|", "Times New Roman", 10.5, 1)
_GDIPlus_ImageSaveToFile($hImg, "table.png")
If Not @error Then ShellExecute("table.png")
_GDIPlus_ImageDispose($hImg)
_GDIPlus_Shutdown()
_Image_Open($iWidth, $iHeight) ;Открываем изображение (создаётся указатель на изображение - $hImage)
_Image_DrawLabel($hImage, $sText, $iLeft, $iTop) ;Рисуем надпись в указанном месте на холсте
_Image_DrawTable($hImage, $aTable, $iLeft, $iTop) ;Рисуем таблицу в указанном месте на холсте (по мотивам Table2Image)
_Image_Close($hImage, $sFile) ;Закрываем изображение (сохранение и освобождение ресурсов)
Как вариант, можно создать отдельные изображения строк и таблиц, рассчитать общий bitmap, и скопировать их на него в нужном порядке. Кстати, строки можно выводить в виде таблиц без сетки (см. ниже примеры 2 и 3).добавлять заголовки вне таблицы
#include <GDIPlus.au3>
_GDIPlus_Startup()
; Пример 1
Global $aStrings[][] = [["раз|0xFFFF0000|0xFFFFFF00","два" & @CRLF & "плюс два|0xFF00FF00|0xFF0000FF","три|0xFF0000FF|0xFFF00FFF"], _
["четыре|0xFF800080|0xFF121212","пять|0xFF101010|0xFF80FF00","шесть|0xFF000000|0xFFC0C0C0"], _
["семь" & @CRLF & "с половиной|0xFF808000|0xFF646464","восемь|0xFF008000|0xFFC0FFFF","ДЕВЯТЬ"]]
$hImg = _Table2Image($aStrings)
_GDIPlus_ImageSaveToFile($hImg, "table1.png")
If Not @error Then ShellExecute("table1.png")
_GDIPlus_ImageDispose($hImg)
; Пример 2
Global $aStrings[][] = [["Это таблица из одной ячейки" & @CRLF & "и выглядит она, как" & @CRLF & "многострочный текст||0xFFC0C0C0"]]
$hImg = _Table2Image($aStrings, Default, Default, Default, 1, 0, Default, False)
_GDIPlus_ImageSaveToFile($hImg, "table2.png")
If Not @error Then ShellExecute("table2.png")
_GDIPlus_ImageDispose($hImg)
; Пример 3
Global $aStrings[][] = [["Это таблица из трёх ячеек,"],["но она выглядит,"],["как многострочный текст"]]
$hImg = _Table2Image($aStrings, Default, Default, Default, Default, 0, Default, False)
_GDIPlus_ImageSaveToFile($hImg, "table3.png")
If Not @error Then ShellExecute("table3.png")
_GDIPlus_ImageDispose($hImg)
_GDIPlus_Shutdown()
; ============================================================================================
; Имя функции : _Table2Image
; Описание : Преобразует двумерный массив в изображение
; Синтаксис : _Table2Image(Const ByRef $aTable[, $sDelim = Default[, $sFont = Default[, $iSize = Default[, $iStyle = Default[, $iHAlign = Default[, $iVAlign = Default[, $fGrid = Default]]]]]]])
; Параметры : $aTable - двумерный массив в формате "текст[|цвет_текста[|цвет_фона]]" (по умолчанию чёрный текст на белом фоне)
; : $sDelim - разделитель формата (по умолчанию "|")
; : $sFont - имя шрифта (по умолчанию "Arial")
; : $iSize - размер шрифта (по умолчанию 12)
; : $iStyle - стиль шрифта
; : 0 - нормальный (по умолчанию)
; : 1 - жирный
; : 2 - курсив
; : 4 - подчёркнутый
; : 8 - зачёркнутый
; : $iHAlign - выравнивание текста по горизонтали
; : 0 - по левому краю
; : 1 - по центру (по умолчанию)
; : 2 - по правому краю
; : $iVAlign - выравнивание текста по вертикали
; : 0 - по верхней границе
; : 1 - по центру (по умолчанию)
; : 2 - по нижней границе
; : $fGrid - отображать границы ячеек (по умолчанию True)
; Возвращает : Успех - объект Bitmap GDI+
; : Неудача - 0 и устанавливает @error
; : @error = 1 - первый параметр не массив или массив не двумерный
; : @error = 2 - ошибка создания шрифта
; Автор : InnI
; Примечание : Стили шрифта можно суммировать (6 = 2 + 4 : подчёркнутый курсив)
; ============================================================================================
Func _Table2Image(Const ByRef $aTable, $sDelim = Default, $sFont = Default, $iSize = Default, $iStyle = Default, $iHAlign = Default, $iVAlign = Default, $fGrid = Default)
If Not IsArray($aTable) Or UBound($aTable, 0) <> 2 Then Return SetError(1, 0, 0)
If $sDelim = Default Then $sDelim = "|"
If $sFont = Default Then $sFont = "Arial"
If $iSize = Default Then $iSize = 12
If $iStyle = Default Then $iStyle = 0
If $iHAlign = Default Then $iHAlign = 1
If $iVAlign = Default Then $iVAlign = 1
If $fGrid = Default Then $fGrid = True
Local $hDC, $hGraphic, $hFamily, $hFont, $hFormat, $tLayout, $hBrush, $iWidth, $iHeight, $hBitmap, $aData
$hDC = _WinAPI_GetDC(0)
$hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC)
_WinAPI_ReleaseDC(0, $hDC)
; создание шрифта и необходимых атрибутов
$hFamily = _GDIPlus_FontFamilyCreate($sFont)
$hFont = _GDIPlus_FontCreate($hFamily, $iSize, $iStyle)
If @error Then Return SetError(2, 0, 0)
$hFormat = _GDIPlus_StringFormatCreate()
_GDIPlus_StringFormatSetAlign($hFormat, $iHAlign)
_GDIPlus_StringFormatSetLineAlign($hFormat, $iVAlign)
$tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
$hBrush = _GDIPlus_BrushCreateSolid()
; расчёт размеров ячеек
Local $aWidth[UBound($aTable, 2)], $aHeight[UBound($aTable, 1)]
For $i = 0 To UBound($aTable, 1) - 1
For $j = 0 To UBound($aTable, 2) - 1
$aData = StringSplit($aTable[$i][$j], $sDelim, 3)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $aData[0], $hFont, $tLayout, $hFormat)
If $aWidth[$j] < $aInfo[0].Width Then $aWidth[$j] = Ceiling($aInfo[0].Width)
If $aHeight[$i] < $aInfo[0].Height Then $aHeight[$i] = Ceiling($aInfo[0].Height)
Next
Next
; создание объектов рисования
For $i = 0 To UBound($aWidth) - 1
$iWidth += $aWidth[$i]
Next
For $i = 0 To UBound($aHeight) - 1
$iHeight += $aHeight[$i]
Next
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth + $fGrid, $iHeight + $fGrid, $hGraphic)
_GDIPlus_GraphicsDispose($hGraphic)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap)
; рисование таблицы
For $i = 0 To UBound($aTable, 1) - 1
$tLayout.Height = $aHeight[$i]
$tLayout.Y = ($i = 0) ? 0 : $tLayout.Y + $aHeight[$i - 1]
For $j = 0 To UBound($aTable, 2) - 1
$tLayout.Width = $aWidth[$j]
$tLayout.X = ($j = 0) ? 0 : $tLayout.X + $aWidth[$j - 1]
$aData = StringSplit($aTable[$i][$j], $sDelim, 3)
ReDim $aData[3]
If Not $aData[2] Then $aData[2] = 0xFFFFFFFF
If Not $aData[1] Then $aData[1] = 0xFF000000
_GDIPlus_BrushSetSolidColor($hBrush, $aData[2])
_GDIPlus_GraphicsFillRect($hGraphic, $tLayout.X, $tLayout.Y, $aWidth[$j], $aHeight[$i], $hBrush)
If $fGrid Then _GDIPlus_GraphicsDrawRect($hGraphic, $tLayout.X, $tLayout.Y, $aWidth[$j], $aHeight[$i])
_GDIPlus_BrushSetSolidColor($hBrush, $aData[1])
_GDIPlus_GraphicsDrawStringEx($hGraphic, $aData[0], $hFont, $tLayout, $hFormat, $hBrush)
Next
Next
; очистка памяти
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
Return $hBitmap
EndFunc ;==>_Table2Image
Стиль - это атрибут шрифта и он влияет на размеры текста. Придётся для каждой ячейки создавать собственный шрифт, рассчитывать размеры текста и сохранять этот шрифт в массиве для дальнейшей индивидуальной отрисовки ячеек. Данные изменения откроют возможность задавать полностью индивидуальные шрифты для каждой ячейки (имя, размер, стиль). Дальше последуют индивидуальные выравнивания. В результате каждый элемент массива станет набором параметров текущей реализации. А ещё не плохо бы цвет и толщину сетки задавать.добавить поддержку стиля для каждой ячейки отдельно
Экспорт в html я уже сделал, это мне по зубам .все что сложнее - лучше в html
Это как?скриншот можно снять без браузера
Только убрать Navigate а сразу записать через Write весь html код.Это как?
Func _WebCapture($Url, $WebWidth = 1024)
Local $oIE = ObjCreate("Shell.Explorer.2")
Local $hGUI = GUICreate("", $WebWidth, 768, -1, -1)
Local $cObj = GUICtrlCreateObj($oIE, 0, 0, $WebWidth, 768)
_IELoadWaitTimeout(20000) ; 20 sec
_IENavigate($oIE, $Url)
_IELoadWait($oIE)
Local $oDocument = $oIE.document
Local $oBody = $oIE.document.body
Local $oHtml = $oIE.document.documentElement
$oBody.scroll = "no"
$oBody.style.borderStyle = "none"
$oHtml.style.overflow = 'hidden'
$oBody.style.overflow = 'hidden'
Local $oIViewObject2 = ObjCreateInterface($oDocument, "{00000127-0000-0000-C000-000000000046}", "Draw hresult(dword;long;ptr;ptr;handle;handle;struct*;struct*;bool;ulong_ptr);")
If @error Then Return SetError(1, 0, 0)
Local $BodyWidth = $oBody.scrollWidth
Local $BodyHeight = $oBody.scrollHeight
Local $RootWidth = $oHtml.scrollWidth
Local $RootHeight = $oHtml.scrollHeight
Local $Width = $BodyWidth
Local $Height = $RootHeight
If $BodyHeight > $Height Then $Height = $BodyHeight
$oIE.width = $Width
$oIE.height = $Height
Local $hDC = _WinAPI_GetDC(0)
Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
Local $hBmp = _WinAPI_CreateCompatibleBitmap($hDC, $Width, $Height)
_WinAPI_SelectObject($hMemDC, $hBmp)
Local $sRECT = DllStructCreate($tagRECT)
DllStructSetData($sRECT, "Top", 0)
DllStructSetData($sRECT, "Left", 0)
DllStructSetData($sRECT, "Right", $Width)
DllStructSetData($sRECT, "Bottom", $Height)
$oIViewObject2.Draw(1, -1, 0, 0, $hDC, $hMemDC, $sRECT, 0, 0, 0)
_WinAPI_DeleteDC($hMemDC)
_WinAPI_ReleaseDC(0, $hDC)
GUIDelete($hGUI)
Return $hBmp
EndFunc ;==>_WebCapture