Как добавить штампы в PDF-документ на Java

Добавление штампов в PDF-файл — практичный способ улучшить документы, предоставляя визуальные подсказки или дополнительную информацию. Штампы могут означать одобрение, конфиденциальность или срочность, облегчая передачу важных деталей без изменения исходного содержания.
В этой статье я расскажу, как добавить динамический штамп и штамп с изображением в PDF с помощью Spire.PDF for Java.
- Добавление динамического текстового штампа в PDF
- Добавление штампа с изображением в PDF
Библиотека Java для штамповки PDF-документов
Spire.PDF for Java — это профессиональная Java-библиотека для чтения, создания и работы с PDF-файлами в Java-приложениях.
Если вы создали проект Maven, вы можете легко импортировать jar в свое приложение с помощью следующих конфигураций. Для проектов, не использующих Maven, загрузите Spire.Pdf.jar и добавьте его в качестве зависимости в ваше приложение.

В PDF штамп — это аннотация или графический элемент, который может быть добавлен в документ для предоставления дополнительной информации. Spire.PDF for Java представляет класс PdfRubberStampAnnotation, который служит для представления резинового штампа. Для создания визуального представления резинового штампа используется класс PdfTemplate. Этот класс выступает в роли холста, позволяющего рисовать различные типы информации, включая текст, изображения, фигуры и элементы даты/времени.
Добавление динамического текстового штампа в PDF
Динамический штамп — это настраиваемая аннотация, которая может быть добавлена в PDF-документ для указания определенного статуса, одобрения или другой информации. В отличие от статических штампов, динамические штампы содержат переменные или поля, которые могут динамически обновляться, например текущую дату, время, имя пользователя или любые другие пользовательские данные.
Следующий фрагмент кода демонстрирует, как добавить динамический штамп в PDF-документ с помощью Java.
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.annotations.PdfRubberStampAnnotation;
import com.spire.pdf.annotations.appearance.PdfAppearance;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.text.SimpleDateFormat;
public class AddDynamicStampToPdf {
public static void main(String[] args) {
// Создаем объект PdfDocument
PdfDocument document = new PdfDocument();
// Загружаем PDF файл
document.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");
// Получаем последнюю страницу
PdfPageBase page = document.getPages().get(document.getPages().getCount() - 1);
// Создаем объект PdfTemplate
PdfTemplate template = new PdfTemplate(195, 50);
// Создаем два шрифта
PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Elephant", Font.ITALIC, 15), true);
PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Arial", Font.ITALIC, 10), true);
// Создаем сплошную кисть и градиентную кисть
PdfSolidBrush solidBrush = new PdfSolidBrush(new PdfRGBColor(Color.black));
Rectangle2D rect1 = new Rectangle2D.Float();
rect1.setFrame(new Point2D.Float(0, 0), template.getSize());
PdfLinearGradientBrush linearGradientBrush = new PdfLinearGradientBrush(rect1, new PdfRGBColor(Color.white), new PdfRGBColor(Color.orange), PdfLinearGradientMode.Horizontal);
// Создаем путь закругленного прямоугольника
int CornerRadius = 10;
PdfPath path = new PdfPath();
path.addArc(template.getBounds().getX(), template.getBounds().getY(), CornerRadius, CornerRadius, 180, 90);
path.addArc(template.getBounds().getX() + template.getWidth() - CornerRadius, template.getBounds().getY(), CornerRadius, CornerRadius, 270, 90);
path.addArc(template.getBounds().getX() + template.getWidth() - CornerRadius, template.getBounds().getY() + template.getHeight() - CornerRadius, CornerRadius, CornerRadius, 0, 90);
path.addArc(template.getBounds().getX(), template.getBounds().getY() + template.getHeight() - CornerRadius, CornerRadius, CornerRadius, 90, 90);
path.addLine(template.getBounds().getX(), template.getBounds().getY() + template.getHeight() - CornerRadius, template.getBounds().getX(), template.getBounds().getY() + CornerRadius / 2);
// Рисуем путь на шаблоне
template.getGraphics().drawPath(linearGradientBrush, path);
template.getGraphics().drawPath(PdfPens.getRed(), path);
// Рисуем динамический текст на шаблоне
String s1 = «УТВЕРЖДЕНО\n»;
String s2 = «Менеджером в » + dateToString(new java.util.Date(), «yyyy-MM-dd HH:mm:ss»);
template.getGraphics().drawString(s1, font1, solidBrush, new Point2D.Float(5, 5));
template.getGraphics().drawString(s2, font2, solidBrush, new Point2D.Float(2, 28));
// Создаем резиновую печать, указывая ее размер и местоположение
Rectangle2D rect2 = new Rectangle2D.Float();
rect2.setFrame(new Point2D.Float(50, (float) (page.getActualSize().getHeight() - 300)), template.getSize());
PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(rect2);
// Создаем объект PdfAppearance и применяем шаблон как его нормальное состояние
PdfAppearance appearance = new PdfAppearance(stamp);
appearance.setNormal(template);
// Применяем внешний вид к печати
stamp.setAppearance(appearance);
// Добавляем аннотацию печати в коллекцию аннотаций
page.getAnnotationsWidget().add(stamp);
// Сохраняем файл
document.saveToFile("output/DynamicStamp.pdf");
document.close();
}
// Преобразуем дату в строку
public static String dateToString(java.util.Date date, String dateFormat) {
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
return format.format(date);
}
}
Добавление штампа с изображением в PDF
Штамп изображения в PDF — это графический элемент, который добавляется в документ в качестве аннотации или наложения. Он предполагает размещение изображения в определенном месте страницы PDF.
В следующем фрагменте кода показано, как добавить штамп изображения в PDF-документ с помощью Java.
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.annotations.PdfRubberStampAnnotation;
import com.spire.pdf.annotations.appearance.PdfAppearance;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTemplate;
import java.awt.geom.Rectangle2D;
public class AddImageStampToPdf {
public static void main(String[] args) {
// Создаем объект PdfDocument
PdfDocument document = new PdfDocument();
// Загружаем PDF документ
document.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");
// Получаем последнюю страницу
PdfPageBase page = document.getPages().get(document.getPages().getCount() - 1);
// Загружаем файл изображения
PdfImage image = PdfImage.fromFile("C:\\Users\\Administrator\\Desktop\\stamp-image.png");
// Получаем ширину и высоту изображения
int width = image.getWidth();
int height = image.getHeight();
// Создаем объект PdfTemplate на основе размера изображения
PdfTemplate template = new PdfTemplate(width, height);
// Рисуем изображение на шаблоне
template.getGraphics().drawImage(image, 0, 0, width, height);
// Создаем аннотацию резиновой печати, указывая ее местоположение и позицию
Rectangle2D rect = new Rectangle2D.Float((float) (page.getActualSize().getWidth() - width — 50), (float) (page.getActualSize().getHeight() - 400), width, height);
PdfRubberStampAnnotation stamp = new PdfRubberStampAnnotation(rect);
// Создаем объект PdfAppearance
PdfAppearance pdfAppearance = new PdfAppearance(stamp);
// Устанавливаем шаблон как нормальное состояние внешнего вида
pdfAppearance.setNormal(template);
// Применяем внешний вид к печати
stamp.setAppearance(pdfAppearance);
// Добавляем аннотацию печати в PDF
page.getAnnotationsWidget().add(stamp);
// Сохраняем файл
document.saveToFile("output/ImageStamp.pdf");
document.close();
}
}
Заключение
В этой статье вы узнали, как добавлять штампы в PDF-документы с помощью библиотеки Spire.PDF for Java. Кроме того, библиотека поддерживает другие функции обработки PDF, такие как: