Содержание


Создание PDF-документов на лету с помощью TCPDF

Конвертирование Web-страниц в документы для высококачественной печати

Comments

TCPDF – один из самых активно развивающихся проектов ресурса Sourceforge.net – включает в себя мощный механизм создания PDF-документов, полностью реализованный на PHP. Такой подход упрощает установку TCPDF даже на Web-сайтах, не позволяющих получить доступ к системным каталогам или скомпилировать собственный код. Кроме того, сильно упрощается итеративная разработка, поскольку без каких-либо дополнительных действий можно сразу увидеть результаты выполнения написанного PHP-кода.

Библиотека TCPDF поддерживает ряд распространенных графических форматов, включая векторный формат SVG и растровые форматы, такие как JPEG и PNG. Отдельная утилита позволяет обрабатывать шрифты TrueType, OpenType, PostScript Type 1 и CID-0 и добавлять их в созданные с помощью TCPDF документы. TCPDF можно использовать для генерации линейных и двумерных штрих-кодов; она поддерживает все обычные свойства PDF, такие как закладки, гиперссылки, сжатие, примечания, шифрование и цифровые подписи.

Библиотека TCPDF и Web-страницы, использующие ее возможности, написаны на PHP; что упрощает создание и развертывание страниц с функциями генерации PDF-документов. Для работы с TCPDF можно использовать любой поддерживаемый Web-сервер и среду разработки PHP. При разработке примера этой статьи я использовал следующее программное обеспечение.

  • Eclipse 3.5.2 – одна из моих любимых сред разработки с открытым исходным кодом, поддерживающая широкий набор сред и языков программирования.
  • PHP Development Tools 2.2.0 – PHP-плагин для Eclipse.
  • MAMP Pro 1.9 – удобный пакет для Mac OS X, в который включены программные продукты Apache, MySQL и PHP, работающие в изолированной среде с удобным клиентским графическим интерфейсом. Хотя Mac OS X и поставляется с предустановленными Apache и PHP, я предпочитаю использовать MAMP Pro, потому что в этом пакете имеется стабильно работающий изолированный инструментарий разработчика, состоящий из Web-сервера, СУБД и языка PHP.
  • TCPDF 5.0.006 – текущая стабильная версия TCPDF.

Ссылки для загрузки этих программных продуктов содержатся в разделе Ресурсы.

После установки PHP на вашем Web-сайте можно начинать работу с TCPDF. Мы рассмотрим процесс установки TCPDF, после чего напишем на PHP Web-страницу в форме счета на оплату, подобного тому, который можно увидеть на сайте любого Интернет-магазина. Затем с помощью TCPDF мы создадим PDF-версию страницы, предназначенную для печати и отформатированную в соответствии с исходной HTML-версией.

Установка TCPDF

Библиотека TCPDF полностью загружается с Web-сайта Sourceforge.net в виде zip-архива. Таким образом, достаточно распаковать архив при помощи любого zip-распаковщика, и вы получите каталог, содержащий все необходимое для начала работы.

Добавив каталог TCPDF в список Web-директорий, можно получить доступ к документации TCPDF, загрузив страницу doc/index.html, а также просматривать любые примеры, загрузив файл examples/index.php. Эти примеры также доступны на Web-сайте TCPDF (см. раздел Ресурсы).

Однако прежде чем начать рассмотрение примеров, необходимо настроить установленную библиотеку TCPDF.

Конфигурирование в UNIX-системах

Если TCPDF устанавливается в UNIX®-системе, необходимо убрать со всех файлов флаг исполнения, возникший как побочный эффект от создания архива TCPDF в операционной системе Microsoft® Windows®. К счастью, это легко можно сделать при помощи пары команд, показанных в листинге 1. Также необходимо проследить за тем, чтобы каталоги cache и images были доступны для записи, поскольку в них хранятся временные файлы TCPDF.

Следующим шагом необходимо назначить владельцев файлов (пользователя и группу). Как правило, это пользователь www и группа www, хотя в некоторых системах имена могут быть другими. Если вы запускаете TCPDF на своем собственном Web-сайте (часто в этом случае домашним каталогом является каталог public_html), этот шаг можно пропустить.

Листинг 1. Назначение прав доступа к папке и указание ее владельца
$ cd tcpdf
$ find . -type f | xargs chmod -x
$ chmod +w cache images
$ chown -R www:www .

