Что нового

формирование и печать документов-бланков

PS_

Новичок
Сообщения
6
Репутация
0
Версия AutoIt: 3.3.6.1

Описание:

Стал вопрос формировать и печатать документ-бланк. и так сказать в легком ступоре как это реализовать. Главная задача сформировать и отправить на печать бланк лист формата А4. Думал реализовать и через OLE (например word), но вдруг на компьютере не будет установлен word. И тогда печать не сработает, чего бы не хотелось.

думаю надо генерить картинку и её печатать. BMP любой комп понимает.

в принципе мысли еще вместо word использовать IE, он ведь тоже на любом компе есть.

что посоветуете, куда двигаться?
 
Автор
P

PS_

Новичок
Сообщения
6
Репутация
0
Спасибо за совет (стол заказов), но хотелось бы сделать самому. Нужна идея как это лучше реализовать.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
PS_ [?]
но хотелось бы сделать самому
разница раздела для новичков от стола заказов в том, что тут тебе надо предоставит наработки кода, в котором ты испытываешь затруднения в дальнейшей реализации для достижения конечной цели. если таковые имеются, не стесняйся выкладывать. в противном случае – стол заказов.
с чего то надо начинать.
пока ты решаешь, где лучше разместить тему, несколько уточняющих вопросов по теме
1. что такое документ готовый к печати? как мне известно, любой документ можно распечатать. то есть по идее они все уже готовы. да и потом, документ документу рознь. что за формат? doc? xls? pdf? т.к. в зависимости от формата файла, возможно, будет необходимо использовать различные инструменты печати.
2. что за окно предпросмотра? как отдельное приложение, опять же по моей памяти, такого нет. есть таковые как часть другого приложения, типа word, excel и иже с ними.
 
Автор
P

PS_

Новичок
Сообщения
6
Репутация
0
Понял, что тему не там создал, перенесите. Заранее спс.

Делал кое что на AutoIT. Щас стал вопрос формировать и печатать документ-бланк. и так сказать в легком ступоре как это реализовать. В принципе пред просмотр это просто хотелка (не объязательная). Самое главное сформировать и отправить на печать бланк, и чтоб он был на листе А4. Можно было бы реализовать и через OLE (word), но вдруг на компьютере не будет установлен word. И тогда печать не сработает, чего бы не хотелось.

думаю надо генерить картинку и её печатать. BMP любой комп понимает.

что посоветуете?
 

axlwor

Скриптер
Сообщения
657
Репутация
147
если не сложные документы - html подойдет, но печать html головняк
а с вордом - или пишешь каждый раз в ворде весь документ (долго и нудно), или делаешь шаблончик и меняешь нужные данные
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Как идея - создать GUI, в котором поля расположены в определенном порядке.
1. пользователь заполняет нужные поля
2. жмет "печать"
3. все поля превращаются в "Label", чтобы при печати не было видно рамок
4. делаем скриншот окна без рамки
5. отправляем на печать
Набросок по первым 4-м пунктам прилагаю:
Код:
#include <GUIConstantsEx.au3>
#Include <ScreenCapture.au3>
$iWidth = 480
$iHeigth = 640
$hGUI = GUICreate('Blank', $iWidth, $iHeigth)
GUISetBkColor('0xFFFFFF')
Dim $aInputs[4]
$aInputs[0] = GUICtrlCreateInput('ОАО Рога и Копыта', 40, 16, 300, 21)
$aInputs[1] = GUICtrlCreateInput('пункт 1', 16, 96, 200, 21)
$aInputs[2] = GUICtrlCreateInput('пункт 2', 16, 152, 200, 21)
$aInputs[3] = GUICtrlCreateInput('пункт 3', 16, 208, 200, 21)
$hButton = GUICtrlCreateButton('Печать', 16, 250, 200, 50)
GUISetState(@SW_SHOW)
$aPos = WinGetPos($hGUI)
$iBorder = ($aPos[2] - $iWidth)/2
$iTitle = $aPos[3] - $iHeigth - $iBorder
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $hButton
			For $i = 0 To UBound($aInputs) - 1
				$aPos = ControlGetPos('Blank', '', $aInputs[$i])
				GUICtrlCreateLabel(GUICtrlRead($aInputs[$i]), $aPos[0], $aPos[1], $aPos[2], $aPos[3])
			Next
			For $i = 0 To UBound($aInputs) - 1
				GUICtrlDelete($aInputs[$i])
			Next
			GUICtrlDelete($hButton)
			$aPos = WinGetPos($hGUI)
			ConsoleWrite($aPos[0] & @CRLF)
			ConsoleWrite($aPos[1] & @CRLF)
			ConsoleWrite($aPos[2] & @CRLF)
			ConsoleWrite($aPos[3] & @CRLF)
			_ScreenCapture_Capture(@ScriptDir & '\print.jpeg', $aPos[0] + $iBorder, $aPos[1] + $iTitle, $aPos[0] + $aPos[2] - $iBorder, $aPos[1] + $aPos[3] - $iBorder, False)
	EndSwitch
