Что нового

[Автоматизация] Печать содержимого переменной (строки)

Core2Duo76

Новичок
Сообщения
58
Репутация
1
Задача такая - есть переменная $log, в ней содержится текст. Требуется вывести на печать/преобразовать в какой-то печатаемый файл (открывающийся штатными инструментами win). Вроде бы просто, но есть одна загвоздка - в любом случае пользователь не должен иметь ни малейшего шанса изменить содержимое строки (числа, ответы), то есть использовать промежуточный файл уже не вариант.
Оператор _filePrint() у меня не работает, ни на одном компе причем. Допустимо решить задачу с помощью сторонних консольных утилит, потому что придется работать со множеством компов,а ставить виртуальный принтер (например) уже тоже не вариант. Так что задача уже на фантазию и знание инфы по разным софтам :smile:
Всем заранее спасибо!
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
У меня такой вариант. :smile:
Пользователь сам отправляет на печать.
Код:
$Text = "мой текст в Блокноте нельзя редактировать :)"&@CRLF&"только печать на принтер"
Run("notepad.exe")
WinWait("[Class:Notepad]")
ControlDisable("[Class:Notepad]", "", "[CLASS:Edit; INSTANCE:1]")
ControlSetText("[Class:Notepad]", "", "[CLASS:Edit; INSTANCE:1]", $Text)
 
Автор
C

Core2Duo76

Новичок
Сообщения
58
Репутация
1
Изящно!!!!! супер ваще. А давай теперь попробуем сделать так, чтобы пользователь не видел этого всего. просто нажал кнопку и пошло печатать.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Уже чуть ближе :laugh:
Код:
$Text = "мой текст в Блокноте нельзя редактировать :)"&@CRLF&"только печать на принтер"
Run("notepad.exe", "", @SW_HIDE)
$hwnd = WinWait("[Class:Notepad]")
ControlDisable($hwnd, "", "[CLASS:Edit; INSTANCE:1]")
ControlSetText($hwnd, "", "[CLASS:Edit; INSTANCE:1]", $Text)
WinMenuSelectItem($hwnd, "", "&Файл", "&Печать")
 
Автор
C

Core2Duo76

Новичок
Сообщения
58
Репутация
1
супер! а теперь избавимся от окна выбора принтера ? :smile: принтер по умолчанию
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Есть библиотека функций работы с принтером printMGv2.au3

http://www.autoitscript.com/forum/topic/51054-printing-using-udf-and-a-dll/page__hl__printmg
dll положить рядом со скриптом.

Такой вариант:

Код:
#include <printMGv2.au3>

Global $mmssgg

$var="строка строка строка"

$hp = _PrintDllStart($mmssgg)
if $hp = 0 then
	consolewrite("Error from dllstart = " & $mmssgg & @CRLF)
	Exit
endif

_PrintSelectPrinter($hp,Default)
_PrintSetFont($hp,'Arial',18,0,'bold')

_PrintPageOrientation($hp,0)
_PrintSetDocTitle($hp,"1")

_PrintStartPrint($hp)


_PrintText($hp,$var)


_PrintEndPrint($hp)
_PrintNewPage($hp)
_printDllClose($hp)


Печатает на принтер по умолчанию, но можно сделать и на конкретный принтер + настройки шрифта, положения текста и т.д.
 
Автор
C

Core2Duo76

Новичок
Сообщения
58
Репутация
1
Смотрел UDF перед тем как стал писать сюда - при обращении к DLL скрипт зависает, компилированный тож падает. Ну б-г с ним, пусть будет просто нередактируемый блокнот, это уже помеха для 99% пользователей моей софтинки. Спасибо!


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

тоже отличный вариант, с тегами проблем не будет ваще! спасибо! скорее всего через IE делать буду.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Да, вот так вроде работает нормально:

Код:
#include <IE.au3> 
$var="строка строка строка"
$oIE = _IECreate ("",0,0)
$sHTML = "<h1>"&$var&"</h1>"
_IEBodyWriteHTML ($oIE, $sHTML)
_IEAction ($oIE, "printdefault")
Sleep(3000)
_IEQuit($oIE)
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
На oszone.net наткнулся на
Код:
NOTEPAD /P "имя файла"
Получилось нечто такое
Код:
#include <Process.au3>
$File = @ScriptDir&"\proba.txt"
$Text = "мой текст в Блокноте txt"&@CRLF&"только печать на принтер"
$FileOpen = FileOpen($File, 1)

If $FileOpen = -1 Then
    MsgBox(16, "Ошибка", "Ошибочная ошибка")
    Exit
EndIf

FileWrite($FileOpen, $Text)
FileClose($FileOpen)
_RunDos("notepad.exe /p" &$File)
FileDelete($File)

:laugh: :laugh: :laugh:
 
Верх