Presenting report content in a perfectly formatted PDF printable sheets was something Drupal 7 did very well. The PDF Print module that we used in the past reached end of life with Drupal 7. The D7 project page has a good explanation on two available upgrade options. We choose the wrong one to start with : -)
We tested the "Printable" module, and paired this with the TCPDF library. This said, it took some work to get setup, and the "Entity Print" module was probably a the right module to start with.
https://www.drupal.org/project/printable (1k install reported)
https://www.drupal.org/project/entity_print (14k install reported)
As of 11/2/21, these were the steps we took to test Printable on D9.
We had to make a few tweaks before this D8 module would work on D9.
// There was an error on the Enable Module page that was preventing D9
// Adding a line for D9 cleared the error/web/modules/composer/printable$ nano printable.info.yml , and the module ennabled
> nano +6 /web/modules/composer/printable/printable.info.yml
+ core_version_requirement: ^8 || ^9
nano +274 web/modules/composer/printable/printable.module
// The uriScheme from D8 is depreciated in D9
> nano +10 web/modules/composer/printable/printable.module
+ use Drupal\Core\StreamWrapper\StreamWrapperManager;
> nano +274 web/modules/composer/printable/printable.module
- $scheme = \Drupal::service('file_system')->uriScheme($uri);
+ $uri_scheme = StreamWrapperManager::getScheme($element['#upload_location']);