WEnd

Вторая идея - задействовать RichText, правда для его работы нужна махонькая библиотека, зато и возможности огромные:
Создаем в WordPade или в каком другом редакторе заготовку документа и сохраняем в файл .rtf
Содержимое файла пихаем в скрипт, вставляем в нужные позиции наш текст (если Windows чисто английский, то текст придется вставлять в UTF-кодировке тут есть заготовка как переводить русские буквы в rtf-код).
Код:
$oRP = ObjCreate('RICHTEXT.RichtextCtrl.1')
If Not IsObj($oRP) Then
	FileInstall('c:\richtx32.ocx', @SystemDir & '\richtx32.ocx', 1)
	RunWait(@SystemDir & '\regsvr32 /s richtx32.ocx')
	RegWrite('HKEY_CLASSES_ROOT\Licenses', '', 'REG_SZ', 'Licensing: Copying the keys may be a violation of established copyrights.')
	RegWrite('HKEY_CLASSES_ROOT\Licenses\DB4C0D00-400B-101B-A3C9-08002B2F49FB', '', 'REG_SZ', 'mgkgtgnnmnmninigthkgogggvmkhinjggnvm')
	RegWrite('HKEY_CLASSES_ROOT\Licenses\7BC20EDC-4A42-101B-A3C9-08002B2F49FB', '', 'REG_SZ', 'gifblihbhiiihbciocfbkifbqcfcdiebbiqh')
	Sleep(250)
	$oRP = ObjCreate('RICHTEXT.RichtextCtrl.1')
EndIf
$oCommDlg = ObjCreate('mscomdlg.commondialog')
$sFirm = 'ОАО Рога и Копыта'
$sRTF = "{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fswiss\fcharset0 Arial;}{\f1\fswiss\fcharset204{\*\fname Arial;}Arial CYR;}}" & _
"{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\lang1033\f0\fs20\tab\tab\tab\lang1049\f1\fs48" & $sFirm & "\par" & _
"\par" & _
"\fs24\'cf\'ee\'eb\'e5 \'ed\'ee\'ec\'e5\'f0 1\par" & _
"\ul\'cf\'ee\'eb\'e5 \'ed\'ee\'ec\'e5\'f0 2\par" & _
"\'cf\'ee\'eb\'e5 \'ed\'ee\'ec\'e5\'f03\ulnone\fs20\par" & _
"}"
$oRP.TextRTF = $sRTF
$oCommDlg.Flags = 265
$oCommDlg.ShowPrinter
$oRP.SelPrint($oCommDlg.hdc)
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Вам нужно это: FASTREPORT® for COM/ActiveX
Чудная вещь, куча возможностей.
Автоит с COM объектами работать умеет, так что дерзайте.

В кратце: он имеет собственный редактор бланков и свой формат. Вашему скрипту остаётся только подсунуть данные в нужные переменные и можно печатать.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
ynbIpb [?]

httр://www.fast-report.com
FASTREPORT® for COM/ActiveX скачать

Здесь можно бесплатно скачать пробную версию FastReport® for COM/ActiveX.
Ограничения:

можно распечатать не более 5 страниц отчета
на странице печатается надпись "FastReport - unregistered".


Добавлено:
Сообщение автоматически объединено:

FastReport for COM/ActiveX Single License - 6770р.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
axlwor [?]
если не сложные документы - html подойдет, но печать html головняк
Вот сделал, в принципе ничего сложного:
Код:
#include <IE.au3>
$sFirm = 'ОАО Рога и Копыта'
$sP1 = 'правый пункт'
$sP2 = 'левый пункт'
$sHTML = '<html><head></head><body>' & _
'<div style="text-align=center;font-size=20pt">' & $sFirm & '</div>' & _
'<div style="text-align=left;color=red;font-size=10pt">' & $sP1 & '</div>' & _
'<div style="text-align=right;color=green;font-size=10pt">' & $sP2 & '</div>' & _
'</body></html>'
$oIE = _IECreate()
_IEBodyWriteHTML($oIE, $sHTML)
_IEAction($oIE, 'print') ; печать с выбором принтера
;~ $oIE.execWB(6,2) ; печать на принтере "по умолчанию"
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Garrett, ну это уже его проблемы. Искать крякнутый компонент или купить. Но он того стоит.
з.ы.
А пока можно потренироваться и на демо версии: http://www.fast-report.com/pbc_download/fr_studio_trial.msi
(Оказывается в FastReport Studio тоже есть поддержка COM и стоит дешевле 2170р)