Обратите внимание на то, что для разделения пользователя и группы в некоторых системах в этих командах вместо знака : (двоеточие) может использоваться знак . (точка), поэтому в случае возникновении ошибки обратитесь к документации операционной системы.

Общие настройки для всех операционных систем

Откройте в любом текстовом редакторе файл config/tcpdf_config.php. В этом файле содержатся конфигурационные параметры TCPDF, с помощью которых можно управлять работой этой библиотеки, а также указывать, где она должна искать вспомогательные файлы.

В файле tcpdf_config.php содержатся следующие параметры, которые вы, возможно, захотите изменить.

  • PDF_PAGE_FORMAT. Задайте для этого параметра значение letter, если вы не используете метрические форматы страниц. Скорее всего, TCPDF поддерживает более широкий набор размеров страниц, чем ваш принтер, если, конечно, вы не работаете с чем-то очень экзотическим.
  • PDF_UNIT. Задайте для этого параметра значение pt, если вам удобнее выполнять разметку PDF-документа не в миллиметрах, а в пунктах.
  • PDF_CREATOR, PDF_AUTHOR. Создатель и автор документа по умолчанию (на тот случай, если вы забудете указать эти сведения в коде генерации PDF-документа).

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

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

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

Создание счета

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

Давайте создадим Web-страницу со счетом, чтобы пользователи могли видеть, какие товары они заказали и сколько они стоят.

Первая версия: Web-страница

В моей любимой среде PHP я создал папку Invoice и поместил в нее следующие файлы.

  • Invoice.php – PHP-код для создания счета.
  • Invoice.css – CSS-стили для счета.
  • Azuresol_OnyxTree-S.png – изображение "OnyxTree S" (автор Azuresol), которое будет использоваться в качестве логотипа компании (бесплатная пиктограмма, найденная на Web-сайте iconfinder.com, см. раздел Ресурсы).
  • gentleface_print.png – изображение "Print" (автор gentleface), которое будет служить для запуска генерации PDF-документа (еще одна бесплатная пиктограмма с сайта iconfinder.com).

В файле Invoice.php проверяется, был ли при обращении к странице передан аргумент PDF или нет (листинг 2). Если аргумент PDF не был передан, пользователь попадает на обычную Web-страницу, которая в этом случае отображается с помощью функции generateHTML (листинг 3). Функция generatePDF будет рассмотрена чуть позже, но нетрудно предположить, что она будет использоваться для генерации PDF-версии страницы счета.

Листинг 2. Проверка режима создания страницы
if( array_key_exists( 'PDF', $_REQUEST ) ) {
    generatePDF( $invoiceData );
} else {
    generateHTML( $invoiceData );
}

В массиве $invoiceData содержатся все данные о счете; этот массив создается непосредственно в файле Invoice.php, но можно представить, что мы получаем информацию из базы данных, от Web-сервиса или в виде содержимого корзины какого-нибудь Интернет-магазина.

Листинг 3. Генерация HTML
function generateHTML( $data ) {
?>
... здесь был HTML-код ...
<?php
    foreach( $data['items'] as $item ) {
        echo '<tr class="invoiceRow">' . "\n";
        echo '    <td class="itemCol">' . $item[0] . "</td>\n";
        echo '    <td class="quantityCol">' . $item[1] . "</td>\n";
        echo '    <td class="priceCol">' . $item[2] . "</td>\n";
        echo '    <td class="costCol">' . $item[3]. "</td>\n";
        echo "</tr>\n";
    }
?>
... здесь был HTML-код ...
<?php
    echo '<td class="totalCol">' . $data['total'] . "</td>\n";
?>
... здесь был HTML-код ...
<?php
    echo 'Invoice prepared for ' . $data['user'] . ' on ' . $data['date'] . "\n";
?>
... здесь был HTML-код ...
<?php
    
}

Для краткости я убрал из листинга 3 весь HTML-код. Этот код присутствует в файле Invoice.php, который находится в архиве CreatingPDFs-Invoice.zip (см. раздел Загрузка).

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

Основными, и самыми трудными, задачами при размещении этого кода на вашем Web-сайте, конечно, являются взаимодействие с источниками данных и использование CSS для получения требуемого вида страницы.

Рисунок 1. Web-страница счета во всей красе
Рисунок 1. Web-страница счета во всей красе
Рисунок 1. Web-страница счета во всей красе

