diff --git a/assets/readme/repository_showcase_render.png b/assets/readme/repository_showcase_render.png index 4b581e71d..5bb5306f3 100644 Binary files a/assets/readme/repository_showcase_render.png and b/assets/readme/repository_showcase_render.png differ diff --git a/examples/src/main/java/com/demcha/examples/flagships/EngineDeckExample.java b/examples/src/main/java/com/demcha/examples/flagships/EngineDeckExample.java index 50e110c57..228cead12 100644 --- a/examples/src/main/java/com/demcha/examples/flagships/EngineDeckExample.java +++ b/examples/src/main/java/com/demcha/examples/flagships/EngineDeckExample.java @@ -124,6 +124,42 @@ public static Path generate() throws Exception { return outputFile; } + /** + * Renders page 1's banner as a standalone, full-bleed hero. The dark + * violet field is painted as the canonical {@code pageBackground}, so it + * fills the whole landscape page — margins and corners included — and the + * rasterised image carries no white frame, only the banner itself. This is + * the source of the repository README hero + * ({@code assets/readme/repository_showcase_render.png}, produced by + * {@link com.demcha.examples.support.PdfPageRasterizer}); re-render it after a + * version bump — the banner reads {@link #VERSION} / {@link #CODENAME}, so + * the hero stays current with one rebuild. + * + * @return the generated single-page banner PDF path + * @throws Exception when rendering or icon IO fails + */ + public static Path generateBanner() throws Exception { + Path outputFile = ExampleOutputPaths.prepare("flagships", "engine-banner.pdf"); + try (DocumentSession document = GraphCompose.document(outputFile) + .pageSize(DocumentPageSize.A4.landscape()) + .pageBackground(HERO_BG) + .margin(16, 16, 16, 16) + .create()) { + document.metadata(DocumentMetadata.builder() + .title("GraphCompose v" + VERSION + " — " + CODENAME) + .author("GraphCompose") + .subject("GraphCompose banner — the engine's own brand hero") + .producer("GraphCompose (PDFBox 3.0)") + .build()); + document.pageFlow() + .name("EngineBanner") + .addSection("Banner", EngineDeckExample::banner) + .build(); + document.buildPdf(); + } + return outputFile; + } + /** * Composes the four deck pages onto a session — shared by {@link #generate()} * and the layout snapshot test, so the test guards the very layout we ship. diff --git a/examples/src/main/java/com/demcha/examples/flagships/EngineShowcase.java b/examples/src/main/java/com/demcha/examples/flagships/EngineShowcase.java index d55507c32..28c27b1ac 100644 --- a/examples/src/main/java/com/demcha/examples/flagships/EngineShowcase.java +++ b/examples/src/main/java/com/demcha/examples/flagships/EngineShowcase.java @@ -20,11 +20,12 @@ import java.util.Objects; /** - * Single-page cinematic engine showcase used as the - * {@code assets/readme/repository_showcase_render.png} source. NOT a - * business document, NOT a CV — a brand promo page that demonstrates - * the visual register the engine can hit when an author cares about - * presentation as much as data: + * Single-page cinematic engine showcase — a brand promo page that was + * the original {@code repository_showcase_render.png} README hero, now + * superseded by {@link EngineDeckExample#generateBanner()}. NOT a + * business document, NOT a CV — it demonstrates the visual register the + * engine can hit when an author cares about presentation as much as + * data: * *