Прежде всего, обратите внимание, что вы могли бы написать дополнительные абзацы с таким интересом только в том случае, если подмножество содержит все глифы, необходимые для написания текста, или если шрифт был полностью встроен в PDF.
Решение ниже работает в том случае, если нужный вам шрифт используется для записи хотя бы одного глифа в потоке содержимого любой страницы документа (включая вложенные объекты XObject), а также в случае, если у вас нет других шрифтов с похожим шрифтом.имена в документе.
Вот небольшой вспомогательный класс, который поможет вам извлечь нужный шрифт из документа:
private static class FontFinder implements IEventListener {
private PdfFont suitableFont;
private String nameToLookFor;
private FontFinder(String nameToLookFor) {
this.nameToLookFor = nameToLookFor;
}
public static PdfFont findFont(PdfDocument pdfDocument, String fontName) {
FontFinder finder = new FontFinder(fontName);
PdfCanvasProcessor processor = new PdfCanvasProcessor(finder);
for (int i = 1; i <= pdfDocument.getNumberOfPages(); i++) {
processor.processPageContent(pdfDocument.getPage(i));
}
return finder.suitableFont;
}
@Override
public void eventOccurred(IEventData data, EventType type) {
if (data instanceof TextRenderInfo) {
PdfFont curFont = ((TextRenderInfo) data).getFont();
String fontName = curFont.getFontProgram().getFontNames().getFontName();
if (fontName != null && fontName.contains(nameToLookFor)) {
suitableFont = curFont;
}
}
}
@Override
public Set<EventType> getSupportedEvents() {
return new HashSet<>(Arrays.asList(EventType.RENDER_TEXT));
}
}
Вам нужно будет открыть PdfDocument
в режиме печати (передавая PdfReader
и PdfWriter
в конструктор).
PdfDocument pdfDocument = new PdfDocument(new PdfReader(inFile), new PdfWriter(outFile));
Затем вы можете получить свой шрифт следующим образом (убедитесь, что результат не равен нулю):
PdfFont font = FontFinder.findFont(pdfDocument, "Lato");
После этого вы можете использовать этот экземпляр font
для рисования любого содержимого, например, передав его в setFont
метод Paragraph
, Div
и т. Д.