| Latest version | 1.11.0 |
|---|---|
| Minimum Core | 12 |
| Compatible Core | 14 |
| Last updated | 1 week ago |
| Created | 4 weeks ago |
| Authors | |
| Languages |
English Español |
| Systems |
Dnd5e Pf2e |
| Project source | Project URL |
| Report bugs | Bug tracker URL |
| Read-me | Readme URL |
| Changelog | Changelog URL |
| License | License URL |

Clean, printable character sheets for D&D 5e and Pathfinder 2e, straight from Foundry VTT
Reading view · vector-crisp PDF (native print) · interactive HTML · Markdown (Obsidian-ready)
English · Español
Before / after — the same sheet, native Foundry vs. exported with the module:
Everything in one view — Foundry makes you hop between tabs for combat, spells, features and inventory. The reading view puts the whole character in a single scroll:
A real table sheet — spells, inventory and biography from an actual campaign character:
contents weigh nothing, and the total weight comes from the system itself — coins included, weightless contents excluded — along with your encumbrance thresholds.| D&D 5e | Pathfinder 2e | |
|---|---|---|
| Abilities | scores + modifiers + saves | modifiers (Remaster style) |
| Saves | six, tied to abilities | three, each with its own proficiency rank |
| Proficiency | ● / ◆ / ◐ markers | U · T · E · M · L ranks |
| Attacks | to-hit + damage with ability modifier (finesse resolved by the system) | Strikes with MAP variants (+14 / +9 / +4) and resolved damage |
| Actions | — | grouped by cost: ◆ · ◆◆ · ◆◆◆ · ◇ free · ↺ reaction |
| Spells | by level, slot bubbles, concentration / ritual | one block per spellcasting entry, each with its own tradition, DC and attack (staves and focus spells included) |
| Load | weight in lb + encumbrance thresholds | Bulk (L notation) |
| Extras | death saves, inspiration | hero points, focus points, dying/wounded tracks |
The PF2e sheet was validated stat-by-stat against the native system sheet (PCs and NPC stat blocks).
Ideas straight from the community:
In Foundry: Add-on Modules → Install Module and paste the manifest URL:
https://github.com/GegesVTT/gg-sheet-export/releases/latest/download/module.json
Then enable GG Sheet Export in Manage Modules of your dnd5e or pf2e world. (Manual alternative: drop the gg-sheet-export folder into Data/modules/.)
Open any character or NPC sheet — you'll see an open-book 📖 icon in the window header.
.html. On screen it's interactive (? unfolds descriptions); printed from any browser, it becomes the compact sheet..md with tables and headers.If the print dialog ever fails to open, the module falls back to a pop-up window — allow pop-ups for your Foundry domain in that case.
Journals too. The same 📖 icon appears on any Journal Entry (and on right-click in the Journals sidebar). Journals export in their own tome layout — cover, auto-generated contents, drop caps, themed tables — to PDF, standalone HTML and Obsidian-ready Markdown (with @UUID references turned into [[wiki-links]]). GM secret blocks are left out by default; a world setting lets you include them.
Printable spell cards (D&D 5e). Casters get a 🪄 button in the reading view (and on right-click in the Actors sidebar). It builds poker-size cards (63×88mm, 9 per A4), double-sided — front with the stats (casting time, range, duration, components, plus the character's own save DC / attack) and back with the description. Fronts and backs print as mirrored sheets so they line up for duplex printing; cut along the edges and sleeve them. Long spells (Wish and friends) are abridged with a manual page reference, so each spell stays on a single card. A theme system is in place for future card packs.
const actor = game.actors.getName("Rahegal");
const api = game.modules.get("gg-sheet-export").api;
api.open(actor); // open the reading view
await api.exportPdf(actor); // print/export to PDF
await api.exportHtml(actor); // download the standalone .html
await api.exportMarkdown(actor); // download the .md
// Journals — same three formats, tome style
const journal = game.journal.getName("Capítulo 18: El Valle de las Cenizas");
api.openJournal(journal);
await api.exportJournalPdf(journal);
await api.exportJournalHtml(journal);
await api.exportJournalMarkdown(journal);
// Spell cards (D&D 5e) — preview window or straight to PDF
const pc = game.actors.getName("Rahegal");
api.openSpellCards(pc);
await api.exportSpellCards(pc);
Spell cards ship with a theme system. Pick a look under Settings → Module Settings → GG Sheet Export → "Cards: visual theme". The base theme (Crónicas Bárdicas) is always available.
Installing more themes: theme packs are small companion modules. Install a pack the same way as any module (paste its manifest URL in Install Module, or find it in the browser), enable it, and it appears automatically in the theme dropdown. Packs only change the look — the engine stays the same, so themes never gate features.
Free packs: Ink Saver (black & white, printer-friendly). More coming.
Building a theme pack (devs): a pack is a module that registers itself in the setup hook:
Hooks.once("setup", () => {
const api = game.modules.get("gg-sheet-export")?.api;
api?.registerCardTheme({
id: "my-theme",
name: "My Theme",
vars: { "--card-ink": "#1a1a1a", "--card-amber": "#8a2f3f" /* … inherits the rest */ },
watermark: null, // data-URL / path, or null
fontImports: [], // Google Fonts URLs, or…
fontCSS: "", // …embedded @font-face (base64) for offline use
customCSS: ".ggse-cards .ggse-front { /* scoped tweaks */ }"
});
});
Only use fonts whose license allows embedding/redistribution (OFL, etc.). Declare requires: gg-sheet-export (min 1.8.0) in your pack's manifest.
character and npc.extract.mjs, extract-pf2e.mjs), selected by game.system.id and loaded on demand — a dnd5e world never loads PF2e code. Every data-model path uses optional chaining: if a future system version changes a structure, the expected failure mode is a field showing —, not the module breaking.attributes.encumbrance (dnd5e) and actor.inventory.bulk (pf2e). If the system says +6, the sheet says +6.window.print() on a dedicated HTML document with an A4 @page — vector typography and proper break-inside handling, far superior to html2canvas/jsPDF approaches. Printing runs in a hidden iframe, so no pop-ups are required.@UUID links and inline rolls flattened to plain text) and sanitized; portrait and logo are embedded as data URIs so the file has zero external dependencies besides fonts.The design separates extraction from presentation: supporting another system means writing one extractor that returns the same flat object.
character sheet · print · printable · PDF export · HTML export · interactive sheet · Markdown · Obsidian · reading view · D&D 5e · dnd5e · Pathfinder 2e · pf2e · hybrid table · in-person · paper · NPC statblock · LLM context
MIT — © Geges
Part of the GegesVTT family: GG Calendar · GG Nameforge
Fichas de personaje de D&D 5e y Pathfinder 2e limpias e imprimibles, directo desde Foundry VTT. Visor de lectura · PDF vectorial (impresión nativa) · HTML interactivo · Markdown (listo para Obsidian).
el contenido no pesa, y el peso total lo calcula el propio sistema — monedas incluidas, contenido ingrávido excluido — junto a tus umbrales de carga.| D&D 5e | Pathfinder 2e | |
|---|---|---|
| Características | puntuaciones + modificadores + salvaciones | modificadores (estilo Remaster) |
| Salvaciones | seis, ligadas a características | tres, cada una con su rango de competencia |
| Competencia | marcadores ● / ◆ / ◐ | rangos U · T · E · M · L |
| Ataques | ataque + daño con modificador (finesse la resuelve el sistema) | Golpes con variantes de MAP (+14 / +9 / +4) y daño resuelto |
| Acciones | — | agrupadas por costo: ◆ · ◆◆ · ◆◆◆ · ◇ libre · ↺ reacción |
| Conjuros | por nivel, burbujas de espacios, concentración / ritual | un bloque por entrada de lanzamiento, cada una con su tradición, CD y ataque (bastones y conjuros focales incluidos) |
| Carga | peso en lb + umbrales | Volumen/Bulk (notación L) |
| Extras | salvaciones de muerte, inspiración | puntos de héroe, de enfoque, agonizante/herido |
La ficha de PF2e se validó número por número contra la ficha nativa del sistema (PJs y stat blocks de PNJ).
Ideas que trajo la comunidad:
En Foundry: Módulos Complementarios → Instalar Módulo y pegá la URL de manifiesto:
https://github.com/GegesVTT/gg-sheet-export/releases/latest/download/module.json
Después activá GG Sheet Export en Gestionar Módulos de tu mundo dnd5e o pf2e. (Alternativa manual: copiá la carpeta gg-sheet-export dentro de Data/modules/.)
Abrí cualquier ficha de personaje o PNJ: vas a ver un ícono de libro abierto 📖 en el header de la ventana.
.html autónomo. En pantalla es interactivo (el ? despliega descripciones); impreso desde cualquier navegador, se convierte en la ficha compacta..md con tablas y encabezados.Si el diálogo de impresión no llegara a abrirse, el módulo recurre a una ventana emergente — en ese caso, permití ventanas emergentes para tu dominio de Foundry.
También journals. El mismo ícono 📖 aparece en cualquier Journal Entry (y con clic derecho en la barra de Diarios). Los journals se exportan con su propio estilo de tomo — portada, índice automático, capitulares, tablas temáticas — a PDF, HTML autónomo y Markdown para Obsidian (con las referencias @UUID convertidas en [[wiki-links]]). Los bloques secretos de GM quedan afuera por defecto; un ajuste de mundo permite incluirlos.
Tarjetas de conjuros imprimibles (D&D 5e). Los lanzadores tienen un botón 🪄 en el visor (y con clic derecho en la barra de Actores). Arma tarjetas tamaño póker (63×88mm, 9 por hoja A4), a doble faz — frente con los datos (tiempo de lanzamiento, alcance, duración, componentes, más la CD de salvación / ataque del propio personaje) y dorso con la descripción. Los frentes y dorsos se imprimen como hojas espejadas para que coincidan al imprimir doble cara; se cortan por el borde y se enfundan. Los hechizos largos (Wish y compañía) se resumen con la referencia de página del manual, así cada conjuro entra en una sola tarjeta. El sistema de temas queda listo para futuros packs.
const actor = game.actors.getName("Rahegal");
const api = game.modules.get("gg-sheet-export").api;
api.open(actor); // abre el visor
await api.exportPdf(actor); // exporta a PDF
await api.exportHtml(actor); // descarga el .html autónomo
await api.exportMarkdown(actor); // descarga el .md
// Journals — los mismos tres formatos, en estilo tomo
const journal = game.journal.getName("Capítulo 18: El Valle de las Cenizas");
api.openJournal(journal);
await api.exportJournalPdf(journal);
await api.exportJournalHtml(journal);
await api.exportJournalMarkdown(journal);
// Tarjetas de conjuros (D&D 5e) — ventana de vista previa o PDF directo
const pc = game.actors.getName("Rahegal");
api.openSpellCards(pc);
await api.exportSpellCards(pc);
Las tarjetas tienen un sistema de temas. Elegí el look en Configuración → Ajustes del módulo → GG Sheet Export → "Tarjetas: tema visual". El tema base (Crónicas Bárdicas) siempre está disponible.
Instalar más temas: los packs son módulos complementarios chiquitos. Instalás un pack como cualquier módulo (pegás su manifest URL en Instalar módulo, o lo buscás en el navegador), lo activás, y aparece solo en el selector de temas. Los packs cambian solo la estética — el motor es el mismo, así que un tema nunca bloquea funciones.
Packs gratis: Ink Saver (blanco y negro, ahorra tinta). Más en camino.
Crear un pack (devs): un pack es un módulo que se registra en el hook setup:
Hooks.once("setup", () => {
const api = game.modules.get("gg-sheet-export")?.api;
api?.registerCardTheme({
id: "mi-theme",
name: "Mi Theme",
vars: { "--card-ink": "#1a1a1a", "--card-amber": "#8a2f3f" /* … hereda el resto */ },
watermark: null, // data-URL / ruta, o null
fontImports: [], // URLs de Google Fonts, o…
fontCSS: "", // …@font-face embebido (base64) para uso sin red
customCSS: ".ggse-cards .ggse-front { /* retoques acotados */ }"
});
});
Usá solo fuentes cuya licencia permita embeber/redistribuir (OFL, etc.). Declará requires: gg-sheet-export (min 1.8.0) en el manifest del pack.
character y npc.extract.mjs, extract-pf2e.mjs), elegido según game.system.id y cargado bajo demanda — un mundo dnd5e nunca carga código de PF2e. Todas las rutas usan optional chaining: si una versión futura cambia una estructura, el modo de falla esperado es un campo mostrando —, no el módulo roto.attributes.encumbrance (dnd5e) y actor.inventory.bulk (pf2e). Si el sistema dice +6, la ficha dice +6.window.print() sobre un documento HTML dedicado con @page A4 — tipografía vectorial y cortes de página correctos, muy superior a los enfoques html2canvas/jsPDF. La impresión corre en un iframe oculto: no requiere ventanas emergentes.@UUID y tiradas embebidas se aplanan a texto) y se sanean; retrato y logo van incrustados como data URIs, así el archivo no depende de nada externo salvo las fuentes.El diseño separa extracción de presentación: soportar otro sistema es escribir un extractor que devuelva el mismo objeto plano.
ficha de personaje · imprimir · imprimible · exportar PDF · exportar HTML · ficha interactiva · Markdown · Obsidian · vista de lectura · D&D 5e · dnd5e · Pathfinder 2e · pf2e · mesa híbrida · presencial · papel · PNJ · contexto para IA
MIT — © Geges
Parte de la familia GegesVTT: GG Calendar · GG Nameforge
GG Sheet Export · GegesVTT · Crónicas Bárdicas
To install this package, open your Foundry Setup screen and navigate to your Module tab and click the Install Module button.
From there, you can either search for the package unique name: gg-sheet-export or copy its manifest URL:
And paste it to the input box at the bottom of your window.

You can install this package directly to your Forge account.