Рубрики
Без рубрики

Программно создавать PDF-файлы на Java

В этом посте приведен пример того, как создать PDF-файл на Java. С тегами java, spire pdf, pdf, pdflibrary.

Обзор

Шпиль.PDF для Java – это библиотека классов, которая позволяет создавать PDF-документы непосредственно из ваших Java-программ без необходимости установки какого-либо дополнительного программного обеспечения. PDF-файлы можно легко создавать с помощью этой библиотеки. Просто создайте объект PdfDocument , создайте столько PdfPageBase при необходимости добавляйте объекты, рисунки, изображения, таблицы, списки и любые другие элементы на страницы, а затем сохраняйте документ.

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

Перед Началом

Скачать Spire.PDF для Java с веб-страницы https://www.e-iceblue.com/Download/pdf-for-java.html . Загрузка содержит два jar-файла, на которые следует ссылаться в вашем Java-проекте.

Система координат

Страница, созданная Spire.PDF состоит из полей и области содержимого. Система координат соответствует следующим правилам.

  • Начало координат системы координат (0, 0) представляет верхний левый угол области содержимого.
  • Ось x проходит вправо, а ось y – вниз.

Создание Пользовательских Функций

Шпиль.Сам PDF предоставляет полезные классы и методы, такие как PdfPageBase class, Drawstring метод и drawImage метод, которые работают с настройками страницы, написанием текста и добавлением изображений в соответствии с определенными координатами. Чтобы облегчить чтение кода, я предопределил пять пользовательских функций, приведенных ниже, для выполнения различных задач.

  • drawTitle Заголовок

При рисовании заголовка в формате PDF вам, вероятно, потребуется выровнять текст. Функция draw Title , созданная на основе drawString , – это такая функция, которая позволяет выравнивать текст по горизонтали, например, по центру.

public static void drawTitle(PdfPageBase page, String text, PdfFont font, PdfBrush brush, float x, float y, PdfTextAlignment alignment) {
    //set the text alignment via PdfStringFormat class
    PdfStringFormat format = new PdfStringFormat();
    format.setAlignment(alignment);
    //draw title on the page
    page.getCanvas().drawString(text, font, brush, x, y, format);
}
  • нарисовать Абзац

Функция draw Paragraph отличается от drawTitle , хотя они принимают аналогичные параметры. Эта функция создана на основе текстового виджета Pdf.рисует метод и возвращает объект PdfLayoutResult класс, который содержит информацию о границах рисуемого элемента. Поступая таким образом, вы сможете узнать, где заканчивается текущий абзац и с чего начать рисование следующего фрагмента контента.

public static PdfLayoutResult drawParagraph(PdfPageBase page, String text, PdfFont font, PdfBrush brush, float x, float y) {
    //create a PdfTextWidget object
    PdfTextWidget widget = new PdfTextWidget(text, font, brush);
    //set the PdfLayoutType to Paginate to make the content paginated automatically
    PdfTextLayout layout = new PdfTextLayout();
    layout.setLayout(PdfLayoutType.Paginate);
    //create a rectangle where the paragraph will be placed
    Rectangle2D.Float rect = new Rectangle2D.Float(0, y, (float) page.getClientSize().getWidth(), (float) page.getClientSize().getHeight());
    //draw paragraph on the page
    PdfLayoutResult layoutResult = widget.draw(page, rect, layout);
    return layoutResult;
}
  • нариСуйте изображение

Функция drawImage – это просто перегрузка исходного метода. Эта функция не вернет объект PdfLayoutResult . Чтобы узнать, где начинается содержимое ниже, вам нужно будет получить высоту изображения через Изображение в формате Pdf объект, а затем вычислите координату Y.

public static void drawImage(PdfPageBase page, PdfImage image, float x, float y) {
    //draw image on the page
    page.getCanvas().drawImage(image, x, y);
}
  • извлекаемый

При использовании функции draw Table для рисования таблиц на странице PDF вам необходимо указать данные таблицы в массиве String[][]. Эта функция также возвращает объект PdfLayoutResult , который помогает нам получить положение и размер таблицы.