Моя полностью вымышленная компания South Seas Pacifica занимается поставками чая и кофе, и, по всей видимости, особенно любит суматранские сорта. По крайней мере, их цены достаточно привлекательны!

Значок принтера в правом нижнем углу страницы позволяет получить печатную форму счета. Здесь вступает в дело TCPDF. Нашим покупателям не придется распечатывать Web-страницу, потому что мы создадим для них аккуратную PDF-версию, которую и можно будет без труда распечатать.

Вторая версия: PDF-документ

Теперь, когда у нас есть аккуратная Web-страница, необходимо создать ее PDF-версию, предназначенную для печати.

Вспомните листинг 2, из которого видно, что при передаче в загружаемую страницу Invoice.php аргумента PDF (http://.../Invoice.php?PDF) выполняется функция generatePDF, обрабатывающая те же самые данные (см. листинг 4).

Листинг 4. Генерация счета в PDF-формате
function generatePDF( $data ) {
    # Создаем PDF-документ.
    $pdf = new InvoicePdf( $data, 'P', 'pt', 'LETTER' );

    # Создаем счет.
    $pdf->CreateInvoice();
    
    # Выводим PDF-документ.
    $pdf->Output( 'Your_Invoice.pdf', 'D' );
}

Функция generatePDF создает объект InvoicePdf, вызывает на исполнение его метод CreateInvoice, а затем выводит PDF-документ под именем Your_Invoice.pdf в браузер пользователя. Все это выглядит предельно просто, если не учитывать тот факт, что мне пришлось создать класс InvoicePdf самостоятельно, дублируя исходный стиль Invoice. Сейчас я объясню, как я это сделал.

Класс InvoicePdf расширяет класс TCPDF библиотеки TCPDF, являющийся главным механизмом генерации PDF-документов. С помощью переданных аргументов $orientation (ориентация страницы), $unit (единица измерения) и $format (размер страницы) в конструкторе выполняется инициализация родительского класса (см. листинг 5). Последние три аргумента конструктора TCPDF говорят о том, что ввод данных выполняется в формате Unicode (по умолчанию значение true), PDF-документ создается в кодировке UTF-8, кэширование на диске не используется (по умолчанию значение false). При использовании кэширования на диске на генерацию PDF-документа затрачивается меньше оперативной памяти, но уходит больше времени. Поскольку наш документ небольшой и достаточно простой, мы не получим никаких преимуществ от использования кэширования.

После инициализации родительского класса ссылка на содержимое счета сохраняется для последующего использования. Далее с помощью метода SetMargins задаются отступы страницы: 72 пункта слева и справа и 36 пунктов сверху. Последний аргумент метода SetMargins показывает, что значения отступов по умолчанию заменяются нашими собственными значениями. С помощью метода SetAutoPageBreaks мы указываем TCPDF автоматически создавать следующую страницу при достижении конца (36 пунктов от нижнего края) предыдущей.

Листинг 5. Конструктор класса InvoicePdf
function __construct( $data, $orientation, $unit, $format ) {
    parent::__construct( $orientation, $unit, $format, true, 'UTF-8', false );

    $this->invoiceData = $data;

    # Задаем отступы страницы:
    # 72 пункта слева и справа, 36 пунктов сверху и снизу.
    $this->SetMargins( 72, 36, 72, true );
    $this->SetAutoPageBreak( true, 36 );
    
    # Указываем метаданные документа
    $this->SetCreator( PDF_CREATOR );
    $this->SetAuthor( 'Chris Herborth (chrish@pobox.com)' );
    $this->SetTitle( 'Invoice for ' . $this->invoiceData['user'] );
    $this->SetSubject( "A simple invoice example for 'Creating PDFs on 
the fly with TCPDF' on IBM's developerWorks" );
    $this->SetKeywords( 'PHP, sample, invoice, PDF, TCPDF' );

    //задаем коэффициент масштабирования изображения
    $this->setImageScale(PDF_IMAGE_SCALE_RATIO); 
    
    //определяем некоторые строки, зависящие от языка
    global $l;
    $this->setLanguageArray($l);
}

После настройки параметров страницы заполняются метаданные PDF-документа, которые будут отображаться в окне свойств документа в программе просмотра. Метаданные представляют собой обычные строки с текстом, поэтому вы можете написать в них все, что посчитаете нужным.

Используйте в методе setImageScale коэффициент масштабирования по умолчанию, определенный в конфигурационном файле TCPDF. Этот коэффициент используется для масштабирования растровых изображений в соответствии с параметрами страницы.

Наконец, с помощью метода setLanguageArray для PDF-файла задаются некоторые зависящие от языка строки; эти строки определены в соответствующем конфигурационном файле, загружаемом из основного конфигурационного файла TCPDF.

В листинге 6 выполняется переопределение метода Header, предназначенного для генерации содержимого заголовка каждой страницы. Для этого в первую очередь необходимо определить несколько переменных. Задав значение параметра bigFont равным 14 пунктам, мы определили размер логотипа и стандартного текста относительно размера bigFont. Далее рассмотрим вызываемые методы TCPDF.

Метод ImagePngAlpha вставляет изображение с логотипом и размещает его в верхнем левом углу, отступая 72 пункта вправо и 36 пунктов вниз в соответствии с ранее определенными параметрами страницы. Поскольку это квадратное изображение, можно указать одинаковые ширину и высоту (вычисляемое значение $imageScale). Поскольку данный метод может работать с форматами PNG и JPEG, мы указываем, что наше изображение имеет формат PNG (если при установке PHP была установлена библиотека GD, можно загружать изображения в любом формате, поддерживаемом этой библиотекой). Далее указывается значение null, поскольку PDF-ссылка, созданная при выполнении метода AddLink и указывающая на это изображение, не добавляется. Следующее значение, T, говорит о том, что следующий объект PDF-документа должен быть нарисован в верхнем правом углу области изображения. Наконец, мы указываем TCPDF не менять размер рисунка, оригинальное разрешение которого составляет 72 точки на дюйм (стандартное разрешение экрана), и выровнять его по левому краю страницы.

Как вы видите, метод ImagePngAlpha позволяет управлять многими параметрами размещения изображений на странице PDF-документа (см. листинг 6).

Листинг 6. Генерация заголовка страницы
public function Header() {
    global $webcolor;

   # Изображение намного больше, чем текст с названием компании.
    $bigFont = 14;
    $imageScale = ( 128.0 / 26.0 ) * $bigFont;
    $smallFont = ( 16.0 / 26.0 ) * $bigFont;

    $this->ImagePngAlpha('Azuresol_OnyxTree-S.png', 72, 36, $imageScale, 
$imageScale, 'PNG', null, 'T', false, 72, 'L' );
    $this->SetFont('times', 'b', $bigFont );
    $this->Cell( 0, 0, 'South Seas Pacifica', 0, 1 );
    $this->SetFont('times', 'i', $smallFont );
    $this->Cell( $imageScale );
    $this->Cell( 0, 0, '', 0, 1 );
    $this->Cell( $imageScale );
    $this->Cell( 0, 0, '31337 Docks Avenue,', 0, 1 );
    $this->Cell( $imageScale );
    $this->Cell( 0, 0, 'Toronto, Ontario', 0, 1 );

    $this->SetY( 1.5 * 72, true );
    $this->SetLineStyle( array( 'width' => 2, 'color' => 
array( $webcolor['black'] ) ) );
    $this->Line( 72, 36 + $imageScale, $this->getPageWidth() - 72, 36 
+ $imageScale );
}

После добавления логотипа зададим шрифт (семейство Times bold, размер определяется в соответствии с аргументом bigFont) и создадим несколько ячеек, в которых укажем название и адрес компании. Эти ячейки содержат текст и похожи на ячейки таблиц в HTML. Метод Cell принимает следующие аргументы (на самом деле этих аргументов гораздо больше – их полный список можно посмотреть в документации TCPDF).

  • Width – ширина ячейки. Если значением этого аргумента является 0, ячейка будет растянута на всю ширину страницы, до ее правой границы (или до левой, если используется язык с написанием справа налево).
  • Height – высота ячейки. Если значением этого аргумента является 0, ячейка будет растянута по высоте так, чтобы вместить содержимое.
  • Text – текст, отображаемый в ячейке с использованием текущих параметров шрифта и цвета.
  • Border – указывает, как рисуются границы ячейки. Мы не будем использовать границы, поэтому в качестве значения этого аргумента укажем 0. Для отображения всех границ ячейки необходимо указать значение 1, а для отображения границ с определенных сторон – строку, содержащую названия нужных сторон.
  • Position – местоположение следующей ячейки. Если задать для этого аргумента значение 1, ячейка будет расположена в начале новой строки, 0 – справа от текущей ячейки, и 2 – в новой строке под текущей ячейкой.

Наконец, метод Header рисует внизу заголовка черную линию шириной во всю страницу. На рисунке 2 показан вид заголовка в приложении Preview операционной системы Mac OS X.

Рисунок 2. Заголовок страницы для печати – точно такой же, как и заголовок HTML-страницы
Рисунок 2. Заголовок страницы для печати – точно такой же, как и заголовок HTML-страницы
Рисунок 2. Заголовок страницы для печати – точно такой же, как и заголовок HTML-страницы

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

В этом методе содержится лишь один дополнительный фрагмент кода – вызов метода SetY с отрицательным значением. Отрицательный знак Y означает, что расстояние задается от нижнего края страницы. Таким образом, мы оставляем запас места для размещения нижнего колонтитула, гарантируя, что изображение не будет расположено слишком близко к нижнему полю (см. листинг 7).

Листинг 7. Генерация нижнего колонтитула страницы
public function Footer() {
    global $webcolor;

    $this->SetLineStyle( array( 'width' => 2, 'color' => 
array( $webcolor['black'] ) ) );
    $this->Line( 72, $this->getPageHeight() - 1.5 * 72 - 2, 
$this->getPageWidth() - 72, $this->getPageHeight() - 1.5 * 72 - 2 );
    $this->SetFont( 'times', '', 8 );
    $this->SetY( -1.5 * 72, true );
    $this->Cell( 72, 0, 'Invoice prepared for ' . 
$this->invoiceData['user'] . ' on ' . $this->invoiceData['date'] );
}

Полученная PDF-страница похожа на Web-версию счета, но не содержит значка принтера. Этот значок здесь не нужен, поскольку данная страница уже предназначена для печати. На рисунке 3 показан вид нижнего колонтитула.

Рисунок 3. Нижний колонтитул страницы для печати
Рисунок 3. Нижний колонтитул страницы для печати
Рисунок 3. Нижний колонтитул страницы для печати

Итак, у нас есть заголовок и нижний колонтитул. Теперь необходимо добавить само содержимое заказа.

После вызова метода AddPage для создания новой (в нашем случае единственной) страницы выберите шрифт Helvetica размером 11 пунктов и переместите место вставки данных на 144 пункта вниз от верхнего края страницы. Таким образом, между заголовком страницы и началом таблицы останется небольшое расстояние.

Далее вычислите все необходимые расстояния, чтобы расположить таблицу по центру страницы. Для этого необходимо учесть ширину страницы, ширину двух отступов (72 пункта каждый), а также наличие одного широкого и трех обычных столбцов самой таблицы.

После этого на основании вычисленных значений необходимо создать несколько ячеек, содержащих заголовки столбцов, и нарисовать для них границы. Также нужно будет выровнять заголовки числовых столбцов по правому краю, чтобы они были выровнены со значениями. После создания ячеек с заголовками вызывается метод Ln, переводящий курсор на начало новой строки.

Все строки, содержащие позиции заказа, обрабатываются поочередно с помощью оператора foreach (см. листинг 8).

Листинг 8. Генерация содержимого страницы
public function CreateInvoice() {
    $this->AddPage();
    $this->SetFont( 'helvetica', '', 11 );
    $this->SetY( 144, true );

    # Параметры таблицы
    #
    # Размер, ширина (описание) столбца, отступ таблицы, высота строки.
    $col = 72;
    $wideCol = 3 * $col;
    $indent = ( $this->getPageWidth() - 2 * 72 - $wideCol - 3 * $col ) / 2;
    $line = 18;

    # Заголовок таблицы
    $this->SetFont( '', 'b' );
    $this->Cell( $indent );
    $this->Cell( $wideCol, $line, 'Item', 1, 0, 'L' );
    $this->Cell( $col, $line, 'Quantity', 1, 0, 'R' );
    $this->Cell( $col, $line, 'Price', 1, 0, 'R' );
    $this->Cell( $col, $line, 'Cost', 1, 0, 'R' );
    $this->Ln();

    # Строки с содержимым таблицы
    $this->SetFont( '', '' );
    foreach( $this->invoiceData['items'] as $item ) {
        $this->Cell( $indent );
        $this->Cell( $wideCol, $line, $item[0], 1, 0, 'L' );
        $this->Cell( $col, $line, $item[1], 1, 0, 'R' );
        $this->Cell( $col, $line, $item[2], 1, 0, 'R' );
        $this->Cell( $col, $line, $item[3], 1, 0, 'R' );
        $this->Ln();
    }

    # Итоговая строка таблицы (сумма заказа)
    $this->SetFont( '', 'b' );
    $this->Cell( $indent );
    $this->Cell( $wideCol + $col * 2, $line, 'Total:', 1, 0, 'R' );
    $this->SetFont( '', '' );
    $this->Cell( $col, $line, $this->invoiceData['total'], 1, 0, 'R' );
}

Последнее, что нам осталось сделать – это сформировать итоговую строку. В этой части кода демонстрируется, как можно с легкостью менять стиль шрифта для разных ячеек (с помощью метода SetFont, включающего и выключающего использование жирного шрифта). Ширина первой текстовой ячейки равна ширине трех первых столбцов таблицы, поскольку итоговую сумму счета необходимо расположить под последней ячейкой последнего столбца.

После этого ваша таблица, содержащая заказанные позиции товаров, должна выглядеть, как показано на рисунке 4.

Рисунок 4. Заказанные позиции
Рисунок 4. Элементы заказа в счете
Рисунок 4. Элементы заказа в счете

Расположив текстовые ячейки правильным образом, мы воссоздали оригинальный Web-документ в формате, отлично подходящим для печати. Библиотека TCPDF позволяет добавлять поддержку генерации PDF-документов в существующие Web-страницы без внесения изменений в саму Web-страницу или лежащие в ее основе данные.

Заключение

В этой статье вы познакомились с TCPDF – популярной библиотекой языка PHP, предназначенной для создания PDF-документов. TCPDF не требует подключения внешних библиотек, что существенно упрощает ее установку на существующие Web-сайты на основе PHP. Я продемонстрировал основы установки и конфигурирования TCPDF в UNIX-системах. После этого была создана простая Web-страница Интернет-магазина, специализирующегося на экзотических горячих напитках.

Имея Web-страницу, которая выглядит, как профессиональный счет, мы расширили класс TCPDF, чтобы сгенерировать PDF-версию счета, которую можно без труда загрузить или распечатать. Переопределение методов Header и Footer позволило настроить привычный вид страницы, а написание дополнительного метода – расположить позиции заказа в виде таблицы.


Ресурсы для скачивания


Похожие темы

  • Оригинал статьи: Create PDFs on the fly using TCPDF (EN).
  • Посетите Web-сайт TCPDF.org (EN).
  • Статья Generate PDF files from Java applications dynamically (EN) познакомит вас с библиотекой iText. Кроме того, в этой статье представлено пошаговое руководство по использованию iText для создания PDF-документов в приложениях, использующих технологию Java.
  • Для поиска бесплатных пиктограмм для создания логотипа компании и значка принтера я использовал ресурс Iconfinder (EN). Этот сайт содержит большое количество высококачественных пиктограмм, сгруппированных по размеру и возможности использования в коммерческих целях.
  • Статья Getting started with the Eclipse Platform (EN) раскрывает историю создания и содержит обзор среды разработки Eclipse, включая подробное описание установки среды и разработанных для нее плагинов.
  • Загрузите проект TCPDF (EN) с Web-сайта Sourceforge.net.
  • Для написания кода в этой статье использовалась интегрированная среда разработки Eclipse (EN).
  • Загрузите инструментарий разработчика PHP Development Tools for Eclipse (EN).
  • Загрузите MAMP Pro (EN) – пакет приложений для операционной системы Mac OS X, включающий в себя Apache, MySQL и PHP.
  • В документации Lotus Connections documentation (EN) содержится документация по продукту, а также ссылки на другие ресурсы для поддерживаемых версий Lotus Connections.
  • Посетите раздел Open source портала developerWorks, содержащий обширную справочную информацию, инструменты и обновления проектов, а также самые популярные среди наших читателей статьи и руководства (EN), которые помогут вам в разработке и использовании open source технологий в продуктах IBM.
  • Ознакомительные версии программного обеспечения IBM (EN): загрузите ознакомительные версии или поработайте в онлайновом режиме в среде IBM SOA Sandbox, чтобы ознакомиться с инструментами для разработчиков и приложениями промежуточного уровня семейств DB2®, Lotus®, Rational®, Tivoli® и WebSphere®.

Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=680905
ArticleTitle=Создание PDF-документов на лету с помощью TCPDF
publish-date=06152011