Как встроить стандартный шрифт в сгенерированный PDF-файл с помощью PDFBox

Мне нужно добавить текст в файлы PDF / A с помощью библиотеки Apache PDFBox для Java. Проблема в том, что, поскольку это должен быть действующий файл PDF / A, все используемые шрифты должны быть встроены в него. Я знаю, что могу встроить шрифт TTF с помощью PDFBox, но я бы не хотел предоставлять файл шрифта вместе с приложением, поэтому мне было интересно, есть ли способ встроить один из стандартных шрифтов, доступных в PDFBox, как если бы он был внешним.

Например, когда я что-то пишу с использованием одного из стандартных шрифтов, валидатор PDF жалуется на это:

Как встроить стандартный шрифт в сгенерированный PDF-файл с помощью PDFBox

Я использовал следующий код для написания текста:

  PDFont standardFont = PDType1Font.HELVETICA_BOLD;
  
  PDPage pag = new PDPage();
  
  pag.setResources(new PDResources());
  
  PDPageContentStream contentStream = new PDPageContentStream(pdfFile, pag);
  
  //Begin the Content stream 
  contentStream.beginText();       
  
  //Setting the font to the Content stream  
  contentStream.setFont(standardFont, 12);

  //Setting the position for the line 
  contentStream.newLineAtOffset(25, 500);

  //Adding text in the form of string 
  contentStream.showText("JUST A SAMPLE STRING");      

  //Ending the content stream
  contentStream.endText();

  //Closing the content stream
  contentStream.close();
  
  pdfFile.addPage(pag);
  
  pdfFile.save(file);
  
  pdfFile.close();

Есть ли возможность принудительно встраивать шрифт при его установке?

Заранее спасибо,

«Мне было интересно, есть ли способ встроить один из стандартных шрифтов, доступных в PDFBox, как если бы он был внешним». - это шрифты, которые вы имеете в виду, доступно в pdfbox, потому что они доступны в каждой программе просмотра PDF. Pdfbox не включает эти шрифты полностью, он просто знает некоторые их метаданные. Таким образом, для встраивания шрифтов вам нужны файлы шрифтов.
mkl 18.12.2018 07:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
2 694
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В PDFBox встроен только один шрифт. Вы можете использовать это так:

PDFont font = PDType0Font.load(doc, SomePdfboxClass.class.getResourceAsStream(
                   "/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf"));

Другие вопросы по теме