Как создать файл prn excel

Обновлено: 02.07.2024

Возможность создания Excel-документов в общих чертах уже была описана на Хабре, но полной информации из этих статей мне получить не удалось. Пришлось заняться собственными изысканиями, результатами которых я хотел бы с Вами поделиться. Данная статья будет полезна и новичкам, и профессионалам, столкнувшимся с проблемой динамического формирования Excel-документов.
Это всего лишь первая часть серии статей, которыми хотелось бы поделиться с общественностью. В последующих статьях будут более подробно рассмотрены некоторые способы и нюансы выгрузки xls-файлов.

Введение

Не хочу распространяться на тему того, зачем необходима выгрузка в Excel. Мне кажется, что это вполне очевидно: в формате MS Excel достаточно удобно предоставлять пользователю загружаемые данные. Это могут быть прайс-листы, каталоги или любая подобная служебная, статистическая и иного рода информация.
Сразу хочу оговориться, что в статье рассматривается работа с документами через COM-объекты. Данный метод таботает только на Windows-платформах. Другими словами, если Вы предпочитаете *nix-хостинг, этот метод Вам не подходит.

Синтаксис

Создание COM-объекта осуществляется следующим образом:
$my_com_object = new COM($object_class);
, где
$my_com_object — новый COM-объект;
$object_class — id-класс требуемого объекта.

Для создания Excel-документов переменной $object_class необходимо задать значение «Excel.Application» либо «Excel.sheet».
$xls = new COM("Excel.Application");

После создания нового COM-объекта, можно обращаться к его свойствам и методам:
<?php
$xls = new COM("Excel.Application"); // Создание объекта
$xls->Application->Visible = 1; // Делаем объект видимым
$xls->Workbooks->Add(); // Добавляем новую книгу (создаём документ)

$rangeValue = $xls->Range("A1");
$rangeValue->Value = "Декорация текста: жирный, подчеркнутый, наклонный";
$rangeValue = $xls->Range("A2");
$rangeValue->Value = "Размер шрифта: 14";
$rangeValue = $xls->Range("A3");
$rangeValue->Value = "Тип шрифта: Arial";

$range=$xls->Range("A1:J10"); // Указываем область ячеек
$range->Select(); // Выделяем эту область
$fontRange=$xls->Selection(); // Присваиваем переменной выделенную область

// Отформатируем текст в выделенной области
$fontRange->Font->Bold = true; // Жирный
$fontRange->Font->Italic = true; // Курсив
$fontRange->Font->Underline = true; // Подчеркнутый
$fontRange->Font->Name = "Arial"; // Тип шрифта
$fontRange->Font->Size = 14; // Размер шрифта
?>

Открытие, запись, закрытие документа
Общие возможности
  • создать новый документ
  • открыть ранее созданный документ
  • сохранить открытый документ
  • закрыть документ
Создание нового документа
  1. создаем «связь» между PHP и Excel (создается дескриптор, как при работе с файлами)
  2. указываем, будет ли визуально открыта программа или нет
  3. указываем программе через дескриптор, что нужно открыть новый документ
Открытие ранее созданного документа

Открытие документа можно сделать при помощи метода Open() объекта Workbooks().
В передаваемом методу Open() параметре нужно указать имя открываемого файла:
<?php
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Open("C:\my_doc.xls"); // Открываем ранее сохраненный документ
?>
Внимание! Если указать не полный, а относительный путь, то поиск открываемого файла будет происходить не на сервере, а на компьютере пользователя. По умолчанию это папка «Мои документы».

Сохранение открытого документа

Сохранение открытого документа производится при помощи метода SaveAs() объекта Workbooks():
<?php
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Add();
$range=$xls->Range("A1"); // Выбираем ячейку A1
$range->Value = "Проба записи"; // Вставляем значение

// Сохраняем документ
$xls->Workbooks[1]->SaveAs("my_doc.xls");

$xls->Quit(); //Закрываем приложение
$xls->Release(); //Высвобождаем объекты
$xls = Null;
$range = Null;
?>
Хочу отдельно отметить, что высвобождение объектов — это очень хорошо и правильно. Да сгорят в священном очищающем пламени костров Инквизиции те, кто считает иначе.

Закрытие документа

Закрытие документа производится методом Quit().
<?php
$xls = new COM("Excel.Application"); // Создаем новый COM-объект
$xls->Application->Visible = 1; // Делаем его видимым
$xls->Workbooks->Add();
$range=$xls->Range("A1"); // Выбираем ячейку A1
$range->Value = "Что-то записываем"; // Вставляем значение в ячейку

// Сохраняем документ
$xls->Workbooks[1]->SaveAs("my_doc.xls");

$xls->Quit(); // Закрываем приложение
$xls->Release(); // Высвобождаем объекты
$xls = Null;
$range = Null;
?>

Чем открыть PRN

На сегодняшний день файлы PRN можно встретить в различных операционных системах, выполняющих несколько задач в зависимости от программы, в которой они изначально были созданы. В рамках настоящей инструкции мы рассмотрим обе существующие разновидности данного формата и расскажем о подходящем для открытия софте.

Открытие файлов PRN

Существует немало программ, способных обрабатывать файлы в формате PRN в зависимости от его разновидности. Мы же уделим внимание только двум из них, наиболее удобным и доступным любому пользователю Windows.

Способ 1: Microsoft Excel

Такой вариант формата PRN может быть создан и открыт в Microsoft Excel, входящем в пакет офисных программ этой компании. Содержимое подобных файлов представляет собой таблицу, экспортированную в текстовый формат с целью передачи какой-либо информации. Узнать больше о софте вы можете из специальной статьи.

Примечание: Вместо Excel можно прибегнуть к любому аналогичному редактору, однако содержимое файла при этом может быть сильно искажено.

  1. Произведите скачивание и установку указанной программы к себе на компьютер. После запуска кликните по ссылке «Открыть другие книги» и, оказавшись на странице «Открыть», щелкните по значку «Обзор».

Переход к выбору файла PRN на ПК в Excel

Выбор формата PRN при открытии файла на ПК в Excel

Открытие файла PRN в Excel

Первый этап обработки PRN файла в Excel

Завершение открытия файла PRN в Excel

Успешно открытый файл PRN в Excel

Открытие файла печати PRN в Excel

Пример неправильного отображения файла PRN в Excel

В ситуации с данным типом PRN-формата количество альтернативных вариантов софта сильно ограничено. Поэтому лучшим решением, так или иначе, является Microsoft Excel. К тому же, открыть такой файл можно не только в программе, но и через соответствующий онлайн-сервис.

Способ 2: Adobe Acrobat

Программное обеспечение Adobe Acrobat поддерживает огромное количество форматов, в том числе и PRN-файлы. Однако в отличие от первого способа, здесь в них содержатся различные установки для конкретных моделей принтера. Создать такой файл возможно во время печати документа в PDF-формат.

    Скачайте и установите программное обеспечение Adobe Acrobat. Можно прибегнуть как к Acrobat Reader, так и к Acrobat Pro DC в зависимости от ваших целей.

Процесс установки Adobe Acrobat Reader DC

Переход к открытию файлов PRN в Adobe Acrobat

Выбор типа файлов при открытии PRN в Adobe Acrobat

Завершение открытия файла PRN в Adobe Acrobat

Успешно открытый файл PRN в Adobe Acrobat

Возможность сохранения PRN в Adobe Acrobat

Рассмотренный нами Adobe Acrobat является лучшим программным обеспечением для обработки PRN-файлов, так как одновременно позволяет просматривать содержимое, преобразовывать в PDF-формат или печатать. Более того, если вам не требуется редактирование файла, программа является полностью бесплатной. В противном случае у PRO-версии имеется 7-дневный пробный период, как и у большинства других продуктов компании.

Заключение

Нами был рассмотрен процесс открытия PRN-файлов только в распространенных программах, в то время как существуют и некоторые другие решения. В том числе это относится к пользователям операционных системам помимо Windows. Если у вас возникают вопросы по части открытия файлов на таких платформах или вы просто что-то не поняли, пишите об этом нам в комментариях.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

К написанию данного топика меня подтолкнула одна заметка о генерации xls в PHP.
Способ, представленный в той заметке действительно очень прост, но не всегда может быть удобен.
Есть множество других способов передать табличные данные из PHP в Excel, я опишу тот, который показался мне наиболее простым и функциональным. Нужно особенно отметить, что что я не говорю о генерации xls файла, а лишь предлагаю пользователю открыть полученные данные при помощи Excel так, что пользователи не искушённые в программировании не заметят подлога.

