Работа с артефактами
Артефакты, как правило, это графические объекты или другие отметки, которые не являются частью авторского контента. В вашем PDF примеры артефактов включают различную информацию, есть заголовок или нижний колонтитул страницы, линии или другие графики, разделяющие секции страницы, или декоративные изображения.
Класс Artifact содержит:
- Artifact.Type – получает тип артефакта (поддерживает значения перечисления Artifact.ArtifactType, где значения включают Background, Layout, Page, Pagination и Undefined).
- Artifact.Subtype – получает подтип артефакта (поддерживает значения перечисления Artifact.ArtifactSubtype, где значения включают Background, Footer, Header, Undefined, Watermark).
Водяной знак, созданный с помощью Adobe Acrobat, называется артефактом (как описано в разделе 14.8.2.2 Real Content and Artifacts спецификации PDF). Для работы с артефактами Aspose.PDF имеет два класса: Artifact и ArtifactCollection.
Чтобы получить все артефакты на определенной странице, класс Page имеет свойство Artifacts. В этой теме объясняется, как работать с артефактами в PDF-файлах.
Следующий фрагмент кода показывает, как установить водяной знак на первой странице PDF-файла.
public class ExamplesArtifacts {
private static String _dataDir = "/home/aspose/pdf-examples/Samples/Artifacts/";
public static void SetWatermark(){
Document doc = new Document(_dataDir + "sample.pdf");
WatermarkArtifact artifact = new WatermarkArtifact();
artifact.setText(new FormattedText("WATERMARK", java.awt.Color.BLUE,
FontStyle.Courier,
EncodingType.Identity_h, true, 72));
artifact.setArtifactHorizontalAlignment (HorizontalAlignment.Center);
artifact.setArtifactVerticalAlignment (VerticalAlignment.Center);
artifact.setRotation (45);
artifact.setOpacity (0.5);
artifact.setBackground (true);
doc.getPages().get_Item(1).getArtifacts().add(artifact);
doc.save(_dataDir + "watermark.pdf");
}
Фоновые изображения могут использоваться для добавления водяного знака или других тонких элементов дизайна в документы. В Aspose.PDF для Java каждый PDF-документ является коллекцией страниц, и каждая страница содержит коллекцию артефактов. Класс BackgroundArtifact может быть использован для добавления фонового изображения к объекту страницы.
Следующий фрагмент кода показывает, как добавить фоновое изображение к страницам PDF, используя объект BackgroundArtifact.
public static void SetBackground() throws FileNotFoundException {
// Открыть документ
Document pdfDocument = new Document();
// Добавить новую страницу к объекту документа
Page page = pdfDocument.getPages().add();
// Создать объект Background Artifact
BackgroundArtifact background = new BackgroundArtifact();
// Указать изображение для объекта backgroundartifact
background.setBackgroundImage(new java.io.FileInputStream(new java.io.File(_dataDir + "background.png")));
// Добавить BackgroundArtifact в коллекцию артефактов страницы
page.getArtifacts().add(background);
// Сохранить измененный PDF
pdfDocument.save(_dataDir + "ImageAsBackground_out.pdf");
}
Примеры программирования: Получение водяного знака
Следующий фрагмент кода показывает, как получить каждый водяной знак на первой странице PDF файла.
public static void GettingWatermarks() {
// Открыть документ
Document pdfDocument = new Document(_dataDir + "watermark_new.pdf");
// Перебрать и получить подтип, текст и расположение артефакта
for (Artifact artifact : pdfDocument.getPages().get_Item(1).getArtifacts())
{
System.out.println(artifact.getSubtype() + " " + artifact.getText() + " " + artifact.getRectangle().toString());
}
Примеры программирования: Подсчет артефактов определенного типа
Чтобы вычислить общее количество артефактов определенного типа (например, общее количество водяных знаков), используйте следующий код:
public static void CountingArtifacts() {
// Открыть документ
Document pdfDocument = new Document(_dataDir + "watermark_new.pdf");
int count = 0;
for (Artifact artifact : pdfDocument.getPages().get_Item(1).getArtifacts())
{
// Если тип артефакта - водяной знак, увеличить счетчик
if (artifact.getSubtype() == Artifact.ArtifactSubtype.Watermark) count++;
}
System.out.println("Страница содержит " + count + " водяных знаков");
}