Создание PDF-файлов на Java

Aspose.PDF for Java поддерживает как простое создание документов, так и рабочие процессы создания поисковых PDF с поддержкой OCR.

Создание нового документа PDF

Используйте этот подход, когда вам нужно создать простой PDF‑файл с нуля.

  1. Создайте новый PDF Document.
  2. Добавьте Page в документ.
  3. Создайте TextFragment и добавьте его на страницу.
  4. Сохраните выходной PDF Document.
public static void createNewDocument(Path outputFile) {
    try (Document document = new Document()) {
        Page page = document.getPages().add();
        page.getParagraphs().add(new TextFragment("Hello World!"));
        document.save(outputFile.toString());
    }
}

Создание PDF с возможностью поиска

Пример createSearchablePdf использует Document.convert(...) с реализацией CallBackGetHocr. Обратный вызов записывает исходное изображение во временный файл, вызывает Tesseract с опцией hocr, читает сгенерированную разметку HOCR и возвращает её в Aspose.PDF.

  1. Откройте исходный PDF в объекте Document.
  2. Создайте обратный вызов CallBackGetHocr и преобразуйте исходный документ в PDF‑контент, доступный для поиска.
  3. Сохраните обновлённый PDF Document.
public static void createSearchablePdf(Path inputFile, Path outputFile) {
    Path tempDir = outputFile.getParent().resolve("ocr-temp");
    CallBackGetHocr cbgh = new CallBackGetHocr() {
        @Override
        public String invoke(java.awt.image.BufferedImage img) {
            // save the image, run Tesseract with "hocr", and return the HOCR text
            return fileContents.toString();
        }
    };
    try (Document document = new Document(inputFile.toString())) {
        document.convert(cbgh);
        document.save(outputFile.toString());
    }
}

Получение настроек окна документа

Используйте этот пример, чтобы проверить текущие настройки просмотра, хранящиеся в существующем PDF‑документе.

  1. Откройте исходный PDF в объекте Document.
  2. Прочитайте необходимые свойства окна и отображения из документа.
  3. Выведите текущие настройки для проверки или отладки.
public static void getDocumentWindow(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        System.out.println("CenterWindow: " + document.isCenterWindow());
        System.out.println("Direction: " + document.getDirection());
        System.out.println("DisplayDocTitle: " + document.isDisplayDocTitle());
        System.out.println("FitWindow: " + document.isFitWindow());
        System.out.println("HideMenuBar: " + document.isHideMenubar());
        System.out.println("HideToolBar: " + document.isHideToolBar());
        System.out.println("HideWindowUI: " + document.isHideWindowUI());
        System.out.println("NonFullScreenPageMode: " + document.getNonFullScreenPageMode());
        System.out.println("PageLayout: " + document.getPageLayout());
        System.out.println("PageMode: " + document.getPageMode());
    }
}

Установка параметров окна документа

Этот пример обновляет то, как PDF должен отображаться при открытии в совместимом просмотрщике.

  1. Откройте исходный PDF в объекте Document.
  2. Установите необходимые параметры окна, макета и режима страниц.
  3. Сохраните обновлённый PDF Document.
public static void setDocumentWindow(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.setCenterWindow(true);
        document.setDirection(Direction.R2L);
        document.setDisplayDocTitle(true);
        document.setFitWindow(true);
        document.setHideMenubar(true);
        document.setHideToolBar(true);
        document.setHideWindowUI(true);
        document.setNonFullScreenPageMode(PageMode.UseOC);
        document.setPageLayout(PageLayout.TwoColumnLeft);
        document.setPageMode(PageMode.UseThumbs);
        document.save(outputFile.toString());
    }
}

Встраивание шрифтов в существующий PDF

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

  1. Откройте исходный PDF в объекте Document.
  2. Включите стандартное встраивание шрифтов и переберите шрифты, используемые на каждой странице Page.
  3. Отметьте все невстроенные объекты Font для встраивания.
  4. Сохраните обновлённый документ.
public static void embeddedFonts(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.setEmbedStandardFonts(true);
        for (Page page : document.getPages()) {
            for (Font pageFont : page.getResources().getFonts()) {
                if (!pageFont.isEmbedded()) {
                    pageFont.setEmbedded(true);
                }
            }
        }
        document.save(outputFile.toString());
    }
}

Встраивание шрифтов при создании нового PDF

Этот пример создает новый PDF и присваивает встроенный шрифт текстовому содержимому с самого начала.

  1. Создайте новый PDF Document и добавьте Page.
  2. Создайте необходимые объекты TextFragment, TextSegment и Состояние текста.
  3. Получите нужный шрифт Font из репозитория и пометьте его как встроенный.
  4. Добавьте текстовое содержание на страницу и сохраните результирующий документ.
public static void embeddedFontsInNewDocument(Path outputFile) {
    try (Document document = new Document()) {
        try (Page page = document.getPages().add()) {
            TextFragment fragment = new TextFragment("");
            TextSegment segment = new TextSegment(" This is a sample text using Custom font.");
            TextState textState = new TextState();
            Font font = FontRepository.findFont("Arial");
            font.setEmbedded(true);
            textState.setFont(font);
            segment.setTextState(textState);
            fragment.getSegments().add(segment);
            page.getParagraphs().add(fragment);
        }
        document.save(outputFile.toString());
    }
}

Установка шрифта по умолчанию для вывода PDF

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

  1. Откройте исходный PDF в объекте Document.
  2. Создайте PdfSaveOptions и установите имя шрифта по умолчанию.
  3. Сохраните документ с настроенными параметрами сохранения.
public static void setDefaultFont(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        PdfSaveOptions saveOptions = new PdfSaveOptions();
        saveOptions.setDefaultFontName("Arial");
        document.save(outputFile.toString(), saveOptions);
    }
}

Получение всех шрифтов, используемых в PDF

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

  1. Откройте исходный PDF в объекте Document.
  2. Перечислите шрифты, возвращаемые утилитами шрифтов документа.
  3. Выведите имя каждого обнаруженного Font.
public static void getAllFonts(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        for (Font font : document.getFontUtilities().getAllFonts()) {
            System.out.println(font.getFontName());
        }
    }
}

Улучшение встраивания шрифтов с помощью подмножеств

Используйте этот метод, когда хотите уменьшить нагрузку шрифтов, одновременно сохраняя встроенные данные шрифта согласованными с использованием документа.

  1. Откройте исходный PDF в объекте Document.
  2. Создайте подмножества шрифтов с помощью утилит шрифтов документа, указав требуемые значения Стратегия подмножества шрифтов.
  3. Сохраните оптимизированный документ.
public static void improveFontsEmbedding(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.getFontUtilities().subsetFonts(FontSubsetStrategy.SubsetAllFonts);
        document.getFontUtilities().subsetFonts(FontSubsetStrategy.SubsetEmbeddedFontsOnly);
        document.save(outputFile.toString());
    }
}

Установка коэффициента масштабирования при открытии документа

Этот пример настраивает начальный уровень масштабирования, который должен применяться при открытии PDF.

  1. Откройте исходный PDF в объекте Document.
  2. Создайте GoToAction с XYZExplicitDestination.
  3. Назначьте действие как действие при открытии документа и сохраните результат.
public static void setZoomFactor(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        GoToAction action = new GoToAction(new XYZExplicitDestination(1, 0.0, 0.0, 0.5));
        document.setOpenAction(action);
        document.save(outputFile.toString());
    }
}

Получение коэффициента увеличения при открытии документа

Используйте этот пример, чтобы проверить, задаёт ли PDF уже явный уровень масштабирования для своей операции открытия.

  1. Откройте исходный PDF в объекте Document.
  2. Проверьте, является ли действие открытия GoToAction с XYZExplicitDestination.
  3. Выведите настроенное значение масштаба или сообщите, что масштаб не установлен.
public static void getZoomFactor(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        if (document.getOpenAction() instanceof GoToAction action
                && action.getDestination() instanceof XYZExplicitDestination destination) {
            System.out.println("Zoom: " + destination.getZoom());
        } else {
            System.out.println("Zoom: not set");
        }
    }
}