Как отправить текста на принтер с поддержкой PHP и Javascript?


Нужно печатать текст, который не обязательно является содержащихся в html-документе установлен принтер на стороне клиента, мне нужно открыть это окно чтоб выбрать принтеры и etc и отправки на печать.

// EDIT

В случае, если печать будет отправлено тебя принтер этикеток termicas zebra, которые использует язык EPL, логотип, не могу отправить html-документ для печати.

Author: tissei, 2014-02-11

4 answers

Не думаю, что это возможно, как вы хотите.

PHP это язык, который находится на сервере. Она никогда не разговор непосредственно с клиентом; только так она "сказать" что-то клиенту через интерфейс (обычно Javascript и Html). Таким образом, если принтер подключен к серверу PHP, не представляю, как можно что-то напечатать, используя PHP.

, так было бы иметь сервер, PHP установлен на клиентском компьютере, слушать URL ( например, /imprimir.php?nomeDoDocumento=(...)), и, таким образом, что этот URL-адрес был вызов, сам PHP назвал бы печати. Вы можете использовать это в качестве ссылки, если таковые. Обратите внимание, что в этом случае, вам даже не нужно использовать Javascript (но можно использовать, если вы хотите вызвать этот URL-адрес через Ajax, например).

Если вы не используете сервер PHP на стороне клиента (что весьма вероятно), вы не должны, как напечатать что-то, что находится за пределами документа. Но вы можете спрятать документ, который не отображается в браузер, только в печати. Для этого вы используете iframe спрятаны, например.

Теперь я собираюсь приспособить кусок этот ответ, SO international.

var iframe = document.createElement('iframe');
iframe.src = urlOfFile;
iframe.style.display = "none";

var iFrameLoaded = function() {
  iframe.contentWindow.print();
  iframe.parentNode.removeChild(iframe);
};

if (iframe.attachEvent) // Internet Explorer
  iframe.attachEvent('onload', iFrameLoaded);
else if (iframe.addEventListener) // Outros navegadores modernos
  iframe.addEventListener('load', iFrameLoaded, false);
else // Outros navegadores
  iframe.onload = iFrameLoaded;

document.body.appendChild(iframe);

Просто поместить код в событие кнопки или загрузки страницы, например.

UPDATE: За их редактирования на вопрос, я думаю, что ни одна из двух решений, предлагаемых для меня служить вам. Итак, я могу дать больше.

Я Не знаю этого языка EPL, ни принтеров Зебра. Но меня возникло любопытство: не существует какой-то драйвер или тренажер данного принтера, который будет способен генерировать изображения или PDF-файлы?

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

UPDATE 2: По-видимому, то, что вы хотите сделать, таким образом, на самом деле это невозможно.

, Но это не невозможно иначе. Вам нужно средство для общения с принтером. Javascript может даже не делать этого, но он может работать с файлами, и он может взаимодействовать с другими приложениями через AJAX.

Вот мои два цента: Создайте мини-автономного сервера для клиентов. Настольных приложений. Думаю, что это возможно с помощью PHP-GTK, хотя я никогда не использовал его на практике. Более новые версии PHP поставляются с мини-сервер разработки; хотя это и не рекомендуется использовать его в производство, должны быть достаточно, чтобы то, что вы хотите достичь.

Если мне позволено будет высказать свое мнение, думаю, вы бы отлично создание пакета на другой язык. Одним из вариантов было бы Node.js + ExpressJS + AppJS. С этими тремя вы можете создать пакет для клиента, и если вы хотите быть более перфекционист, может даже создать ее установки. Другим вариантом было бы Ruby + Sinatra + Tar2RubyScript + RubyScript2Exe. Вы выбираете свой язык и платформа, только я привел примеры. Вы знаете своих клиентов, а поэтому должны знать его предпочтения.

Когда у вас Есть небольшой отдельный сервер, вы можете сделать запросы к нему через AJAX. Я не буду углубляться в этом здесь вы можете задать другой вопрос о том, как использовать AJAX или эти мини-серверов.

Имейте в виду, что сделать это будет не так легко. Но это, как я полагаю, что вы можете достичь.

 5
Author: André Leria, 2017-05-23 12:37:23

Для печати текущей страницы, чье CSS не expclicitamente скажите, что некоторые части не должны быть напечатаны, используя javascript print. Документации на MDN print.

window.print();

Контролировать с помощью CSS, что на текущей странице должно отображаться, и то, что не должен, делайте следующим образом:

/* Tudo que estiver nesse código, será considerado apenas
 quando um documento HTML for exibido pra impressão */
@media print {

 /* ocultar */
 .imprimir-esconde {
   display: none;
  }
  /* Lembre-se que o que por para exibir aqui, por padrão 
    deveria ser ocultado caso você não queira que o texto 
    seja exibido por padrão */
  .imprimir-exibe {
   display: block;
  }
}

, Как часть "не печатать то, что уже видно", у вас есть два варианта.

  1. текущей страницы, есть ссылка на страницу, которая имеет содержание, чтобы быть печатные и neça иметь print.
  2. Иметь содержание impressõ в текущем, но CSS спрятать его, пока вы используйте команду "печать".

Печать без использования Драйверов, поставляемых печати

Javascript также позволяет снизить уровень и сделать общение с WebSockets и прямой доступ к принтеру, если он доступен через IP и порт. Это не тривиальный вопрос, но прямой доступ протокол сети не является чем-то тривиальным, любой формы и вопрос, что сделал, если не использовать драйверы стандарты, установленные на компьютере клиента, является сложным по своей природе.

В MDN есть введение как написать приложение, которое использует эту технологию https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_client_applications

 3
Author: Emerson Rocha, 2014-02-11 12:11:45

Как уже упоминалось, не может использовать Javascript, чтобы отправить команды на принтер, поэтому необходим язык, с доступом на более низкий уровень операционной системы для запуска связь непосредственно с принтера.

В Этом случае то, что мне пришло на ум-это решение, которое некоторые компании используют: - Java-Апплетов. Я не очень люблю апплеты, но это, кажется, единственный способ решения проблем, как это, кроме создания отдельных компонентов для каждого браузера.

Я Сделал небольшую поиск в Google и первый результат был проектом с открытым кодом под названием jzebra, предлагает сделать именно то, что вам нужно: связь с лазерных принтеров и postscript, а также быть cross browser. Тогда не нужно будет тратить много времени на изучение Java, просто нужно изучить этот или другой инструмент.

 2
Author: utluiz, 2014-02-11 12:33:28

Я иду по той же проблемой, PHP и прямой печати на стороне клиента. В моем случае я решил с помощью PHP-приложения рабочего Стола, веб-браузер (chromium), скомпилированный для запуска мини-сервер php на стороне клиента, это мне удалось сделать печать без проблем и создает TXT-файл, и отправляет файл на принтер команды системы.

, Если интересно я тебе шаг, некоторые ссылки, которые у меня сохранены на виртуальной машине.

 1
Author: Stefânio Souza, 2016-01-14 12:59:00