Веб-печать

Готовые скрипты, модули расширений, динамические библиотеки и вспомогательные утилиты.
Аватара пользователя
Владимир
Администратор
Сообщения: 609
Зарегистрирован: 10 фев 2018, 18:27
Откуда: Белгород
Контактная информация:

Веб-печать

Сообщение Владимир » 05 сен 2019, 09:52

Действие кнопки: "Веб-печать". Выводит указанный контент в браузере посредством встроенного в программе http-сервера.

Изображение

Опции и параметры:

Контент для вывода - текстовое содержимое для вывода в браузер. По-умолчанию любой тип передаваемого содержимого отправляется браузеру как html (кодировка utf-8). В выражении могут участвовать поля формы, поля и вычисляемые поля запроса, переменные (getvar), функции, возвращающие текст или преобразованные к типу "текст".

Порт - числовое значение в диапазоне 80-65535 (по-умолчанию 8800). При конфликте выбранного порта с существующим открытым портов в системе - выдается соответствующее сообщение и порт необходимо сменить.

Открыть в программе/браузере - принудительно устанавливает указанное приложение для открытия страницы. По-умолчанию пустое и открывает контент через сопоставленный с интернет-страницами браузер в системе.
Можно указать коротко: chrome, opera, firefox, iexplore

Примечание:

- Способ вывода предпочтителен в случаях, когда нежелательно оставлять следы и мусор в файловой системе (браузеру передается поток напрямую). Позволяет использовать теги и код JavaScript, которые при печати не пропускает стандартный html-шаблон.
- После отдачи контента браузеру сервер останавливается и нажатие кнопки "обновить" в браузере не даст никакого результата. Для повторного открытия необходимо еще раз нажать кнопку с действием.
- Вывод картинок не поддерживается.

Код расширенияПоказать

Код: Выделить всё

{@module
author=Develop-Soft [ https://forum.develop-soft.ru ]
version=1.0
description=Веб-печать
Действия:
1. Веб-печать.

Изменения:
v 1 от 05.09.2019 - выход первой версии
...
@}

{@action
Id=D66D5E72-A4E0-41D3-9ED5-9876C6E65AB9
Target=button
OrigName=WebPrint
Name=Веб-печать
Group=Шаблоны
UI=
<ui>
<expr name="expr" caption="Контент для вывода:"/>
<number name="port" caption="Порт (по-умолчанию: 8800)" defaultvalue=8800/>
<file name="prog" caption="Открыть в программе/браузере:"/>
</ui>
Description=
<b>Действие кнопки: "Веб-печать". Выводит указанный контент в браузере
посредством встроенного в программе http-сервера.</b><br><br>
<b>Опции и параметры:</b><br><br>
<b>Контент для вывода</b> - текстовое содержимое для вывода в браузер.
По-умолчанию любой тип передаваемого содержимого отправляется браузеру как html
(кодировка utf-8). В выражении могут участвовать поля формы, поля и вычисляемые
поля запроса, переменные (getvar), функции, возвращающие текст или
преобразованные к типу "текст". <br> <br>
<b>Порт</b> - числовое значение в диапазоне 80-65535 (по-умолчанию 8800). При
конфликте выбранного порта с существующим открытым портов в системе - выдается
соответствующее сообщение и порт необходимо сменить. <br><br>
<b>Открыть в программе/браузере</b> - принудительно устанавливает указанное
приложение для открытия страницы. По-умолчанию пустое и открывает контент через
сопоставленный с интернет-страницами браузер в системе.<br>
<i>Можно указать коротко: chrome, opera, firefox, iexplore</i><br><br>
<i><b>Примечание:</b><br><br>
- Способ вывода предпочтителен в случаях, когда нежелательно оставлять следы и
мусор в файловой системе (браузеру передается поток напрямую).
Позволяет использовать теги и код JavaScript, которые при печати не
пропускает стандартный html-шаблон.<br>
- После отдачи контента браузеру сервер останавливается и
нажатие кнопки "обновить" в браузере не даст никакого результата.
Для повторного открытия необходимо еще раз нажать кнопку с действием.<br>
- Вывод картинок не поддерживается.</i>
@}

var
  Server: THttpServer;
  gContent:string;
  T:TTimer;
  gPort:Word;

procedure KillServer(Sender:TObject);
begin
  T.Enabled:=false;
  Server.Free;
  Server:=nil;
end;

procedure Stop;
begin
  if T=nil then
  begin
    T:=TTimer.Create(nil);
    T.Interval:=1;
    T.OnTimer := @KillServer;
  end;
  T.Enabled := true;
end;

procedure HandleRequest(Sender: TObject; var ARequest: TFPHttpConnectionRequest;
var AResponse: TFPHttpConnectionResponse);
begin
  AResponse.ContentType := 'text/html; charset="utf-8"';
  AResponse.Content := gContent;
  AResponse.SendContent;
  Stop;
  gContent:='';
end;


procedure OnSrvError(Sender: TObject; const ErrorMsg: String);
begin
  debug(ErrorMsg);
  Stop;
end;

procedure WebPrint(Content:string; Port:integer; Prog:string);
var ExResult:boolean;
begin
  gPort:=Port;
  ExResult:=false;
  try
  if Server = nil then
  begin
    Server := THttpServer.Create;
    Server.Port:=Port;
    Server.OnRequest := @HandleRequest;
    Server.OnError := @OnSrvError;
    Server.Start;
  end;
  gContent := VarToStr(EvalExpr(Content,Self));
  if trim(Prog)='' then
  ExResult := ShellExecute('','http://localhost:'+IntToStr(Port),'','',10) else
  ExResult := ShellExecute('',Prog,'http://localhost:'+IntToStr(Port),'',10);
  finally
  if not ExResult then
  begin
    if Server <> nil then
    begin
      Server.Free;
      Server:=nil;
    end;
    MsgBox(' ','Ошибка запуска:'+#13#10+
    Trim(Prog+' http://localhost:'+IntToStr(Port)))
  end;
end;
end;

Скачать:
Веб-печать v1.epas
(4.8 КБ) 78 скачиваний

Демо


Поддержка проекта

Теги:

Быстрый ответ

Смайлики
:-) ;-) :-( :-[ :-D :-P O_O :bye: :good: :help: :lol: :ok: :pardon: :sorry: :yes:
Ещё смайлики…
Загрузить изображение