Итак, первое что необходимо сделать — разместить на нашей страничке ссылку на скрипт генерирующий следующие заголовки:
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: application/x-msexcel");
header("Content-Disposition: attachment; filename=\"" . iconv('UTF-8', 'CP1251', $object->getFileName()) . "\";");
header("Content-Transfer-Encoding:­ binary");
header("Content-Length: " . $object->getFileSize());

$object — сферический объект в вакууме, который каждый читатель реализует так, как ему больше нравится. Назначение геттеров getFileName() и getFileSize() понятно из названий. Здесь стоит выделить один неочевидный нюанс (спасибо savostin за то что напомнил об этом) — getFileName() конечно может возвращать любое имя файла, но если вы хотите что бы браузер предложил открыть полученный контент в Excel, то расширение файла должно быть xls.
Ничего нового я пока не рассказал, все это придумано до меня, впрочем как и то что будет описано ниже.
Как верно было отмечено в комментариях к заметке о генерации xls в PHP, Excel гораздо быстрее работает с XML. Но самое главное преимущество, пожалуй, все же не в скорости, а в гораздо более широких возможностях. Углубляться в дебри я не стану, а лишь приведу простой пример, и ссылку на подробное описание всех тегов.

Итак, после того как заголовки сгенерированны, нам нужно отдать пользователю собственно данные. Я обычно заворачиваю генерацию таблицы в отдельный метод:
echo $object->getContent();

А таблицу генерирую при помощи Smarty:

Как видно из кода, в шаблон передается массив $data содержащий два массива — строку заголовка таблицы и собственно данные.
Стоит отметить что использовать шаблонизатор только для генерации XML несколько накладно, и получить XML можно множеством других способов. В моем конкретном случае генерация XML это лишь маленькая плюшка в большом проекте, где без шаблонизатора не обойтись.

В качестве примера я привел простейшую таблицу, при желании можно манипулировать гораздо большим числом атрибутов. Это особенно приятно, если учесть, что для реализации не требуются никакие сторонние библиотеки.
Описанный метод несколько лет работает на одном проекте и ни один пользователь до сих пор не заподозрил, что открываемые им данные не являются документом MS Office.

Подробнее о структуре XML используемой в MS Excel можно почитать в MSDN XML Spreadsheet Reference

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

Для Windows машин эта функция реализована изначально, и нам почти не надо изобретать велосипед:
Просто заходим в тот редактор какое-либо ПО, с возможностью печати, выбираем Файл -> Печать и ставим флажок «Печать в файл». После этого останется только указать путь и вуаля.

Но, некоторое время назад, я столкнулся с надобностью создать prn на машине с Mac OS. Ситуация в этом случае была намного более проблемная, поскольку «из коробки» в Mac OS это не предусмотрено. Но ведь это не проблема? Путем поиска и ковыряния, решение нашлось:

Открываем консоль (Программы → Служебные программы → Терминал)
Меняем пользователя на root-а:

Останавливаем службу CUPS:

Открываем на редактирование файл:

В низ данного файла дописываем следующее:

Info testprinter
Location
MakeModel testprinter
DeviceURI file:/tmp/test.prn
State Idle
StateTime 1289988411
Type 36868
Product ( testprinter)
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy stop-printer

Вновь используем Ctrl+X для сохранения.

Далее открываем следующий файл:

Запускаем службу CUPS:

Должны получить вывод, вроде следующего:

printer testprinter is idle. enabled since Wed Nov 17 13:06:51 2010

Заходим на web-страницу CUPS — 127.0.0.1:631

Переходим в меню “Принтеры”;
Выбираем в списке созданный нами принтер “testprinter”;
В следующем окне, из раскрывающего списка “Администрирование”, выбираем “Изменить принтер”;
Проходим по всем шагам ничего не меняя, до шага с запросом драйвера для принтера;
Выбираем нужный для тестирования драйвер;
Завершаем операцию установки.

После этого, отправив на печать что-либо на принтер testprinter, сформируется файл, по пути /tmp/test.prn

Отправка на печать производится командой:

Надеюсь данная информация поможет кому-то быстрее и с меньшими затратами решать проблемы в работе принтеров.

Читайте также: