Создание PDF-файлов на Java
Aspose.PDF for Java поддерживает как простое создание документов, так и рабочие процессы создания поисковых PDF с поддержкой OCR.
Создание нового документа PDF
Используйте этот подход, когда вам нужно создать простой PDF‑файл с нуля.
- Создайте новый PDF Document.
- Добавьте Page в документ.
- Создайте TextFragment и добавьте его на страницу.
- Сохраните выходной 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.
- Откройте исходный PDF в объекте Document.
- Создайте обратный вызов
CallBackGetHocrи преобразуйте исходный документ в PDF‑контент, доступный для поиска. - Сохраните обновлённый 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‑документе.
- Откройте исходный PDF в объекте Document.
- Прочитайте необходимые свойства окна и отображения из документа.
- Выведите текущие настройки для проверки или отладки.
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 должен отображаться при открытии в совместимом просмотрщике.
- Откройте исходный PDF в объекте Document.
- Установите необходимые параметры окна, макета и режима страниц.
- Сохраните обновлённый 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
Используйте этот подход, когда документ должен включать необходимые шрифты для более надёжного отображения на других системах.
- Откройте исходный PDF в объекте Document.
- Включите стандартное встраивание шрифтов и переберите шрифты, используемые на каждой странице Page.
- Отметьте все невстроенные объекты Font для встраивания.
- Сохраните обновлённый документ.
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 и присваивает встроенный шрифт текстовому содержимому с самого начала.
- Создайте новый PDF Document и добавьте Page.
- Создайте необходимые объекты TextFragment, TextSegment и Состояние текста.
- Получите нужный шрифт Font из репозитория и пометьте его как встроенный.
- Добавьте текстовое содержание на страницу и сохраните результирующий документ.
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
Используйте этот шаблон, когда сохранённый документ должен переключаться на определённый шрифт при генерации вывода.
- Откройте исходный PDF в объекте Document.
- Создайте PdfSaveOptions и установите имя шрифта по умолчанию.
- Сохраните документ с настроенными параметрами сохранения.
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
Этот пример выводит список всех шрифтов, обнаруженных в документе, чтобы вы могли проверить их использование перед экспортом или обновлением файла.
- Откройте исходный PDF в объекте Document.
- Перечислите шрифты, возвращаемые утилитами шрифтов документа.
- Выведите имя каждого обнаруженного 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());
}
}
}
Улучшение встраивания шрифтов с помощью подмножеств
Используйте этот метод, когда хотите уменьшить нагрузку шрифтов, одновременно сохраняя встроенные данные шрифта согласованными с использованием документа.
- Откройте исходный PDF в объекте Document.
- Создайте подмножества шрифтов с помощью утилит шрифтов документа, указав требуемые значения Стратегия подмножества шрифтов.
- Сохраните оптимизированный документ.
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.
- Откройте исходный PDF в объекте Document.
- Создайте GoToAction с XYZExplicitDestination.
- Назначьте действие как действие при открытии документа и сохраните результат.
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 уже явный уровень масштабирования для своей операции открытия.
- Откройте исходный PDF в объекте Document.
- Проверьте, является ли действие открытия GoToAction с XYZExplicitDestination.
- Выведите настроенное значение масштаба или сообщите, что масштаб не установлен.
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");
}
}
}