Устанавливаем FastReport Studio, копируем из папки C:\Program Files\FastReports\FastReport Studio\Bin 2 файла: fastreport3.dll и Russian.frc ну и какойнибудь пример отчёта *.fr3. Всё это кидаем в папку с нашим скриптом. Студию можно удалять (если не надо рисовать отчёты).
Код:
$sFasrReport_dll = @SystemDir & "\fastreport3.dll" ; путь к установленной библиотеке
If FileExists ($sFasrReport_dll) = 0 Then ; если файл не существует
	FileCopy (@ScriptDir & "\fastreport3.dll", $sFasrReport_dll, 1) ; копируем в системную папку
	RunWait(@SystemDir & '\regsvr32.exe /s ' & $sFasrReport_dll) ; регистрируем компонент в системе
EndIf

$sReportFile = @ScriptDir & "\my.fr3"
$sLanguage = @ScriptDir & "\Russian.frc"
$fr = ObjCreate("FastReport.TfrxReport")
$res = $fr.Resources
$res.LoadLanguageResourcesFromFile($sLanguage)
$fr.LoadReportFromFile($sReportFile)

$fr.ShowReport

While 1
	sleep (100)
WEnd
 
Автор
P

PS_

Новичок
Сообщения
6
Репутация
0
Всем откликнувшимся спасибо.

FastReport отпадает т.к. платный, кряки и патчи это не приемлемо.

формировать в IE тоже не гуд. т.к. печатать надо мелкие бланки с линиями и рамками, мелким текстом в рамках (на A4 надо печатать 3 бланка). а в IE с этим проблема.

наверно попробую что советует: Redline
 

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Кстати, а может кто подскажет бесплатный ocx, который эмулирует лист excel - чтобы формулы можно было вписывать и ячейки разным цветом раскрашивать.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Vlasssov
Есть Office 2003 Office Web Components

Office Web Components (OWC) are a group of Object Linking and Embedding (OLE) components (allows embedding and linking to documents) implemented as ActiveX control in Microsoft Office 2000, Office XP and Office 2003. These ActiveX Controls can be plugged into web pages, Visual Basic and Visual Basic for Applications (VBA) forms, Windows Forms or programmed in-memory. The OWC can be used by any COM-compliant Component Object Model programming language. Applications like Microsoft Excel, Microsoft Access and Microsoft FrontPage allowed creating interactive web pages using Office Web Components.

The following components are included:
Spreadsheet
Chartspace
Pivot table
Data source component

The Office Web Components have been discontinued in Office 2007, and are not included, except as a part of Office Project Server 2007.[7] However, they will still be available for download from Microsoft's website. Microsoft has not yet offered a complete replacement for the Office Web Components. However, programmers can use a combination of third party products, Excel Services or Visual Studio Tools for Office to provide similar functionality.

The Pivot Table web component does not function on Windows 7.[8]
 

vcomp71

Осваивающий
Сообщения
431
Репутация
25
Отлично! А помощь по ним есть где-нибудь?
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Vlasssov
В пакете установки компонента есть справка очень понятная, и еще есть примеры на офф форуме
 

Genics

Новичок
Сообщения
39
Репутация
0
Здравствуйте! Вопрос по этой теме.

Для формирования отчетов хочу применить объект DataReport VB 6.0. имеющее инструментальное средство Data Report Designer (Конструктор отчетов). Читал справку вроде все просто, удобно и понятно при работе с источниками и файлами которые там упоминались.
Но мне нужно подключиться к *.db файлу базы данных SQLite. Перепробовал методом тыка разные варианты подключения в конструкторе Data Environment (Окружение данных) результата не получил.
Может он вообще не работает с db файлами SQLite? или я не так подключаю.
 

Genics

Новичок
Сообщения
39
Репутация
0
madmasles
ССЫЛКА ТУТ

Viktor1703
Спасибо конечно, но то что можно работать с бд файлами Access это я понял.
Но мне нужно, чтобы экзешник созданный на Visual Basice (в котором сидит шаблон документа) подключался при запуске скриптом AutoIta к файлу базы данных SQLite *.db. Находил в ней свою таблицу перегонял инфу в шаблон и выводил окно предпросмотра.

Я не знаю какого поставщика данных выбрать и как настроить подключение.
 
Верх