public static PdfLayoutResult drawTable(PdfPageBase page, String[][] dataSource, PdfFont font, float x, float y) {
    //create a PdfTable object
    PdfTable table = new PdfTable();
    //specify cell padding
    table.getStyle().setCellPadding(2);
    //set font
    table.getStyle().getDefaultStyle().setFont(font);
    //fill the table with sample data
    table.setDataSource(dataSource);
    //draw table on the page
    PdfLayoutResult layoutResult = table.draw(page, new Point2D.Float(x, y));
    return layoutResult;
}
  • нарисуйте сортированный список

Последняя функция draw SortedList очень похож на draw Table , за исключением того, что он принимает некоторые уникальные параметры, такие как содержимое списка, маркер порядка и отступ списка.

public static PdfLayoutResult drawSortedList(PdfPageBase page, String listContent, PdfOrderedMarker marker, PdfFont font, PdfBrush brush, float x, float y, float indent) {
    //create a sorted list based on the list content
    PdfSortedList sortedList = new PdfSortedList(listContent);
    //set the properties of the list
    sortedList.setFont(font);
    sortedList.setBrush(brush);
    sortedList.setIndent(indent);
    sortedList.setMarker(marker);
    //draw list on the page
    PdfLayoutResult layoutResult = sortedList.draw(page, x, y);
    return layoutResult;
}

Используя код

Вызовите эти пользовательские функции, и вы сможете рисовать элементы в соответствующих местах страницы PDF.

import com.spire.pdf.graphics.*;
import com.spire.pdf.lists.*;
import com.spire.pdf.tables.PdfTable;

import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

public class CreatePdf {

    public static void main(String[] args) {

        //create a PdfDocument object
        PdfDocument doc = new PdfDocument();
        //add a page
        PdfPageBase page = doc.getPages().add();
        //create two solid brushes
        PdfSolidBrush brush1 = new PdfSolidBrush(new PdfRGBColor(Color.BLUE));
        PdfSolidBrush brush2 = new PdfSolidBrush(new PdfRGBColor(Color.BLACK));
        //create two fonts
        PdfFont font1 = new PdfFont(PdfFontFamily.Helvetica, 15f, PdfFontStyle.Bold);
        PdfFont font2 = new PdfFont(PdfFontFamily.Helvetica, 12f);
        //initialize x, y coordinates
        float x = 0;
        float y = 0;
        //title
        String title = "Title";
        //align text to center via PdfTextAlignment class
        PdfTextAlignment alignment = PdfTextAlignment.Center;
        //draw title on the center of the page
        drawTitle(page, title, font1, brush1, (float) page.getClientSize().getWidth() / 2, y, alignment);
        y = y + 30;
        //paragraph text
        String paragraph = "This is a paragraph.(Here is the extra text for test. " +
                "Here is the extra text for test. Here is the extra text for test. " +
                "Here is the extra text for test. Here is the extra text for test.)";
        //draw paragraph on the page
        PdfLayoutResult layoutResult = drawParagraph(page, paragraph, font2, brush2, x, y);
        y = y + (float) layoutResult.getBounds().getHeight() + 10;
        //load an image file
        PdfImage image = PdfImage.fromImage("C:\\Users\\Administrator\\Pictures\\flag-of-Canada.png");
        //draw image on the page
        drawImage(page, image, x, y);
        y = y + (float) image.getPhysicalDimension().getHeight() + 10;
        //define sample data
        String[] data = {"col-1;col-2;col-3",
                "a1;a2;a3",
                "b1;b2;b3"};
        String[][] dataSource = new String[data.length][];
        for (int i = 0; i < data.length; i++) {
            dataSource[i] = data[i].split("[;]", -1);
        }
        //draw Table on the page
        layoutResult = drawTable(page, dataSource, font2, x, y);
        y = y + (float) layoutResult.getBounds().getHeight() + 10;
        //create an order marker
        PdfOrderedMarker marker = new PdfOrderedMarker(PdfNumberStyle.Upper_Roman, new PdfFont(PdfFontFamily.Helvetica, 12f, PdfFontStyle.Bold));
        //define list content
        String listString = "eBay\nGoogle\nPayPal\nYahoo\nMicrosoft";
        //draw list on the page
        drawSortedList(page, listString, marker, font2, brush2, x, y, 10);
        //save to file
        doc.saveToFile("CreatePdf.pdf");
    }

}

Результирующий PDF-файл выглядит так, как показано ниже.

Оригинал: “https://dev.to/eiceblue/programmatically-create-pdf-in-java-2o6b”