You can load fonts like this:

TrueTypeFont ttf = new TTFParser().parse(fontfile);
then use it in different documents like this:

PDFont font = PDType0Font.load(document, ttf, true);

The "font" object can be used across pages in the same document.

don't forget to close "ttf" when done. But this is more a thing about speed than about space. You should always update before asking questions, we sometimes manage to improve the memory footprint.

Tilman

Am 02.08.2021 um 15:02 schrieb Christopher Schultz:
All,

Is it possible to re-use a PDFont object?

We have a situation where we are building many PDFs in a single process and encountering OOMEs running out of heap space. We are using a "large" (relatively speaking) TrueType font (ARIALUNI.TTF) whose on-disk representation is 22 MiB.

We are loading the font into each document like this:

  PDType0Font.load(document, inputStream)

This font is only loaded when we get a conversion error into the standard built-in fonts (we are trying to create the smallest PDF documents possible for several reasons).

Every OOME stack trace I've seen includes this PDType0Font.load() call, so I was thinking that maybe we'd load the font a single time on startup and re-use it for every document which needs it, but I don't see any way in the API to do such a thing.

Are PDFont objects possible to re-use? Even theoretically? It would be really great if we could do something like this:

static PDFont bigFont;
static {
  bigFont = PDType0Font.load(null, inputStream);
}

public void generateDocument() {
  ...

  PDFont localBigFont = document.addFont(bigFont);

  PDPageContentStream content = ...;
  content.setFont(lodalBigFont);
  ...
}

I'm currently using PDFBox v2.0.8 but upgrading to a later version should not represent too much of a problem.

-chris

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to