Печать на принтеры в PHP

Я пытаюсь настроить приложение CLI PHP для печати набора веб-страниц на принтер по умолчанию или указанный принтер. Я нахожусь на машине с Windows 7 с PHP 5.2.11, запущенной в CLI. Чтобы проверить функциональность печати, я загрузил PHP_printer.dll, и я печатаю в Onenote, параметр print to file, используя точное имя принтера, указанное в PRINTER_ENUM_LOCAL.
Обновление : вот последний код:

$handle = printer_open("Send To OneNote 2010"); printer_start_doc($handle, "My Document"); printer_start_page($handle); $filename='index.html'; $fhandle=fopen($filename, 'r'); $contents = fread($fhandle, filesize($filename)); fclose($fhandle); printer_set_option($handle, PRINTER_MODE, "RAW"); printer_write($handle,$contents); printer_end_page($handle); printer_end_doc($handle); printer_close($handle); 

Я получил этот код для печати пустой страницы на правильном принтере, но я не могу напечатать строки, которые я передаю, на printer_write. Я подтвердил, что $contents правильно заполнено содержимым моего тестового html-файла. Независимо от того, что я предоставляю в качестве второго аргумента (строка для печати), я получаю пустую страницу. Есть ли что-то, что мне не хватает, по крайней мере, разрешить мне печатать какой-то текст на странице?

Альтернативно, есть ли лучший способ сделать это (используя файлы PHP / javascript)? То, что я пытаюсь сделать, это печатать веб-страницы по мере их появления (включая CSS) через приложение CLI, веб-сайт написан на PHP, и я стараюсь свести к минимуму сложность. Если есть лучший способ их распечатать (преобразование в PDF и печать – это вариант, видимо), я открыт, но это звучало так, что это был самый простой / де-фактовый метод в PHP.

Solutions Collecting From Web of "Печать на принтеры в PHP"

Я долгое время сталкивался с printer.dll и уставал от этого.

не уверен, что его много используют, но я приобрел это приложение http://www.coolutils.com/TotalPDFPrinter

и он позволяет мне печатать pdf-файлы из строки cmd из php, которая хорошо работает для меня, но у нее есть всплывающий экран, который вы можете избавиться только от покупки версии сервера (которая вам понадобится, если ваш Apache запущен как услуга). очевидно, что версия без popup намного дороже.

одна вещь, с которой я боролся, получал список доступных принтеров, поэтому я написал это маленькое приложение на C #, которое выплескивает список принтеров в виде обычного текста, а затем использует php для вызова этого и помещает их в раскрывающийся список на моем веб-сайте формы.

 using System; using System.Collections.Generic; using System.Text; using System.Drawing.Printing; namespace printerlist { class Program { static void Main(string[] args) { foreach (String printer in PrinterSettings.InstalledPrinters) { Console.WriteLine(printer.ToString()); } } } } 

Насколько я знаю, вы должны использовать php_printer.dll . Проверьте здесь . Затем добавьте расширение php_printer.dll к вашему php.ini. Если вы это сделали, то …

Если вы правильно определили ip / route в том месте, где установлен принтер, он должен сделать трюк. Что-то вроде printer_open('\\\\xx.x.xx.xx\\_printername_'); , (Локальным принтерам не нужно будет добавлять сервер вручную, afaik)

Чтобы проверить наличие принтеров, попробуйте что-то вроде printer_list(PRINTER_ENUM_LOCAL | PRINTER_ENUM_SHARED) . Есть что-то вроде директивы printer.default_printer на php.ini, если я хорошо помню. Протестировано это довольно давно на установке php 5.x. Удачи.