Печать на принтерах в PHP - PullRequest
       15

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

2 голосов
/ 21 октября 2011

Я пытаюсь настроить приложение CLI PHP для печати набора веб-страниц на заданном по умолчанию или указанном принтере. Я нахожусь на машине Windows 7 с PHP 5.2.11, работающим в CLI. Чтобы проверить функциональность печати, я загрузил PHP_printer.dll и печатаю в Onenote, опцию печати в файл, используя точное имя принтера, указанное в 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.

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

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

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

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

0 голосов
/ 21 октября 2011

я баловался с printer.dll целую вечность и заболел им.

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

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

Одна вещь, с которой я боролась, это получение списка доступных принтеров, поэтому я написал это небольшое приложение на 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());
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...