Обзор
Шпиль.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”