diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..6313b56c
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto eol=lf
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 00000000..3fdec5db
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,133 @@
+name: Documentation checks and Pages
+
+on:
+ push:
+ branches-ignore: [gh-pages]
+ pull_request:
+ workflow_dispatch:
+ inputs:
+ deploy:
+ description: Publish the tested snapshot and preserve historical versions
+ type: boolean
+ default: false
+
+permissions:
+ contents: read
+
+concurrency:
+ group: docs-${{ github.event_name }}-${{ github.ref }}
+ cancel-in-progress: ${{ github.event_name != 'workflow_dispatch' }}
+
+jobs:
+ docs:
+ runs-on: ubuntu-latest
+ timeout-minutes: 30
+ steps:
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
+ - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
+ with:
+ node-version: '24.x'
+ cache: npm
+ - run: npm ci
+ - run: npm audit --audit-level=low
+ - name: Install pinned Hugo
+ env:
+ HUGO_VERSION: '0.168.0'
+ run: |
+ archive="hugo_${HUGO_VERSION}_linux-amd64.tar.gz"
+ curl --fail --location --output "$archive" "https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/$archive"
+ curl --fail --location --output checksums.txt "https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_checksums.txt"
+ grep " hugo_${HUGO_VERSION}_linux-amd64.tar.gz$" checksums.txt | sha256sum --check
+ mkdir -p "$RUNNER_TEMP/hugo"
+ tar -xzf "$archive" -C "$RUNNER_TEMP/hugo" hugo
+ echo "$RUNNER_TEMP/hugo" >> "$GITHUB_PATH"
+ rm "$archive" checksums.txt
+ - name: Read snapshot version
+ id: snapshot
+ run: node --input-type=module -e "import fs from 'node:fs';import {activeVersion} from './scripts/versions.mjs';fs.appendFileSync(process.env.GITHUB_OUTPUT, 'version='+activeVersion.id+'\n')"
+ - run: npm test
+ - run: npm run build
+ - run: npx playwright install --with-deps chromium
+ - run: npm run test:browser
+ env:
+ SCREENSHOT_DIR: test-results
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
+ if: always()
+ with:
+ name: browser-screenshots
+ path: test-results/
+ retention-days: 7
+ if-no-files-found: ignore
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
+ with:
+ name: pdfmake-docs-${{ steps.snapshot.outputs.version }}-preview
+ path: public/
+ retention-days: 14
+ if-no-files-found: error
+
+ pages:
+ name: Publish verified documentation
+ needs: docs
+ if: github.event_name == 'workflow_dispatch' && inputs.deploy && github.ref == 'refs/heads/master' && github.repository == 'pdfmake/docs'
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ permissions:
+ # Retain the exact deployed site so future series preserve the latest snapshots.
+ contents: write
+ pages: write
+ id-token: write
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ concurrency:
+ group: docs-pages-production
+ cancel-in-progress: false
+ steps:
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
+ with:
+ persist-credentials: false
+ - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
+ with:
+ node-version: '24.x'
+ - name: Read snapshot version
+ id: snapshot
+ run: node --input-type=module -e "import fs from 'node:fs';import {activeVersion} from './scripts/versions.mjs';fs.appendFileSync(process.env.GITHUB_OUTPUT, 'version='+activeVersion.id+'\n')"
+ - name: Download the exact artifact that passed checks
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
+ with:
+ name: pdfmake-docs-${{ steps.snapshot.outputs.version }}-preview
+ path: verified
+ - name: Preserve existing root and historical documentation
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
+ with:
+ ref: gh-pages
+ path: published
+ persist-credentials: true
+ - name: Configure project Pages
+ id: pages
+ uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5
+ - name: Assemble the complete Pages site
+ run: node scripts/assemble-pages.mjs verified published pages-artifact
+ env:
+ PAGES_BASE_PATH: ${{ steps.pages.outputs.base_path }}
+ - uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4
+ with:
+ path: pages-artifact
+ - name: Deploy atomically
+ id: deployment
+ uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
+ - name: Archive the successfully deployed snapshots
+ working-directory: published
+ env:
+ SOURCE_SHA: ${{ github.sha }}
+ run: |
+ # A regular fast-forward push rejects concurrent archive modifications.
+ # Pages must use Actions as its source, so this archive commit does not deploy a second time.
+ rsync -a --delete --exclude='.git/' ../pages-artifact/ ./
+ git config user.name 'github-actions[bot]'
+ git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
+ git add --all
+ if ! git diff --cached --quiet; then
+ git commit -m "Archive documentation from ${SOURCE_SHA}"
+ git push origin HEAD:gh-pages
+ fi
diff --git a/.gitignore b/.gitignore
index 79c504d8..5c4bab3b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,11 @@
public/
/.idea
+node_modules/
+.hugo_build.lock
+resources/
+static/playground/vendor/
+static/playground/editor.js
+test-results/
+
+.generated/
+collection/
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 00000000..37d10e56
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,58 @@
+# Documentation contributor guide
+
+This repository documents pdfmake **0.3.x**. The `0.1` branch owns the older
+0.1/0.2 docs. Keep public page paths stable, including the historical spelling
+`document-medatadata`; add aliases if introducing new paths.
+
+Author content in `content/` with TOML title, description and weight. Prefer a
+complete runnable example before options and edge cases. Explain environment,
+minimum version, defaults, units and failure behavior. Use Promise-based output
+methods. Resource policies must be synchronous. Distinguish PDF encryption from
+server resource-access controls. Preserve security caveats and advanced features.
+
+`npm ci`, `npm run docs:generate`, `npm test`, `npm run build` validate the corpus,
+executable examples, MCP protocol and all generated internal links. Install Hugo
+0.168.0 for the website. The first build step generates versioned Markdown,
+`llms.txt`, `llms-full.txt` and `docs-index.json` from the same pages. Do not edit
+these generated files manually. The MCP stdio server in `mcp/server.mjs` reads
+that snapshot; it must not execute example code or fetch remote content.
+
+`layouts/` and `static/assets/` own the documentation UI. The historical theme
+is retained for reference but is not loaded. Keep the site usable without JS;
+JS adds search and copy buttons. Use semantic HTML and local assets. Docs tooling
+requires Node >=24.11; this is separate from the library's Node >=20 runtime.
+
+Translations use language-suffixed Markdown files (`.de.md`, `.fr.md`, `.es.md`,
+`.pt-br.md`) beside the English original. Preserve code/API identifiers and include
+`sourceDigest`, the SHA-256 of the English source with LF line endings, after
+reviewing changes. Do not copy untranslated English pages into language URLs or
+claim them in hreflang. Missing translations link explicitly to English or the
+locale start page. Search/MCP/Markdown exports must retain language separation.
+
+All supported languages must cover the full English page set. Translation checks
+compare source digests, fenced code, runnable examples, heading structure, table
+rows and localized internal links. Translate explanatory prose fully; do not
+replace reference sections with summaries. Keep shared example source/output
+unchanged so every language demonstrates the same tested API behavior.
+
+Chapter navigation is curated by task in `data/navigation.json`, not inferred from
+the content directory. Keep all existing page URLs reachable. The primary
+playground is a rendered documentation route, mounted directly into the shared
+shell. Preserve its editor state across SPA navigation and cancel background work
+when detached. Use `standalone.html` only for isolated previews and library-only
+development. Validate navigation, state retention, Back/Forward, mobile drawer,
+themes and language equivalents with the browser suite when changing this shell.
+
+Versions are configured in `versions.json`. Use the npm Hugo wrapper; do not edit
+`.generated/` or hardcode another series in templates, exporters or MCP. Never
+advertise a future release without a real verified snapshot. Keep playground
+runtime pins aligned and version-switch chapter metadata explicit. Test current
+and synthetic future corpus paths without publishing fake releases.
+
+Code example variants are generated by `scripts/code-examples.mjs`. Never maintain
+independent manually diverging JS/TS copies. Include all variants in portable
+Markdown. New document examples must pass the browser TypeScript checker; avoid
+`any`, suppression comments or unchecked type assertions to conceal errors. Keep
+inline editors isolated, cancel workers on navigation and preserve independent
+language drafts. Environment-dependent examples must not pretend to execute Node
+or access private files in browser previews.
diff --git a/README.md b/README.md
index 7a343534..9d36a56d 100644
--- a/README.md
+++ b/README.md
@@ -1,29 +1,171 @@
-# pdfmake docs for version 0.3
+# pdfmake developer documentation
-The source for website https://pdfmake.github.io/docs/
+The documentation application for **pdfmake 0.3.x**: task-oriented guides,
+searchable references and editable JavaScript/TypeScript examples with PDF previews.
+Built with Hugo, progressively enhanced navigation and local browser assets.
-For source of version 0.1 or 0.2 go here: https://github.com/pdfmake/docs/tree/0.1
+[Read the documentation](https://pdfmake.github.io/docs/0.3/) · [Try the playground](https://pdfmake.github.io/docs/0.3/playground/) · [Library source](https://github.com/bpampuch/pdfmake) · [Authoring guide](AGENTS.md)
-### Run from sources
+## Run locally
-#### Requirements
+Prerequisites: **Node.js >=24.11** and [Hugo 0.168.0](https://github.com/gohugoio/hugo/releases/tag/v0.168.0).
-* Hugo (https://gohugo.io/)
+```sh
+npm ci
+npm run dev
+```
+
+Open . The playground is part of the same application;
+its editor, TypeScript compiler, fonts and PDF preview require no CDN or account.
+The site remains readable and navigable without JavaScript. The UI respects the
+system color preference and offers persistent light/dark selection.
+
+## Repository map
+
+| Location | Responsibility |
+| --- | --- |
+| `content/` | Markdown source and complete language editions |
+| `data/navigation.json` | Curated chapter groups and ordering |
+| `layouts/`, `static/assets/` | Server-rendered shell and navigation enhancements |
+| `static/playground/`, `playground/` | Shared editor, worker and PDF preview |
+| `scripts/` | Generation, validation, versioning and build tools |
+| `tests/` | Corpus, imports, MCP, deployment assembly and browser regression tests |
+| `mcp/` | Read-only documentation server |
+| `versions.json` | Supported snapshots, source refs and runtime pins |
+| `tooling/pdfmake-types/` | Attributed native declaration snapshot for unreleased library work |
-#### Clone and start website
+## Build and verify
+```sh
+npm run docs:generate
+npm test
+npm run build
+npx playwright install chromium
+npm run test:browser
```
-git clone --branch master https://github.com/pdfmake/docs.git
-cd docs
-hugo server
+
+The build writes `public/` and checks links, fragments, canonical URLs, structured
+data and discovery files. Tests cover translations, JavaScript/TypeScript examples,
+actual Node PDF generation, search, MCP and multi-version deployment composition.
+Browser tests exercise previews, imports, downloads, errors, autosave, undo/redo,
+named documents, mobile navigation, themes, history and operation without JavaScript.
+
+For a production-style local preview, run `node scripts/serve.mjs` after building.
+CI runs clean installs, dependency audits, the full build and browser tests before
+uploading a review artifact. Generated vendor assets and `public/` are ignored.
+
+## Edit documentation
+
+Write Markdown with a TOML title, description and weight. Start with a runnable
+example, explain its result, then document defaults and edge cases. Keep API names,
+minimum versions, units, resource policies and failure behavior accurate.
+Use the 0.3 Promise API and retain existing page URLs.
+
+Code example pairs come from `scripts/code-examples.mjs`; do not independently
+maintain JS and TS copies. Run `npm run docs:generate` after source edits and commit
+the generated Markdown, search indexes and LLM exports. Executable definitions
+must pass the same native TypeScript checker used by the editor.
+
+English, German (`de`), French (`fr`), Spanish (`es`) and Brazilian Portuguese
+(`pt-br`) have complete chapter sets. Translations live beside the source, for
+example `tables.de.md`. After reviewing an English change, update the translation
+and its `sourceDigest` (SHA-256 of the English source with LF line endings).
+Tests compare page coverage, digests, headings, code, tables and internal links.
+Search, portable Markdown and MCP results remain language-specific.
+Playground controls and shared executable example output currently remain English.
+
+## Review a local library change
+
+Build the library first, then select it for documentation tests and previews:
+
+```powershell
+$env:PDFMAKE_SOURCE = 'C:\path\to\pdfmake'
+node scripts/sync-native-types.mjs $env:PDFMAKE_SOURCE
+npm run docs:generate
+npm test
+npm run build
```
-and open in browser:
+The selected package version must match `versions.json`. Without the override,
+PDF generation uses the pinned published runtime. **The published 0.3.12 runtime
+has no bundled declarations or preflight API.** This development branch retains
+an explicitly attributed, declaration-only snapshot from the improved library so
+docs TypeScript examples are reproducible before its release. Native package
+imports are verified against the actual tarball in the library repository.
+The preflight API is used by previews when the selected runtime implements it;
+there is no shim claiming an old runtime supports new functionality.
+
+Check declaration synchronization with:
+
+```sh
+node scripts/sync-native-types.mjs /path/to/pdfmake --check
```
-http://localhost:1313/docs/0.3/
+
+Once native declarations are released, update the pinned runtime and snapshot
+together. PDF.js, CodeMirror and TypeScript are documentation tooling only.
+
+The library's standalone playground mirrors these authored UI sources:
+
+```sh
+node scripts/sync-playground.mjs /path/to/pdfmake
+node scripts/sync-playground.mjs /path/to/pdfmake --check
```
-#### Deploy webpages
+## Markdown and MCP
+
+Generation produces `llms.txt`, `llms-full.txt`, individual Markdown pages and
+`docs-index.json` from the same source as the website. Each snapshot and language
+has its own exports. Configure an MCP client to launch:
+
+```sh
+node /absolute/path/to/docs/mcp/server.mjs
```
-hugo --cleanDestinationDir
+
+The stdio server exposes `search_docs`, `get_doc` and versioned Markdown resources.
+It does not execute examples, render PDFs or read arbitrary caller-selected paths.
+See [the integration guide](content/guides/llm-and-mcp.md).
+
+## Versions and GitHub Pages
+
+`versions.json` defines real supported snapshots and their library pins. The `0.1`
+branch owns historical 0.1/0.2 documentation; never overwrite it with a 0.3 build.
+To prepare another series, add a verified snapshot and matching runtime/source ref.
+Version selectors, canonical URLs, search and exports derive from that registry.
+Build isolated snapshots with `DOCS_VERSION`; compose a local collection with:
+
+```sh
+npm run build:collection -- collection 0.3=public
```
+
+GitHub Pages remains a suitable host: this is a static, server-rendered website
+with client-side enhancements. No application server or separate playground host
+is required. The workflow uses GitHub's official configure/upload/deploy actions,
+OIDC and a protected `github-pages` environment, with no personal deployment token secret. Only the explicit publication job has
+`contents: write`, needed to archive the exact deployed site for subsequent series.
+
+Production publication is **explicit**, from `master` in `pdfmake/docs`: dispatch
+**Documentation checks and Pages** with `deploy: true`. It builds and tests first,
+then deploys that exact artifact. `assemble-pages.mjs` preserves the existing
+`gh-pages` root and every other registered snapshot, verifies metadata and stages
+the current series under `0.3/`. GitHub serves the artifact under `/docs/`.
+Deployments are serialized and do not cancel each other.
+
+Before enabling publication, a maintainer must select **GitHub Actions** as the
+Pages source, protect the `github-pages` environment (branch restriction and
+required reviewer), retain the historical `gh-pages` branch as the preservation
+source, and retire any competing publisher. This local review changes none of
+those settings and performs no deployment.
+
+For rollback, dispatch the last known-good source commit on the allowed branch
+after reverting the offending change; the same tests and complete-site assembly
+run again. The workflow commits the successfully deployed site to `gh-pages` as its preservation
+archive; the root and other series retain their bytes. A normal fast-forward push
+rejects concurrent modifications. Treat an archive-step failure as a failed
+publication and repair/retry it before publishing another series.
+`deployment.json` records the deployed source commit, series and runtime pin.
+
+## Contribute
+
+Follow [AGENTS.md](AGENTS.md), include a minimal example for behavior changes and
+run the relevant validation commands above. Keep the site usable without JS and
+retain the MIT notices for imported declarations and other third-party assets.
diff --git a/config.toml b/config.toml
index 9ac60bd3..99cb3e6d 100644
--- a/config.toml
+++ b/config.toml
@@ -1,13 +1,15 @@
baseURL = "https://pdfmake.github.io/docs/0.3/"
-languageCode = "en-us"
+locale = "en-US"
title = "pdfmake"
-theme = "docdock"
+enableRobotsTXT = true
+disableKinds = ["taxonomy", "term", "RSS"]
+# Local layouts own the documentation UI; the legacy theme is not loaded.
pygmentsCodeFences = true
pygmentsStyle = "monokailight"
[params]
editURL = "https://github.com/pdfmake/docs/edit/master/content/"
-disableSearch = true
+disableSearch = false
[[menu.shortcuts]]
pre = "
+
+Im Browser brauchst du Engine und Schriften in dieser Reihenfolge. Der vollständige Schnellstart enthält einen Download-Button und Fehlerbehandlung.
+
+[Browser-Schnellstart](/docs/0.3/de/getting-started/client-side/)
+
+
+
+## 2. Die Definition verstehen
+
+Die Definition ist ein JavaScript-Objekt, kein HTML. `content` enthält Blöcke in Lesereihenfolge. Dieses Beispiel erzeugt genau die sichtbare PDF. Bearbeite es im Playground und kehre hierher zurück, ohne deinen Arbeitsbereich zu verlieren.
+
+{{< example id="welcome" >}}
+
+## 3. Mit dem passenden Baustein weitermachen
+
+- [Deine erste PDF](/docs/0.3/de/learn/first-pdf/)
+- [Das Dokumentmodell](/docs/0.3/de/learn/document-model/)
+- [Stile und Formatierung](/docs/0.3/de/document-definition-object/styling/)
+- [Tabellen](/docs/0.3/de/document-definition-object/tables/)
+- [Schriften und Zeichensätze](/docs/0.3/de/fonts/)
+- [Fehler erkennen und behandeln](/docs/0.3/de/guides/errors/)
+
+Verwende bei jeder Generierung eine neue Definition, weil das Layout das Objekt verändert. Ausgabemethoden liefern Promises: Warte mit `await` und behandle Fehler.
diff --git a/content/_index.es.md b/content/_index.es.md
new file mode 100644
index 00000000..56db3106
--- /dev/null
+++ b/content/_index.es.md
@@ -0,0 +1,70 @@
++++
+title = "Resumen"
+description = "Crea PDF con pdfmake 0.3: guías paso a paso, ejemplos ejecutables y referencia para aplicaciones JavaScript."
+weight = 0
+sourceDigest = "40e175e9dccd2d2df54cd76144b2e0ff1cce23630047f5fc7dc35aed51165b7b"
++++
+
+Crea un PDF en tres pasos: configura el entorno, describe el contenido y solicita una salida.
+
+## 1. Elige el entorno
+
+
+
+
+El navegador necesita el motor y después las fuentes. La guía completa incluye un botón de descarga y gestión de errores.
+
+[Inicio rápido en el navegador](/docs/0.3/es/getting-started/client-side/)
+
+
+
+## 2. Entiende la definición
+
+Una definición es un objeto JavaScript, no HTML. `content` enumera bloques en orden de lectura. Este ejemplo genera exactamente el PDF mostrado. Modifícalo en el playground y vuelve aquí sin perder tu espacio de trabajo.
+
+{{< example id="welcome" >}}
+
+## 3. Elige el siguiente elemento
+
+- [Tu primer PDF](/docs/0.3/es/learn/first-pdf/)
+- [El modelo de documento](/docs/0.3/es/learn/document-model/)
+- [Estilos y formato](/docs/0.3/es/document-definition-object/styling/)
+- [Tablas](/docs/0.3/es/document-definition-object/tables/)
+- [Fuentes y caracteres](/docs/0.3/es/fonts/)
+- [Reconocer y gestionar errores](/docs/0.3/es/guides/errors/)
+
+Usa una definición nueva para cada generación porque la composición modifica el objeto. Las salidas devuelven Promises: espéralas con `await` y gestiona errores.
diff --git a/content/_index.fr.md b/content/_index.fr.md
new file mode 100644
index 00000000..163adfe5
--- /dev/null
+++ b/content/_index.fr.md
@@ -0,0 +1,70 @@
++++
+title = "Vue d’ensemble"
+description = "Créez des PDF avec pdfmake 0.3 : guides progressifs, exemples exécutables et référence pour JavaScript."
+weight = 0
+sourceDigest = "40e175e9dccd2d2df54cd76144b2e0ff1cce23630047f5fc7dc35aed51165b7b"
++++
+
+Créez un PDF en trois étapes : configurez l’environnement, décrivez le contenu, puis demandez une sortie.
+
+## 1. Choisir votre environnement
+
+
+
+
+Utilisez Node.js 20 ou ultérieur. Installez la version fixe ci-dessous, enregistrez cet exemple complet dans `first-pdf.cjs`, puis lancez `node first-pdf.cjs`.
+
+```sh
+npm install pdfmake@0.3.12
+```
+
+```js
+const pdfmake = require('pdfmake');
+
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
+
+async function main() {
+ const definition = {
+ defaultStyle: { font: 'Helvetica' },
+ content: [
+ { text: 'Hello, pdfmake!', fontSize: 24, bold: true },
+ 'Your first PDF, generated in Node.js.'
+ ]
+ };
+ await pdfmake.createPdf(definition).write('document.pdf');
+}
+
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+[Démarrage avec Node.js](/docs/0.3/fr/getting-started/server-side/)
+
+
+
+
+Le navigateur a besoin du moteur puis des polices. Le guide complet inclut un bouton de téléchargement et la gestion des erreurs.
+
+[Démarrage dans le navigateur](/docs/0.3/fr/getting-started/client-side/)
+
+
+
+## 2. Comprendre la définition
+
+Une définition est un objet JavaScript, pas du HTML. `content` énumère les blocs dans l’ordre de lecture. Cet exemple génère exactement le PDF affiché. Modifiez-le dans le playground, puis revenez ici sans perdre votre espace de travail.
+
+{{< example id="welcome" >}}
+
+## 3. Choisir le prochain élément
+
+- [Votre premier PDF](/docs/0.3/fr/learn/first-pdf/)
+- [Le modèle de document](/docs/0.3/fr/learn/document-model/)
+- [Styles et mise en forme](/docs/0.3/fr/document-definition-object/styling/)
+- [Tableaux](/docs/0.3/fr/document-definition-object/tables/)
+- [Polices et caractères](/docs/0.3/fr/fonts/)
+- [Comprendre et gérer les erreurs](/docs/0.3/fr/guides/errors/)
+
+Utilisez une définition neuve à chaque génération, car la mise en page modifie l’objet. Les sorties renvoient des Promises : attendez-les avec `await` et gérez les erreurs.
diff --git a/content/_index.md b/content/_index.md
index 7ca354b0..6a4f4431 100644
--- a/content/_index.md
+++ b/content/_index.md
@@ -1,60 +1,69 @@
+++
-title = "pdfmake"
-description = ""
+title = "pdfmake documentation"
+description = "Generate PDFs with pdfmake 0.3 in Node.js and browsers. Start with tested examples and explore the document reference."
+weight = 0
+++
-# pdfmake
+Build a PDF in three steps: configure the runtime, describe the content, then request an output.
-PDF document generation library for server-side and client-side usage in pure JavaScript.
+## 1. Choose your runtime
-## Features
+
+
-##### basics
+Use Node.js 20 or later. Install the pinned version below, save the complete example as `first-pdf.cjs`, then run `node first-pdf.cjs`.
-* line-wrapping
-* text-alignments _(left, right, centered, justified)_
-* numbered and bulleted lists
-* margins
-* images and vector graphics
+```sh
+npm install pdfmake@0.3.12
+```
-##### styling
+```js
+const pdfmake = require('pdfmake');
-* convenient styling
-* style inheritance
-* custom style dictionaries
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
-##### tables and columns
+async function main() {
+ const definition = {
+ defaultStyle: { font: 'Helvetica' },
+ content: [
+ { text: 'Hello, pdfmake!', fontSize: 24, bold: true },
+ 'Your first PDF, generated in Node.js.'
+ ]
+ };
+ await pdfmake.createPdf(definition).write('document.pdf');
+}
-* auto/fixed/star-sized/percentage columns widths
-* col-spans and row-spans
-* headers _automatically repeated in case of a page-break_
-* non-breaking rows
-* non-breaking sections _keeping headers and rows together_
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
-##### page headers and footers
+[Node.js quickstart](/docs/0.3/getting-started/server-side/)
-* static or dynamic content
-* page numbers
-* page count
+
+
-##### other
+The browser needs the engine and fonts, loaded in that order. The complete quickstart includes a download button and error handling.
-* page dimensions and orientations
-* background-layer
-* custom page breaks
-* font embedding
-* support for complex, multi-level (nested) structures
-* table of contents
-* setting of PDF metadata _(e.g. author, subject)_
-* tiling patterns
+[Browser quickstart](/docs/0.3/getting-started/client-side/)
-##### client-side helper methods
+
-* download _with the specified filename_
-* open _in another tab_
-* print _auto-triggering print_
+## 2. Understand the definition
+A definition is a JavaScript object, not HTML. `content` lists blocks in reading order. This example generates exactly the PDF shown. Open it in the playground to edit it, then return here without losing your workspace.
-## Examples
+{{< example id="welcome" >}}
-Check out [the playground](http://bpampuch.github.io/pdfmake/playground.html) and [examples](https://github.com/bpampuch/pdfmake/tree/master/examples).
+## 3. Continue with the right building block
+
+- [Your first PDF](/docs/0.3/learn/first-pdf/)
+- [The document model](/docs/0.3/learn/document-model/)
+- [Styling](/docs/0.3/document-definition-object/styling/)
+- [Tables](/docs/0.3/document-definition-object/tables/)
+- [Fonts and character coverage](/docs/0.3/fonts/)
+- [Errors and diagnostics](/docs/0.3/guides/errors/)
+
+Use a fresh definition for every generation; layout mutates the object. Output methods return Promises: await them and handle failures.
diff --git a/content/_index.pt-br.md b/content/_index.pt-br.md
new file mode 100644
index 00000000..55b28556
--- /dev/null
+++ b/content/_index.pt-br.md
@@ -0,0 +1,70 @@
++++
+title = "Visão geral"
+description = "Crie PDFs com pdfmake 0.3: guias passo a passo, exemplos executáveis e referência para aplicações JavaScript."
+weight = 0
+sourceDigest = "40e175e9dccd2d2df54cd76144b2e0ff1cce23630047f5fc7dc35aed51165b7b"
++++
+
+Crie um PDF em três passos: configure o ambiente, descreva o conteúdo e solicite uma saída.
+
+## 1. Escolha o ambiente
+
+
+
+
+O navegador precisa do motor e depois das fontes. O guia completo inclui um botão de download e tratamento de erros.
+
+[Início rápido no navegador](/docs/0.3/pt-br/getting-started/client-side/)
+
+
+
+## 2. Entenda a definição
+
+Uma definição é um objeto JavaScript, não HTML. `content` lista os blocos na ordem de leitura. Este exemplo gera exatamente o PDF exibido. Edite-o no playground e volte aqui sem perder seu espaço de trabalho.
+
+{{< example id="welcome" >}}
+
+## 3. Escolha o próximo elemento
+
+- [Seu primeiro PDF](/docs/0.3/pt-br/learn/first-pdf/)
+- [O modelo de documento](/docs/0.3/pt-br/learn/document-model/)
+- [Estilos e formatação](/docs/0.3/pt-br/document-definition-object/styling/)
+- [Tabelas](/docs/0.3/pt-br/document-definition-object/tables/)
+- [Fontes e caracteres](/docs/0.3/pt-br/fonts/)
+- [Reconhecer e tratar erros](/docs/0.3/pt-br/guides/errors/)
+
+Crie uma definição nova a cada geração, pois a composição modifica o objeto. As saídas retornam Promises: aguarde com `await` e trate falhas.
diff --git a/content/document-definition-object/_index.de.md b/content/document-definition-object/_index.de.md
new file mode 100644
index 00000000..ec80304f
--- /dev/null
+++ b/content/document-definition-object/_index.de.md
@@ -0,0 +1,50 @@
++++
+title = "Referenz zur Dokumentdefinition"
+description = "Beschreibe PDF-Inhalt, Stile, Seiten und Metadaten mit dem deklarativen Dokumentdefinitionsobjekt von pdfmake 0.3."
+weight = 20
+sourceDigest = "4ba6505e4e79830c1a75f138d92099725eb693602811b878dcbb870190e10ec7"
++++
+
+## Aufbau einer Definition
+
+```js
+const docDefinition = {
+ pageSize: 'A4',
+ pageOrientation: 'portrait',
+ pageMargins: [40, 50, 40, 50],
+ defaultStyle: { fontSize: 12 },
+ styles: { heading: { fontSize: 20, bold: true } },
+ info: { title: 'Example document', author: 'Example author' },
+ content: [
+ { text: 'Document heading', style: 'heading' },
+ 'A plain string becomes a paragraph.',
+ { ul: ['First item', 'Second item'] }
+ ]
+};
+```
+
+Übergib die Definition nach der Schriftkonfiguration an die `createPdf`-Methode deiner Laufzeit. Alle numerischen Maße werden in **Punkten** angegeben (72 Punkte pro Zoll). Die Reihenfolge der Seitenränder ist **links, oben, rechts, unten**. Ein `content`-Array bildet einen vertikalen Stapel. Erzeuge für jeden Renderdurchlauf ein neues Objekt; beim Layout werden interne Messwerte und Positionen hinzugefügt.
+
+## Inhaltsknoten
+
+| Knoten | Zweck | Referenz |
+| --- | --- | --- |
+| `{ text: '...' }` | Absatz oder Inline-Textsegmente | [Stile](/docs/0.3/de/document-definition-object/styling/) |
+| `{ stack: [...] }` | Blöcke gruppieren und einen gemeinsamen Stil anwenden | [Stapel](/docs/0.3/de/document-definition-object/stack/) |
+| `{ columns: [...] }` | Inhalte nebeneinander anordnen | [Spalten](/docs/0.3/de/document-definition-object/columns/) |
+| `{ table: { body: [...] } }` | Zeilen, Zellen und wiederholte Kopfzeilen | [Tabellen](/docs/0.3/de/document-definition-object/tables/) |
+| `{ ul: [...] }`, `{ ol: [...] }` | Aufzählungs- und nummerierte Listen | [Listen](/docs/0.3/de/document-definition-object/lists/) |
+| `{ image: 'key' }` | PNG oder JPEG | [Bilder](/docs/0.3/de/document-definition-object/images/) |
+| `{ svg: '' }` | SVG-Vektorgrafik | [SVGs](/docs/0.3/de/document-definition-object/svgs/) |
+| `{ qr: '...' }` | QR-Code | [QR-Code](/docs/0.3/de/document-definition-object/qr/) |
+
+## Dokumentweite Einstellungen
+
+- [Seitengröße, Ausrichtung und Umbrüche](/docs/0.3/de/document-definition-object/page/), [Ränder](/docs/0.3/de/document-definition-object/margins/) und [Abschnitte](/docs/0.3/de/document-definition-object/sections/).
+- [Kopf- und Fußzeilen](/docs/0.3/de/document-definition-object/headers-footers/), [Hintergründe](/docs/0.3/de/document-definition-object/background-layer/) und [Wasserzeichen](/docs/0.3/de/document-definition-object/watermark/).
+- [Metadaten](/docs/0.3/de/document-definition-object/document-medatadata/), [Links](/docs/0.3/de/document-definition-object/links/), [Inhaltsverzeichnis](/docs/0.3/de/document-definition-object/toc/) und [Gliederungen](/docs/0.3/de/document-definition-object/outlines/).
+- [Anhänge](/docs/0.3/de/document-definition-object/attachments/), [Verschlüsselung](/docs/0.3/de/document-definition-object/security/), [PDF/A](/docs/0.3/de/document-definition-object/pdfa/) und [Komprimierung](/docs/0.3/de/document-definition-object/compression/).
+
+## Definition und Rendering-Optionen
+
+Inhalt und visuelle Einstellungen gehören in die Definition. `fontLayoutCache` und `bufferPages` gehören in das zweite Argument von `createPdf`. Schriften, Tabellenlayoutregistrierungen und Ressourcenrichtlinien werden über die pdfmake-API festgelegt. Siehe [API-Übersicht](/docs/0.3/de/guides/api-reference/).
diff --git a/content/document-definition-object/_index.es.md b/content/document-definition-object/_index.es.md
new file mode 100644
index 00000000..0429a9ae
--- /dev/null
+++ b/content/document-definition-object/_index.es.md
@@ -0,0 +1,50 @@
++++
+sourceDigest = "4ba6505e4e79830c1a75f138d92099725eb693602811b878dcbb870190e10ec7"
+title = "Referencia de la definición del documento"
+description = "Describe el contenido PDF, los estilos, las páginas y los metadatos con el objeto declarativo de definición de documento de pdfmake 0.3."
+weight = 20
++++
+
+## Estructura de una definición
+
+```js
+const docDefinition = {
+ pageSize: 'A4',
+ pageOrientation: 'portrait',
+ pageMargins: [40, 50, 40, 50],
+ defaultStyle: { fontSize: 12 },
+ styles: { heading: { fontSize: 20, bold: true } },
+ info: { title: 'Example document', author: 'Example author' },
+ content: [
+ { text: 'Document heading', style: 'heading' },
+ 'A plain string becomes a paragraph.',
+ { ul: ['First item', 'Second item'] }
+ ]
+};
+```
+
+Pasa la definición al método `createPdf` del entorno de ejecución después de configurar las fuentes. Todas las dimensiones numéricas usan **puntos** (72 puntos por pulgada). Los márgenes siguen el orden **izquierda, arriba, derecha, abajo**. La matriz `content` forma una pila vertical. Crea un objeto nuevo para cada renderizado; el proceso de maquetación añade medidas y posiciones internas.
+
+## Nodos de contenido
+
+| Nodo | Propósito | Referencia |
+| --- | --- | --- |
+| `{ text: '...' }` | Párrafo o segmentos en línea | [Estilos](/docs/0.3/es/document-definition-object/styling/) |
+| `{ stack: [...] }` | Agrupa bloques y aplica un estilo compartido | [Pilas](/docs/0.3/es/document-definition-object/stack/) |
+| `{ columns: [...] }` | Contenido en paralelo | [Columnas](/docs/0.3/es/document-definition-object/columns/) |
+| `{ table: { body: [...] } }` | Filas, celdas y encabezados repetidos | [Tablas](/docs/0.3/es/document-definition-object/tables/) |
+| `{ ul: [...] }`, `{ ol: [...] }` | Listas con viñetas y numeradas | [Listas](/docs/0.3/es/document-definition-object/lists/) |
+| `{ image: 'key' }` | PNG o JPEG | [Imágenes](/docs/0.3/es/document-definition-object/images/) |
+| `{ svg: '' }` | Contenido vectorial SVG | [SVG](/docs/0.3/es/document-definition-object/svgs/) |
+| `{ qr: '...' }` | Código QR | [QR](/docs/0.3/es/document-definition-object/qr/) |
+
+## Configuración del documento
+
+- [Tamaño, orientación y saltos de página](/docs/0.3/es/document-definition-object/page/), [márgenes](/docs/0.3/es/document-definition-object/margins/) y [secciones](/docs/0.3/es/document-definition-object/sections/).
+- [Encabezados y pies de página](/docs/0.3/es/document-definition-object/headers-footers/), [fondos](/docs/0.3/es/document-definition-object/background-layer/) y [marcas de agua](/docs/0.3/es/document-definition-object/watermark/).
+- [Metadatos](/docs/0.3/es/document-definition-object/document-medatadata/), [enlaces](/docs/0.3/es/document-definition-object/links/), [índices](/docs/0.3/es/document-definition-object/toc/) y [esquemas](/docs/0.3/es/document-definition-object/outlines/).
+- [Archivos adjuntos](/docs/0.3/es/document-definition-object/attachments/), [cifrado](/docs/0.3/es/document-definition-object/security/), [PDF/A](/docs/0.3/es/document-definition-object/pdfa/) y [compresión](/docs/0.3/es/document-definition-object/compression/).
+
+## Definición y opciones de renderizado
+
+El contenido y la configuración visual pertenecen a la definición. `fontLayoutCache` y `bufferPages` pertenecen al segundo argumento de `createPdf`. Las fuentes, los registros de distribuciones de tablas y las políticas de recursos se configuran en la API de pdfmake. Consulta la [referencia de la API](/docs/0.3/es/guides/api-reference/).
diff --git a/content/document-definition-object/_index.fr.md b/content/document-definition-object/_index.fr.md
new file mode 100644
index 00000000..fcc77913
--- /dev/null
+++ b/content/document-definition-object/_index.fr.md
@@ -0,0 +1,50 @@
++++
+title = "Référence de la définition de document"
+description = "Décrivez le contenu, les styles, les pages et les métadonnées PDF avec l’objet déclaratif de définition de document pdfmake 0.3."
+weight = 20
+sourceDigest = "4ba6505e4e79830c1a75f138d92099725eb693602811b878dcbb870190e10ec7"
++++
+
+## Structure d’une définition
+
+```js
+const docDefinition = {
+ pageSize: 'A4',
+ pageOrientation: 'portrait',
+ pageMargins: [40, 50, 40, 50],
+ defaultStyle: { fontSize: 12 },
+ styles: { heading: { fontSize: 20, bold: true } },
+ info: { title: 'Example document', author: 'Example author' },
+ content: [
+ { text: 'Document heading', style: 'heading' },
+ 'A plain string becomes a paragraph.',
+ { ul: ['First item', 'Second item'] }
+ ]
+};
+```
+
+Transmettez la définition à la méthode `createPdf` de votre environnement après avoir configuré les polices. Toutes les dimensions numériques sont exprimées en **points** (72 points par pouce). Les marges suivent l’ordre **gauche, haut, droite, bas**. Le tableau `content` forme une pile verticale. Créez un nouvel objet pour chaque rendu : le processus de mise en page y ajoute des mesures internes et des positions.
+
+## Nœuds de contenu
+
+| Nœud | Rôle | Référence |
+| --- | --- | --- |
+| `{ text: '...' }` | Paragraphe ou séquences de texte en ligne | [Styles](/docs/0.3/fr/document-definition-object/styling/) |
+| `{ stack: [...] }` | Regroupe des blocs et leur applique un style commun | [Piles](/docs/0.3/fr/document-definition-object/stack/) |
+| `{ columns: [...] }` | Contenu côte à côte | [Colonnes](/docs/0.3/fr/document-definition-object/columns/) |
+| `{ table: { body: [...] } }` | Lignes, cellules et en-têtes répétés | [Tableaux](/docs/0.3/fr/document-definition-object/tables/) |
+| `{ ul: [...] }`, `{ ol: [...] }` | Listes à puces ou numérotées | [Listes](/docs/0.3/fr/document-definition-object/lists/) |
+| `{ image: 'key' }` | PNG ou JPEG | [Images](/docs/0.3/fr/document-definition-object/images/) |
+| `{ svg: '' }` | Contenu vectoriel SVG | [SVG](/docs/0.3/fr/document-definition-object/svgs/) |
+| `{ qr: '...' }` | Code QR | [QR](/docs/0.3/fr/document-definition-object/qr/) |
+
+## Paramètres du document
+
+- [Format, orientation et sauts de page](/docs/0.3/fr/document-definition-object/page/), [marges](/docs/0.3/fr/document-definition-object/margins/) et [sections](/docs/0.3/fr/document-definition-object/sections/).
+- [En-têtes et pieds de page](/docs/0.3/fr/document-definition-object/headers-footers/), [arrière-plans](/docs/0.3/fr/document-definition-object/background-layer/) et [filigranes](/docs/0.3/fr/document-definition-object/watermark/).
+- [Métadonnées](/docs/0.3/fr/document-definition-object/document-medatadata/), [liens](/docs/0.3/fr/document-definition-object/links/), [table des matières](/docs/0.3/fr/document-definition-object/toc/) et [plans](/docs/0.3/fr/document-definition-object/outlines/).
+- [Pièces jointes](/docs/0.3/fr/document-definition-object/attachments/), [chiffrement](/docs/0.3/fr/document-definition-object/security/), [PDF/A](/docs/0.3/fr/document-definition-object/pdfa/) et [compression](/docs/0.3/fr/document-definition-object/compression/).
+
+## Définition et options de rendu
+
+Le contenu et les paramètres visuels appartiennent à la définition. `fontLayoutCache` et `bufferPages` se placent dans le deuxième argument de `createPdf`. Les polices, les mises en page de tableau et les politiques de ressources se configurent sur l’API pdfmake. Consultez la [référence de l’API](/docs/0.3/fr/guides/api-reference/).
diff --git a/content/document-definition-object/_index.md b/content/document-definition-object/_index.md
index 62476247..00f2efab 100644
--- a/content/document-definition-object/_index.md
+++ b/content/document-definition-object/_index.md
@@ -1,20 +1,49 @@
+++
-title = "Document-definition-object"
-description = ""
+title = "Document definition reference"
+description = "Describe PDF content, styles, pages and metadata with the declarative pdfmake 0.3 document definition object."
weight = 20
-alwaysopen = true
+++
-pdfmake follows a declarative approach. It basically means, you'll never have to calculate positions manually or use commands like: ```writeText(text, x, y)```, ```moveDown``` etc..., as you would with a lot of other libraries.
-
-The most fundamental concept to be mastered is the document-definition-object which can be as simple as:
+## Shape of a definition
```js
-var docDefinition = { content: 'This is an sample PDF printed with pdfMake' };
+const docDefinition = {
+ pageSize: 'A4',
+ pageOrientation: 'portrait',
+ pageMargins: [40, 50, 40, 50],
+ defaultStyle: { fontSize: 12 },
+ styles: { heading: { fontSize: 20, bold: true } },
+ info: { title: 'Example document', author: 'Example author' },
+ content: [
+ { text: 'Document heading', style: 'heading' },
+ 'A plain string becomes a paragraph.',
+ { ul: ['First item', 'Second item'] }
+ ]
+};
```
-or become pretty complex (having multi-level tables, images, lists, paragraphs, margins, styles etc...).
+Pass the definition to your runtime's `createPdf` method after configuring fonts. All numeric dimensions use **points** (72 points per inch). Margins use the order **left, top, right, bottom**. A content array is a vertical stack. Create a fresh object for each render; the layout process adds internal measurements and positions.
+
+## Content nodes
+
+| Node | Purpose | Reference |
+| --- | --- | --- |
+| `{ text: '...' }` | Paragraph or inline runs | [Styling](/docs/0.3/document-definition-object/styling/) |
+| `{ stack: [...] }` | Group blocks and apply a shared style | [Stacks](/docs/0.3/document-definition-object/stack/) |
+| `{ columns: [...] }` | Side-by-side content | [Columns](/docs/0.3/document-definition-object/columns/) |
+| `{ table: { body: [...] } }` | Rows, cells and repeating headers | [Tables](/docs/0.3/document-definition-object/tables/) |
+| `{ ul: [...] }`, `{ ol: [...] }` | Bullet and numbered lists | [Lists](/docs/0.3/document-definition-object/lists/) |
+| `{ image: 'key' }` | PNG or JPEG | [Images](/docs/0.3/document-definition-object/images/) |
+| `{ svg: '' }` | SVG vector content | [SVGs](/docs/0.3/document-definition-object/svgs/) |
+| `{ qr: '...' }` | QR code | [QR](/docs/0.3/document-definition-object/qr/) |
+
+## Document-level settings
+
+- [Page size, orientation and breaks](/docs/0.3/document-definition-object/page/), [margins](/docs/0.3/document-definition-object/margins/) and [sections](/docs/0.3/document-definition-object/sections/).
+- [Headers and footers](/docs/0.3/document-definition-object/headers-footers/), [backgrounds](/docs/0.3/document-definition-object/background-layer/) and [watermarks](/docs/0.3/document-definition-object/watermark/).
+- [Metadata](/docs/0.3/document-definition-object/document-medatadata/), [links](/docs/0.3/document-definition-object/links/), [table of contents](/docs/0.3/document-definition-object/toc/) and [outlines](/docs/0.3/document-definition-object/outlines/).
+- [Attachments](/docs/0.3/document-definition-object/attachments/), [encryption](/docs/0.3/document-definition-object/security/), [PDF/A](/docs/0.3/document-definition-object/pdfa/) and [compression](/docs/0.3/document-definition-object/compression/).
-#### Units
+## Definition versus rendering options
-All numbers are in points (pt) unit (sometimes labeled as PDF/PostScript points).
+Content and visual settings belong in the definition. `fontLayoutCache` and `bufferPages` belong in the second `createPdf` argument. Fonts, table layout registrations and resource policies belong on the pdfmake API. See [API reference](/docs/0.3/guides/api-reference/).
diff --git a/content/document-definition-object/_index.pt-br.md b/content/document-definition-object/_index.pt-br.md
new file mode 100644
index 00000000..6d101bf7
--- /dev/null
+++ b/content/document-definition-object/_index.pt-br.md
@@ -0,0 +1,50 @@
++++
+title = "Referência da definição do documento"
+description = "Descreva conteúdo PDF, estilos, páginas e metadados com o objeto declarativo de definição de documento do pdfmake 0.3."
+weight = 20
+sourceDigest = "4ba6505e4e79830c1a75f138d92099725eb693602811b878dcbb870190e10ec7"
++++
+
+## Estrutura de uma definição
+
+```js
+const docDefinition = {
+ pageSize: 'A4',
+ pageOrientation: 'portrait',
+ pageMargins: [40, 50, 40, 50],
+ defaultStyle: { fontSize: 12 },
+ styles: { heading: { fontSize: 20, bold: true } },
+ info: { title: 'Example document', author: 'Example author' },
+ content: [
+ { text: 'Document heading', style: 'heading' },
+ 'A plain string becomes a paragraph.',
+ { ul: ['First item', 'Second item'] }
+ ]
+};
+```
+
+Depois de configurar as fontes, passe a definição ao método `createPdf` do seu ambiente. Todas as dimensões numéricas usam **pontos** (72 pontos por polegada). As margens seguem a ordem **esquerda, superior, direita, inferior**. O array `content` forma uma pilha vertical. Crie um objeto novo para cada renderização; o processo de layout adiciona medidas e posições internas.
+
+## Nós de conteúdo
+
+| Nó | Finalidade | Referência |
+| --- | --- | --- |
+| `{ text: '...' }` | Parágrafo ou segmentos de texto em linha | [Estilos](/docs/0.3/pt-br/document-definition-object/styling/) |
+| `{ stack: [...] }` | Agrupar blocos e aplicar um estilo compartilhado | [Pilhas](/docs/0.3/pt-br/document-definition-object/stack/) |
+| `{ columns: [...] }` | Conteúdo lado a lado | [Colunas](/docs/0.3/pt-br/document-definition-object/columns/) |
+| `{ table: { body: [...] } }` | Linhas, células e cabeçalhos repetidos | [Tabelas](/docs/0.3/pt-br/document-definition-object/tables/) |
+| `{ ul: [...] }`, `{ ol: [...] }` | Listas com marcadores e numeradas | [Listas](/docs/0.3/pt-br/document-definition-object/lists/) |
+| `{ image: 'key' }` | PNG ou JPEG | [Imagens](/docs/0.3/pt-br/document-definition-object/images/) |
+| `{ svg: '' }` | Conteúdo vetorial SVG | [SVGs](/docs/0.3/pt-br/document-definition-object/svgs/) |
+| `{ qr: '...' }` | Código QR | [QR](/docs/0.3/pt-br/document-definition-object/qr/) |
+
+## Configurações do documento
+
+- [Tamanho, orientação e quebras de página](/docs/0.3/pt-br/document-definition-object/page/), [margens](/docs/0.3/pt-br/document-definition-object/margins/) e [seções](/docs/0.3/pt-br/document-definition-object/sections/).
+- [Cabeçalhos e rodapés](/docs/0.3/pt-br/document-definition-object/headers-footers/), [planos de fundo](/docs/0.3/pt-br/document-definition-object/background-layer/) e [marcas-d'água](/docs/0.3/pt-br/document-definition-object/watermark/).
+- [Metadados](/docs/0.3/pt-br/document-definition-object/document-medatadata/), [links](/docs/0.3/pt-br/document-definition-object/links/), [sumário](/docs/0.3/pt-br/document-definition-object/toc/) e [contornos](/docs/0.3/pt-br/document-definition-object/outlines/).
+- [Anexos](/docs/0.3/pt-br/document-definition-object/attachments/), [criptografia](/docs/0.3/pt-br/document-definition-object/security/), [PDF/A](/docs/0.3/pt-br/document-definition-object/pdfa/) e [compactação](/docs/0.3/pt-br/document-definition-object/compression/).
+
+## Definição e opções de renderização
+
+O conteúdo e as configurações visuais pertencem à definição. `fontLayoutCache` e `bufferPages` pertencem ao segundo argumento de `createPdf`. Fontes, registros de layout de tabela e políticas de recursos pertencem à API do pdfmake. Consulte a [referência da API](/docs/0.3/pt-br/guides/api-reference/).
diff --git a/content/document-definition-object/attachments.de.md b/content/document-definition-object/attachments.de.md
new file mode 100644
index 00000000..b2ba4a1c
--- /dev/null
+++ b/content/document-definition-object/attachments.de.md
@@ -0,0 +1,74 @@
++++
+title = "Dateianhänge einbetten"
+description = "Füge mit pdfmake 0.3 Dateien als PDF-Anmerkungen oder eingebettete Dateianhänge ein."
+weight = 2300
+alwaysopen = true
+sourceDigest = "fa2ac7caf1087dd025de26934674d3e7f4d0c75f51fbfb900170400b914fb224"
++++
+
+pdfmake unterstützt sowohl Dateianhänge als Anmerkungen als auch eingebettete Dateien. Eingebettete Dateien werden dem Wörterbuch `files` hinzugefügt und erscheinen in den Anhangbereichen unterstützter PDF-Viewer.
+
+Dateianhänge sind Anmerkungen, die auf eine Datei verweisen.
+
+Jeder Anhang und jede eingebettete Datei muss mindestens `src` angeben. Es wird dringend empfohlen, über `name` einen Dateinamen anzugeben.
+
+Der `src` eines Anhangs kann als Data-URL angegeben werden (wie beim folgenden Anhang von http://www.clipartbest.com/clipart-dT7zx5rT9); lokale Dateien sind ebenfalls möglich.
+
+```js
+var dd = {
+ content: [
+ 'Any attachment or embedded file must provide at least a "src", providing a filename through "name" is highly recommended.',
+ 'The "src" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',
+ {
+ attachment: {
+ src: 'data:image/png;base64,iVBOR....',
+ name: 'testImage.png'
+ }
+ },
+ 'You can also define an attachment in the "attachments" dictionary and reference it by name.',
+ {
+ attachment: 'sampleImage'
+ },
+ 'And there are three different standard icons for attachments, "GraphPush", "Paperclip", and "Push" (the default value). Set them with the "icon" option.',
+ {
+ attachment: 'sampleImage',
+ icon: 'GraphPush'
+ },
+ {
+ attachment: 'sampleImage',
+ icon: 'Paperclip'
+ },
+ {
+ attachment: 'sampleImage',
+ icon: 'Push'
+ },
+ 'For better customization, add an image and attach a file to it with linkToFile:',
+ {
+ image: 'fonts/sampleImage.jpg',
+ width: 150,
+ linkToFile: 'sampleImage'
+ },
+ "You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.",
+ {
+ attachment: {
+ src: 'data:image/png;base64,iVBOR....',
+ name: 'withDescription.png',
+ description: 'file description'
+ }
+ },
+ 'You can also define the "src" of an attachment or embedded file in the "attachments" and "files" dictionary via URL address.',
+ ],
+ attachments: {
+ sampleImage: {
+ src: 'fonts/sampleImage.jpg',
+ name: 'sampleImage.png'
+ }
+ },
+ files: {
+ README: {
+ src: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',
+ name: 'pdfmake README.md'
+ }
+ }
+};
+```
diff --git a/content/document-definition-object/attachments.es.md b/content/document-definition-object/attachments.es.md
new file mode 100644
index 00000000..ea996a3c
--- /dev/null
+++ b/content/document-definition-object/attachments.es.md
@@ -0,0 +1,68 @@
++++
+sourceDigest = "fa2ac7caf1087dd025de26934674d3e7f4d0c75f51fbfb900170400b914fb224"
+title = "Incrustación de archivos adjuntos"
+description = "Configura la incrustación de archivos adjuntos en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2300
+alwaysopen = true
++++
+
+pdfmake permite adjuntar archivos como anotaciones y como archivos incrustados. Los archivos incrustados se añaden al diccionario `files` y aparecen en los paneles de archivos adjuntos de los visores PDF compatibles. Los adjuntos de archivo son anotaciones que enlazan a un archivo. Todo archivo adjunto o incrustado debe proporcionar al menos un `src`; se recomienda encarecidamente indicar el nombre mediante `name`. El `src` de cualquier adjunto puede estar en formato data URL (como el siguiente adjunto, tomado de http://www.clipartbest.com/clipart-dT7zx5rT9), aunque también se permiten archivos locales.
+
+```js
+var dd = {
+ content: [
+ 'Any attachment or embedded file must provide at least a "src", providing a filename through "name" is highly recommended.',
+ 'The "src" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',
+ {
+ attachment: {
+ src: 'data:image/png;base64,iVBOR....',
+ name: 'testImage.png'
+ }
+ },
+ 'You can also define an attachment in the "attachments" dictionary and reference it by name.',
+ {
+ attachment: 'sampleImage'
+ },
+ 'And there are three different standard icons for attachments, "GraphPush", "Paperclip", and "Push" (the default value). Set them with the "icon" option.',
+ {
+ attachment: 'sampleImage',
+ icon: 'GraphPush'
+ },
+ {
+ attachment: 'sampleImage',
+ icon: 'Paperclip'
+ },
+ {
+ attachment: 'sampleImage',
+ icon: 'Push'
+ },
+ 'For better customization, add an image and attach a file to it with linkToFile:',
+ {
+ image: 'fonts/sampleImage.jpg',
+ width: 150,
+ linkToFile: 'sampleImage'
+ },
+ "You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.",
+ {
+ attachment: {
+ src: 'data:image/png;base64,iVBOR....',
+ name: 'withDescription.png',
+ description: 'file description'
+ }
+ },
+ 'You can also define the "src" of an attachment or embedded file in the "attachments" and "files" dictionary via URL address.',
+ ],
+ attachments: {
+ sampleImage: {
+ src: 'fonts/sampleImage.jpg',
+ name: 'sampleImage.png'
+ }
+ },
+ files: {
+ README: {
+ src: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',
+ name: 'pdfmake README.md'
+ }
+ }
+};
+```
diff --git a/content/document-definition-object/attachments.fr.md b/content/document-definition-object/attachments.fr.md
new file mode 100644
index 00000000..dc9989bc
--- /dev/null
+++ b/content/document-definition-object/attachments.fr.md
@@ -0,0 +1,74 @@
++++
+title = "Intégration des pièces jointes"
+description = "Configurez les pièces jointes dans pdfmake 0.3 à l’aide d’exemples, d’options et de notes d’utilisation."
+weight = 2300
+alwaysopen = true
+sourceDigest = "fa2ac7caf1087dd025de26934674d3e7f4d0c75f51fbfb900170400b914fb224"
++++
+
+pdfmake permet de joindre des fichiers sous forme d’annotations ou de fichiers incorporés.
+Les fichiers incorporés sont ajoutés au dictionnaire « files » et apparaissent dans le panneau des pièces jointes des lecteurs PDF compatibles.
+Les pièces jointes sont des annotations qui renvoient vers un fichier.
+Toute pièce jointe ou tout fichier incorporé doit fournir au minimum un « src » ; il est vivement recommandé d’indiquer un nom de fichier avec « name ».
+Le « src » d’une pièce jointe peut être fourni au format dataURL (comme la pièce jointe suivante, provenant de http://www.clipartbest.com/clipart-dT7zx5rT9), mais les fichiers locaux sont également autorisés.
+
+```js
+var dd = {
+ content: [
+ 'Any attachment or embedded file must provide at least a "src", providing a filename through "name" is highly recommended.',
+ 'The "src" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',
+ {
+ attachment: {
+ src: 'data:image/png;base64,iVBOR....',
+ name: 'testImage.png'
+ }
+ },
+ 'You can also define an attachment in the "attachments" dictionary and reference it by name.',
+ {
+ attachment: 'sampleImage'
+ },
+ 'And there are three different standard icons for attachments, "GraphPush", "Paperclip", and "Push" (the default value). Set them with the "icon" option.',
+ {
+ attachment: 'sampleImage',
+ icon: 'GraphPush'
+ },
+ {
+ attachment: 'sampleImage',
+ icon: 'Paperclip'
+ },
+ {
+ attachment: 'sampleImage',
+ icon: 'Push'
+ },
+ 'For better customization, add an image and attach a file to it with linkToFile:',
+ {
+ image: 'fonts/sampleImage.jpg',
+ width: 150,
+ linkToFile: 'sampleImage'
+ },
+ "You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.",
+ {
+ attachment: {
+ src: 'data:image/png;base64,iVBOR....',
+ name: 'withDescription.png',
+ description: 'file description'
+ }
+ },
+ 'You can also define the "src" of an attachment or embedded file in the "attachments" and "files" dictionary via URL address.',
+ ],
+ attachments: {
+ sampleImage: {
+ src: 'fonts/sampleImage.jpg',
+ name: 'sampleImage.png'
+ }
+ },
+ files: {
+ README: {
+ src: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',
+ name: 'pdfmake README.md'
+ }
+ }
+};
+```
+
+sourceDigest = "fa2ac7caf1087dd025de26934674d3e7f4d0c75f51fbfb900170400b914fb224"
diff --git a/content/document-definition-object/attachments.md b/content/document-definition-object/attachments.md
index fd4c82a0..6de4b60d 100644
--- a/content/document-definition-object/attachments.md
+++ b/content/document-definition-object/attachments.md
@@ -1,6 +1,6 @@
+++
title = "Attachments embedding"
-description = ""
+description = "Configure attachments embedding in pdfmake 0.3 with examples, options and usage notes."
weight = 2300
alwaysopen = true
+++
diff --git a/content/document-definition-object/attachments.pt-br.md b/content/document-definition-object/attachments.pt-br.md
new file mode 100644
index 00000000..d206c65e
--- /dev/null
+++ b/content/document-definition-object/attachments.pt-br.md
@@ -0,0 +1,70 @@
++++
+title = "Anexos incorporados"
+description = "Adicione arquivos como anotações ou arquivos incorporados em documentos PDF do pdfmake 0.3."
+weight = 2300
+alwaysopen = true
+sourceDigest = "fa2ac7caf1087dd025de26934674d3e7f4d0c75f51fbfb900170400b914fb224"
++++
+
+O pdfmake oferece suporte a anexar arquivos como anotações e como arquivos incorporados. Arquivos incorporados são adicionados ao dicionário `files` e aparecem nos painéis de anexos dos visualizadores de PDF compatíveis. Anexos de arquivo são anotações que apontam para um arquivo.
+
+Todo anexo ou arquivo incorporado precisa fornecer pelo menos `src`; recomenda-se fortemente fornecer um nome de arquivo em `name`. O `src` pode estar no formato dataURL (como no anexo a seguir, obtido em http://www.clipartbest.com/clipart-dT7zx5rT9), mas arquivos locais também são permitidos.
+
+```js
+var dd = {
+ content: [
+ 'Any attachment or embedded file must provide at least a "src", providing a filename through "name" is highly recommended.',
+ 'The "src" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',
+ {
+ attachment: {
+ src: 'data:image/png;base64,iVBOR....',
+ name: 'testImage.png'
+ }
+ },
+ 'You can also define an attachment in the "attachments" dictionary and reference it by name.',
+ {
+ attachment: 'sampleImage'
+ },
+ 'And there are three different standard icons for attachments, "GraphPush", "Paperclip", and "Push" (the default value). Set them with the "icon" option.',
+ {
+ attachment: 'sampleImage',
+ icon: 'GraphPush'
+ },
+ {
+ attachment: 'sampleImage',
+ icon: 'Paperclip'
+ },
+ {
+ attachment: 'sampleImage',
+ icon: 'Push'
+ },
+ 'For better customization, add an image and attach a file to it with linkToFile:',
+ {
+ image: 'fonts/sampleImage.jpg',
+ width: 150,
+ linkToFile: 'sampleImage'
+ },
+ "You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.",
+ {
+ attachment: {
+ src: 'data:image/png;base64,iVBOR....',
+ name: 'withDescription.png',
+ description: 'file description'
+ }
+ },
+ 'You can also define the "src" of an attachment or embedded file in the "attachments" and "files" dictionary via URL address.',
+ ],
+ attachments: {
+ sampleImage: {
+ src: 'fonts/sampleImage.jpg',
+ name: 'sampleImage.png'
+ }
+ },
+ files: {
+ README: {
+ src: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',
+ name: 'pdfmake README.md'
+ }
+ }
+};
+```
diff --git a/content/document-definition-object/background-layer.de.md b/content/document-definition-object/background-layer.de.md
new file mode 100644
index 00000000..71a69b06
--- /dev/null
+++ b/content/document-definition-object/background-layer.de.md
@@ -0,0 +1,29 @@
++++
+title = "Hintergrundebene"
+description = "Lege mit Beispielen, Optionen und Anwendungshinweisen die Hintergrundebene in pdfmake 0.3 fest."
+weight = 2060
+alwaysopen = true
+sourceDigest = "5c5dac8a66e0c2a715ca9e59b03966f51840300097a5d71e3ae1d62e553f883a"
++++
+
+Die Hintergrundebene wird auf jeder Seite eingefügt.
+
+```js
+var docDefinition = {
+ background: 'simple text',
+
+ content: ['Example document content']
+};
+```
+
+Sie kann auch jedes andere Objekt enthalten (Bilder, Tabellen usw.) oder dynamisch erzeugt werden:
+
+```js
+var docDefinition = {
+ background: function(currentPage, pageSize) {
+ return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`
+ },
+
+ content: ['Example document content']
+};
+```
diff --git a/content/document-definition-object/background-layer.es.md b/content/document-definition-object/background-layer.es.md
new file mode 100644
index 00000000..7f883808
--- /dev/null
+++ b/content/document-definition-object/background-layer.es.md
@@ -0,0 +1,29 @@
++++
+sourceDigest = "5c5dac8a66e0c2a715ca9e59b03966f51840300097a5d71e3ae1d62e553f883a"
+title = "Capa de fondo"
+description = "Configura la capa de fondo en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2060
+alwaysopen = true
++++
+
+La capa de fondo se añade a todas las páginas.
+
+```js
+var docDefinition = {
+ background: 'simple text',
+
+ content: ['Example document content']
+};
+```
+
+También puede contener cualquier otro objeto (imágenes, tablas, etc.) o generarse dinámicamente:
+
+```js
+var docDefinition = {
+ background: function(currentPage, pageSize) {
+ return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`
+ },
+
+ content: ['Example document content']
+};
+```
diff --git a/content/document-definition-object/background-layer.fr.md b/content/document-definition-object/background-layer.fr.md
new file mode 100644
index 00000000..1dc78237
--- /dev/null
+++ b/content/document-definition-object/background-layer.fr.md
@@ -0,0 +1,29 @@
++++
+title = "Arrière-plan"
+description = "Ajoutez un arrière-plan à chaque page à l’aide d’un texte, d’un objet ou d’une fonction."
+weight = 2060
+alwaysopen = true
+sourceDigest = "5c5dac8a66e0c2a715ca9e59b03966f51840300097a5d71e3ae1d62e553f883a"
++++
+
+L’arrière-plan est ajouté à chaque page.
+
+```js
+var docDefinition = {
+ background: 'simple text',
+
+ content: ['Example document content']
+};
+```
+
+Il peut également contenir n’importe quel autre objet (images, tableaux, etc.) ou être généré dynamiquement :
+
+```js
+var docDefinition = {
+ background: function(currentPage, pageSize) {
+ return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`
+ },
+
+ content: ['Example document content']
+};
+```
diff --git a/content/document-definition-object/background-layer.md b/content/document-definition-object/background-layer.md
index b09f5a62..1b3a5d39 100644
--- a/content/document-definition-object/background-layer.md
+++ b/content/document-definition-object/background-layer.md
@@ -1,6 +1,6 @@
+++
title = "Background-layer"
-description = ""
+description = "Configure background-layer in pdfmake 0.3 with examples, options and usage notes."
weight = 2060
alwaysopen = true
+++
@@ -12,7 +12,7 @@ The background-layer will be added on every page.
var docDefinition = {
background: 'simple text',
- content: (...)
+ content: ['Example document content']
};
```
@@ -24,6 +24,6 @@ var docDefinition = {
return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`
},
- content: (...)
+ content: ['Example document content']
};
-```
\ No newline at end of file
+```
diff --git a/content/document-definition-object/background-layer.pt-br.md b/content/document-definition-object/background-layer.pt-br.md
new file mode 100644
index 00000000..50453eee
--- /dev/null
+++ b/content/document-definition-object/background-layer.pt-br.md
@@ -0,0 +1,29 @@
++++
+title = "Plano de fundo"
+description = "Defina um plano de fundo estático ou dinâmico aplicado a todas as páginas do documento pdfmake 0.3."
+weight = 2060
+alwaysopen = true
+sourceDigest = "5c5dac8a66e0c2a715ca9e59b03966f51840300097a5d71e3ae1d62e553f883a"
++++
+
+O plano de fundo é adicionado a todas as páginas.
+
+```js
+var docDefinition = {
+ background: 'simple text',
+
+ content: ['Example document content']
+};
+```
+
+Ele também pode conter qualquer outro objeto, como imagens e tabelas, ou ser gerado dinamicamente:
+
+```js
+var docDefinition = {
+ background: function(currentPage, pageSize) {
+ return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`
+ },
+
+ content: ['Example document content']
+};
+```
diff --git a/content/document-definition-object/columns.de.md b/content/document-definition-object/columns.de.md
new file mode 100644
index 00000000..e5fa282d
--- /dev/null
+++ b/content/document-definition-object/columns.de.md
@@ -0,0 +1,52 @@
++++
+title = "Spalten"
+description = "Lege mit Beispielen, Optionen und Anwendungshinweisen Spalten in pdfmake 0.3 fest."
+weight = 2020
+alwaysopen = true
+sourceDigest = "c5cad4de1cdcd5bc45a17a7f4bc373478b5f7e877859ca80db4facadca0459da"
++++
+
+Absätze werden standardmäßig als vertikaler Stapel von Elementen ausgegeben. Du kannst den verfügbaren Platz jedoch auch in Spalten aufteilen.
+
+```js
+var docDefinition = {
+ content: [
+ 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',
+ {
+ columns: [
+ {
+ // auto-sized columns have their widths based on their content
+ width: 'auto',
+ text: 'First column'
+ },
+ {
+ // star-sized columns fill the remaining space
+ // if there's more than one star-column, available width is divided equally
+ width: '*',
+ text: 'Second column'
+ },
+ {
+ // fixed width
+ width: 100,
+ text: 'Third column'
+ },
+ {
+ // % width
+ width: '20%',
+ text: 'Fourth column'
+ }
+ ],
+ // optional space between columns
+ columnGap: 10
+ },
+ 'This paragraph goes below all columns and has full width'
+ ]
+};
+```
+
+Der Inhalt einer Spalte ist nicht auf einfachen Text beschränkt. Er kann jedes gültige pdfmake-Element enthalten. Sieh dir dazu das Beispiel COLUMNS im [Playground](/docs/0.3/de/playground/) an.
+
+## Eigenschaften
+
+* `columnGap: number` legt den Abstand zwischen Spalten fest.
+* `snakingColumns: boolean` aktiviert Spalten im Zeitungsstil. Siehe [diesen Artikel](/docs/0.3/de/document-definition-object/snaking-columns/) _(Mindestversion: 0.3.5)_
diff --git a/content/document-definition-object/columns.es.md b/content/document-definition-object/columns.es.md
new file mode 100644
index 00000000..834af91c
--- /dev/null
+++ b/content/document-definition-object/columns.es.md
@@ -0,0 +1,52 @@
++++
+sourceDigest = "c5cad4de1cdcd5bc45a17a7f4bc373478b5f7e877859ca80db4facadca0459da"
+title = "Columnas"
+description = "Configura columnas en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2020
+alwaysopen = true
++++
+
+De forma predeterminada, los párrafos se muestran como una pila vertical de elementos (uno debajo de otro). Sin embargo, es posible dividir el espacio disponible en columnas.
+
+```js
+var docDefinition = {
+ content: [
+ 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',
+ {
+ columns: [
+ {
+ // auto-sized columns have their widths based on their content
+ width: 'auto',
+ text: 'First column'
+ },
+ {
+ // star-sized columns fill the remaining space
+ // if there's more than one star-column, available width is divided equally
+ width: '*',
+ text: 'Second column'
+ },
+ {
+ // fixed width
+ width: 100,
+ text: 'Third column'
+ },
+ {
+ // % width
+ width: '20%',
+ text: 'Fourth column'
+ }
+ ],
+ // optional space between columns
+ columnGap: 10
+ },
+ 'This paragraph goes below all columns and has full width'
+ ]
+};
+```
+
+El contenido de las columnas no se limita a texto sencillo: puede incluir cualquier elemento válido de pdfmake. Consulta el ejemplo COLUMNS en el [entorno de pruebas](/docs/0.3/es/playground/).
+
+## Propiedades
+
+* `columnGap: number`: especifica el espacio entre columnas
+* `snakingColumns: boolean`: columnas en flujo serpenteante (estilo periódico); consulta este [artículo](/docs/0.3/es/document-definition-object/snaking-columns/) _(versión mínima: 0.3.5)_
diff --git a/content/document-definition-object/columns.fr.md b/content/document-definition-object/columns.fr.md
new file mode 100644
index 00000000..0b08eb2d
--- /dev/null
+++ b/content/document-definition-object/columns.fr.md
@@ -0,0 +1,52 @@
++++
+title = "Colonnes"
+description = "Répartissez l’espace disponible en colonnes de largeurs automatiques, proportionnelles, fixes ou en pourcentage."
+weight = 2020
+alwaysopen = true
+sourceDigest = "c5cad4de1cdcd5bc45a17a7f4bc373478b5f7e877859ca80db4facadca0459da"
++++
+
+Par défaut, les paragraphes sont rendus sous forme d’une pile verticale d’éléments, les uns sous les autres. Il est toutefois possible de répartir l’espace disponible en colonnes.
+
+```js
+var docDefinition = {
+ content: [
+ 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',
+ {
+ columns: [
+ {
+ // auto-sized columns have their widths based on their content
+ width: 'auto',
+ text: 'First column'
+ },
+ {
+ // star-sized columns fill the remaining space
+ // if there's more than one star-column, available width is divided equally
+ width: '*',
+ text: 'Second column'
+ },
+ {
+ // fixed width
+ width: 100,
+ text: 'Third column'
+ },
+ {
+ // % width
+ width: '20%',
+ text: 'Fourth column'
+ }
+ ],
+ // optional space between columns
+ columnGap: 10
+ },
+ 'This paragraph goes below all columns and has full width'
+ ]
+};
+```
+
+Le contenu des colonnes ne se limite pas à du texte simple. Il peut contenir n’importe quel élément pdfmake valide. Consultez l’exemple COLUMNS dans le [playground](/docs/0.3/fr/playground/).
+
+## Propriétés
+
+* `columnGap: number` définit l’espace entre les colonnes
+* `snakingColumns: boolean` active les colonnes en serpentin (style journal) ; consultez cet [article](/docs/0.3/fr/document-definition-object/snaking-columns/) _(version minimale : 0.3.5)_
diff --git a/content/document-definition-object/columns.md b/content/document-definition-object/columns.md
index 7cbb751a..de5c90b3 100644
--- a/content/document-definition-object/columns.md
+++ b/content/document-definition-object/columns.md
@@ -1,6 +1,6 @@
+++
title = "Columns"
-description = ""
+description = "Configure columns in pdfmake 0.3 with examples, options and usage notes."
weight = 2020
alwaysopen = true
+++
@@ -44,10 +44,10 @@ var docDefinition = {
};
```
-Column content is not limited to a simple text. It can actually contain any valid pdfmake element. Make sure to look at the COLUMNS example in [playground](http://pdfmake.org/playground.html).
+Column content is not limited to a simple text. It can actually contain any valid pdfmake element. Make sure to look at the COLUMNS example in [playground](/docs/0.3/playground/).
-##### Properties
+## Properties
* `columnGap: number` specify gap (space) between columns
-* `snakingColumns: boolean` snaking columns (newspaper-style columns) see this [article](/docs/0.3/document-definition-object/snaking-columns/) _(Minimal version: 0.3.5)_
\ No newline at end of file
+* `snakingColumns: boolean` snaking columns (newspaper-style columns) see this [article](/docs/0.3/document-definition-object/snaking-columns/) _(Minimal version: 0.3.5)_
diff --git a/content/document-definition-object/columns.pt-br.md b/content/document-definition-object/columns.pt-br.md
new file mode 100644
index 00000000..6eca06ac
--- /dev/null
+++ b/content/document-definition-object/columns.pt-br.md
@@ -0,0 +1,52 @@
++++
+title = "Colunas"
+description = "Organize conteúdo em colunas de larguras automáticas, proporcionais ou fixas no pdfmake 0.3."
+weight = 2020
+alwaysopen = true
+sourceDigest = "c5cad4de1cdcd5bc45a17a7f4bc373478b5f7e877859ca80db4facadca0459da"
++++
+
+Por padrão, os parágrafos são renderizados como uma pilha vertical de elementos, um abaixo do outro. Também é possível dividir o espaço disponível em colunas.
+
+```js
+var docDefinition = {
+ content: [
+ 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',
+ {
+ columns: [
+ {
+ // auto-sized columns have their widths based on their content
+ width: 'auto',
+ text: 'First column'
+ },
+ {
+ // star-sized columns fill the remaining space
+ // if there's more than one star-column, available width is divided equally
+ width: '*',
+ text: 'Second column'
+ },
+ {
+ // fixed width
+ width: 100,
+ text: 'Third column'
+ },
+ {
+ // % width
+ width: '20%',
+ text: 'Fourth column'
+ }
+ ],
+ // optional space between columns
+ columnGap: 10
+ },
+ 'This paragraph goes below all columns and has full width'
+ ]
+};
+```
+
+O conteúdo de uma coluna não se limita a texto simples. Pode conter qualquer elemento válido do pdfmake. Confira o exemplo COLUMNS no [playground](/docs/0.3/pt-br/playground/).
+
+## Propriedades
+
+* `columnGap: number` especifica o intervalo (espaço) entre as colunas
+* `snakingColumns: boolean` ativa colunas em fluxo contínuo (estilo jornal); consulte [este artigo](/docs/0.3/pt-br/document-definition-object/snaking-columns/) _(versão mínima: 0.3.5)_
diff --git a/content/document-definition-object/compression.de.md b/content/document-definition-object/compression.de.md
new file mode 100644
index 00000000..40f65442
--- /dev/null
+++ b/content/document-definition-object/compression.de.md
@@ -0,0 +1,19 @@
++++
+title = "Komprimierung"
+description = "Steuere die Komprimierung von PDF-Datenströmen mit dem Dokumentfeld compress; standardmäßig ist sie aktiviert."
+weight = 2280
+sourceDigest = "92de3279ae232bb95314ce206d2d5914ca81723e46208aabd408dce25d90db55"
++++
+
+## Standardverhalten
+
+PDF-Datenströme werden standardmäßig komprimiert. So deaktivierst du die Komprimierung zur Überprüfung:
+
+```js
+var docDefinition = {
+ compress: false,
+ content: ['An uncompressed example document.']
+};
+```
+
+`compress` ist ein boolesches Feld der Dokumentdefinition und gehört nicht zum Optionsobjekt von `createPdf`. Wenn du die Komprimierung deaktivierst, wird die Ausgabedatei in der Regel größer. Eingebettete Schriften oder Bilddaten werden dadurch nicht entfernt; auch der für das Layout benötigte Speicher wird nicht reduziert. Hinweise zur Messung findest du unter [Leistung](/docs/0.3/de/guides/performance/).
diff --git a/content/document-definition-object/compression.es.md b/content/document-definition-object/compression.es.md
new file mode 100644
index 00000000..dd1691b5
--- /dev/null
+++ b/content/document-definition-object/compression.es.md
@@ -0,0 +1,19 @@
++++
+sourceDigest = "92de3279ae232bb95314ce206d2d5914ca81723e46208aabd408dce25d90db55"
+title = "Compresión"
+description = "Controla la compresión de los flujos PDF mediante el indicador compress del documento, activado de forma predeterminada."
+weight = 2280
++++
+
+## Comportamiento predeterminado
+
+La compresión de los flujos PDF está activada de forma predeterminada. Para desactivarla durante una inspección:
+
+```js
+var docDefinition = {
+ compress: false,
+ content: ['An uncompressed example document.']
+};
+```
+
+`compress` es un campo de la definición del documento, no del objeto de opciones de `createPdf`. Al desactivarlo, el tamaño de salida suele aumentar. No elimina la incrustación de fuentes ni los datos de imagen, y no sirve para reducir la memoria de maquetación. Consulta [rendimiento](/docs/0.3/es/guides/performance/) para obtener indicaciones sobre cómo medirlo.
diff --git a/content/document-definition-object/compression.fr.md b/content/document-definition-object/compression.fr.md
new file mode 100644
index 00000000..3316db49
--- /dev/null
+++ b/content/document-definition-object/compression.fr.md
@@ -0,0 +1,19 @@
++++
+title = "Compression"
+description = "Contrôlez la compression des flux PDF avec le champ `compress` de la définition du document, activé par défaut."
+weight = 2280
+sourceDigest = "92de3279ae232bb95314ce206d2d5914ca81723e46208aabd408dce25d90db55"
++++
+
+## Comportement par défaut
+
+La compression des flux PDF est activée par défaut. Pour la désactiver lors d’une inspection :
+
+```js
+var docDefinition = {
+ compress: false,
+ content: ['An uncompressed example document.']
+};
+```
+
+`compress` est un booléen de la définition du document, pas de l’objet d’options de `createPdf`. La désactivation augmente généralement la taille du fichier. Elle ne supprime ni l’incorporation des polices ni les données d’image et ne réduit pas la mémoire utilisée pour la mise en page. Consultez [les performances](/docs/0.3/fr/guides/performance/) pour savoir comment mesurer les résultats.
diff --git a/content/document-definition-object/compression.md b/content/document-definition-object/compression.md
index b9d39f0a..79087576 100644
--- a/content/document-definition-object/compression.md
+++ b/content/document-definition-object/compression.md
@@ -1,16 +1,18 @@
+++
title = "Compression"
-description = ""
+description = "Control PDF stream compression with the document-level compress flag; enabled by default."
weight = 2280
-alwaysopen = true
+++
-Compression of PDF is enabled by default, use `compress: false` for disable:
+## Default behavior
+
+PDF stream compression is enabled by default. To disable it for inspection:
```js
var docDefinition = {
compress: false,
-
- content: (...)
+ content: ['An uncompressed example document.']
};
-```
\ No newline at end of file
+```
+
+`compress` is a boolean field on the document definition, not the `createPdf` options object. Disabling it generally increases output size. It does not remove font embedding or image data and is not a way to reduce layout memory. See [performance](/docs/0.3/guides/performance/) for measurement guidance.
diff --git a/content/document-definition-object/compression.pt-br.md b/content/document-definition-object/compression.pt-br.md
new file mode 100644
index 00000000..70dfa5aa
--- /dev/null
+++ b/content/document-definition-object/compression.pt-br.md
@@ -0,0 +1,19 @@
++++
+title = "Compactação"
+description = "Controle a compactação dos fluxos PDF com a propriedade compress da definição do documento; ela fica ativada por padrão."
+weight = 2280
+sourceDigest = "92de3279ae232bb95314ce206d2d5914ca81723e46208aabd408dce25d90db55"
++++
+
+## Comportamento padrão
+
+A compactação dos fluxos PDF fica ativada por padrão. Para desativá-la durante uma inspeção:
+
+```js
+var docDefinition = {
+ compress: false,
+ content: ['An uncompressed example document.']
+};
+```
+
+`compress` é um campo booleano da definição do documento, não do objeto de opções de `createPdf`. Desativá-lo geralmente aumenta o tamanho da saída. Isso não remove a incorporação de fontes nem os dados de imagem e não reduz o uso de memória do layout. Consulte [desempenho](/docs/0.3/pt-br/guides/performance/) para orientações de medição.
diff --git a/content/document-definition-object/document-medatadata.de.md b/content/document-definition-object/document-medatadata.de.md
new file mode 100644
index 00000000..141e384e
--- /dev/null
+++ b/content/document-definition-object/document-medatadata.de.md
@@ -0,0 +1,49 @@
++++
+title = "Dokumentmetadaten"
+description = "Lege PDF-Titel, Autor, Thema, Schlüsselwörter und benutzerdefinierte Metadatenfelder fest."
+weight = 2260
+alwaysopen = true
+sourceDigest = "7c039db6c37d93f4df69313d60659fa0479cb3f5b47dd4c5ee8b6bd7af11d7ef"
++++
+
+PDF-Dokumente können verschiedene Metadaten enthalten, beispielsweise Titel und Autor. Füge diese Angaben der Dokumentdefinition hinzu:
+
+```js
+var docDefinition = {
+ info: {
+ title: 'awesome Document',
+ author: 'john doe',
+ subject: 'subject of document',
+ keywords: 'keywords for document',
+ },
+ content: 'This is an sample PDF printed with pdfMake'
+}
+```
+
+Standardfelder:
+
+* `title` – Titel des Dokuments
+* `author` – Name des Autors
+* `subject` – Thema des Dokuments
+* `keywords` – mit dem Dokument verknüpfte Schlüsselwörter
+* `creator` – Ersteller (Standard ist `'pdfmake'`)
+* `producer` – erzeugende Software (Standard ist `'pdfmake'`)
+* `creationDate` – Erstellungsdatum (wird automatisch von pdfmake hinzugefügt)
+* `modDate` – Datum der letzten Änderung
+* `trapped` – Kennzeichen, das angibt, ob das Dokument für den Druck durch Farbkorrekturen (Trapping) vorbereitet wurde
+
+Benutzerdefinierte Felder:
+
+Du kannst benutzerdefinierte Felder hinzufügen. Der Feldschlüssel darf keine Leerzeichen enthalten.
+
+## Dokumentsprache
+
+Über die Eigenschaft `language` kannst du eine Sprache für das PDF-Dokument festlegen.
+
+Beispiel:
+```js
+var docDefinition = {
+ language: 'cs-CZ',
+ content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'
+}
+```
diff --git a/content/document-definition-object/document-medatadata.es.md b/content/document-definition-object/document-medatadata.es.md
new file mode 100644
index 00000000..fa80ee82
--- /dev/null
+++ b/content/document-definition-object/document-medatadata.es.md
@@ -0,0 +1,49 @@
++++
+sourceDigest = "7c039db6c37d93f4df69313d60659fa0479cb3f5b47dd4c5ee8b6bd7af11d7ef"
+title = "Metadatos del documento"
+description = "Define el título, el autor, el asunto, las palabras clave y los campos de metadatos personalizados del PDF."
+weight = 2260
+alwaysopen = true
++++
+
+Los documentos PDF pueden tener diversos metadatos asociados, como el título o el autor. Puedes añadir esta información a la definición del documento.
+
+```js
+var docDefinition = {
+ info: {
+ title: 'awesome Document',
+ author: 'john doe',
+ subject: 'subject of document',
+ keywords: 'keywords for document',
+ },
+ content: 'This is an sample PDF printed with pdfMake'
+}
+```
+
+Propiedades estándar:
+
+* `title`: título del documento
+* `author`: nombre del autor
+* `subject`: asunto del documento
+* `keywords`: palabras clave asociadas al documento
+* `creator`: creador del documento (el valor predeterminado es `'pdfmake'`)
+* `producer`: productor del documento (el valor predeterminado es `'pdfmake'`)
+* `creationDate`: fecha de creación del documento (pdfmake la añade automáticamente)
+* `modDate`: fecha de la última modificación del documento
+* `trapped`: el indicador `trapped` de un documento PDF especifica si se ha corregido para compensar pequeñas desalineaciones de color
+
+Propiedades personalizadas:
+
+Puedes añadir propiedades personalizadas. La clave de la propiedad no debe contener espacios.
+
+## Idioma del documento
+
+Puedes establecer el idioma personalizado de un documento PDF mediante la propiedad `language`.
+
+Ejemplo:
+```js
+var docDefinition = {
+ language: 'cs-CZ',
+ content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'
+}
+```
diff --git a/content/document-definition-object/document-medatadata.fr.md b/content/document-definition-object/document-medatadata.fr.md
new file mode 100644
index 00000000..c6e3eedc
--- /dev/null
+++ b/content/document-definition-object/document-medatadata.fr.md
@@ -0,0 +1,49 @@
++++
+title = "Métadonnées du document"
+description = "Définissez le titre, l’auteur, le sujet, les mots-clés et les champs de métadonnées personnalisés du PDF."
+weight = 2260
+alwaysopen = true
+sourceDigest = "7c039db6c37d93f4df69313d60659fa0479cb3f5b47dd4c5ee8b6bd7af11d7ef"
++++
+
+Les documents PDF peuvent être associés à différentes métadonnées, comme leur titre ou leur auteur. Ajoutez ces informations dans la définition du document :
+
+```js
+var docDefinition = {
+ info: {
+ title: 'awesome Document',
+ author: 'john doe',
+ subject: 'subject of document',
+ keywords: 'keywords for document',
+ },
+ content: 'This is an sample PDF printed with pdfMake'
+}
+```
+
+Propriétés standard :
+
+* `title` - titre du document
+* `author` - nom de l’auteur
+* `subject` - sujet du document
+* `keywords` - mots-clés associés au document
+* `creator` - créateur du document (par défaut, 'pdfmake')
+* `producer` - producteur du document (par défaut, 'pdfmake')
+* `creationDate` - date de création du document (ajoutée automatiquement par pdfmake)
+* `modDate` - date de dernière modification du document
+* `trapped` - indicateur précisant si le document PDF a été « piégé », c’est-à-dire corrigé pour compenser de légers défauts de repérage des couleurs
+
+Propriétés personnalisées :
+
+Vous pouvez ajouter des propriétés personnalisées. La clé d’une propriété ne doit pas contenir d’espaces.
+
+## Langue du document
+
+La propriété `language` permet de définir une langue pour le document PDF.
+
+Exemple :
+```js
+var docDefinition = {
+ language: 'cs-CZ',
+ content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'
+}
+```
diff --git a/content/document-definition-object/document-medatadata.md b/content/document-definition-object/document-medatadata.md
index 3bcc5465..4be59e1e 100644
--- a/content/document-definition-object/document-medatadata.md
+++ b/content/document-definition-object/document-medatadata.md
@@ -1,6 +1,6 @@
+++
title = "Document Metadata"
-description = ""
+description = "Set PDF title, author, subject, keywords and custom metadata fields."
weight = 2260
alwaysopen = true
+++
@@ -37,7 +37,7 @@ Custom properties:
You can add custom properties. Key of property not contain spaces.
-#### Document language
+## Document language
PDF document can have custom language set via `language` property.
@@ -47,4 +47,4 @@ var docDefinition = {
language: 'cs-CZ',
content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'
}
-```
\ No newline at end of file
+```
diff --git a/content/document-definition-object/document-medatadata.pt-br.md b/content/document-definition-object/document-medatadata.pt-br.md
new file mode 100644
index 00000000..dbf5cf6b
--- /dev/null
+++ b/content/document-definition-object/document-medatadata.pt-br.md
@@ -0,0 +1,49 @@
++++
+title = "Metadados do documento"
+description = "Defina título, autor, assunto, palavras-chave e campos de metadados personalizados do PDF."
+weight = 2260
+alwaysopen = true
+sourceDigest = "7c039db6c37d93f4df69313d60659fa0479cb3f5b47dd4c5ee8b6bd7af11d7ef"
++++
+
+Documentos PDF podem ter vários metadados associados, como título e autor. Adicione essas informações à definição do documento:
+
+```js
+var docDefinition = {
+ info: {
+ title: 'awesome Document',
+ author: 'john doe',
+ subject: 'subject of document',
+ keywords: 'keywords for document',
+ },
+ content: 'This is an sample PDF printed with pdfMake'
+}
+```
+
+Propriedades padrão:
+
+* `title` - título do documento
+* `author` - nome do autor
+* `subject` - assunto do documento
+* `keywords` - palavras-chave associadas ao documento
+* `creator` - criador do documento (padrão: `'pdfmake'`)
+* `producer` - produtor do documento (padrão: `'pdfmake'`)
+* `creationDate` - data em que o documento foi criado (adicionada automaticamente pelo pdfmake)
+* `modDate` - data da última modificação do documento
+* `trapped` - sinalizador de trapping do PDF, que indica se o documento passou por trapping, isto é, correção de pequenas falhas de registro de cores
+
+Propriedades personalizadas:
+
+Você pode adicionar propriedades personalizadas. A chave da propriedade não pode conter espaços.
+
+## Idioma do documento
+
+O idioma de um documento PDF pode ser definido com a propriedade `language`.
+
+Exemplo:
+```js
+var docDefinition = {
+ language: 'cs-CZ',
+ content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'
+}
+```
diff --git a/content/document-definition-object/headers-footers.de.md b/content/document-definition-object/headers-footers.de.md
new file mode 100644
index 00000000..2f6270d8
--- /dev/null
+++ b/content/document-definition-object/headers-footers.de.md
@@ -0,0 +1,41 @@
++++
+title = "Kopf- und Fußzeilen"
+description = "Füge statische oder dynamische Seitenkopf- und Fußzeilen mit Seitenzahlen und Gesamtseitenzahl hinzu und reserviere Platz in den Seitenrändern."
+weight = 2050
+sourceDigest = "a47e47aa446dfbb4a3b97ade1254c9b6edbe8abfc9b34ac2cd7d2cfaac111b14"
++++
+
+## Statische Kopfzeile hinzufügen
+
+```js
+var docDefinition = {
+ pageMargins: [40, 65, 40, 55],
+ header: { text: 'Example report', margin: [40, 20, 40, 0] },
+ footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },
+ content: ['Document content']
+};
+```
+
+Kopf- und Fußzeilen werden auf den Seiten wiederholt. Reserviere in den oberen und unteren Rändern genügend Platz für ihren Inhalt; die Ränder des Hauptinhalts werden nicht automatisch vergrößert. Zurückgegebener Inhalt verwendet normale pdfmake-Knoten.
+
+## Seitenzahlen hinzufügen
+
+```js
+var docDefinition = {
+ pageMargins: [40, 65, 40, 55],
+ header: function (currentPage, pageCount, pageSize) {
+ return {
+ text: 'Report · ' + pageSize.width + ' pt wide',
+ alignment: currentPage % 2 ? 'left' : 'right',
+ margin: [40, 20, 40, 0],
+ fontSize: 9
+ };
+ },
+ footer: function (currentPage, pageCount) {
+ return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };
+ },
+ content: ['First page', { text: 'Second page', pageBreak: 'before' }]
+};
+```
+
+Callbacks erhalten die aktuelle Seitennummer (beginnend bei 1), die Gesamtseitenzahl und die Seitengröße. Gib bei jedem Aufruf einen neuen Knoten zurück. Sorge für deterministische Callbacks und vermeide Änderungen an gemeinsam genutzten Anwendungsdaten.
diff --git a/content/document-definition-object/headers-footers.es.md b/content/document-definition-object/headers-footers.es.md
new file mode 100644
index 00000000..a61e284b
--- /dev/null
+++ b/content/document-definition-object/headers-footers.es.md
@@ -0,0 +1,41 @@
++++
+sourceDigest = "a47e47aa446dfbb4a3b97ade1254c9b6edbe8abfc9b34ac2cd7d2cfaac111b14"
+title = "Encabezados y pies de página"
+description = "Añade encabezados y pies de página estáticos o dinámicos, con números de página, recuentos totales y espacio reservado en los márgenes."
+weight = 2050
++++
+
+## Añadir un encabezado estático
+
+```js
+var docDefinition = {
+ pageMargins: [40, 65, 40, 55],
+ header: { text: 'Example report', margin: [40, 20, 40, 0] },
+ footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },
+ content: ['Document content']
+};
+```
+
+Los encabezados y pies de página se repiten en todas las páginas. Reserva suficiente margen superior e inferior para su contenido; no amplían automáticamente los márgenes del cuerpo. El contenido devuelto usa nodos normales de pdfmake.
+
+## Añadir números de página
+
+```js
+var docDefinition = {
+ pageMargins: [40, 65, 40, 55],
+ header: function (currentPage, pageCount, pageSize) {
+ return {
+ text: 'Report · ' + pageSize.width + ' pt wide',
+ alignment: currentPage % 2 ? 'left' : 'right',
+ margin: [40, 20, 40, 0],
+ fontSize: 9
+ };
+ },
+ footer: function (currentPage, pageCount) {
+ return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };
+ },
+ content: ['First page', { text: 'Second page', pageBreak: 'before' }]
+};
+```
+
+Las funciones de retorno reciben el número de la página actual (a partir de 1), el número total de páginas y el tamaño de página. Devuelve un nodo nuevo en cada llamada. Mantén las funciones deterministas y evita modificar datos compartidos de la aplicación.
diff --git a/content/document-definition-object/headers-footers.fr.md b/content/document-definition-object/headers-footers.fr.md
new file mode 100644
index 00000000..31fe3201
--- /dev/null
+++ b/content/document-definition-object/headers-footers.fr.md
@@ -0,0 +1,41 @@
++++
+title = "En-têtes et pieds de page"
+description = "Ajoutez des en-têtes et pieds de page statiques ou dynamiques avec les numéros de page, le nombre total de pages et les marges réservées."
+weight = 2050
+sourceDigest = "a47e47aa446dfbb4a3b97ade1254c9b6edbe8abfc9b34ac2cd7d2cfaac111b14"
++++
+
+## Ajouter un en-tête statique
+
+```js
+var docDefinition = {
+ pageMargins: [40, 65, 40, 55],
+ header: { text: 'Example report', margin: [40, 20, 40, 0] },
+ footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },
+ content: ['Document content']
+};
+```
+
+Les en-têtes et pieds de page sont répétés sur toutes les pages. Réservez une marge supérieure et inférieure suffisante pour leur contenu : ils n’agrandissent pas automatiquement les marges du corps. Le contenu renvoyé utilise les nœuds pdfmake habituels.
+
+## Ajouter les numéros de page
+
+```js
+var docDefinition = {
+ pageMargins: [40, 65, 40, 55],
+ header: function (currentPage, pageCount, pageSize) {
+ return {
+ text: 'Report · ' + pageSize.width + ' pt wide',
+ alignment: currentPage % 2 ? 'left' : 'right',
+ margin: [40, 20, 40, 0],
+ fontSize: 9
+ };
+ },
+ footer: function (currentPage, pageCount) {
+ return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };
+ },
+ content: ['First page', { text: 'Second page', pageBreak: 'before' }]
+};
+```
+
+Les fonctions de rappel reçoivent le numéro de la page courante (à partir de 1), le nombre total de pages et le format de page. Renvoyez un nouveau nœud à chaque appel. Gardez ces fonctions déterministes et évitez de modifier des données partagées de l’application.
diff --git a/content/document-definition-object/headers-footers.md b/content/document-definition-object/headers-footers.md
index 99bf9d98..328e5916 100644
--- a/content/document-definition-object/headers-footers.md
+++ b/content/document-definition-object/headers-footers.md
@@ -1,43 +1,40 @@
+++
title = "Headers and footers"
-description = ""
+description = "Add static or dynamic page headers and footers, with page numbers, total page counts and room reserved in page margins."
weight = 2050
-alwaysopen = true
+++
-
-Page headers and footers in pdfmake can be: *static* or *dynamic*.
-
-They use the same syntax:
+## Add a static header
```js
var docDefinition = {
- header: 'simple text',
-
- footer: {
- columns: [
- 'Left part',
- { text: 'Right part', alignment: 'right' }
- ]
- },
-
- content: (...)
+ pageMargins: [40, 65, 40, 55],
+ header: { text: 'Example report', margin: [40, 20, 40, 0] },
+ footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },
+ content: ['Document content']
};
```
-For dynamically generated content (including page numbers, page count and page size) you can pass a function to the header or footer:
+Headers and footers repeat on pages. Reserve enough top and bottom margin for their contents; they do not automatically enlarge the body margins. Returned content uses normal pdfmake nodes.
+
+## Add page numbers
```js
var docDefinition = {
- footer: function(currentPage, pageCount) { return currentPage.toString() + ' of ' + pageCount; },
- header: function(currentPage, pageCount, pageSize) {
- // you can apply any logic and return any valid pdfmake element
-
- return [
- { text: 'simple text', alignment: (currentPage % 2) ? 'left' : 'right' },
- { canvas: [ { type: 'rect', x: 170, y: 32, w: pageSize.width - 170, h: 40 } ] }
- ]
+ pageMargins: [40, 65, 40, 55],
+ header: function (currentPage, pageCount, pageSize) {
+ return {
+ text: 'Report · ' + pageSize.width + ' pt wide',
+ alignment: currentPage % 2 ? 'left' : 'right',
+ margin: [40, 20, 40, 0],
+ fontSize: 9
+ };
+ },
+ footer: function (currentPage, pageCount) {
+ return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };
},
- (...)
+ content: ['First page', { text: 'Second page', pageBreak: 'before' }]
};
-```
\ No newline at end of file
+```
+
+Callbacks receive the current page number (starting at 1), total page count and page size. Return a fresh node for each invocation. Keep callbacks deterministic and avoid modifying shared application data.
diff --git a/content/document-definition-object/headers-footers.pt-br.md b/content/document-definition-object/headers-footers.pt-br.md
new file mode 100644
index 00000000..a8a07f2d
--- /dev/null
+++ b/content/document-definition-object/headers-footers.pt-br.md
@@ -0,0 +1,41 @@
++++
+title = "Cabeçalhos e rodapés"
+description = "Adicione cabeçalhos e rodapés de página estáticos ou dinâmicos, com números, total de páginas e espaço reservado nas margens."
+weight = 2050
+sourceDigest = "a47e47aa446dfbb4a3b97ade1254c9b6edbe8abfc9b34ac2cd7d2cfaac111b14"
++++
+
+## Adicione um cabeçalho estático
+
+```js
+var docDefinition = {
+ pageMargins: [40, 65, 40, 55],
+ header: { text: 'Example report', margin: [40, 20, 40, 0] },
+ footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },
+ content: ['Document content']
+};
+```
+
+Os cabeçalhos e rodapés se repetem nas páginas. Reserve margem superior e inferior suficiente para o conteúdo; eles não aumentam automaticamente as margens do corpo. O conteúdo retornado usa os nós normais do pdfmake.
+
+## Adicione números de página
+
+```js
+var docDefinition = {
+ pageMargins: [40, 65, 40, 55],
+ header: function (currentPage, pageCount, pageSize) {
+ return {
+ text: 'Report · ' + pageSize.width + ' pt wide',
+ alignment: currentPage % 2 ? 'left' : 'right',
+ margin: [40, 20, 40, 0],
+ fontSize: 9
+ };
+ },
+ footer: function (currentPage, pageCount) {
+ return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };
+ },
+ content: ['First page', { text: 'Second page', pageBreak: 'before' }]
+};
+```
+
+Os callbacks recebem o número da página atual (começando em 1), a contagem total de páginas e o tamanho da página. Retorne um nó novo a cada chamada. Mantenha os callbacks determinísticos e evite alterar dados compartilhados da aplicação.
diff --git a/content/document-definition-object/images.de.md b/content/document-definition-object/images.de.md
new file mode 100644
index 00000000..ea1b1f51
--- /dev/null
+++ b/content/document-definition-object/images.de.md
@@ -0,0 +1,57 @@
++++
+title = "Bilder"
+description = "Bette PNG- und JPEG-Bilder über Data-URLs, benannte Ressourcen, Dateien oder freigegebene externe URLs ein."
+weight = 2100
+alwaysopen = true
+sourceDigest = "e0419b93231e1257dc4fafa17f5b9f74c214b95807240b77511d32bfe7c0da6d"
++++
+
+## Eingebettete PNG- oder JPEG-Daten wiederverwenden
+
+Ein Bildknoten hat die Form `{ image: 'key' }`; der Schlüssel verweist auf einen Eintrag im Wörterbuch `images`. Verwende denselben Schlüssel, wenn ein Bild mehrfach vorkommt. Unterstützt werden PNG und JPEG. Für SVG-Inhalte verwende einen [SVG-Knoten](/docs/0.3/de/document-definition-object/svgs/).
+
+{{< example id="images" >}}
+
+## Skalierung festlegen
+
+| Felder des Bildknotens | Ergebnis |
+| --- | --- |
+| Keine Angabe von width, height oder fit | Natürliche Abmessungen des Bildes verwenden |
+| `width: 150` | Proportional auf diese Breite skalieren |
+| `height: 100` | Proportional auf diese Höhe skalieren; seit 0.3.2 |
+| `width: 150, height: 100` | Diese Abmessungen erzwingen; das Bild kann dadurch gestreckt werden |
+| `fit: [150, 100]` | In ein Rechteck einpassen und Seitenverhältnis beibehalten |
+| `cover: { width: 150, height: 100, align: 'right', valign: 'bottom' }` | Rechteck mit Bild füllen, zuschneiden und ausrichten |
+
+Die angezeigten Abmessungen verkleinern nicht die ursprünglichen Bilddaten. Skaliere übergroße Quelldateien vor dem Einbetten, wenn Ausgabegröße und Speicherverbrauch wichtig sind.
+
+## Quelle für deine Laufzeit auswählen
+
+| Quelle | Einrichtung |
+| --- | --- |
+| Data-URL | Vollständige PNG-/JPEG-Base64-Data-URL in `images` oder direkt im Knoten angeben |
+| Lokale Datei | Nur Node.js oder eine Datei, die bereits im Browser-VFS liegt |
+| HTTP(S)-URL | Benannten Eintrag in `images` verwenden und über die Ressourcenrichtlinie freigeben |
+| URL mit Headern | `{ url, headers }` im benannten Eintrag unter `images` verwenden |
+
+```js
+var dd = {
+ images: {
+ logo: '/application-owned/assets/logo.png',
+ remote: {
+ url: 'https://assets.example.com/photo.jpg',
+ headers: { 'X-Example-Header': 'value' }
+ }
+ },
+ content: [
+ { image: 'logo', width: 120 },
+ { image: 'remote', fit: [200, 150] }
+ ]
+};
+```
+
+Dieses Snippet zeigt die Formen der Quellen, ist aber kein eigenständiges Beispiel zum Herunterladen. Stelle eine vorhandene, von deiner Anwendung verwaltete Datei und eine gültige, freigegebene URL bereit. Im Browser muss die lokale Datei im VFS vorhanden sein; Browser-URLs benötigen außerdem CORS-Unterstützung. Füge keine privaten Zugangsdaten in clientseitige Definitionen ein. Das oben gezeigte eingebettete Beispiel benötigt keine Netzwerkressource.
+
+## Fehlende Bilder untersuchen
+
+Ein leerer oder ungültiger Bildwert führt zu einem Fehler. Prüfe den Wörterbuchschlüssel, das vollständige Data-URL-Präfix und die Datenbytes, das Vorhandensein der Datei, die URL-Antwort und die Zugriffsrichtlinie. `setUrlAccessPolicy` umgeht CORS nicht. Eine lokale Dateirichtlinie muss den tatsächlich aufgelösten Dateipfad erlauben. Siehe [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/) und [Fehlerbehebung](/docs/0.3/de/guides/troubleshooting/).
diff --git a/content/document-definition-object/images.es.md b/content/document-definition-object/images.es.md
new file mode 100644
index 00000000..de57ef80
--- /dev/null
+++ b/content/document-definition-object/images.es.md
@@ -0,0 +1,57 @@
++++
+sourceDigest = "e0419b93231e1257dc4fafa17f5b9f74c214b95807240b77511d32bfe7c0da6d"
+title = "Imágenes"
+description = "Incrusta imágenes PNG y JPEG desde data URLs, recursos con nombre, archivos o URL externas aprobadas."
+weight = 2100
+alwaysopen = true
++++
+
+## Reutilizar datos PNG o JPEG incrustados
+
+Un nodo de imagen es `{ image: 'key' }`, donde la clave se resuelve mediante el diccionario `images` del documento. Reutiliza una clave si la misma imagen aparece más de una vez. Se admiten PNG y JPEG; para contenido SVG, usa un [nodo SVG](/docs/0.3/es/document-definition-object/svgs/).
+
+{{< example id="images" >}}
+
+## Elegir el comportamiento del tamaño
+
+| Campos del nodo de imagen | Resultado |
+| --- | --- |
+| Sin width, height ni fit | Usa las dimensiones naturales de la imagen |
+| `width: 150` | Escala proporcionalmente a ese ancho |
+| `height: 100` | Escala proporcionalmente a esa altura; desde 0.3.2 |
+| `width: 150, height: 100` | Fuerza esas dimensiones y puede estirar la imagen |
+| `fit: [150, 100]` | Ajusta dentro de un rectángulo y conserva la relación de aspecto |
+| `cover: { width: 150, height: 100, align: 'right', valign: 'bottom' }` | Rellena un rectángulo recortando y alineando la imagen |
+
+Las dimensiones de visualización no reducen el tamaño de los datos de la imagen original. Si importan el tamaño de salida y la memoria, cambia el tamaño de las imágenes de origen demasiado grandes antes de incrustarlas.
+
+## Seleccionar un origen para el entorno de ejecución
+
+| Origen | Configuración |
+| --- | --- |
+| Data URL | Coloca una data URL Base64 completa de PNG/JPEG en `images` o directamente en un nodo |
+| Archivo local | Solo en Node.js o si el archivo ya está presente en un VFS del navegador |
+| URL HTTP(S) | Usa una entrada con nombre en `images` y autorízala mediante la política de recursos |
+| URL con encabezados | Usa `{ url, headers }` en la entrada con nombre de `images` |
+
+```js
+var dd = {
+ images: {
+ logo: '/application-owned/assets/logo.png',
+ remote: {
+ url: 'https://assets.example.com/photo.jpg',
+ headers: { 'X-Example-Header': 'value' }
+ }
+ },
+ content: [
+ { image: 'logo', width: 120 },
+ { image: 'remote', fit: [200, 150] }
+ ]
+};
+```
+
+Este fragmento describe formatos de origen, no una descarga ejecutable completa. Proporciona un archivo existente que sea propiedad de la aplicación y una URL real aprobada. En un navegador, el nombre del archivo local debe existir en el VFS; además, las URL del navegador requieren compatibilidad con CORS. No incluyas credenciales privadas en definiciones del lado del cliente. El ejemplo incrustado anterior es autónomo y no necesita recursos de red.
+
+## Diagnosticar imágenes que faltan
+
+Un valor de imagen vacío o no válido es un error. Comprueba la clave del diccionario, el prefijo y los bytes de la data URL completa, la existencia del archivo, la respuesta de la URL y la política de acceso. Configurar `setUrlAccessPolicy` no evita CORS. Una política de archivos locales debe permitir la ruta real resuelta. Consulta [seguridad de recursos](/docs/0.3/es/guides/resource-security/) y [solución de problemas](/docs/0.3/es/guides/troubleshooting/).
diff --git a/content/document-definition-object/images.fr.md b/content/document-definition-object/images.fr.md
new file mode 100644
index 00000000..950a49e1
--- /dev/null
+++ b/content/document-definition-object/images.fr.md
@@ -0,0 +1,57 @@
++++
+title = "Images"
+description = "Intégrez des images PNG et JPEG depuis des URL de données, des ressources nommées, des fichiers ou des URL externes autorisées."
+weight = 2100
+alwaysopen = true
+sourceDigest = "e0419b93231e1257dc4fafa17f5b9f74c214b95807240b77511d32bfe7c0da6d"
++++
+
+## Réutiliser des données PNG ou JPEG intégrées
+
+Un nœud d’image s’écrit `{ image: 'key' }` : la clé correspond à une entrée du dictionnaire `images` du document. Réutilisez une même clé lorsqu’une image apparaît plusieurs fois. Les formats PNG et JPEG sont pris en charge ; pour du SVG, utilisez un [nœud SVG](/docs/0.3/fr/document-definition-object/svgs/).
+
+{{< example id="images" >}}
+
+## Choisir le comportement de dimensionnement
+
+| Champs du nœud d’image | Résultat |
+| --- | --- |
+| Aucun `width`, `height` ni `fit` | Utilise les dimensions naturelles de l’image |
+| `width: 150` | Met l’image à l’échelle proportionnellement à cette largeur |
+| `height: 100` | Met l’image à l’échelle proportionnellement à cette hauteur ; depuis la version 0.3.2 |
+| `width: 150, height: 100` | Impose ces dimensions, ce qui peut étirer l’image |
+| `fit: [150, 100]` | Ajuste l’image dans un rectangle en préservant son rapport hauteur/largeur |
+| `cover: { width: 150, height: 100, align: 'right', valign: 'bottom' }` | Remplit un rectangle en recadrant et en alignant l’image |
+
+Les dimensions d’affichage ne réduisent pas la charge utile de l’image originale. Redimensionnez les images sources trop grandes avant de les intégrer lorsque la taille de sortie et la mémoire sont importantes.
+
+## Choisir une source adaptée à l’environnement d’exécution
+
+| Source | Configuration |
+| --- | --- |
+| URL de données | Placez une URL complète de données PNG/JPEG en base64 dans `images` ou directement sur un nœud |
+| Fichier local | Node.js uniquement, ou fichier déjà présent dans un VFS de navigateur |
+| URL HTTP(S) | Utilisez une entrée nommée dans `images` et autorisez-la via la politique de ressources |
+| URL avec en-têtes | Utilisez `{ url, headers }` dans l’entrée nommée de `images` |
+
+```js
+var dd = {
+ images: {
+ logo: '/application-owned/assets/logo.png',
+ remote: {
+ url: 'https://assets.example.com/photo.jpg',
+ headers: { 'X-Example-Header': 'value' }
+ }
+ },
+ content: [
+ { image: 'logo', width: 120 },
+ { image: 'remote', fit: [200, 150] }
+ ]
+};
+```
+
+Cet extrait décrit les formes des sources ; il ne constitue pas un exemple autonome de téléchargement. Fournissez un fichier existant appartenant à l’application et une URL réelle autorisée. Dans un navigateur, le nom de fichier local doit exister dans le VFS ; les URL utilisées dans le navigateur nécessitent également la prise en charge de CORS. Ne placez pas d’identifiants privés dans les définitions côté client. L’exemple intégré ci-dessus est autonome et ne nécessite aucune ressource réseau.
+
+## Diagnostiquer les images manquantes
+
+Une valeur d’image vide ou invalide provoque une erreur. Vérifiez la clé du dictionnaire, le préfixe complet de l’URL de données et ses octets, l’existence du fichier, la réponse URL et la politique d’accès. La configuration de `setUrlAccessPolicy` ne contourne pas CORS. Une politique de fichiers locaux doit autoriser le chemin de fichier effectivement résolu. Consultez la [sécurité des ressources](/docs/0.3/fr/guides/resource-security/) et le [guide de dépannage](/docs/0.3/fr/guides/troubleshooting/).
diff --git a/content/document-definition-object/images.md b/content/document-definition-object/images.md
index 4c4b1ce2..671655f2 100644
--- a/content/document-definition-object/images.md
+++ b/content/document-definition-object/images.md
@@ -1,85 +1,68 @@
+++
title = "Images"
-description = ""
+description = "Embed PNG and JPEG images from data URLs, named resources, files or approved external URLs."
weight = 2100
alwaysopen = true
+++
+## Reuse embedded PNG or JPEG data
-This is simple. Just use the ```{ image: '...' }``` node type.
+An image node is `{ image: 'key' }`, where the key resolves through the document's
+`images` dictionary. Reuse a key when the same image appears more than once.
+PNG and JPEG are supported; use an [SVG node](/docs/0.3/document-definition-object/svgs/)
+for SVG content.
-JPEG and PNG formats are supported.
+{{< example id="images" >}}
-{{% alert theme="warning" %}}The image node expects a valid image value. If the value is invalid or empty, an error is thrown.{{% /alert %}}
+## Choose sizing behavior
-```js
-var docDefinition = {
- content: [
- {
- // you'll most often use dataURI images on the browser side
- // if no width/height/fit is provided, the original size will be used
- image: 'data:image/jpeg;base64,...encodedContent...'
- },
- {
- // if you specify width, image will scale proportionally
- image: 'data:image/jpeg;base64,...encodedContent...',
- width: 150
- },
- {
- // if you specify height, image will scale proportionally
- // Minimal pdfmake version: 0.3.2
- image: 'data:image/jpeg;base64,...encodedContent...',
- height: 100
- },
- {
- // if you specify both width and height - image will be stretched
- image: 'data:image/jpeg;base64,...encodedContent...',
- width: 150,
- height: 150
- },
- {
- // you can also fit the image inside a rectangle
- image: 'data:image/jpeg;base64,...encodedContent...',
- fit: [100, 100]
- },
- {
- // You can also cover the image inside a rectangle
- image: 'data:image/jpeg;base64,...encodedContent...',
- cover: { width: 100, height: 100, valign: "bottom", align: "right" },
- },
- {
- // if you reuse the same image in multiple nodes,
- // you should put it to to images dictionary and reference it by name
- image: 'mySuperImage'
- },
- {
- // under NodeJS (or in case you use virtual file system provided by pdfmake)
- // you can also pass file names here
- image: 'myImageDictionary/image1.jpg'
- },
- {
- // is supported loading images via url from reference by name in images
- image: 'snow'
- },
- {
- image: 'strawberries'
- },
- ],
+| Fields on the image node | Result |
+| --- | --- |
+| No width, height or fit | Use the image's natural dimensions |
+| `width: 150` | Scale proportionally to that width |
+| `height: 100` | Scale proportionally to that height; since 0.3.2 |
+| `width: 150, height: 100` | Force those dimensions, which can stretch the image |
+| `fit: [150, 100]` | Fit inside a rectangle while preserving aspect ratio |
+| `cover: { width: 150, height: 100, align: 'right', valign: 'bottom' }` | Fill a rectangle with cropping and alignment |
- images: {
- mySuperImage: 'data:image/jpeg;base64,...content...',
+Display dimensions do not reduce the original image payload. Resize oversized
+source images before embedding them when output size and memory matter.
- // is supported loading images via url (https or http protocol)
- snow: 'https://picsum.photos/seed/picsum/200/300',
+## Select a source for your runtime
- // is supported loading images via url with custom headers
- strawberries: {
- url: 'https://picsum.photos/id/1080/367/267',
- headers: {
- myheader: '123',
- myotherheader: 'abc',
- }
+| Source | Setup |
+| --- | --- |
+| Data URL | Put a complete PNG/JPEG base64 data URL in `images` or directly on a node |
+| Local file | Node.js only, or a file already present in a browser VFS |
+| HTTP(S) URL | Use a named `images` entry and allow it through the resource policy |
+| URL with headers | Use `{ url, headers }` in the named `images` entry |
+
+```js
+var dd = {
+ images: {
+ logo: '/application-owned/assets/logo.png',
+ remote: {
+ url: 'https://assets.example.com/photo.jpg',
+ headers: { 'X-Example-Header': 'value' }
}
- }
+ },
+ content: [
+ { image: 'logo', width: 120 },
+ { image: 'remote', fit: [200, 150] }
+ ]
};
```
+
+This snippet describes source shapes, not a self-contained runnable download.
+Supply an existing application-owned file and a real approved URL. In a browser,
+the local filename must exist in the VFS; browser URLs also require CORS support.
+Do not place private credentials in client-side definitions. The embedded example
+above is self-contained and needs no network resource.
+
+## Diagnose missing images
+
+An empty or invalid image value is an error. Check the dictionary key, full data
+URL prefix and bytes, file existence, URL response and access policy. Configuring
+`setUrlAccessPolicy` does not bypass CORS. A local file policy must allow the actual
+resolved file path. See [resource security](/docs/0.3/guides/resource-security/)
+and [troubleshooting](/docs/0.3/guides/troubleshooting/).
diff --git a/content/document-definition-object/images.pt-br.md b/content/document-definition-object/images.pt-br.md
new file mode 100644
index 00000000..65281025
--- /dev/null
+++ b/content/document-definition-object/images.pt-br.md
@@ -0,0 +1,57 @@
++++
+title = "Imagens"
+description = "Incorpore imagens PNG e JPEG usando URLs de dados, recursos nomeados, arquivos ou URLs externas aprovadas."
+weight = 2100
+alwaysopen = true
+sourceDigest = "e0419b93231e1257dc4fafa17f5b9f74c214b95807240b77511d32bfe7c0da6d"
++++
+
+## Reutilize dados PNG ou JPEG incorporados
+
+Um nó de imagem é `{ image: 'key' }`, em que a chave é resolvida pelo dicionário `images` do documento. Reutilize uma chave quando a mesma imagem aparecer mais de uma vez. Há suporte a PNG e JPEG; use um [nó SVG](/docs/0.3/pt-br/document-definition-object/svgs/) para conteúdo SVG.
+
+{{< example id="images" >}}
+
+## Escolha o comportamento de dimensionamento
+
+| Campos no nó de imagem | Resultado |
+| --- | --- |
+| Sem `width`, `height` ou `fit` | Usa as dimensões naturais da imagem |
+| `width: 150` | Redimensiona proporcionalmente para essa largura |
+| `height: 100` | Redimensiona proporcionalmente para essa altura; disponível desde 0.3.2 |
+| `width: 150, height: 100` | Força essas dimensões, o que pode esticar a imagem |
+| `fit: [150, 100]` | Ajusta dentro de um retângulo preservando a proporção |
+| `cover: { width: 150, height: 100, align: 'right', valign: 'bottom' }` | Preenche um retângulo com recorte e alinhamento |
+
+As dimensões de exibição não reduzem os dados da imagem original. Redimensione imagens de origem grandes antes de incorporá-las quando o tamanho da saída e o uso de memória forem importantes.
+
+## Selecione uma origem para seu runtime
+
+| Origem | Configuração |
+| --- | --- |
+| URL de dados | Coloque uma URL de dados completa em base64 PNG/JPEG em `images` ou diretamente em um nó |
+| Arquivo local | Somente Node.js, ou arquivo já presente em um VFS do navegador |
+| URL HTTP(S) | Use uma entrada nomeada `images` e permita-a pela política de recursos |
+| URL com cabeçalhos | Use `{ url, headers }` na entrada nomeada `images` |
+
+```js
+var dd = {
+ images: {
+ logo: '/application-owned/assets/logo.png',
+ remote: {
+ url: 'https://assets.example.com/photo.jpg',
+ headers: { 'X-Example-Header': 'value' }
+ }
+ },
+ content: [
+ { image: 'logo', width: 120 },
+ { image: 'remote', fit: [200, 150] }
+ ]
+};
+```
+
+Este trecho descreve formatos de origem e não é um exemplo de download executável e autossuficiente. Forneça um arquivo existente pertencente à aplicação e uma URL real aprovada. No navegador, o nome do arquivo local precisa existir no VFS; URLs do navegador também precisam de suporte a CORS. Não coloque credenciais privadas em definições do lado do cliente. O exemplo incorporado acima é autossuficiente e não precisa de recursos de rede.
+
+## Diagnostique imagens ausentes
+
+Um valor de imagem vazio ou inválido causa um erro. Verifique a chave do dicionário, o prefixo completo e os bytes da URL de dados, a existência do arquivo, a resposta da URL e a política de acesso. Configurar `setUrlAccessPolicy` não ignora o CORS. Uma política de arquivo local precisa permitir o caminho real resolvido. Consulte [segurança de recursos](/docs/0.3/pt-br/guides/resource-security/) e [solução de problemas](/docs/0.3/pt-br/guides/troubleshooting/).
diff --git a/content/document-definition-object/links.de.md b/content/document-definition-object/links.de.md
new file mode 100644
index 00000000..cba54624
--- /dev/null
+++ b/content/document-definition-object/links.de.md
@@ -0,0 +1,32 @@
++++
+title = "Links"
+description = "Lege mit Beispielen, Optionen und Anwendungshinweisen Links in pdfmake 0.3 fest."
+weight = 2120
+alwaysopen = true
+sourceDigest = "83e3e95f41aa0ba93449638032a7b8be6d0b6aafa82d1d8384d5364990825ad3"
++++
+
+Für externe oder interne Links verwendest du die folgende Syntax:
+```js
+{ text: 'google', link: 'http://google.com' }
+{ text: 'Go to page 2', linkToPage: 2 }
+{ text: 'Go to Header', linkToDestination: 'header' },
+{ text: 'Header content', id: 'header' },
+```
+Oder du verlinkst eine lokale Datei auf dem Computer:
+```js
+var dd = {
+ content: [
+ {
+ text: 'link',
+ link: 'file:///c:/testFile.txt'
+ }
+ ]
+};
+```
+
+## Eigenschaften
+
+- `link` (`string`) – URL zu einer externen Website
+- `linkToPage` (`number`) – Link zu einer Seitennummer
+- `linkToDestination` (`string`) – Link zu einem Dokumentziel
diff --git a/content/document-definition-object/links.es.md b/content/document-definition-object/links.es.md
new file mode 100644
index 00000000..084344e2
--- /dev/null
+++ b/content/document-definition-object/links.es.md
@@ -0,0 +1,32 @@
++++
+sourceDigest = "83e3e95f41aa0ba93449638032a7b8be6d0b6aafa82d1d8384d5364990825ad3"
+title = "Enlaces"
+description = "Configura enlaces en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2120
+alwaysopen = true
++++
+
+Para añadir enlaces externos o internos, usa esta sintaxis:
+```js
+{ text: 'google', link: 'http://google.com' }
+{ text: 'Go to page 2', linkToPage: 2 }
+{ text: 'Go to Header', linkToDestination: 'header' },
+{ text: 'Header content', id: 'header' },
+```
+También puedes enlazar a un archivo del equipo local:
+```js
+var dd = {
+ content: [
+ {
+ text: 'link',
+ link: 'file:///c:/testFile.txt'
+ }
+ ]
+};
+```
+
+## Propiedades
+
+- `link` (`string`): URL a un sitio externo
+- `linkToPage` (`number`): enlace a un número de página
+- `linkToDestination` (`string`): enlace a un destino del documento
diff --git a/content/document-definition-object/links.fr.md b/content/document-definition-object/links.fr.md
new file mode 100644
index 00000000..aadb2db1
--- /dev/null
+++ b/content/document-definition-object/links.fr.md
@@ -0,0 +1,32 @@
++++
+title = "Liens"
+description = "Ajoutez des liens vers des pages externes, des pages du document, des destinations ou des fichiers locaux."
+weight = 2120
+alwaysopen = true
+sourceDigest = "83e3e95f41aa0ba93449638032a7b8be6d0b6aafa82d1d8384d5364990825ad3"
++++
+
+Pour ajouter des liens externes ou internes, utilisez la syntaxe suivante :
+```js
+{ text: 'google', link: 'http://google.com' }
+{ text: 'Go to page 2', linkToPage: 2 }
+{ text: 'Go to Header', linkToDestination: 'header' },
+{ text: 'Header content', id: 'header' },
+```
+Vous pouvez aussi créer un lien vers un fichier de l’ordinateur local :
+```js
+var dd = {
+ content: [
+ {
+ text: 'link',
+ link: 'file:///c:/testFile.txt'
+ }
+ ]
+};
+```
+
+## Propriétés
+
+- `link` (`string`) - URL d’un site externe
+- `linkToPage` (`number`) - lien vers un numéro de page
+- `linkToDestination` (`string`) - lien vers une destination du document
diff --git a/content/document-definition-object/links.md b/content/document-definition-object/links.md
index 9cfa3d36..ef621d91 100644
--- a/content/document-definition-object/links.md
+++ b/content/document-definition-object/links.md
@@ -1,6 +1,6 @@
+++
title = "Links"
-description = ""
+description = "Configure links in pdfmake 0.3 with examples, options and usage notes."
weight = 2120
alwaysopen = true
+++
@@ -25,7 +25,7 @@ var dd = {
};
```
-##### Properties
+## Properties
- `link` (`string`) - URL to external site
- `linkToPage` (`number`) - link to page number
diff --git a/content/document-definition-object/links.pt-br.md b/content/document-definition-object/links.pt-br.md
new file mode 100644
index 00000000..235c5d48
--- /dev/null
+++ b/content/document-definition-object/links.pt-br.md
@@ -0,0 +1,34 @@
++++
+title = "Links"
+description = "Adicione links externos, internos e para arquivos locais nos documentos pdfmake 0.3."
+weight = 2120
+sourceDigest = "83e3e95f41aa0ba93449638032a7b8be6d0b6aafa82d1d8384d5364990825ad3"
++++
+
+Para adicionar links externos ou internos, use a sintaxe a seguir:
+
+```js
+{ text: 'google', link: 'http://google.com' }
+{ text: 'Go to page 2', linkToPage: 2 }
+{ text: 'Go to Header', linkToDestination: 'header' },
+{ text: 'Header content', id: 'header' },
+```
+
+Ou crie um link para um arquivo no computador local:
+
+```js
+var dd = {
+ content: [
+ {
+ text: 'link',
+ link: 'file:///c:/testFile.txt'
+ }
+ ]
+};
+```
+
+## Propriedades
+
+- `link` (`string`) - URL de um site externo
+- `linkToPage` (`number`) - link para um número de página
+- `linkToDestination` (`string`) - link para um destino no documento
diff --git a/content/document-definition-object/lists.de.md b/content/document-definition-object/lists.de.md
new file mode 100644
index 00000000..0a8c7119
--- /dev/null
+++ b/content/document-definition-object/lists.de.md
@@ -0,0 +1,77 @@
++++
+title = "Listen"
+description = "Erstelle nummerierte und Aufzählungslisten in pdfmake 0.3 und passe Farben und Aufzählungszeichen an."
+weight = 2040
+alwaysopen = true
+sourceDigest = "5a9a9e5b03459677b99b2dbeeb26d15d6298dfb3e0c88a8c5e2b43ed48383e8f"
++++
+
+pdfmake unterstützt sowohl nummerierte Listen als auch Aufzählungslisten:
+
+```js
+var docDefinition = {
+ content: [
+ 'Bulleted list example:',
+ {
+ // to treat a paragraph as a bulleted list, set an array of items under the ul key
+ ul: [
+ 'Item 1',
+ 'Item 2',
+ 'Item 3',
+ { text: 'Item 4', bold: true },
+ ]
+ },
+
+ 'Numbered list example:',
+ {
+ // for numbered lists set the ol key
+ ol: [
+ 'Item 1',
+ 'Item 2',
+ 'Item 3'
+ ]
+ },
+
+ 'Colored unordered list:',
+ {
+ color: 'blue',
+ ul: [
+ 'item 1',
+ 'item 2',
+ 'item 3'
+ ]
+ },
+
+ 'Colored unordered list with own marker color:',
+ {
+ color: 'blue',
+ markerColor: 'red',
+ ul: [
+ 'item 1',
+ 'item 2',
+ { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2
+ ]
+ },
+
+ 'Colored ordered list',
+ {
+ color: 'blue',
+ ol: [
+ 'item 1',
+ 'item 2',
+ 'item 3'
+ ]
+ },
+ 'Colored ordered list with own marker color:',
+ {
+ color: 'blue',
+ markerColor: 'red',
+ ol: [
+ 'item 1',
+ 'item 2',
+ { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2
+ ]
+ },
+ ]
+};
+```
diff --git a/content/document-definition-object/lists.es.md b/content/document-definition-object/lists.es.md
new file mode 100644
index 00000000..22941db4
--- /dev/null
+++ b/content/document-definition-object/lists.es.md
@@ -0,0 +1,77 @@
++++
+sourceDigest = "5a9a9e5b03459677b99b2dbeeb26d15d6298dfb3e0c88a8c5e2b43ed48383e8f"
+title = "Listas"
+description = "Configura listas en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2040
+alwaysopen = true
++++
+
+pdfmake admite listas numeradas y con viñetas:
+
+```js
+var docDefinition = {
+ content: [
+ 'Bulleted list example:',
+ {
+ // to treat a paragraph as a bulleted list, set an array of items under the ul key
+ ul: [
+ 'Item 1',
+ 'Item 2',
+ 'Item 3',
+ { text: 'Item 4', bold: true },
+ ]
+ },
+
+ 'Numbered list example:',
+ {
+ // for numbered lists set the ol key
+ ol: [
+ 'Item 1',
+ 'Item 2',
+ 'Item 3'
+ ]
+ },
+
+ 'Colored unordered list:',
+ {
+ color: 'blue',
+ ul: [
+ 'item 1',
+ 'item 2',
+ 'item 3'
+ ]
+ },
+
+ 'Colored unordered list with own marker color:',
+ {
+ color: 'blue',
+ markerColor: 'red',
+ ul: [
+ 'item 1',
+ 'item 2',
+ { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2
+ ]
+ },
+
+ 'Colored ordered list',
+ {
+ color: 'blue',
+ ol: [
+ 'item 1',
+ 'item 2',
+ 'item 3'
+ ]
+ },
+ 'Colored ordered list with own marker color:',
+ {
+ color: 'blue',
+ markerColor: 'red',
+ ol: [
+ 'item 1',
+ 'item 2',
+ { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2
+ ]
+ },
+ ]
+};
+```
diff --git a/content/document-definition-object/lists.fr.md b/content/document-definition-object/lists.fr.md
new file mode 100644
index 00000000..bb177dcf
--- /dev/null
+++ b/content/document-definition-object/lists.fr.md
@@ -0,0 +1,77 @@
++++
+title = "Listes"
+description = "Créez des listes à puces ou numérotées et personnalisez la couleur du texte et des marqueurs."
+weight = 2040
+alwaysopen = true
+sourceDigest = "5a9a9e5b03459677b99b2dbeeb26d15d6298dfb3e0c88a8c5e2b43ed48383e8f"
++++
+
+pdfmake prend en charge les listes numérotées et à puces :
+
+```js
+var docDefinition = {
+ content: [
+ 'Bulleted list example:',
+ {
+ // to treat a paragraph as a bulleted list, set an array of items under the ul key
+ ul: [
+ 'Item 1',
+ 'Item 2',
+ 'Item 3',
+ { text: 'Item 4', bold: true },
+ ]
+ },
+
+ 'Numbered list example:',
+ {
+ // for numbered lists set the ol key
+ ol: [
+ 'Item 1',
+ 'Item 2',
+ 'Item 3'
+ ]
+ },
+
+ 'Colored unordered list:',
+ {
+ color: 'blue',
+ ul: [
+ 'item 1',
+ 'item 2',
+ 'item 3'
+ ]
+ },
+
+ 'Colored unordered list with own marker color:',
+ {
+ color: 'blue',
+ markerColor: 'red',
+ ul: [
+ 'item 1',
+ 'item 2',
+ { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2
+ ]
+ },
+
+ 'Colored ordered list',
+ {
+ color: 'blue',
+ ol: [
+ 'item 1',
+ 'item 2',
+ 'item 3'
+ ]
+ },
+ 'Colored ordered list with own marker color:',
+ {
+ color: 'blue',
+ markerColor: 'red',
+ ol: [
+ 'item 1',
+ 'item 2',
+ { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2
+ ]
+ },
+ ]
+};
+```
diff --git a/content/document-definition-object/lists.md b/content/document-definition-object/lists.md
index a0310753..aee627eb 100644
--- a/content/document-definition-object/lists.md
+++ b/content/document-definition-object/lists.md
@@ -1,6 +1,6 @@
+++
title = "Lists"
-description = ""
+description = "Configure lists in pdfmake 0.3 with examples, options and usage notes."
weight = 2040
alwaysopen = true
+++
@@ -31,7 +31,7 @@ var docDefinition = {
'Item 3'
]
},
-
+
'Colored unordered list:',
{
color: 'blue',
@@ -41,7 +41,7 @@ var docDefinition = {
'item 3'
]
},
-
+
'Colored unordered list with own marker color:',
{
color: 'blue',
@@ -52,7 +52,7 @@ var docDefinition = {
{ text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2
]
},
-
+
'Colored ordered list',
{
color: 'blue',
@@ -71,7 +71,7 @@ var docDefinition = {
'item 2',
{ text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2
]
- },
+ },
]
};
```
diff --git a/content/document-definition-object/lists.pt-br.md b/content/document-definition-object/lists.pt-br.md
new file mode 100644
index 00000000..3c19055d
--- /dev/null
+++ b/content/document-definition-object/lists.pt-br.md
@@ -0,0 +1,77 @@
++++
+title = "Listas"
+description = "Crie listas numeradas e com marcadores no pdfmake 0.3."
+weight = 2040
+alwaysopen = true
+sourceDigest = "5a9a9e5b03459677b99b2dbeeb26d15d6298dfb3e0c88a8c5e2b43ed48383e8f"
++++
+
+O pdfmake oferece suporte a listas numeradas e com marcadores:
+
+```js
+var docDefinition = {
+ content: [
+ 'Bulleted list example:',
+ {
+ // to treat a paragraph as a bulleted list, set an array of items under the ul key
+ ul: [
+ 'Item 1',
+ 'Item 2',
+ 'Item 3',
+ { text: 'Item 4', bold: true },
+ ]
+ },
+
+ 'Numbered list example:',
+ {
+ // for numbered lists set the ol key
+ ol: [
+ 'Item 1',
+ 'Item 2',
+ 'Item 3'
+ ]
+ },
+
+ 'Colored unordered list:',
+ {
+ color: 'blue',
+ ul: [
+ 'item 1',
+ 'item 2',
+ 'item 3'
+ ]
+ },
+
+ 'Colored unordered list with own marker color:',
+ {
+ color: 'blue',
+ markerColor: 'red',
+ ul: [
+ 'item 1',
+ 'item 2',
+ { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2
+ ]
+ },
+
+ 'Colored ordered list',
+ {
+ color: 'blue',
+ ol: [
+ 'item 1',
+ 'item 2',
+ 'item 3'
+ ]
+ },
+ 'Colored ordered list with own marker color:',
+ {
+ color: 'blue',
+ markerColor: 'red',
+ ol: [
+ 'item 1',
+ 'item 2',
+ { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2
+ ]
+ },
+ ]
+};
+```
diff --git a/content/document-definition-object/margins.de.md b/content/document-definition-object/margins.de.md
new file mode 100644
index 00000000..804831d6
--- /dev/null
+++ b/content/document-definition-object/margins.de.md
@@ -0,0 +1,23 @@
++++
+title = "Abstände"
+description = "Lege mit Beispielen, Optionen und Anwendungshinweisen Abstände in pdfmake 0.3 fest."
+weight = 2070
+alwaysopen = true
+sourceDigest = "f331bdfb9263dd2a8867f8ed754a7e6eedb9072c8a27a47f57313fb56c0159cb"
++++
+
+Jedes Element in pdfMake kann einen Abstand haben:
+
+```js
+// margin: [left, top, right, bottom]
+{ text: 'sample', margin: [ 5, 2, 10, 20 ] },
+
+// margin: [horizontal, vertical]
+{ text: 'another text', margin: [5, 2] },
+
+// margin: equalLeftTopRightBottom
+{ text: 'last one', margin: 5 },
+
+// single-side margins
+{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },
+```
diff --git a/content/document-definition-object/margins.es.md b/content/document-definition-object/margins.es.md
new file mode 100644
index 00000000..617b871b
--- /dev/null
+++ b/content/document-definition-object/margins.es.md
@@ -0,0 +1,23 @@
++++
+sourceDigest = "f331bdfb9263dd2a8867f8ed754a7e6eedb9072c8a27a47f57313fb56c0159cb"
+title = "Márgenes"
+description = "Configura los márgenes en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2070
+alwaysopen = true
++++
+
+Cualquier elemento de pdfMake puede tener un margen:
+
+```js
+// margin: [left, top, right, bottom]
+{ text: 'sample', margin: [ 5, 2, 10, 20 ] },
+
+// margin: [horizontal, vertical]
+{ text: 'another text', margin: [5, 2] },
+
+// margin: equalLeftTopRightBottom
+{ text: 'last one', margin: 5 },
+
+// single-side margins
+{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },
+```
diff --git a/content/document-definition-object/margins.fr.md b/content/document-definition-object/margins.fr.md
new file mode 100644
index 00000000..4afc1581
--- /dev/null
+++ b/content/document-definition-object/margins.fr.md
@@ -0,0 +1,23 @@
++++
+title = "Marges"
+description = "Configurez les marges des éléments dans pdfmake 0.3 avec les quatre côtés, les valeurs horizontale et verticale ou une valeur unique."
+weight = 2070
+alwaysopen = true
+sourceDigest = "f331bdfb9263dd2a8867f8ed754a7e6eedb9072c8a27a47f57313fb56c0159cb"
++++
+
+Chaque élément de pdfmake peut avoir une marge :
+
+```js
+// margin: [left, top, right, bottom]
+{ text: 'sample', margin: [ 5, 2, 10, 20 ] },
+
+// margin: [horizontal, vertical]
+{ text: 'another text', margin: [5, 2] },
+
+// margin: equalLeftTopRightBottom
+{ text: 'last one', margin: 5 },
+
+// single-side margins
+{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },
+```
diff --git a/content/document-definition-object/margins.md b/content/document-definition-object/margins.md
index 11ea88a6..2eaba018 100644
--- a/content/document-definition-object/margins.md
+++ b/content/document-definition-object/margins.md
@@ -1,6 +1,6 @@
+++
title = "Margins"
-description = ""
+description = "Configure margins in pdfmake 0.3 with examples, options and usage notes."
weight = 2070
alwaysopen = true
+++
@@ -16,8 +16,8 @@ Any element in pdfMake can have a margin:
{ text: 'another text', margin: [5, 2] },
// margin: equalLeftTopRightBottom
-{ text: 'last one', margin: 5 }
+{ text: 'last one', margin: 5 },
// single-side margins
{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },
-```
\ No newline at end of file
+```
diff --git a/content/document-definition-object/margins.pt-br.md b/content/document-definition-object/margins.pt-br.md
new file mode 100644
index 00000000..73cc0b08
--- /dev/null
+++ b/content/document-definition-object/margins.pt-br.md
@@ -0,0 +1,23 @@
++++
+title = "Margens"
+description = "Configure margens de elementos em documentos pdfmake 0.3."
+weight = 2070
+alwaysopen = true
+sourceDigest = "f331bdfb9263dd2a8867f8ed754a7e6eedb9072c8a27a47f57313fb56c0159cb"
++++
+
+Qualquer elemento do pdfmake pode ter uma margem:
+
+```js
+// margin: [left, top, right, bottom]
+{ text: 'sample', margin: [ 5, 2, 10, 20 ] },
+
+// margin: [horizontal, vertical]
+{ text: 'another text', margin: [5, 2] },
+
+// margin: equalLeftTopRightBottom
+{ text: 'last one', margin: 5 },
+
+// single-side margins
+{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },
+```
diff --git a/content/document-definition-object/outlines.de.md b/content/document-definition-object/outlines.de.md
new file mode 100644
index 00000000..e1f7adfb
--- /dev/null
+++ b/content/document-definition-object/outlines.de.md
@@ -0,0 +1,56 @@
++++
+title = "Gliederungen und Lesezeichen"
+description = "Erstelle hierarchische PDF-Lesezeichen mit pdfmake 0.3 und steuere ihre Beschriftung, Elternknoten und den geöffneten Zustand."
+weight = 2235
+alwaysopen = true
+sourceDigest = "c3e4279bfaad7589de23fa588bc515727f35f2255fa8effd7da1ce56b06a7cb2"
++++
+
+{{% alert theme="warning" %}}Mindestversion: **0.3.5**{{% /alert %}}
+
+PDF-Gliederungen (auch Lesezeichen genannt) sind eine hierarchische Navigationsstruktur im PDF-Dokument. Damit können Benutzer direkt zu bestimmten Seiten springen. Sie funktionieren wie ein interaktives Inhaltsverzeichnis und werden normalerweise im Navigationsbereich des PDF-Viewers angezeigt.
+
+```js
+var docDefinition = {
+ content: [
+ {
+ text: 'First header in bookmarks',
+ outline: true,
+ },
+ {
+ text: 'Second header with custom bookmark',
+ outline: true,
+ outlineText: 'Custom bookmark text',
+ },
+ {
+ text: 'Structured bookmarks',
+ id: 'structured-bookmarks',
+ outline: true,
+ outlineExpanded: true
+ },
+ {
+ text: 'First subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks'
+ },
+ {
+ text: 'Second subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks'
+ },
+ {
+ text: 'Third subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks',
+ id: 'third-subheader'
+ }
+ ]
+};
+```
+
+## Eigenschaften
+
+- `outline: boolean` – auf `true` setzen, um den Knoten in die Lesezeichen aufzunehmen
+- `outlineText: string` (optional) – benutzerdefinierter Lesezeichentext; andernfalls wird der Text des Knotens verwendet
+- `outlineExpanded: boolean` (optional) – auf `true` setzen, damit das Lesezeichen geöffnet angezeigt wird
+- `outlineParentId: string` (optional) – `id` des übergeordneten Lesezeichens
diff --git a/content/document-definition-object/outlines.es.md b/content/document-definition-object/outlines.es.md
new file mode 100644
index 00000000..51b9d152
--- /dev/null
+++ b/content/document-definition-object/outlines.es.md
@@ -0,0 +1,56 @@
++++
+sourceDigest = "c3e4279bfaad7589de23fa588bc515727f35f2255fa8effd7da1ce56b06a7cb2"
+title = "Esquemas / marcadores"
+description = "Configura esquemas y marcadores en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2235
+alwaysopen = true
++++
+
+{{% alert theme="warning" %}}Versión mínima: **0.3.5**{{% /alert %}}
+
+Los esquemas PDF (también llamados marcadores) son una estructura de navegación jerárquica incrustada en un documento PDF que permite saltar rápidamente a páginas concretas. Funcionan como un índice interactivo y suelen aparecer en el panel de navegación del visor PDF.
+
+```js
+var docDefinition = {
+ content: [
+ {
+ text: 'First header in bookmarks',
+ outline: true,
+ },
+ {
+ text: 'Second header with custom bookmark',
+ outline: true,
+ outlineText: 'Custom bookmark text',
+ },
+ {
+ text: 'Structured bookmarks',
+ id: 'structured-bookmarks',
+ outline: true,
+ outlineExpanded: true
+ },
+ {
+ text: 'First subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks'
+ },
+ {
+ text: 'Second subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks'
+ },
+ {
+ text: 'Third subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks',
+ id: 'third-subheader'
+ }
+ ]
+};
+```
+
+## Propiedades
+
+- `outline: boolean`: establece `true` para añadir el elemento a los marcadores
+- `outlineText: string` (opcional): establece el texto personalizado del marcador; si no, se usa el texto del nodo
+- `outlineExpanded: boolean` (opcional): establece `true` para que el marcador aparezca expandido/abierto
+- `outlineParentId: string` (opcional): `id` del marcador principal
diff --git a/content/document-definition-object/outlines.fr.md b/content/document-definition-object/outlines.fr.md
new file mode 100644
index 00000000..88f358e8
--- /dev/null
+++ b/content/document-definition-object/outlines.fr.md
@@ -0,0 +1,56 @@
++++
+title = "Plans du document et signets"
+description = "Ajoutez au PDF des signets hiérarchiques pour accéder rapidement aux pages et sections."
+weight = 2235
+alwaysopen = true
+sourceDigest = "c3e4279bfaad7589de23fa588bc515727f35f2255fa8effd7da1ce56b06a7cb2"
++++
+
+{{% alert theme="warning" %}}Version minimale : **0.3.5**{{% /alert %}}
+
+Les plans de document PDF (également appelés signets) sont une structure de navigation hiérarchique intégrée au PDF, qui permet d’accéder rapidement à des pages précises. Ils fonctionnent comme une table des matières interactive, généralement affichée dans le panneau de navigation du lecteur PDF.
+
+```js
+var docDefinition = {
+ content: [
+ {
+ text: 'First header in bookmarks',
+ outline: true,
+ },
+ {
+ text: 'Second header with custom bookmark',
+ outline: true,
+ outlineText: 'Custom bookmark text',
+ },
+ {
+ text: 'Structured bookmarks',
+ id: 'structured-bookmarks',
+ outline: true,
+ outlineExpanded: true
+ },
+ {
+ text: 'First subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks'
+ },
+ {
+ text: 'Second subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks'
+ },
+ {
+ text: 'Third subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks',
+ id: 'third-subheader'
+ }
+ ]
+};
+```
+
+## Propriétés
+
+- `outline: boolean` - indiquez `true` pour ajouter un signet
+- `outlineText: string` (facultatif) - texte personnalisé du signet ; sinon, le texte du nœud est utilisé
+- `outlineExpanded: boolean` (facultatif) - indiquez `true` pour que le signet soit développé à l’ouverture
+- `outlineParentId: string` (facultatif) - `id` du signet parent
diff --git a/content/document-definition-object/outlines.md b/content/document-definition-object/outlines.md
index 61613f96..9439278b 100644
--- a/content/document-definition-object/outlines.md
+++ b/content/document-definition-object/outlines.md
@@ -1,6 +1,6 @@
+++
title = "Outlines / Bookmarks"
-description = ""
+description = "Configure outlines / bookmarks in pdfmake 0.3 with examples, options and usage notes."
weight = 2235
alwaysopen = true
+++
@@ -47,9 +47,9 @@ var docDefinition = {
};
```
-#### Properties
+## Properties
- `outline: boolean` - set to `true` for add to bookmarks
- `outlineText: string` (optional) - set custom bookmark text, otherwise text from node
- `outlineExpanded: boolean` (optional) - set to `true` for expanded/opened bookmark
-- `outlineParentId: string` (optional) - parent bookmark `id`
\ No newline at end of file
+- `outlineParentId: string` (optional) - parent bookmark `id`
diff --git a/content/document-definition-object/outlines.pt-br.md b/content/document-definition-object/outlines.pt-br.md
new file mode 100644
index 00000000..92521a4c
--- /dev/null
+++ b/content/document-definition-object/outlines.pt-br.md
@@ -0,0 +1,56 @@
++++
+title = "Contornos e marcadores"
+description = "Crie uma estrutura hierárquica de navegação com contornos e marcadores no PDF usando pdfmake 0.3."
+weight = 2235
+alwaysopen = true
+sourceDigest = "c3e4279bfaad7589de23fa588bc515727f35f2255fa8effd7da1ce56b06a7cb2"
++++
+
+{{% alert theme="warning" %}}Versão mínima: **0.3.5**{{% /alert %}}
+
+Contornos PDF (também chamados de marcadores) são uma estrutura hierárquica de navegação incorporada em um documento PDF que permite aos usuários ir rapidamente a páginas específicas. Funcionam como um sumário interativo e costumam aparecer no painel de navegação do visualizador de PDF.
+
+```js
+var docDefinition = {
+ content: [
+ {
+ text: 'First header in bookmarks',
+ outline: true,
+ },
+ {
+ text: 'Second header with custom bookmark',
+ outline: true,
+ outlineText: 'Custom bookmark text',
+ },
+ {
+ text: 'Structured bookmarks',
+ id: 'structured-bookmarks',
+ outline: true,
+ outlineExpanded: true
+ },
+ {
+ text: 'First subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks'
+ },
+ {
+ text: 'Second subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks'
+ },
+ {
+ text: 'Third subheader',
+ outline: true,
+ outlineParentId: 'structured-bookmarks',
+ id: 'third-subheader'
+ }
+ ]
+};
+```
+
+## Propriedades
+
+- `outline: boolean` - defina como `true` para adicionar aos marcadores
+- `outlineText: string` (opcional) - texto personalizado do marcador; caso contrário, usa o texto do nó
+- `outlineExpanded: boolean` (opcional) - defina como `true` para deixar o marcador expandido/aberto
+- `outlineParentId: string` (opcional) - `id` do marcador pai
diff --git a/content/document-definition-object/page.de.md b/content/document-definition-object/page.de.md
new file mode 100644
index 00000000..80e3da13
--- /dev/null
+++ b/content/document-definition-object/page.de.md
@@ -0,0 +1,112 @@
++++
+title = "Seitengröße, Ausrichtung und Ränder"
+description = "Lege Seitengröße, Ausrichtung und Ränder fest und steuere automatische oder explizite Seitenumbrüche."
+weight = 2250
+alwaysopen = true
+sourceDigest = "433a428f2dbdb4d2db7e93f3a845e24637a4e34c5631c1d97f53c9f666b00de9"
++++
+
+```js
+var docDefinition = {
+ // a string or { width: number, height: number }
+ pageSize: 'A5',
+
+ // by default we use portrait, you can change it to landscape if you wish
+ pageOrientation: 'landscape',
+
+ // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins
+ pageMargins: [ 40, 60, 40, 60 ],
+ content: ['Page size, orientation and margins.']
+};
+```
+
+Wenn du `pageSize` als Zeichenfolge festlegst, kannst du einen der folgenden Werte verwenden:
+
+* `'4A0'`, `'2A0'`, `'A0'`, `'A1'`, `'A2'`, `'A3'`, `'A4'`, `'A5'`, `'A6'`, `'A7'`, `'A8'`, `'A9'`, `'A10'`,
+* `'B0'`, `'B1'`, `'B2'`, `'B3'`, `'B4'`, `'B5'`, `'B6'`, `'B7'`, `'B8'`, `'B9'`, `'B10'`,
+* `'C0'`, `'C1'`, `'C2'`, `'C3'`, `'C4'`, `'C5'`, `'C6'`, `'C7'`, `'C8'`, `'C9'`, `'C10'`,
+* `'RA0'`, `'RA1'`, `'RA2'`, `'RA3'`, `'RA4'`,
+* `'SRA0'`, `'SRA1'`, `'SRA2'`, `'SRA3'`, `'SRA4'`,
+* `'EXECUTIVE'`, `'FOLIO'`, `'LEGAL'`, `'LETTER'`, `'TABLOID'`
+
+Um die Seitenausrichtung innerhalb eines Dokuments zu ändern, füge einen Seitenumbruch mit der neuen Ausrichtung ein.
+
+```js
+{
+ pageOrientation: 'portrait',
+ content: [
+ {text: 'Text on Portrait'},
+ {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},
+ {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},
+ {text: 'Text on Portrait 2'},
+ ]
+}
+```
+
+Automatische Seitenhöhe:
+
+```js
+var dd = {
+ pageSize: {
+ width: 595.28,
+ height: 'auto'
+ },
+ content: [
+ // ...
+ ]
+}
+```
+
+## Seitenumbrüche dynamisch steuern, zum Beispiel um verwaiste Unterelemente zu vermeiden
+
+Du kannst eine Funktion `pageBreakBefore` angeben, die entscheidet, ob vor einem Knoten ein Seitenumbruch eingefügt werden soll. Für die Regel „keine verwaiste Unterüberschrift“ kannst du folgende Definition verwenden:
+
+``` javascript
+var dd = {
+ content: [
+ {text: '1 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ {text: '2 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ {text: '3 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ ],
+ pageBreakBefore: function(currentNode, nodeContainer) {
+ // nodeContainer.getFollowingNodesOnPage();
+ // nodeContainer.getNodesOnNextPage();
+ // nodeContainer.getPreviousNodesOnPage();
+
+ return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;
+ }
+}
+```
+
+Wenn `pageBreakBefore` `true` zurückgibt, wird vor dem `currentNode` ein Seitenumbruch eingefügt. Dem aktuellen Knoten sind folgende Informationen zugeordnet:
+
+``` javascript
+{
+ id: '',
+ headlineLevel: '',
+ text: '',
+ ul: '',
+ ol: '',
+ table: '',
+ image: '',
+ qr: '',
+ canvas: '',
+ columns: '',
+ style: '',
+ pageOrientation: '',
+ pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)
+ pages: 6, // the total number of pages of this document
+ stack: false, // if this is an element which encapsulates multiple sub-objects
+ startPosition: {
+ pageNumber: 2, // the page this node starts on
+ pageOrientation: 'landscape', // the orientation of this page
+ left: 60, // the left position
+ right: 60, // the right position
+ verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)
+ horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)
+ }
+}
+```
diff --git a/content/document-definition-object/page.es.md b/content/document-definition-object/page.es.md
new file mode 100644
index 00000000..582dad2b
--- /dev/null
+++ b/content/document-definition-object/page.es.md
@@ -0,0 +1,112 @@
++++
+sourceDigest = "433a428f2dbdb4d2db7e93f3a845e24637a4e34c5631c1d97f53c9f666b00de9"
+title = "Dimensiones, orientación y márgenes de página"
+description = "Establece el tamaño, la orientación y los márgenes de página, y controla los saltos de página automáticos o explícitos."
+weight = 2250
+alwaysopen = true
++++
+
+```js
+var docDefinition = {
+ // a string or { width: number, height: number }
+ pageSize: 'A5',
+
+ // by default we use portrait, you can change it to landscape if you wish
+ pageOrientation: 'landscape',
+
+ // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins
+ pageMargins: [ 40, 60, 40, 60 ],
+ content: ['Page size, orientation and margins.']
+};
+```
+
+Si asignas una cadena a `pageSize`, puedes usar uno de estos valores:
+
+* `'4A0'`, `'2A0'`, `'A0'`, `'A1'`, `'A2'`, `'A3'`, `'A4'`, `'A5'`, `'A6'`, `'A7'`, `'A8'`, `'A9'`, `'A10'`,
+* `'B0'`, `'B1'`, `'B2'`, `'B3'`, `'B4'`, `'B5'`, `'B6'`, `'B7'`, `'B8'`, `'B9'`, `'B10'`,
+* `'C0'`, `'C1'`, `'C2'`, `'C3'`, `'C4'`, `'C5'`, `'C6'`, `'C7'`, `'C8'`, `'C9'`, `'C10'`,
+* `'RA0'`, `'RA1'`, `'RA2'`, `'RA3'`, `'RA4'`,
+* `'SRA0'`, `'SRA1'`, `'SRA2'`, `'SRA3'`, `'SRA4'`,
+* `'EXECUTIVE'`, `'FOLIO'`, `'LEGAL'`, `'LETTER'`, `'TABLOID'`
+
+Para cambiar la orientación dentro de un documento, añade un salto de página con la nueva orientación.
+
+```js
+{
+ pageOrientation: 'portrait',
+ content: [
+ {text: 'Text on Portrait'},
+ {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},
+ {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},
+ {text: 'Text on Portrait 2'},
+ ]
+}
+```
+
+Altura de página automática:
+
+```js
+var dd = {
+ pageSize: {
+ width: 595.28,
+ height: 'auto'
+ },
+ content: [
+ // ...
+ ]
+}
+```
+
+## Controlar dinámicamente los saltos de página, por ejemplo, para evitar hijos huérfanos
+
+Se puede especificar una función `pageBreakBefore` para decidir si se debe insertar un salto de página antes de un nodo. Para implementar una regla que evite dejar encabezados sin contenido debajo, usa una definición como esta:
+
+``` javascript
+var dd = {
+ content: [
+ {text: '1 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ {text: '2 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ {text: '3 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ ],
+ pageBreakBefore: function(currentNode, nodeContainer) {
+ // nodeContainer.getFollowingNodesOnPage();
+ // nodeContainer.getNodesOnNextPage();
+ // nodeContainer.getPreviousNodesOnPage();
+
+ return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;
+ }
+}
+```
+
+Si `pageBreakBefore` devuelve `true`, se inserta un salto de página antes de `currentNode`. El nodo actual tiene adjunta la información siguiente:
+
+``` javascript
+{
+ id: '',
+ headlineLevel: '',
+ text: '',
+ ul: '',
+ ol: '',
+ table: '',
+ image: '',
+ qr: '',
+ canvas: '',
+ columns: '',
+ style: '',
+ pageOrientation: '',
+ pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)
+ pages: 6, // the total number of pages of this document
+ stack: false, // if this is an element which encapsulates multiple sub-objects
+ startPosition: {
+ pageNumber: 2, // the page this node starts on
+ pageOrientation: 'landscape', // the orientation of this page
+ left: 60, // the left position
+ right: 60, // the right position
+ verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)
+ horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)
+ }
+}
+```
diff --git a/content/document-definition-object/page.fr.md b/content/document-definition-object/page.fr.md
new file mode 100644
index 00000000..20748f00
--- /dev/null
+++ b/content/document-definition-object/page.fr.md
@@ -0,0 +1,112 @@
++++
+title = "Dimensions, orientation et marges des pages"
+description = "Définissez le format, l’orientation et les marges des pages, et contrôlez les sauts de page automatiques ou explicites."
+weight = 2250
+alwaysopen = true
+sourceDigest = "433a428f2dbdb4d2db7e93f3a845e24637a4e34c5631c1d97f53c9f666b00de9"
++++
+
+```js
+var docDefinition = {
+ // a string or { width: number, height: number }
+ pageSize: 'A5',
+
+ // by default we use portrait, you can change it to landscape if you wish
+ pageOrientation: 'landscape',
+
+ // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins
+ pageMargins: [ 40, 60, 40, 60 ],
+ content: ['Page size, orientation and margins.']
+};
+```
+
+Si vous définissez `pageSize` sous forme de chaîne, vous pouvez utiliser l’une des valeurs suivantes :
+
+* `'4A0'`, `'2A0'`, `'A0'`, `'A1'`, `'A2'`, `'A3'`, `'A4'`, `'A5'`, `'A6'`, `'A7'`, `'A8'`, `'A9'`, `'A10'`,
+* `'B0'`, `'B1'`, `'B2'`, `'B3'`, `'B4'`, `'B5'`, `'B6'`, `'B7'`, `'B8'`, `'B9'`, `'B10'`,
+* `'C0'`, `'C1'`, `'C2'`, `'C3'`, `'C4'`, `'C5'`, `'C6'`, `'C7'`, `'C8'`, `'C9'`, `'C10'`,
+* `'RA0'`, `'RA1'`, `'RA2'`, `'RA3'`, `'RA4'`,
+* `'SRA0'`, `'SRA1'`, `'SRA2'`, `'SRA3'`, `'SRA4'`,
+* `'EXECUTIVE'`, `'FOLIO'`, `'LEGAL'`, `'LETTER'`, `'TABLOID'`
+
+Pour changer l’orientation au sein d’un document, insérez un saut de page avec la nouvelle orientation.
+
+```js
+{
+ pageOrientation: 'portrait',
+ content: [
+ {text: 'Text on Portrait'},
+ {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},
+ {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},
+ {text: 'Text on Portrait 2'},
+ ]
+}
+```
+
+Hauteur de page automatique :
+
+```js
+var dd = {
+ pageSize: {
+ width: 595.28,
+ height: 'auto'
+ },
+ content: [
+ // ...
+ ]
+}
+```
+
+## Contrôler dynamiquement les sauts de page, par exemple pour éviter les titres orphelins
+
+Vous pouvez spécifier une fonction `pageBreakBefore` qui détermine si un saut de page doit être inséré avant un nœud. Pour appliquer une règle « pas de titre orphelin », utilisez une définition comme celle-ci :
+
+``` javascript
+var dd = {
+ content: [
+ {text: '1 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ {text: '2 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ {text: '3 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ ],
+ pageBreakBefore: function(currentNode, nodeContainer) {
+ // nodeContainer.getFollowingNodesOnPage();
+ // nodeContainer.getNodesOnNextPage();
+ // nodeContainer.getPreviousNodesOnPage();
+
+ return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;
+ }
+}
+```
+
+Si `pageBreakBefore` renvoie `true`, un saut de page est ajouté avant `currentNode`. Les informations suivantes sont attachées au nœud courant :
+
+``` javascript
+{
+ id: '',
+ headlineLevel: '',
+ text: '',
+ ul: '',
+ ol: '',
+ table: '',
+ image: '',
+ qr: '',
+ canvas: '',
+ columns: '',
+ style: '',
+ pageOrientation: '',
+ pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)
+ pages: 6, // the total number of pages of this document
+ stack: false, // if this is an element which encapsulates multiple sub-objects
+ startPosition: {
+ pageNumber: 2, // the page this node starts on
+ pageOrientation: 'landscape', // the orientation of this page
+ left: 60, // the left position
+ right: 60, // the right position
+ verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)
+ horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)
+ }
+}
+```
diff --git a/content/document-definition-object/page.md b/content/document-definition-object/page.md
index ff95c4f5..e07fcc0b 100644
--- a/content/document-definition-object/page.md
+++ b/content/document-definition-object/page.md
@@ -1,6 +1,6 @@
+++
title = "Page dimensions, orientation and margins"
-description = ""
+description = "Set page size, orientation and margins, and control automatic or explicit page breaks."
weight = 2250
alwaysopen = true
+++
@@ -16,6 +16,7 @@ var docDefinition = {
// [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins
pageMargins: [ 40, 60, 40, 60 ],
+ content: ['Page size, orientation and margins.']
};
```
@@ -57,7 +58,7 @@ var dd = {
```
-#### Dynamically control page breaks, for instance to avoid orphan children
+## Dynamically control page breaks, for instance to avoid orphan children
A `pageBreakBefore` function can be specified, which can determine if a page break should be inserted before a node. To implement a 'no orphan child' rule, use a definition like this:
@@ -96,7 +97,7 @@ If `pageBreakBefore` returns true, a page break will be added before the `curren
canvas: '',
columns: '',
style: '',
- pageOrientation '',
+ pageOrientation: '',
pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)
pages: 6, // the total number of pages of this document
stack: false, // if this is an element which encapsulates multiple sub-objects
@@ -109,4 +110,4 @@ If `pageBreakBefore` returns true, a page break will be added before the `curren
horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)
}
}
-```
\ No newline at end of file
+```
diff --git a/content/document-definition-object/page.pt-br.md b/content/document-definition-object/page.pt-br.md
new file mode 100644
index 00000000..93db5838
--- /dev/null
+++ b/content/document-definition-object/page.pt-br.md
@@ -0,0 +1,112 @@
++++
+title = "Dimensões, orientação e margens da página"
+description = "Defina tamanho, orientação e margens da página e controle quebras de página automáticas ou explícitas."
+weight = 2250
+alwaysopen = true
+sourceDigest = "433a428f2dbdb4d2db7e93f3a845e24637a4e34c5631c1d97f53c9f666b00de9"
++++
+
+```js
+var docDefinition = {
+ // a string or { width: number, height: number }
+ pageSize: 'A5',
+
+ // by default we use portrait, you can change it to landscape if you wish
+ pageOrientation: 'landscape',
+
+ // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins
+ pageMargins: [ 40, 60, 40, 60 ],
+ content: ['Page size, orientation and margins.']
+};
+```
+
+Se você definir `pageSize` como uma string, pode usar um dos valores a seguir:
+
+* `'4A0'`, `'2A0'`, `'A0'`, `'A1'`, `'A2'`, `'A3'`, `'A4'`, `'A5'`, `'A6'`, `'A7'`, `'A8'`, `'A9'`, `'A10'`,
+* `'B0'`, `'B1'`, `'B2'`, `'B3'`, `'B4'`, `'B5'`, `'B6'`, `'B7'`, `'B8'`, `'B9'`, `'B10'`,
+* `'C0'`, `'C1'`, `'C2'`, `'C3'`, `'C4'`, `'C5'`, `'C6'`, `'C7'`, `'C8'`, `'C9'`, `'C10'`,
+* `'RA0'`, `'RA1'`, `'RA2'`, `'RA3'`, `'RA4'`,
+* `'SRA0'`, `'SRA1'`, `'SRA2'`, `'SRA3'`, `'SRA4'`,
+* `'EXECUTIVE'`, `'FOLIO'`, `'LEGAL'`, `'LETTER'`, `'TABLOID'`
+
+Para mudar a orientação da página durante o documento, adicione uma quebra de página com a nova orientação.
+
+```js
+{
+ pageOrientation: 'portrait',
+ content: [
+ {text: 'Text on Portrait'},
+ {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},
+ {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},
+ {text: 'Text on Portrait 2'},
+ ]
+}
+```
+
+Altura automática da página:
+
+```js
+var dd = {
+ pageSize: {
+ width: 595.28,
+ height: 'auto'
+ },
+ content: [
+ // ...
+ ]
+}
+```
+
+## Controle dinamicamente as quebras de página, por exemplo, para evitar títulos órfãos
+
+É possível especificar uma função `pageBreakBefore` para determinar se uma quebra de página deve ser inserida antes de um nó. Para implementar uma regra que evite um título órfão, use uma definição como esta:
+
+``` javascript
+var dd = {
+ content: [
+ {text: '1 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ {text: '2 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ {text: '3 Headline', headlineLevel: 1},
+ 'Some long text of variable length ...',
+ ],
+ pageBreakBefore: function(currentNode, nodeContainer) {
+ // nodeContainer.getFollowingNodesOnPage();
+ // nodeContainer.getNodesOnNextPage();
+ // nodeContainer.getPreviousNodesOnPage();
+
+ return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;
+ }
+}
+```
+
+Se `pageBreakBefore` retornar `true`, será adicionada uma quebra de página antes de `currentNode`. O nó atual tem as informações a seguir:
+
+``` javascript
+{
+ id: '',
+ headlineLevel: '',
+ text: '',
+ ul: '',
+ ol: '',
+ table: '',
+ image: '',
+ qr: '',
+ canvas: '',
+ columns: '',
+ style: '',
+ pageOrientation: '',
+ pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)
+ pages: 6, // the total number of pages of this document
+ stack: false, // if this is an element which encapsulates multiple sub-objects
+ startPosition: {
+ pageNumber: 2, // the page this node starts on
+ pageOrientation: 'landscape', // the orientation of this page
+ left: 60, // the left position
+ right: 60, // the right position
+ verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)
+ horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)
+ }
+}
+```
diff --git a/content/document-definition-object/patterns.de.md b/content/document-definition-object/patterns.de.md
new file mode 100644
index 00000000..f1b09a63
--- /dev/null
+++ b/content/document-definition-object/patterns.de.md
@@ -0,0 +1,100 @@
++++
+title = "Muster"
+description = "Definiere und verwende Kachelmuster für Text, Vektoren und Tabellenzellen in pdfmake 0.3."
+weight = 2270
+alwaysopen = true
+sourceDigest = "85d5a2f40ac8d6ba0cd8c74c4dd5d7261674b55739b2309aa929c3410047b331"
++++
+
+Muster lassen sich als Wörterbuch vordefinierter Muster in der Dokumentdefinition angeben.
+
+Unterstützt werden nur Kachelmuster.
+
+## Musterdefinition
+
+Jedes Muster wird mit folgenden Eigenschaften definiert:
+
+- `boundingBox` – Begrenzungsrahmen zum Beschneiden der Musterzelle
+- `xStep` – horizontaler Abstand zwischen Zellen
+- `yStep` – vertikaler Abstand zwischen Zellen
+- `pattern` – PDF-Datenstrom mit den Operationen zum Zeichnen der Grafiken und des Textes in der Zelle
+
+Weitere Informationen zu den Eigenschaften und Mustern im Allgemeinen findest du in der [PDF-Referenz](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf), insbesondere in Abschnitt 4.6 und 4.6.2 zu Kachelmustern.
+
+## Beispiel einer Musterdefinition
+
+Ein einfaches Muster mit Streifen im 45°-Winkel:
+
+```js
+var docDefinition = {
+ content: ["..."],
+ patterns: {
+ stripe45d: {
+ boundingBox: [1, 1, 4, 4],
+ xStep: 3,
+ yStep: 3,
+ pattern: "1 w 0 1 m 4 5 l s 2 0 m 5 3 l s",
+ },
+ },
+};
+```
+
+Die Ausgabe ist im Vektorbeispiel zu sehen.
+
+## Verwendung in Vektoren, Tabellen und Text
+
+Die folgenden Eigenschaften stehen zur Verfügung.
+
+Für Text:
+
+- `background` – als Texthintergrund setzen (siehe Beispiel `styling_properties`)
+
+Für Vektoren:
+
+- `color` – als Füllung eines Vektors setzen (siehe das Rechteck im Vektorbeispiel)
+
+Für Tabellenzellen:
+
+- `fillColor` – Füllfarbe der Zelle (Hintergrund)
+- `overlayPattern` – Muster über den Zellinhalt legen
+- `overlayOpacity` – Deckkraft der Überlagerung
+
+Jede dieser Eigenschaften wird als Tupel `[string, string]` angegeben. Das erste Element ist der Schlüssel im Musterwörterbuch, das zweite die Farbe, mit der das Muster gezeichnet wird.
+
+## Beispiele
+
+Text:
+
+```js
+{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }
+```
+
+Vektor:
+
+```js
+{
+ type: 'rect',
+ x: 10, y: 250, w: 50, h: 30,
+ color: ['stripe45d', 'blue'],
+}
+```
+
+Tabelle (wie in Tabellenzellen verwendet):
+
+```js
+{
+ text: 'Sample value',
+ fillOpacity: 0.85,
+ fillColor: ['stripe45d', 'blue']
+}
+```
+
+```js
+{
+ text: 'Sample value',
+ fillOpacity: 0.15,
+ fillColor: 'blue',
+ overlayPattern: ['stripe45d', 'gray'],
+ overlayOpacity: 0.15
+}
+```
diff --git a/content/document-definition-object/patterns.es.md b/content/document-definition-object/patterns.es.md
new file mode 100644
index 00000000..bf9fcfc3
--- /dev/null
+++ b/content/document-definition-object/patterns.es.md
@@ -0,0 +1,100 @@
++++
+sourceDigest = "85d5a2f40ac8d6ba0cd8c74c4dd5d7261674b55739b2309aa929c3410047b331"
+title = "Patrones"
+description = "Configura patrones en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2270
+alwaysopen = true
++++
+
+Los patrones se pueden definir como un diccionario de patrones predefinidos en la definición del documento.
+
+Solo se admiten patrones de mosaico.
+
+## Definición de patrones
+
+Cada patrón se define mediante:
+
+- `boundingBox`: caja delimitadora que recorta la celda del patrón
+- `xStep`: espaciado horizontal entre celdas
+- `yStep`: espaciado vertical entre celdas
+- `pattern`: flujo PDF de operaciones que dibujan los gráficos o el texto de la celda
+
+Para obtener más información sobre cada propiedad y los patrones en general, consulta la [referencia PDF](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf), en especial las secciones 4.6 y 4.6.2 sobre patrones de mosaico.
+
+## Ejemplo de definición de patrón
+
+Patrón básico que crea rayas a 45°:
+
+```js
+var docDefinition = {
+ content: ["..."],
+ patterns: {
+ stripe45d: {
+ boundingBox: [1, 1, 4, 4],
+ xStep: 3,
+ yStep: 3,
+ pattern: "1 w 0 1 m 4 5 l s 2 0 m 5 3 l s",
+ },
+ },
+};
+```
+
+El resultado se puede ver en el ejemplo vectorial.
+
+## Uso en vectores, tablas y texto
+
+Están disponibles las propiedades siguientes.
+
+Para texto:
+
+- `background`: se establece como fondo del texto (consulta el ejemplo styling_properties)
+
+Para vectores:
+
+- `color`: se establece como relleno de un vector (consulta el rectángulo del ejemplo vectorial)
+
+Para celdas de tabla:
+
+- `fillColor`: color de relleno de fondo de la celda
+- `overlayPattern`: patrón superpuesto sobre el contenido de la celda
+- `overlayOpacity`: opacidad de la superposición
+
+Cada una de estas propiedades se define como una tupla `[string, string]`. El primer elemento es la clave del diccionario de patrones y el segundo es el color con el que se pinta el patrón.
+
+## Ejemplos
+
+Texto:
+
+```js
+{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }
+```
+
+Vector:
+
+```js
+{
+ type: 'rect',
+ x: 10, y: 250, w: 50, h: 30,
+ color: ['stripe45d', 'blue'],
+}
+```
+
+Tabla (en celdas):
+
+```js
+{
+ text: 'Sample value',
+ fillOpacity: 0.85,
+ fillColor: ['stripe45d', 'blue']
+}
+```
+
+```js
+{
+ text: 'Sample value',
+ fillOpacity: 0.15,
+ fillColor: 'blue',
+ overlayPattern: ['stripe45d', 'gray'],
+ overlayOpacity: 0.15
+}
+```
diff --git a/content/document-definition-object/patterns.fr.md b/content/document-definition-object/patterns.fr.md
new file mode 100644
index 00000000..085f7ca2
--- /dev/null
+++ b/content/document-definition-object/patterns.fr.md
@@ -0,0 +1,100 @@
++++
+title = "Motifs"
+description = "Définissez des motifs répétitifs et utilisez-les comme arrière-plan du texte, remplissage vectoriel ou superposition de cellules de tableau."
+weight = 2270
+alwaysopen = true
+sourceDigest = "85d5a2f40ac8d6ba0cd8c74c4dd5d7261674b55739b2309aa929c3410047b331"
++++
+
+Les motifs peuvent être définis sous forme de dictionnaire de motifs prédéfinis dans la définition du document.
+
+Seuls les motifs de pavage sont pris en charge.
+
+## Définition d’un motif
+
+Chaque motif est défini à l’aide des propriétés suivantes :
+
+- `boundingBox` - boîte de délimitation servant à découper la cellule du motif
+- `xStep` - espacement horizontal entre les cellules
+- `yStep` - espacement vertical entre les cellules
+- `pattern` - flux d’opérations PDF qui dessinent les éléments graphiques et le texte de la cellule
+
+Pour en savoir plus sur chaque propriété et les motifs en général, consultez la [référence PDF](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf), en particulier les sections 4.6 et 4.6.2 sur les motifs de pavage.
+
+## Exemple de définition d’un motif
+
+Motif de base produisant des rayures à 45° :
+
+```js
+var docDefinition = {
+ content: ["..."],
+ patterns: {
+ stripe45d: {
+ boundingBox: [1, 1, 4, 4],
+ xStep: 3,
+ yStep: 3,
+ pattern: "1 w 0 1 m 4 5 l s 2 0 m 5 3 l s",
+ },
+ },
+};
+```
+
+Le résultat est visible dans l’exemple vectoriel.
+
+## Utilisation dans les vecteurs, tableaux et textes
+
+Les propriétés suivantes sont disponibles.
+
+Pour le texte :
+
+- `background` - définit l’arrière-plan du texte (voir l’exemple `styling_properties`)
+
+Pour les vecteurs :
+
+- `color` - définit la couleur de remplissage d’un vecteur (voir le rectangle dans l’exemple vectoriel)
+
+Pour les cellules de tableau :
+
+- `fillColor` - couleur de remplissage de la cellule (arrière-plan)
+- `overlayPattern` - motif superposé à la cellule, dessiné par-dessus le contenu
+- `overlayOpacity` - opacité de la superposition
+
+Chacune de ces propriétés est définie par un tuple `[string, string]`. Le premier élément est la clé du motif dans le dictionnaire et le second est la couleur utilisée pour dessiner le motif.
+
+## Exemples
+
+Texte :
+
+```js
+{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }
+```
+
+Vecteur :
+
+```js
+{
+ type: 'rect',
+ x: 10, y: 250, w: 50, h: 30,
+ color: ['stripe45d', 'blue'],
+}
+```
+
+Tableau (dans les cellules) :
+
+```js
+{
+ text: 'Sample value',
+ fillOpacity: 0.85,
+ fillColor: ['stripe45d', 'blue']
+}
+```
+
+```js
+{
+ text: 'Sample value',
+ fillOpacity: 0.15,
+ fillColor: 'blue',
+ overlayPattern: ['stripe45d', 'gray'],
+ overlayOpacity: 0.15
+}
+```
diff --git a/content/document-definition-object/patterns.md b/content/document-definition-object/patterns.md
index 9f6a56dc..f49face9 100644
--- a/content/document-definition-object/patterns.md
+++ b/content/document-definition-object/patterns.md
@@ -1,6 +1,6 @@
+++
title = "Patterns"
-description = ""
+description = "Configure patterns in pdfmake 0.3 with examples, options and usage notes."
weight = 2270
alwaysopen = true
+++
@@ -9,7 +9,7 @@ Patterns can be defined as a dictionary of predefined patterns in the document d
Only tiling patterns are supported.
-#### Pattern definition
+## Pattern definition
Each pattern is defined using:
@@ -20,7 +20,7 @@ Each pattern is defined using:
For more information on each property and patterns in general see the [PDF reference](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf), section 4.6 and 4.6.2 specifically on tiling patterns.
-#### Pattern definition example
+## Pattern definition example
Basic pattern that produces a 45° stripe pattern:
@@ -40,7 +40,7 @@ var docDefinition = {
The output can be seen in the vector example.
-#### Usage in vectors, tables and text
+## Usage in vectors, tables and text
The following properties are available.
@@ -60,7 +60,7 @@ For table cells:
Each of the above properties is defined as a tuple `[string, string]`. The first element is the key in the patterns dictionary and the second is the color to use to paint the pattern.
-#### Examples
+## Examples
Text:
diff --git a/content/document-definition-object/patterns.pt-br.md b/content/document-definition-object/patterns.pt-br.md
new file mode 100644
index 00000000..302cbbb0
--- /dev/null
+++ b/content/document-definition-object/patterns.pt-br.md
@@ -0,0 +1,100 @@
++++
+title = "Padrões"
+description = "Defina padrões repetidos para texto, formas vetoriais e preenchimentos de células no pdfmake 0.3."
+weight = 2270
+alwaysopen = true
+sourceDigest = "85d5a2f40ac8d6ba0cd8c74c4dd5d7261674b55739b2309aa929c3410047b331"
++++
+
+Os padrões podem ser definidos como um dicionário de padrões predefinidos na definição do documento.
+
+Há suporte somente a padrões de ladrilhamento.
+
+## Definição de padrão
+
+Cada padrão é definido com:
+
+- `boundingBox` - caixa delimitadora usada para recortar a célula do padrão
+- `xStep` - espaçamento horizontal entre as células
+- `yStep` - espaçamento vertical entre as células
+- `pattern` - fluxo PDF de operações que renderizam os gráficos/texto da célula
+
+Para obter mais informações sobre cada propriedade e padrões em geral, consulte a [referência do PDF](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf), especialmente as seções 4.6 e 4.6.2 sobre padrões de ladrilhamento.
+
+## Exemplo de definição de padrão
+
+Padrão básico que produz listras a 45°:
+
+```js
+var docDefinition = {
+ content: ["..."],
+ patterns: {
+ stripe45d: {
+ boundingBox: [1, 1, 4, 4],
+ xStep: 3,
+ yStep: 3,
+ pattern: "1 w 0 1 m 4 5 l s 2 0 m 5 3 l s",
+ },
+ },
+};
+```
+
+O resultado pode ser visto no exemplo vetorial.
+
+## Uso em vetores, tabelas e texto
+
+As propriedades a seguir estão disponíveis.
+
+Para texto:
+
+- `background` - define o fundo do texto (consulte o exemplo styling_properties)
+
+Para vetores:
+
+- `color` - define o preenchimento de um vetor (consulte o retângulo no exemplo vetorial)
+
+Para células de tabela:
+
+- `fillColor` - cor de preenchimento da célula (fundo)
+- `overlayPattern` - sobreposição da célula, desenhada sobre o conteúdo
+- `overlayOpacity` - opacidade da sobreposição
+
+Cada uma das propriedades acima é definida como uma tupla `[string, string]`. O primeiro elemento é a chave no dicionário `patterns`; o segundo é a cor usada para desenhar o padrão.
+
+## Exemplos
+
+Texto:
+
+```js
+{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }
+```
+
+Vetor:
+
+```js
+{
+ type: 'rect',
+ x: 10, y: 250, w: 50, h: 30,
+ color: ['stripe45d', 'blue'],
+}
+```
+
+Tabela (usado em células da tabela):
+
+```js
+{
+ text: 'Sample value',
+ fillOpacity: 0.85,
+ fillColor: ['stripe45d', 'blue']
+}
+```
+
+```js
+{
+ text: 'Sample value',
+ fillOpacity: 0.15,
+ fillColor: 'blue',
+ overlayPattern: ['stripe45d', 'gray'],
+ overlayOpacity: 0.15
+}
+```
diff --git a/content/document-definition-object/pdfa.de.md b/content/document-definition-object/pdfa.de.md
new file mode 100644
index 00000000..71d96ea4
--- /dev/null
+++ b/content/document-definition-object/pdfa.de.md
@@ -0,0 +1,54 @@
++++
+title = "PDF/A"
+description = "Lege mit Beispielen, Optionen und Anwendungshinweisen PDF/A in pdfmake 0.3 fest."
+weight = 2310
+alwaysopen = true
+sourceDigest = "3a4aac84f9ac2fad0a48e377a819ab231184afd5b8138332817198c5125b12c5"
++++
+
+PDF/A ist ein spezielles Format zur Archivierung und langfristigen Aufbewahrung elektronischer Dokumente.
+
+Erforderlich ist PDF-Version 1.4 oder höher.
+
+```js
+var docDefinition = {
+ version: '1.5',
+ subset: 'PDF/A-3a',
+ tagged: true,
+ displayTitle: true,
+ info: {
+ title: 'Awesome PDF document from pdfmake'
+ },
+ content: [
+ 'PDF/A document for archive'
+ ]
+};
+```
+
+Unterstützte PDF-Versionen (Eigenschaft `version`):
+- `1.3` – PDF-Version 1.3 (Standard), **für PDF/A nicht unterstützt**
+- `1.4` – PDF-Version 1.4
+- `1.5` – PDF-Version 1.5
+- `1.6` – PDF-Version 1.6
+- `1.7` – PDF-Version 1.7
+- `1.7ext3` – PDF-Version 1.7 ExtensionLevel 3
+
+Konformitätsstufe des Dokuments (Eigenschaft `subset`):
+- `PDF/A-1` (Kurzform für PDF/A-1b)
+- `PDF/A-1a`
+- `PDF/A-1b`
+- `PDF/A-2` (Kurzform für PDF/A-2b)
+- `PDF/A-2a`
+- `PDF/A-2b`
+- `PDF/A-3` (Kurzform für PDF/A-3b)
+- `PDF/A-3a`
+- `PDF/A-3b`
+- `PDF/UA`
+
+Dokument als getaggtes PDF kennzeichnen (Eigenschaft `tagged`):
+- `true` – aktivieren
+- `false` – deaktivieren
+
+Dokumenttitel in der Titelleiste des Fensters anzeigen (Eigenschaft `displayTitle`):
+- `true` – aktivieren
+- `false` – deaktivieren
diff --git a/content/document-definition-object/pdfa.es.md b/content/document-definition-object/pdfa.es.md
new file mode 100644
index 00000000..e50def44
--- /dev/null
+++ b/content/document-definition-object/pdfa.es.md
@@ -0,0 +1,54 @@
++++
+sourceDigest = "3a4aac84f9ac2fad0a48e377a819ab231184afd5b8138332817198c5125b12c5"
+title = "PDF/A"
+description = "Configura PDF/A en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2310
+alwaysopen = true
++++
+
+PDF/A está especializado en el archivado y la conservación a largo plazo de documentos electrónicos.
+
+Se requiere la versión 1.4 de PDF o posterior.
+
+```js
+var docDefinition = {
+ version: '1.5',
+ subset: 'PDF/A-3a',
+ tagged: true,
+ displayTitle: true,
+ info: {
+ title: 'Awesome PDF document from pdfmake'
+ },
+ content: [
+ 'PDF/A document for archive'
+ ]
+};
+```
+
+Versiones PDF compatibles (propiedad `version`):
+- `1.3`: PDF 1.3 (predeterminada), **no compatible con PDF/A**
+- `1.4`: PDF 1.4
+- `1.5`: PDF 1.5
+- `1.6`: PDF 1.6
+- `1.7`: PDF 1.7
+- `1.7ext3`: PDF 1.7 ExtensionLevel 3
+
+Subconjunto del documento (propiedad `subset`):
+- `PDF/A-1` (atajo de PDF/A-1b)
+- `PDF/A-1a`
+- `PDF/A-1b`
+- `PDF/A-2` (atajo de PDF/A-2b)
+- `PDF/A-2a`
+- `PDF/A-2b`
+- `PDF/A-3` (atajo de PDF/A-3b)
+- `PDF/A-3a`
+- `PDF/A-3b`
+- `PDF/UA`
+
+Marcar el documento como PDF etiquetado (propiedad `tagged`):
+- `true`: activar
+- `false`: desactivar
+
+Mostrar el título del documento en el título de la ventana (propiedad `displayTitle`):
+- `true`: activar
+- `false`: desactivar
diff --git a/content/document-definition-object/pdfa.fr.md b/content/document-definition-object/pdfa.fr.md
new file mode 100644
index 00000000..74bf4970
--- /dev/null
+++ b/content/document-definition-object/pdfa.fr.md
@@ -0,0 +1,54 @@
++++
+title = "PDF/A"
+description = "Créez des documents PDF/A pour l’archivage et la conservation électronique à long terme."
+weight = 2310
+alwaysopen = true
+sourceDigest = "3a4aac84f9ac2fad0a48e377a819ab231184afd5b8138332817198c5125b12c5"
++++
+
+PDF/A est un format spécialisé dans l’archivage et la conservation à long terme des documents électroniques.
+
+La version PDF 1.4 ou ultérieure est requise.
+
+```js
+var docDefinition = {
+ version: '1.5',
+ subset: 'PDF/A-3a',
+ tagged: true,
+ displayTitle: true,
+ info: {
+ title: 'Awesome PDF document from pdfmake'
+ },
+ content: [
+ 'PDF/A document for archive'
+ ]
+};
+```
+
+Versions PDF prises en charge (propriété `version`) :
+- `1.3` - version PDF 1.3 (par défaut), **PDF/A non pris en charge**
+- `1.4` - version PDF 1.4
+- `1.5` - version PDF 1.5
+- `1.6` - version PDF 1.6
+- `1.7` - version PDF 1.7
+- `1.7ext3` - version PDF 1.7 ExtensionLevel 3
+
+Sous-ensemble du document (propriété `subset`) :
+- `PDF/A-1` (raccourci pour PDF/A-1b)
+- `PDF/A-1a`
+- `PDF/A-1b`
+- `PDF/A-2` (raccourci pour PDF/A-2b)
+- `PDF/A-2a`
+- `PDF/A-2b`
+- `PDF/A-3` (raccourci pour PDF/A-3b)
+- `PDF/A-3a`
+- `PDF/A-3b`
+- `PDF/UA`
+
+Marquer le document comme PDF balisé (propriété `tagged`) :
+- `true` - activer
+- `false` - désactiver
+
+Afficher le titre du document dans la barre de titre de la fenêtre (propriété `displayTitle`) :
+- `true` - activer
+- `false` - désactiver
diff --git a/content/document-definition-object/pdfa.md b/content/document-definition-object/pdfa.md
index d8fce677..c1954e64 100644
--- a/content/document-definition-object/pdfa.md
+++ b/content/document-definition-object/pdfa.md
@@ -1,6 +1,6 @@
+++
title = "PDF/A"
-description = ""
+description = "Configure pdf/a in pdfmake 0.3 with examples, options and usage notes."
weight = 2310
alwaysopen = true
+++
@@ -33,7 +33,7 @@ Supported PDF versions (property `version`):
- `1.7ext3` - PDF version 1.7 ExtensionLevel 3
Subset of document (property `subset`):
-- `PDF/A-1` (shortcut for PDF/A-1b)
+- `PDF/A-1` (shortcut for PDF/A-1b)
- `PDF/A-1a`
- `PDF/A-1b`
- `PDF/A-2` (shortcut for PDF/A-2b)
@@ -50,4 +50,4 @@ Mark document as Tagged PDF (property `tagged`)
Display of document title in window title (property `displayTitle`)
- `true` - enable
-- `false` - disable
\ No newline at end of file
+- `false` - disable
diff --git a/content/document-definition-object/pdfa.pt-br.md b/content/document-definition-object/pdfa.pt-br.md
new file mode 100644
index 00000000..3da58cb0
--- /dev/null
+++ b/content/document-definition-object/pdfa.pt-br.md
@@ -0,0 +1,53 @@
++++
+title = "PDF/A"
+description = "Configure a saída em PDF/A no pdfmake 0.3 e escolha a versão e o subconjunto do padrão de arquivamento."
+weight = 2310
+sourceDigest = "3a4aac84f9ac2fad0a48e377a819ab231184afd5b8138332817198c5125b12c5"
++++
+
+PDF/A é um formato especializado para arquivamento e preservação de longo prazo de documentos eletrônicos.
+
+É necessária a versão 1.4 ou superior do PDF.
+
+```js
+var docDefinition = {
+ version: '1.5',
+ subset: 'PDF/A-3a',
+ tagged: true,
+ displayTitle: true,
+ info: {
+ title: 'Awesome PDF document from pdfmake'
+ },
+ content: [
+ 'PDF/A document for archive'
+ ]
+};
+```
+
+Versões de PDF compatíveis (propriedade `version`):
+- `1.3` - versão PDF 1.3 (padrão), **não compatível com PDF/A**
+- `1.4` - versão PDF 1.4
+- `1.5` - versão PDF 1.5
+- `1.6` - versão PDF 1.6
+- `1.7` - versão PDF 1.7
+- `1.7ext3` - extensão nível 3 da versão PDF 1.7
+
+Subconjunto do documento (propriedade `subset`):
+- `PDF/A-1` (atalho para PDF/A-1b)
+- `PDF/A-1a`
+- `PDF/A-1b`
+- `PDF/A-2` (atalho para PDF/A-2b)
+- `PDF/A-2a`
+- `PDF/A-2b`
+- `PDF/A-3` (atalho para PDF/A-3b)
+- `PDF/A-3a`
+- `PDF/A-3b`
+- `PDF/UA`
+
+Marque o documento como PDF marcado (propriedade `tagged`):
+- `true` - ativado
+- `false` - desativado
+
+Exibição do título do documento na barra de título da janela (propriedade `displayTitle`):
+- `true` - ativada
+- `false` - desativada
diff --git a/content/document-definition-object/qr.de.md b/content/document-definition-object/qr.de.md
new file mode 100644
index 00000000..927d4b02
--- /dev/null
+++ b/content/document-definition-object/qr.de.md
@@ -0,0 +1,37 @@
++++
+title = "QR-Code"
+description = "Erzeuge QR-Codes in pdfmake 0.3 und passe Farbe, Größe, Version, Fehlerkorrektur, Kodierung und Maskenmuster an."
+weight = 2220
+alwaysopen = true
+sourceDigest = "1faae2f9f0ec8989f3aac23e9c10b8b8c91998d2830d52b4558b2ff3f8beafe9"
++++
+
+```js
+var docDefinition = {
+ content: [
+ // basic usage
+ { qr: 'text in QR' },
+
+ // colored QR
+ { qr: 'text in QR', foreground: 'red', background: 'yellow' },
+
+ // resized QR
+ { qr: 'text in QR', fit: 500 },
+ ]
+}
+```
+
+Eigenschaften:
+
+* `qr`: `string` – Text im QR-Code
+* `foreground`: `string` (optional, Standard schwarz) – Vordergrundfarbe
+* `background`: `string` (optional, Standard weiß) – Hintergrundfarbe
+* `fit`: `integer` (optional) – Größe des ausgegebenen QR-Bildes anpassen
+* `version`: `integer` (optional) – QR-Version von 1 bis 40 (Details siehe [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Storage))
+* `eccLevel`: `string` (optional, Standard L) – Fehlerkorrekturstufe (Details siehe [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Error_correction)); mögliche Werte:
+ * _L_ – Stufe L (niedrig), ungefähr 7 % der Codewörter können wiederhergestellt werden
+ * _M_ – Stufe M (mittel), ungefähr 15 % der Codewörter können wiederhergestellt werden
+ * _Q_ – Stufe Q (Quartil), ungefähr 25 % der Codewörter können wiederhergestellt werden
+ * _H_ – Stufe H (hoch), ungefähr 30 % der Codewörter können wiederhergestellt werden
+* `mode`: `string` (optional) – Kodierungsmodus; mögliche Werte: _numeric_, _alphanumeric_, _octet_ (Details siehe [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Storage))
+* `mask`: `integer` (optional) – Maskenmuster von 0 bis 7 (Details siehe [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Encoding))
diff --git a/content/document-definition-object/qr.es.md b/content/document-definition-object/qr.es.md
new file mode 100644
index 00000000..43b955d3
--- /dev/null
+++ b/content/document-definition-object/qr.es.md
@@ -0,0 +1,37 @@
++++
+sourceDigest = "1faae2f9f0ec8989f3aac23e9c10b8b8c91998d2830d52b4558b2ff3f8beafe9"
+title = "Código QR"
+description = "Configura códigos QR en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2220
+alwaysopen = true
++++
+
+```js
+var docDefinition = {
+ content: [
+ // basic usage
+ { qr: 'text in QR' },
+
+ // colored QR
+ { qr: 'text in QR', foreground: 'red', background: 'yellow' },
+
+ // resized QR
+ { qr: 'text in QR', fit: 500 },
+ ]
+}
+```
+
+Propiedades:
+
+* `qr`: `string`, texto del código QR
+* `foreground`: `string` (opcional, valor predeterminado: negro), color del primer plano
+* `background`: `string` (opcional, valor predeterminado: blanco), color del fondo
+* `fit`: `integer` (opcional), tamaño al que ajustar la imagen QR de salida
+* `version`: `integer` (opcional), versión del código QR entre 1 y 40 (para más detalles, consulta [Wikipedia](https://en.wikipedia.org/wiki/QR_code#Storage))
+* `eccLevel`: `string` (opcional, valor predeterminado: L), capacidad de corrección de errores (para más detalles, consulta [Wikipedia](https://en.wikipedia.org/wiki/QR_code#Error_correction)); valores posibles:
+ * _L_: nivel L (bajo), se puede recuperar aproximadamente el 7 % de las palabras de código
+ * _M_: nivel M (medio), se puede recuperar aproximadamente el 15 % de las palabras de código
+ * _Q_: nivel Q (cuartil), se puede recuperar aproximadamente el 25 % de las palabras de código
+ * _H_: nivel H (alto), se puede recuperar aproximadamente el 30 % de las palabras de código
+* `mode`: `string` (opcional), modo de codificación; valores posibles: _numeric_, _alphanumeric_, _octet_ (para más detalles, consulta [Wikipedia](https://en.wikipedia.org/wiki/QR_code#Storage))
+* `mask`: `integer` (opcional), patrón de máscara, intervalo de 0 a 7 (para más detalles, consulta [Wikipedia](https://en.wikipedia.org/wiki/QR_code#Encoding))
diff --git a/content/document-definition-object/qr.fr.md b/content/document-definition-object/qr.fr.md
new file mode 100644
index 00000000..099fcc30
--- /dev/null
+++ b/content/document-definition-object/qr.fr.md
@@ -0,0 +1,37 @@
++++
+title = "Code QR"
+description = "Ajoutez des codes QR et configurez leur couleur, leur taille, leur version, la correction d’erreurs et le mode d’encodage."
+weight = 2220
+alwaysopen = true
+sourceDigest = "1faae2f9f0ec8989f3aac23e9c10b8b8c91998d2830d52b4558b2ff3f8beafe9"
++++
+
+```js
+var docDefinition = {
+ content: [
+ // basic usage
+ { qr: 'text in QR' },
+
+ // colored QR
+ { qr: 'text in QR', foreground: 'red', background: 'yellow' },
+
+ // resized QR
+ { qr: 'text in QR', fit: 500 },
+ ]
+}
+```
+
+Propriétés :
+
+* `qr` : `string` - texte du code QR
+* `foreground` : `string` (facultatif, noir par défaut) - couleur de premier plan
+* `background` : `string` (facultatif, blanc par défaut) - couleur d’arrière-plan
+* `fit` : `integer` (facultatif) - ajuste la taille de l’image QR générée
+* `version` : `integer` (facultatif) - version QR, de 1 à 40 (voir [Wikipédia](https://en.wikipedia.org/wiki/QR_code#Storage))
+* `eccLevel` : `string` (facultatif, L par défaut) - capacité de correction d’erreurs (voir [Wikipédia](https://en.wikipedia.org/wiki/QR_code#Error_correction)), valeurs possibles :
+ * _L_ - niveau L (faible), environ 7 % des mots de code peuvent être restaurés
+ * _M_ - niveau M (moyen), environ 15 % des mots de code peuvent être restaurés
+ * _Q_ - niveau Q (quartile), environ 25 % des mots de code peuvent être restaurés
+ * _H_ - niveau H (élevé), environ 30 % des mots de code peuvent être restaurés
+* `mode` : `string` (facultatif) - mode d’encodage ; valeurs possibles : _numeric_, _alphanumeric_, _octet_ (voir [Wikipédia](https://en.wikipedia.org/wiki/QR_code#Storage))
+* `mask` : `integer` (facultatif) - motif de masque, de 0 à 7 (voir [Wikipédia](https://en.wikipedia.org/wiki/QR_code#Encoding))
diff --git a/content/document-definition-object/qr.md b/content/document-definition-object/qr.md
index 570ccb61..1d89e695 100644
--- a/content/document-definition-object/qr.md
+++ b/content/document-definition-object/qr.md
@@ -1,6 +1,6 @@
+++
title = "QR code"
-description = ""
+description = "Configure qr code in pdfmake 0.3 with examples, options and usage notes."
weight = 2220
alwaysopen = true
+++
@@ -15,7 +15,7 @@ var docDefinition = {
{ qr: 'text in QR', foreground: 'red', background: 'yellow' },
// resized QR
- { qr: 'text in QR', fit: '500' },
+ { qr: 'text in QR', fit: 500 },
]
}
```
diff --git a/content/document-definition-object/qr.pt-br.md b/content/document-definition-object/qr.pt-br.md
new file mode 100644
index 00000000..2125f58e
--- /dev/null
+++ b/content/document-definition-object/qr.pt-br.md
@@ -0,0 +1,37 @@
++++
+title = "Código QR"
+description = "Gere códigos QR com texto, cores, tamanho, versão e nível de correção de erros no pdfmake 0.3."
+weight = 2220
+alwaysopen = true
+sourceDigest = "1faae2f9f0ec8989f3aac23e9c10b8b8c91998d2830d52b4558b2ff3f8beafe9"
++++
+
+```js
+var docDefinition = {
+ content: [
+ // basic usage
+ { qr: 'text in QR' },
+
+ // colored QR
+ { qr: 'text in QR', foreground: 'red', background: 'yellow' },
+
+ // resized QR
+ { qr: 'text in QR', fit: 500 },
+ ]
+}
+```
+
+Propriedades:
+
+* `qr`: `string` - texto no código QR
+* `foreground`: `string` (opcional, padrão preto) - cor do primeiro plano
+* `background`: `string` (opcional, padrão branco) - cor do fundo
+* `fit`: `integer` (opcional) - ajusta o tamanho da imagem QR de saída
+* `version`: `integer` (opcional) - versão QR de 1 a 40 (detalhes em [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Storage))
+* `eccLevel`: `string` (opcional, padrão L) - capacidade de correção de erros (detalhes em [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Error_correction)); valores possíveis:
+ * _L_ - nível L (baixo), aproximadamente 7% das palavras de código podem ser restauradas
+ * _M_ - nível M (médio), aproximadamente 15% das palavras de código podem ser restauradas
+ * _Q_ - nível Q (quartil), aproximadamente 25% das palavras de código podem ser restauradas
+ * _H_ - nível H (alto), aproximadamente 30% das palavras de código podem ser restauradas
+* `mode`: `string` (opcional) - modo de codificação; valores possíveis: _numeric_, _alphanumeric_, _octet_ (detalhes em [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Storage))
+* `mask`: `integer` (opcional) - padrão de máscara, de 0 a 7 (detalhes em [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Encoding))
diff --git a/content/document-definition-object/sections.de.md b/content/document-definition-object/sections.de.md
new file mode 100644
index 00000000..38e81144
--- /dev/null
+++ b/content/document-definition-object/sections.de.md
@@ -0,0 +1,64 @@
++++
+title = "Dokumentabschnitte"
+description = "Lege für einzelne Dokumentabschnitte in pdfmake 0.3 Seiteneinstellungen, Kopf- und Fußzeilen, Wasserzeichen sowie Hintergründe fest."
+weight = 2090
+alwaysopen = true
+sourceDigest = "6dc77fa5678a9e679efdf6b4bff537f029525cefa55e1030486444fce88c0ea8"
++++
+
+Mit Dokumentabschnitten kannst du ein Dokument in mehrere Teile mit jeweils eigenen Seiteneinstellungen aufteilen.
+
+Jeder Abschnitt kann Folgendes festlegen:
+- eigene Seitengröße und Ausrichtung
+- eigene Seitenränder
+- eigene Kopf- und Fußzeile
+- eigenes Wasserzeichen
+- eigenen Hintergrund
+
+Eine Definition mit allen Eigenschaften:
+```js
+var docDefinition = {
+ content: [
+ {
+ header: function (currentPage, pageCount) {
+ return currentPage.toString() + ' of ' + pageCount;
+ },
+ footer: function (currentPage, pageCount) {
+ return currentPage.toString() + ' of ' + pageCount;
+ },
+ background: function () {
+ return {text: 'background', alignment: 'right'};
+ },
+ watermark: 'watermark',
+ pageSize: 'A4',
+ pageOrientation: 'landscape',
+ pageMargins: 5,
+ section: [
+ 'Text in section.'
+ ]
+ }
+ ]
+}
+```
+
+Im nächsten Abschnitt können Eigenschaften vom vorherigen Abschnitt übernommen werden:
+```js
+var docDefinition = {
+ content: [
+ {
+ header: 'inherit',
+ footer: 'inherit',
+ background: 'inherit',
+ watermark: 'inherit',
+ pageSize: 'inherit',
+ pageOrientation: 'inherit',
+ pageMargins: 'inherit',
+ section: [
+ 'Text in section.'
+ ]
+ }
+ ]
+}
+```
+
+Ein vollständiges Beispiel findest du unter [examples/section.js](https://github.com/bpampuch/pdfmake/blob/master/examples/sections.js).
diff --git a/content/document-definition-object/sections.es.md b/content/document-definition-object/sections.es.md
new file mode 100644
index 00000000..a2954237
--- /dev/null
+++ b/content/document-definition-object/sections.es.md
@@ -0,0 +1,64 @@
++++
+sourceDigest = "6dc77fa5678a9e679efdf6b4bff537f029525cefa55e1030486444fce88c0ea8"
+title = "Secciones del documento"
+description = "Configura secciones de documentos en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2090
+alwaysopen = true
++++
+
+Las secciones del documento permiten dividirlo en varias partes, cada una con su propia configuración de página.
+
+Cada sección admite:
+- tamaño y orientación de página personalizados
+- márgenes de página personalizados
+- encabezado y pie de página personalizados
+- marca de agua personalizada
+- fondo personalizado
+
+Definición con todas las propiedades:
+```js
+var docDefinition = {
+ content: [
+ {
+ header: function (currentPage, pageCount) {
+ return currentPage.toString() + ' of ' + pageCount;
+ },
+ footer: function (currentPage, pageCount) {
+ return currentPage.toString() + ' of ' + pageCount;
+ },
+ background: function () {
+ return {text: 'background', alignment: 'right'};
+ },
+ watermark: 'watermark',
+ pageSize: 'A4',
+ pageOrientation: 'landscape',
+ pageMargins: 5,
+ section: [
+ 'Text in section.'
+ ]
+ }
+ ]
+}
+```
+
+En la sección siguiente, las propiedades se pueden heredar de la sección anterior:
+```js
+var docDefinition = {
+ content: [
+ {
+ header: 'inherit',
+ footer: 'inherit',
+ background: 'inherit',
+ watermark: 'inherit',
+ pageSize: 'inherit',
+ pageOrientation: 'inherit',
+ pageMargins: 'inherit',
+ section: [
+ 'Text in section.'
+ ]
+ }
+ ]
+}
+```
+
+Hay un ejemplo completo en [examples/section.js](https://github.com/bpampuch/pdfmake/blob/master/examples/sections.js).
diff --git a/content/document-definition-object/sections.fr.md b/content/document-definition-object/sections.fr.md
new file mode 100644
index 00000000..838a1298
--- /dev/null
+++ b/content/document-definition-object/sections.fr.md
@@ -0,0 +1,64 @@
++++
+title = "Sections du document"
+description = "Divisez un document en sections dotées de paramètres de page, d’en-têtes, de pieds de page, de filigranes et d’arrière-plans distincts."
+weight = 2090
+alwaysopen = true
+sourceDigest = "6dc77fa5678a9e679efdf6b4bff537f029525cefa55e1030486444fce88c0ea8"
++++
+
+Les sections de document permettent de diviser un document en plusieurs parties, chacune avec ses propres paramètres de page.
+
+Chaque section prend en charge :
+- un format et une orientation de page personnalisés
+- des marges de page personnalisées
+- un en-tête et un pied de page personnalisés
+- un filigrane personnalisé
+- un arrière-plan personnalisé
+
+Définition incluant toutes les propriétés :
+```js
+var docDefinition = {
+ content: [
+ {
+ header: function (currentPage, pageCount) {
+ return currentPage.toString() + ' of ' + pageCount;
+ },
+ footer: function (currentPage, pageCount) {
+ return currentPage.toString() + ' of ' + pageCount;
+ },
+ background: function () {
+ return {text: 'background', alignment: 'right'};
+ },
+ watermark: 'watermark',
+ pageSize: 'A4',
+ pageOrientation: 'landscape',
+ pageMargins: 5,
+ section: [
+ 'Text in section.'
+ ]
+ }
+ ]
+}
+```
+
+Dans la section suivante, les propriétés peuvent être héritées de la section précédente :
+```js
+var docDefinition = {
+ content: [
+ {
+ header: 'inherit',
+ footer: 'inherit',
+ background: 'inherit',
+ watermark: 'inherit',
+ pageSize: 'inherit',
+ pageOrientation: 'inherit',
+ pageMargins: 'inherit',
+ section: [
+ 'Text in section.'
+ ]
+ }
+ ]
+}
+```
+
+Un [exemple complet](https://github.com/bpampuch/pdfmake/blob/master/examples/sections.js) est disponible.
diff --git a/content/document-definition-object/sections.md b/content/document-definition-object/sections.md
index 1ed7e50c..2ef492a9 100644
--- a/content/document-definition-object/sections.md
+++ b/content/document-definition-object/sections.md
@@ -1,6 +1,6 @@
+++
title = "Document sections"
-description = ""
+description = "Configure document sections in pdfmake 0.3 with examples, options and usage notes."
weight = 2090
alwaysopen = true
+++
diff --git a/content/document-definition-object/sections.pt-br.md b/content/document-definition-object/sections.pt-br.md
new file mode 100644
index 00000000..d227fb78
--- /dev/null
+++ b/content/document-definition-object/sections.pt-br.md
@@ -0,0 +1,64 @@
++++
+title = "Seções do documento"
+description = "Divida o documento em seções com configurações próprias de página, cabeçalho, rodapé e fundo."
+weight = 2090
+alwaysopen = true
+sourceDigest = "6dc77fa5678a9e679efdf6b4bff537f029525cefa55e1030486444fce88c0ea8"
++++
+
+As seções do documento permitem dividi-lo em várias partes, cada uma com suas próprias configurações de página.
+
+Cada seção oferece suporte a:
+- tamanho e orientação de página personalizados
+- margens de página personalizadas
+- cabeçalho e rodapé personalizados
+- marca-d'água personalizada
+- plano de fundo personalizado
+
+Definição com todas as propriedades:
+```js
+var docDefinition = {
+ content: [
+ {
+ header: function (currentPage, pageCount) {
+ return currentPage.toString() + ' of ' + pageCount;
+ },
+ footer: function (currentPage, pageCount) {
+ return currentPage.toString() + ' of ' + pageCount;
+ },
+ background: function () {
+ return {text: 'background', alignment: 'right'};
+ },
+ watermark: 'watermark',
+ pageSize: 'A4',
+ pageOrientation: 'landscape',
+ pageMargins: 5,
+ section: [
+ 'Text in section.'
+ ]
+ }
+ ]
+}
+```
+
+Na seção seguinte, as propriedades podem ser herdadas da seção anterior:
+```js
+var docDefinition = {
+ content: [
+ {
+ header: 'inherit',
+ footer: 'inherit',
+ background: 'inherit',
+ watermark: 'inherit',
+ pageSize: 'inherit',
+ pageOrientation: 'inherit',
+ pageMargins: 'inherit',
+ section: [
+ 'Text in section.'
+ ]
+ }
+ ]
+}
+```
+
+O exemplo completo está disponível em [examples/section.js](https://github.com/bpampuch/pdfmake/blob/master/examples/sections.js).
diff --git a/content/document-definition-object/security.de.md b/content/document-definition-object/security.de.md
new file mode 100644
index 00000000..c2d4ed9c
--- /dev/null
+++ b/content/document-definition-object/security.de.md
@@ -0,0 +1,65 @@
++++
+title = "Verschlüsselung und Zugriffsrechte"
+description = "Lege PDF-Passwörter, Verschlüsselungsversionen und Dokumentberechtigungen fest; diese sind von Ressourcen-Zugriffsrichtlinien getrennt."
+weight = 2290
+alwaysopen = true
+sourceDigest = "6736e08d8db59cae0ce17becb97f86de18201817a5135ee1385a2a15cc1608f5"
++++
+
+```js
+var docDefinition = {
+ userPassword: '123',
+ ownerPassword: '123456',
+ permissions: {
+ printing: 'highResolution', //'lowResolution'
+ modifying: false,
+ copying: false,
+ annotating: true,
+ fillingForms: true,
+ contentAccessibility: true,
+ documentAssembly: true
+ },
+ content: [
+ '...'
+ ]
+};
+```
+
+PDF-Dokumente können verschlüsselt und beim Öffnen durch ein Passwort geschützt werden. Außerdem können Berechtigungen für die Aktionen festgelegt werden, die Benutzer mit dem PDF ausführen dürfen.
+
+Um die Verschlüsselung zu aktivieren, setze das Benutzerpasswort (Zeichenfolge) in `userPassword`. Wenn ein Benutzerpasswort angegeben ist, wird die PDF-Datei verschlüsselt und Benutzer werden beim Öffnen aufgefordert, das Passwort zum Entschlüsseln einzugeben.
+
+Um Zugriffsrechte für die PDF-Datei festzulegen, musst du ein Eigentümerpasswort (Zeichenfolge) in `ownerPassword` und ein Objekt `permissions` mit Berechtigungen angeben. Standardmäßig sind alle Vorgänge gesperrt. Du musst die gewünschten Vorgänge ausdrücklich erlauben.
+
+Folgende Einstellungen sind im Objekt `permissions` möglich:
+
+- `printing` – ob Drucken erlaubt ist. Mit `"lowResolution"` wird Drucken in niedriger Auflösung erlaubt, mit `"highResolution"` Drucken in hoher Auflösung.
+- `modifying` – ob Änderungen erlaubt sind. Setze den Wert auf `true`, um Änderungen am Dokumentinhalt zu erlauben.
+- `copying` – ob Text oder Grafiken kopiert werden dürfen. Setze den Wert auf `true`, um das Kopieren zu erlauben.
+- `annotating` – ob Anmerkungen und das Ausfüllen von Formularen erlaubt sind. Setze den Wert auf `true`, um beides zuzulassen.
+- `fillingForms` – ob Formulare ausgefüllt und signiert werden dürfen. Setze den Wert auf `true`, um das Ausfüllen und Signieren von Formularfeldern zu erlauben.
+- `contentAccessibility` – ob Text für Barrierefreiheit kopiert werden darf. Setze den Wert auf `true`, um dieses Kopieren zu erlauben.
+- `documentAssembly` – ob das Dokument zusammengestellt werden darf. Setze den Wert auf `true`, um das Zusammenstellen zu erlauben.
+
+Du kannst das Benutzerpasswort, das Eigentümerpasswort oder beide angeben. Das Verhalten hängt von den angegebenen Passwörtern ab:
+
+- Wenn nur ein Benutzerpasswort angegeben ist, können Benutzer mit diesem Passwort die Datei entschlüsseln und haben vollen Zugriff auf das Dokument.
+- Wenn nur ein Eigentümerpasswort angegeben ist, können Benutzer das Dokument ohne Passwort entschlüsseln und öffnen, haben aber nur Zugriff auf ausdrücklich erlaubte Vorgänge. Benutzer mit Eigentümerpasswort haben vollen Zugriff auf das Dokument.
+- Wenn beide Passwörter angegeben sind, können Benutzer mit dem Benutzerpasswort die Datei entschlüsseln, haben aber entsprechend den Berechtigungseinstellungen nur eingeschränkten Zugriff. Benutzer mit Eigentümerpasswort haben vollen Zugriff auf das Dokument.
+
+Beachte, dass die PDF-Datei selbst Zugriffsrechte nicht durchsetzen kann. Sobald die Datei entschlüsselt ist, haben PDF-Viewer Zugriff auf den gesamten Dateiinhalt. Es liegt an den Viewer-Anwendungen, die Berechtigungseinstellungen zu beachten.
+
+Um das Verschlüsselungsverfahren auszuwählen, musst du über `version` die PDF-Version angeben. Es wird das bestmögliche Verschlüsselungsverfahren für diese PDF-Version verwendet.
+
+{{% alert theme="warning" %}}Die PDF-Version wird nur für das Verschlüsselungsverfahren verwendet; alle anderen PDF-Elemente haben Version 1.3.{{% /alert %}}
+
+Verfügbare Versionen:
+
+- `1.3` – PDF-Version 1.3 (Standard), 40-Bit-RC4
+- `1.4` – PDF-Version 1.4, 128-Bit-RC4
+- `1.5` – PDF-Version 1.5, 128-Bit-RC4
+- `1.6` – PDF-Version 1.6, 128-Bit-AES
+- `1.7` – PDF-Version 1.7, 128-Bit-AES
+- `1.7ext3` – PDF-Version 1.7 ExtensionLevel 3, 256-Bit-AES
+
+Bei PDF-Version 1.7 ExtensionLevel 3 wird das Passwort auf 127 Bytes seiner UTF-8-Darstellung gekürzt. In älteren Versionen wird es auf 32 Bytes gekürzt; erlaubt sind dort nur Latin-1-Zeichen.
diff --git a/content/document-definition-object/security.es.md b/content/document-definition-object/security.es.md
new file mode 100644
index 00000000..43e5e537
--- /dev/null
+++ b/content/document-definition-object/security.es.md
@@ -0,0 +1,65 @@
++++
+sourceDigest = "6736e08d8db59cae0ce17becb97f86de18201817a5135ee1385a2a15cc1608f5"
+title = "Cifrado y permisos de acceso"
+description = "Configura contraseñas PDF, versiones de cifrado y permisos del documento; son conceptos distintos de las políticas de acceso a recursos."
+weight = 2290
+alwaysopen = true
++++
+
+```js
+var docDefinition = {
+ userPassword: '123',
+ ownerPassword: '123456',
+ permissions: {
+ printing: 'highResolution', //'lowResolution'
+ modifying: false,
+ copying: false,
+ annotating: true,
+ fillingForms: true,
+ contentAccessibility: true,
+ documentAssembly: true
+ },
+ content: [
+ '...'
+ ]
+};
+```
+
+Los documentos PDF se pueden cifrar para exigir una contraseña al abrirlos y/o para establecer qué pueden hacer los usuarios con el archivo.
+
+Para activar el cifrado, asigna una contraseña de usuario (un valor de tipo string) a `userPassword`. El archivo PDF se cifra cuando se proporciona una contraseña de usuario, y se pedirá a los usuarios que la introduzcan para descifrarlo al abrirlo.
+
+Para establecer permisos de acceso al archivo, debes proporcionar una contraseña de propietario en `ownerPassword` (un valor de tipo string) y un objeto `permissions` con los permisos. De forma predeterminada, todas las operaciones están prohibidas. Debes permitir explícitamente las operaciones que correspondan.
+
+El objeto `permissions` admite estas opciones:
+
+- `printing`: indica si se permite imprimir. Especifica `"lowResolution"` para permitir una impresión de calidad reducida, o `"highResolution"` para permitir una impresión de alta resolución.
+- `modifying`: indica si se permite modificar el archivo. Especifica `true` para permitir modificar el contenido del documento.
+- `copying`: indica si se permite copiar texto o gráficos. Especifica `true` para permitir la copia.
+- `annotating`: indica si se permiten las anotaciones y el relleno de formularios. Especifica `true` para permitir ambas operaciones.
+- `fillingForms`: indica si se permite rellenar y firmar formularios. Especifica `true` para permitir completar campos y firmar.
+- `contentAccessibility`: indica si se permite copiar texto para la accesibilidad. Especifica `true` para permitir esa copia.
+- `documentAssembly`: indica si se permite ensamblar el documento. Especifica `true` para permitirlo.
+
+Puedes especificar una contraseña de usuario, una de propietario o ambas. El comportamiento depende de las contraseñas que proporciones:
+
+- Si solo se proporciona una contraseña de usuario, quienes la tengan podrán descifrar el archivo y acceder al documento sin restricciones.
+- Si solo se proporciona una contraseña de propietario, los usuarios podrán descifrar y abrir el documento sin introducir una contraseña, pero su acceso se limitará a las operaciones permitidas explícitamente. Quienes tengan la contraseña de propietario tendrán acceso completo al documento.
+- Si se proporcionan ambas contraseñas, quienes tengan la contraseña de usuario podrán descifrar el archivo, pero solo tendrán el acceso limitado establecido por los permisos. Quienes tengan la contraseña de propietario tendrán acceso completo.
+
+Ten en cuenta que el propio archivo PDF no puede hacer cumplir los permisos. Una vez descifrado, las aplicaciones de visualización de PDF tienen acceso completo al contenido del archivo; corresponde a esas aplicaciones respetar la configuración de permisos.
+
+Para elegir el método de cifrado, especifica la versión PDF mediante `version`. Se utiliza el mejor método de cifrado disponible para esa versión.
+
+{{% alert theme="warning" %}}La versión PDF solo se usa para el método de cifrado; todos los demás elementos del PDF usan la versión 1.3.{{% /alert %}}
+
+Versiones disponibles:
+
+- `1.3`: PDF 1.3 (predeterminada), se usa RC4 de 40 bits
+- `1.4`: PDF 1.4, se usa RC4 de 128 bits
+- `1.5`: PDF 1.5, se usa RC4 de 128 bits
+- `1.6`: PDF 1.6, se usa AES de 128 bits
+- `1.7`: PDF 1.7, se usa AES de 128 bits
+- `1.7ext3`: PDF 1.7 ExtensionLevel 3, se usa AES de 256 bits
+
+Con la versión PDF 1.7 ExtensionLevel 3, la contraseña se trunca a 127 bytes de su representación UTF-8. En versiones anteriores, se trunca a 32 bytes y solo se permiten caracteres Latin-1.
diff --git a/content/document-definition-object/security.fr.md b/content/document-definition-object/security.fr.md
new file mode 100644
index 00000000..4ab9fd90
--- /dev/null
+++ b/content/document-definition-object/security.fr.md
@@ -0,0 +1,65 @@
++++
+title = "Chiffrement et autorisations d’accès"
+description = "Configurez les mots de passe PDF, les versions de chiffrement et les autorisations du document, distinctes des politiques d’accès aux ressources."
+weight = 2290
+alwaysopen = true
+sourceDigest = "6736e08d8db59cae0ce17becb97f86de18201817a5135ee1385a2a15cc1608f5"
++++
+
+```js
+var docDefinition = {
+ userPassword: '123',
+ ownerPassword: '123456',
+ permissions: {
+ printing: 'highResolution', //'lowResolution'
+ modifying: false,
+ copying: false,
+ annotating: true,
+ fillingForms: true,
+ contentAccessibility: true,
+ documentAssembly: true
+ },
+ content: [
+ '...'
+ ]
+};
+```
+
+Les documents PDF peuvent être chiffrés et exiger un mot de passe à l’ouverture ; ils peuvent aussi définir les opérations autorisées aux utilisateurs.
+
+Pour activer le chiffrement, définissez un mot de passe utilisateur dans `userPassword` (valeur de type chaîne). Le fichier PDF est chiffré dès qu’un mot de passe utilisateur est fourni, et les utilisateurs sont invités à saisir ce mot de passe pour le déchiffrer à l’ouverture.
+
+Pour définir les autorisations d’accès au fichier PDF, fournissez un mot de passe propriétaire dans `ownerPassword` (valeur de type chaîne) et un objet `permissions` contenant les autorisations. Par défaut, toutes les opérations sont interdites. Vous devez autoriser explicitement les opérations voulues.
+
+Les paramètres suivants sont pris en charge dans l’objet `permissions` :
+
+- `printing` : indique si l’impression est autorisée. La valeur `"lowResolution"` autorise une impression de qualité réduite ; `"highResolution"` autorise une impression haute résolution.
+- `modifying` : indique si la modification du fichier est autorisée. Définissez `true` pour autoriser la modification du contenu du document.
+- `copying` : indique si la copie de texte ou de graphiques est autorisée. Définissez `true` pour autoriser la copie.
+- `annotating` : indique si l’annotation et le remplissage de formulaires sont autorisés. Définissez `true` pour les autoriser.
+- `fillingForms` : indique si le remplissage et la signature de formulaires sont autorisés. Définissez `true` pour autoriser le remplissage des champs et la signature.
+- `contentAccessibility` : indique si la copie de texte à des fins d’accessibilité est autorisée. Définissez `true` pour l’autoriser.
+- `documentAssembly` : indique si l’assemblage du document est autorisé. Définissez `true` pour l’autoriser.
+
+Vous pouvez fournir le mot de passe utilisateur, le mot de passe propriétaire ou les deux. Le comportement dépend des mots de passe fournis :
+
+- Avec uniquement le mot de passe utilisateur, les utilisateurs qui le connaissent peuvent déchiffrer le fichier et disposent d’un accès complet au document.
+- Avec uniquement le mot de passe propriétaire, les utilisateurs peuvent déchiffrer et ouvrir le document sans mot de passe, mais leur accès est limité aux opérations explicitement autorisées. Les utilisateurs qui connaissent le mot de passe propriétaire disposent d’un accès complet.
+- Avec les deux mots de passe, les utilisateurs qui connaissent le mot de passe utilisateur peuvent déchiffrer le fichier, mais leur accès est limité conformément aux autorisations. Ceux qui connaissent le mot de passe propriétaire disposent d’un accès complet.
+
+Notez que le fichier PDF ne peut pas faire respecter lui-même les autorisations. Une fois le fichier déchiffré, les applications de lecture PDF ont pleinement accès à son contenu ; il appartient à ces applications de respecter les autorisations définies.
+
+Pour choisir la méthode de chiffrement, spécifiez la version PDF avec `version`. La meilleure méthode de chiffrement compatible avec cette version est utilisée.
+
+{{% alert theme="warning" %}}La version PDF ne sert qu’à déterminer la méthode de chiffrement ; tous les autres éléments du PDF sont en version 1.3.{{% /alert %}}
+
+Versions disponibles :
+
+- `1.3` : PDF version 1.3 (par défaut), chiffrement RC4 40 bits
+- `1.4` : PDF version 1.4, chiffrement RC4 128 bits
+- `1.5` : PDF version 1.5, chiffrement RC4 128 bits
+- `1.6` : PDF version 1.6, chiffrement AES 128 bits
+- `1.7` : PDF version 1.7, chiffrement AES 128 bits
+- `1.7ext3` : PDF version 1.7 ExtensionLevel 3, chiffrement AES 256 bits
+
+Avec la version PDF 1.7 ExtensionLevel 3, le mot de passe est tronqué à 127 octets de sa représentation UTF-8. Dans les versions antérieures, il est tronqué à 32 octets et seuls les caractères Latin-1 sont autorisés.
diff --git a/content/document-definition-object/security.md b/content/document-definition-object/security.md
index cac2235e..a0a69e38 100644
--- a/content/document-definition-object/security.md
+++ b/content/document-definition-object/security.md
@@ -1,6 +1,6 @@
+++
title = "Encryption and access privileges"
-description = ""
+description = "Configure PDF passwords, encryption versions and document permissions; distinct from resource access policies."
weight = 2290
alwaysopen = true
+++
@@ -78,4 +78,4 @@ Available versions:
- `1.7ext3` - PDF version 1.7 ExtensionLevel 3, 256-bit AES is used
When using PDF version 1.7 ExtensionLevel 3, password is truncated to 127 bytes of its UTF-8 representation.
-In older versions, password is truncated to 32 bytes, and only Latin-1 characters are allowed.
\ No newline at end of file
+In older versions, password is truncated to 32 bytes, and only Latin-1 characters are allowed.
diff --git a/content/document-definition-object/security.pt-br.md b/content/document-definition-object/security.pt-br.md
new file mode 100644
index 00000000..9da987da
--- /dev/null
+++ b/content/document-definition-object/security.pt-br.md
@@ -0,0 +1,64 @@
++++
+title = "Criptografia e permissões de acesso"
+description = "Configure senhas, versões de criptografia e permissões do documento PDF; isso é distinto das políticas de acesso a recursos."
+weight = 2290
+sourceDigest = "6736e08d8db59cae0ce17becb97f86de18201817a5135ee1385a2a15cc1608f5"
++++
+
+```js
+var docDefinition = {
+ userPassword: '123',
+ ownerPassword: '123456',
+ permissions: {
+ printing: 'highResolution', //'lowResolution'
+ modifying: false,
+ copying: false,
+ annotating: true,
+ fillingForms: true,
+ contentAccessibility: true,
+ documentAssembly: true
+ },
+ content: [
+ '...'
+ ]
+};
+```
+
+Documentos PDF podem ser criptografados para exigir uma senha ao serem abertos e/ou definir as ações que os usuários podem realizar no arquivo.
+
+Para ativar a criptografia, defina a senha de usuário em `userPassword` (valor string). O arquivo PDF será criptografado quando uma senha de usuário for fornecida, e os usuários precisarão informá-la para descriptografar o arquivo ao abri-lo.
+
+Para definir privilégios de acesso ao PDF, forneça uma senha de proprietário em `ownerPassword` (valor string) e um objeto `permissions` com as permissões. Por padrão, todas as operações são proibidas. É preciso permitir explicitamente as operações desejadas.
+
+As configurações a seguir podem ser usadas no objeto `permissions`:
+
+- `printing` - se a impressão é permitida. Especifique `"lowResolution"` para permitir impressão de baixa qualidade ou `"highResolution"` para permitir impressão em alta resolução
+- `modifying` - se é permitido modificar o arquivo. Especifique `true` para permitir a modificação do conteúdo do documento
+- `copying` - se é permitido copiar texto ou gráficos. Especifique `true` para permitir cópias
+- `annotating` - se é permitido adicionar anotações e preencher formulários. Especifique `true` para permitir essas ações
+- `fillingForms` - se é permitido preencher formulários e assinar. Especifique `true` para permitir o preenchimento de campos e assinaturas
+- `contentAccessibility` - se é permitido copiar texto para acessibilidade. Especifique `true` para permitir essa cópia
+- `documentAssembly` - se é permitido montar o documento. Especifique `true` para permitir a montagem
+
+Você pode especificar a senha de usuário, a senha de proprietário ou ambas. O comportamento depende das senhas fornecidas:
+
+- Quando somente a senha de usuário é fornecida, usuários com essa senha podem descriptografar o arquivo e têm acesso completo ao documento.
+- Quando somente a senha de proprietário é fornecida, os usuários podem descriptografar e abrir o documento sem fornecer senha, mas o acesso fica limitado às operações explicitamente permitidas. Usuários com a senha de proprietário têm acesso completo ao documento.
+- Quando ambas as senhas são fornecidas, usuários com a senha de usuário podem descriptografar o arquivo, mas têm acesso limitado de acordo com as permissões. Usuários com a senha de proprietário têm acesso completo ao documento.
+
+Observe que o próprio arquivo PDF não consegue impor privilégios de acesso. Depois que o arquivo é descriptografado, os aplicativos visualizadores de PDF têm acesso completo ao conteúdo, e cabe a eles respeitar as configurações de permissão.
+
+Para escolher o método de criptografia, especifique a versão do PDF usando `version`. Será utilizado o melhor método de criptografia disponível para essa versão.
+
+{{% alert theme="warning" %}}A versão do PDF é usada somente para escolher o método de criptografia; todos os outros elementos do PDF permanecem na versão 1.3.{{% /alert %}}
+
+Versões disponíveis:
+
+- `1.3` - versão PDF 1.3 (padrão), usa RC4 de 40 bits
+- `1.4` - versão PDF 1.4, usa RC4 de 128 bits
+- `1.5` - versão PDF 1.5, usa RC4 de 128 bits
+- `1.6` - versão PDF 1.6, usa AES de 128 bits
+- `1.7` - versão PDF 1.7, usa AES de 128 bits
+- `1.7ext3` - versão PDF 1.7 ExtensionLevel 3, usa AES de 256 bits
+
+Ao usar a versão PDF 1.7 ExtensionLevel 3, a senha é truncada em 127 bytes de sua representação UTF-8. Nas versões anteriores, ela é truncada em 32 bytes e somente caracteres Latin-1 são permitidos.
diff --git a/content/document-definition-object/snaking-columns.de.md b/content/document-definition-object/snaking-columns.de.md
new file mode 100644
index 00000000..b81fe8ef
--- /dev/null
+++ b/content/document-definition-object/snaking-columns.de.md
@@ -0,0 +1,36 @@
++++
+title = "Schlangenförmige Spalten"
+description = "Ordne Inhalte im Zeitungsstil fortlaufend über mehrere Spalten an und beachte die Einschränkungen der Verschachtelung."
+weight = 2025
+alwaysopen = true
+sourceDigest = "d3e6aecd99823a11767f72c7ac5e205d78dcb0fcc84bdd4fe9694a3ab50ff869"
++++
+
+{{% alert theme="warning" %}}Mindestversion: **0.3.5**{{% /alert %}}
+
+Schlangenförmige Spalten (Spalten im Zeitungsstil) sind ein Layoutmodus, bei dem der Inhalt zunächst vertikal durch die erste Spalte und anschließend am oberen Rand der nächsten Spalte weiterfließt. Der Inhalt bewegt sich bei Bedarf abwechselnd durch die Spalten. Anders als bei Spalten, die für jede neue Zeile wieder oben beginnen, läuft die Reihenfolge fortlaufend durch alle verfügbaren Spalten.
+
+Wenn `snakingColumns: true` aktiviert ist, sollte nur die **erste Spalte** Inhalt enthalten. Die folgenden Spalten dienen als leere Platzhalter für den überlaufenden Inhalt.
+
+```js
+var myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);
+var docDefinition = {
+ content: [
+ {
+ columns: [
+ {text: myLongContent, width: '*'}, // Content goes here
+ {text: '', width: '*'}, // Empty overflow target
+ {text: '', width: '*'} // Empty overflow target
+ ],
+ snakingColumns: true
+ }
+ ]
+};
+```
+
+Eine schlangenförmige Spalte direkt in eine weitere schlangenförmige Spalte einzubetten (rekursives Schlangenlayout) wird nicht unterstützt.
+
+**Empfehlungen:**
+- Vermeide tiefe Verschachtelungen schlangenförmiger Spalten.
+- Normale Spalten (ohne Schlangenlayout) können sicher in schlangenförmige Spalten verschachtelt werden.
+- Schlangenförmige Spalten können sicher in normalen Spalten verschachtelt werden.
diff --git a/content/document-definition-object/snaking-columns.es.md b/content/document-definition-object/snaking-columns.es.md
new file mode 100644
index 00000000..85e5f85a
--- /dev/null
+++ b/content/document-definition-object/snaking-columns.es.md
@@ -0,0 +1,36 @@
++++
+sourceDigest = "d3e6aecd99823a11767f72c7ac5e205d78dcb0fcc84bdd4fe9694a3ab50ff869"
+title = "Columnas en flujo serpenteante"
+description = "Configura columnas en flujo serpenteante en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2025
+alwaysopen = true
++++
+
+{{% alert theme="warning" %}}Versión mínima: **0.3.5**{{% /alert %}}
+
+Las columnas en flujo serpenteante (o columnas de estilo periódico) son un modo de disposición en que el contenido fluye verticalmente por la primera columna y continúa en la parte superior de la columna siguiente, alternando la dirección cuando hace falta. En vez de volver siempre al principio de cada fila de columnas, la disposición serpentea de forma continua por las columnas disponibles, en orden de lectura.
+
+Cuando `snakingColumns: true` está activado, solo la **primera columna** debe contener contenido. Las columnas siguientes actúan como espacios vacíos para el desbordamiento.
+
+```js
+var myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);
+var docDefinition = {
+ content: [
+ {
+ columns: [
+ {text: myLongContent, width: '*'}, // Content goes here
+ {text: '', width: '*'}, // Empty overflow target
+ {text: '', width: '*'} // Empty overflow target
+ ],
+ snakingColumns: true
+ }
+ ]
+};
+```
+
+No se admite anidar directamente una «columna serpenteante» dentro de otra (una disposición serpenteante recursiva).
+
+**Recomendación:**
+- Evita anidar profundamente columnas serpenteantes dentro de otras columnas serpenteantes.
+- Las columnas estándar (no serpenteantes) se pueden anidar dentro de columnas serpenteantes.
+- Las columnas serpenteantes se pueden anidar dentro de columnas estándar.
diff --git a/content/document-definition-object/snaking-columns.fr.md b/content/document-definition-object/snaking-columns.fr.md
new file mode 100644
index 00000000..f3bdd140
--- /dev/null
+++ b/content/document-definition-object/snaking-columns.fr.md
@@ -0,0 +1,36 @@
++++
+title = "Colonnes en serpentin"
+description = "Faites circuler le contenu verticalement d’une colonne à l’autre dans une mise en page en colonnes."
+weight = 2025
+alwaysopen = true
+sourceDigest = "d3e6aecd99823a11767f72c7ac5e205d78dcb0fcc84bdd4fe9694a3ab50ff869"
++++
+
+{{% alert theme="warning" %}}Version minimale : **0.3.5**{{% /alert %}}
+
+Les colonnes en serpentin (ou colonnes de style journal) sont un mode de mise en page où le contenu descend dans la première colonne, puis continue en haut de la colonne suivante, en alternant si nécessaire. Au lieu de recommencer en haut à chaque nouvelle rangée de colonnes, le contenu suit les colonnes disponibles dans un ordre de lecture continu.
+
+Lorsque `snakingColumns: true` est activé, seul le contenu de la **première colonne** doit être renseigné. Les colonnes suivantes servent de cibles de débordement vides.
+
+```js
+var myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);
+var docDefinition = {
+ content: [
+ {
+ columns: [
+ {text: myLongContent, width: '*'}, // Content goes here
+ {text: '', width: '*'}, // Empty overflow target
+ {text: '', width: '*'} // Empty overflow target
+ ],
+ snakingColumns: true
+ }
+ ]
+};
+```
+
+L’imbrication directe d’une colonne en serpentin dans une autre colonne en serpentin (mise en page récursive en serpentin) n’est pas prise en charge.
+
+**Recommandations :**
+- Évitez d’imbriquer profondément des colonnes en serpentin les unes dans les autres.
+- Les colonnes standard (sans serpentin) peuvent être imbriquées sans risque dans des colonnes en serpentin.
+- Les colonnes en serpentin peuvent être imbriquées sans risque dans des colonnes standard.
diff --git a/content/document-definition-object/snaking-columns.md b/content/document-definition-object/snaking-columns.md
index f596cffb..7679d8d3 100644
--- a/content/document-definition-object/snaking-columns.md
+++ b/content/document-definition-object/snaking-columns.md
@@ -1,6 +1,6 @@
+++
title = "Snaking columns"
-description = ""
+description = "Configure snaking columns in pdfmake 0.3 with examples, options and usage notes."
weight = 2025
alwaysopen = true
+++
@@ -12,6 +12,7 @@ Snaking columns (or newspaper-style columns) are a column layout mode where cont
When `snakingColumns: true` is enabled, only the **first column** should contain content. Subsequent columns serve as empty placeholders for overflow.
```js
+var myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);
var docDefinition = {
content: [
{
diff --git a/content/document-definition-object/snaking-columns.pt-br.md b/content/document-definition-object/snaking-columns.pt-br.md
new file mode 100644
index 00000000..2f8430a9
--- /dev/null
+++ b/content/document-definition-object/snaking-columns.pt-br.md
@@ -0,0 +1,36 @@
++++
+title = "Colunas em fluxo contínuo"
+description = "Faça o conteúdo fluir entre colunas em estilo de jornal com colunas em fluxo contínuo no pdfmake 0.3."
+weight = 2025
+alwaysopen = true
+sourceDigest = "d3e6aecd99823a11767f72c7ac5e205d78dcb0fcc84bdd4fe9694a3ab50ff869"
++++
+
+{{% alert theme="warning" %}}Versão mínima: **0.3.5**{{% /alert %}}
+
+Colunas em fluxo contínuo (ou colunas em estilo de jornal) são um modo de layout em que o conteúdo flui verticalmente pela primeira coluna e continua no topo da próxima, alternando a direção conforme necessário. Em vez de sempre reiniciar no topo de cada nova linha de colunas, o layout percorre as colunas disponíveis em uma ordem de leitura contínua.
+
+Quando `snakingColumns: true` está ativado, somente a **primeira coluna** deve conter conteúdo. As colunas seguintes servem como espaços vazios para o conteúdo excedente.
+
+```js
+var myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);
+var docDefinition = {
+ content: [
+ {
+ columns: [
+ {text: myLongContent, width: '*'}, // Content goes here
+ {text: '', width: '*'}, // Empty overflow target
+ {text: '', width: '*'} // Empty overflow target
+ ],
+ snakingColumns: true
+ }
+ ]
+};
+```
+
+Não há suporte para aninhar diretamente uma “coluna em fluxo contínuo” dentro de outra (layout recursivo de colunas em fluxo contínuo).
+
+**Recomendação**:
+- Evite aninhamento profundo de colunas em fluxo contínuo dentro de outras colunas do mesmo tipo.
+- Colunas padrão (sem fluxo contínuo) podem ser aninhadas com segurança dentro de colunas em fluxo contínuo.
+- Colunas em fluxo contínuo podem ser aninhadas com segurança dentro de colunas padrão.
diff --git a/content/document-definition-object/stack.de.md b/content/document-definition-object/stack.de.md
new file mode 100644
index 00000000..c3297197
--- /dev/null
+++ b/content/document-definition-object/stack.de.md
@@ -0,0 +1,56 @@
++++
+title = "Absatzstapel"
+description = "Ordne Absätze mit der Stack-Struktur in pdfmake 0.3 untereinander an und formatiere verschachtelte Inhalte."
+weight = 2080
+alwaysopen = true
+sourceDigest = "04c569677571b5807400b3610efeeabd2981f70fae31c778b9a5337c0abe6c26"
++++
+
+An den Beispielen hast du wahrscheinlich schon erkannt: Wenn du `content` auf ein Array setzt, wird das Dokument als Stapel von Absätzen dargestellt.
+
+Diese Struktur kannst du häufig in einem verschachtelten Element wiederverwenden, wie im folgenden Beispiel:
+```js
+var docDefinition = {
+ content: [
+ 'paragraph 1',
+ 'paragraph 2',
+ {
+ columns: [
+ 'first column is a simple text',
+ [
+ // second column consists of paragraphs
+ 'paragraph A',
+ 'paragraph B',
+ 'these paragraphs will be rendered one below another inside the column'
+ ]
+ ]
+ }
+ ]
+};
+```
+
+Ein Array hat den Nachteil, dass du ihm keine Formatierungseigenschaften hinzufügen kannst (zum Beispiel, um `fontSize` zu ändern).
+
+Die gute Nachricht: In pdfMake ist ein Array nur eine Kurzform für `{ stack: [] }`. Wenn du den ganzen Stapel anders formatieren möchtest, kannst du die ausführliche Definition verwenden:
+```js
+var docDefinition = {
+ content: [
+ 'paragraph 1',
+ 'paragraph 2',
+ {
+ columns: [
+ 'first column is a simple text',
+ {
+ stack: [
+ // second column consists of paragraphs
+ 'paragraph A',
+ 'paragraph B',
+ 'these paragraphs will be rendered one below another inside the column'
+ ],
+ fontSize: 15
+ }
+ ]
+ }
+ ]
+};
+```
diff --git a/content/document-definition-object/stack.es.md b/content/document-definition-object/stack.es.md
new file mode 100644
index 00000000..93a6ca41
--- /dev/null
+++ b/content/document-definition-object/stack.es.md
@@ -0,0 +1,56 @@
++++
+sourceDigest = "04c569677571b5807400b3610efeeabd2981f70fae31c778b9a5337c0abe6c26"
+title = "Pila de párrafos"
+description = "Configura una pila de párrafos en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2080
+alwaysopen = true
++++
+
+Como quizá ya hayas deducido de los ejemplos, si asignas una matriz a la clave `content`, el documento se convierte en una pila de párrafos.
+
+Con frecuencia reutilizarás esta estructura dentro de un elemento anidado, como en este ejemplo:
+```js
+var docDefinition = {
+ content: [
+ 'paragraph 1',
+ 'paragraph 2',
+ {
+ columns: [
+ 'first column is a simple text',
+ [
+ // second column consists of paragraphs
+ 'paragraph A',
+ 'paragraph B',
+ 'these paragraphs will be rendered one below another inside the column'
+ ]
+ ]
+ }
+ ]
+};
+```
+
+El problema de una matriz es que no puedes añadirle propiedades de estilo (por ejemplo, para cambiar `fontSize`).
+
+La buena noticia es que, en pdfMake, una matriz es un atajo para `{ stack: [] }`. Por tanto, si quieres cambiar el estilo de toda la pila, puedes usar la definición ampliada:
+```js
+var docDefinition = {
+ content: [
+ 'paragraph 1',
+ 'paragraph 2',
+ {
+ columns: [
+ 'first column is a simple text',
+ {
+ stack: [
+ // second column consists of paragraphs
+ 'paragraph A',
+ 'paragraph B',
+ 'these paragraphs will be rendered one below another inside the column'
+ ],
+ fontSize: 15
+ }
+ ]
+ }
+ ]
+};
+```
diff --git a/content/document-definition-object/stack.fr.md b/content/document-definition-object/stack.fr.md
new file mode 100644
index 00000000..ef608a14
--- /dev/null
+++ b/content/document-definition-object/stack.fr.md
@@ -0,0 +1,56 @@
++++
+title = "Pile de paragraphes"
+description = "Utilisez des tableaux ou la propriété `stack` pour empiler des paragraphes et appliquer un style à l’ensemble."
+weight = 2080
+alwaysopen = true
+sourceDigest = "04c569677571b5807400b3610efeeabd2981f70fae31c778b9a5337c0abe6c26"
++++
+
+Vous avez pu constater dans les exemples que si vous définissez la clé `content` comme un tableau, le document devient une pile de paragraphes.
+
+Vous réutiliserez souvent cette structure dans un élément imbriqué, comme dans l’exemple suivant :
+```js
+var docDefinition = {
+ content: [
+ 'paragraph 1',
+ 'paragraph 2',
+ {
+ columns: [
+ 'first column is a simple text',
+ [
+ // second column consists of paragraphs
+ 'paragraph A',
+ 'paragraph B',
+ 'these paragraphs will be rendered one below another inside the column'
+ ]
+ ]
+ }
+ ]
+};
+```
+
+Avec un tableau, vous ne pouvez pas ajouter de propriétés de style (pour modifier `fontSize`, par exemple).
+
+Heureusement, un tableau est simplement un raccourci pdfMake pour `{ stack: [] }`. Pour appliquer un nouveau style à toute la pile, utilisez la définition développée :
+```js
+var docDefinition = {
+ content: [
+ 'paragraph 1',
+ 'paragraph 2',
+ {
+ columns: [
+ 'first column is a simple text',
+ {
+ stack: [
+ // second column consists of paragraphs
+ 'paragraph A',
+ 'paragraph B',
+ 'these paragraphs will be rendered one below another inside the column'
+ ],
+ fontSize: 15
+ }
+ ]
+ }
+ ]
+};
+```
diff --git a/content/document-definition-object/stack.md b/content/document-definition-object/stack.md
index a91f29c1..56321031 100644
--- a/content/document-definition-object/stack.md
+++ b/content/document-definition-object/stack.md
@@ -1,6 +1,6 @@
+++
title = "Stack of paragraphs"
-description = ""
+description = "Configure stack of paragraphs in pdfmake 0.3 with examples, options and usage notes."
weight = 2080
alwaysopen = true
+++
@@ -53,4 +53,4 @@ var docDefinition = {
}
]
};
-```
\ No newline at end of file
+```
diff --git a/content/document-definition-object/stack.pt-br.md b/content/document-definition-object/stack.pt-br.md
new file mode 100644
index 00000000..69faaa99
--- /dev/null
+++ b/content/document-definition-object/stack.pt-br.md
@@ -0,0 +1,58 @@
++++
+title = "Pilha de parágrafos"
+description = "Agrupe parágrafos e elementos em uma pilha vertical no pdfmake 0.3."
+weight = 2080
+alwaysopen = true
+sourceDigest = "04c569677571b5807400b3610efeeabd2981f70fae31c778b9a5337c0abe6c26"
++++
+
+Como você já deve ter percebido pelos exemplos, quando a chave `content` recebe um array, o documento se torna uma pilha de parágrafos.
+
+É comum reutilizar essa estrutura em um elemento aninhado, como no exemplo a seguir:
+
+```js
+var docDefinition = {
+ content: [
+ 'paragraph 1',
+ 'paragraph 2',
+ {
+ columns: [
+ 'first column is a simple text',
+ [
+ // second column consists of paragraphs
+ 'paragraph A',
+ 'paragraph B',
+ 'these paragraphs will be rendered one below another inside the column'
+ ]
+ ]
+ }
+ ]
+};
+```
+
+O problema de um array é que não é possível adicionar propriedades de estilo diretamente a ele (por exemplo, para alterar `fontSize`).
+
+A boa notícia é que o array é apenas um atalho do pdfmake para `{ stack: [] }`. Portanto, para reaplicar estilo à pilha inteira, use a definição expandida:
+
+```js
+var docDefinition = {
+ content: [
+ 'paragraph 1',
+ 'paragraph 2',
+ {
+ columns: [
+ 'first column is a simple text',
+ {
+ stack: [
+ // second column consists of paragraphs
+ 'paragraph A',
+ 'paragraph B',
+ 'these paragraphs will be rendered one below another inside the column'
+ ],
+ fontSize: 15
+ }
+ ]
+ }
+ ]
+};
+```
diff --git a/content/document-definition-object/styling.de.md b/content/document-definition-object/styling.de.md
new file mode 100644
index 00000000..610af7bf
--- /dev/null
+++ b/content/document-definition-object/styling.de.md
@@ -0,0 +1,73 @@
++++
+title = "Stile und Formatierung"
+description = "Formatiere Text mit benannten Stilen, Schriftvarianten, Ausrichtung, Farben und Vererbung in pdfmake 0.3."
+weight = 2010
+alwaysopen = true
+sourceDigest = "9369a9e17f5173482ecd79123f5aee3a2489a7678b916cec9f9003263fe860ae"
++++
+
+## Blöcke oder Inline-Text formatieren
+
+Eine Zeichenfolge ist ein einfacher Absatz. Verwende einen Textknoten, um Eigenschaften hinzuzufügen. Mit einem `text`-Array kannst du Textsegmente **innerhalb desselben Absatzes** unterschiedlich formatieren; ein `content`-Array oder ein Stapel erzeugt getrennte Blöcke.
+
+{{< example id="styles" >}}
+
+## Benannte Stile wiederverwenden
+
+```js
+var dd = {
+ defaultStyle: { fontSize: 11, lineHeight: 1.2 },
+ styles: {
+ heading: { fontSize: 24, bold: true },
+ muted: { color: '#536771' },
+ subheading: { extends: 'heading', fontSize: 16 }
+ },
+ content: [
+ { text: 'A heading', style: 'heading' },
+ { text: 'A muted heading', style: ['heading', 'muted'] },
+ { text: 'An explicit override', style: 'heading', fontSize: 18 },
+ { text: 'A subheading', style: 'subheading' }
+ ]
+};
+```
+
+`style` verweist auf Einträge in `styles`. Wenn mehrere Stile in einem Array dieselbe Eigenschaft definieren, hat der spätere Stil Vorrang. Explizite Eigenschaften des Knotens haben Vorrang vor seinen benannten Stilen. `defaultStyle` stellt dokumentweite Standardwerte bereit. Stile von Containern können an ihre Kindelemente vererbt werden; explizite Eigenschaften des Kindelements überschreiben sie.
+
+Benannte Stile unterstützen `extends` seit **0.3.3**. Die Eigenschaft akzeptiert einen übergeordneten Namen oder ein Array mit Namen. Die eigenen Eigenschaften eines Stils haben Vorrang vor den übergeordneten; wenn mehrere übergeordnete Stile dieselbe Eigenschaft festlegen, hat der spätere Vorrang. Halte die Vererbung kurz und frei von Zyklen, damit das Ergebnis übersichtlich bleibt.
+
+## Häufige Texteigenschaften
+
+| Eigenschaft | Typ / Werte | Bedeutung |
+| --- | --- | --- |
+| `font` | Registrierter Familienname | Muss mit deiner Schriftzuordnung übereinstimmen |
+| `fontSize` | Zahl, Punkte | Textgröße |
+| `bold`, `italics` | Boolean, Standard `false` | Wählt die entsprechende Schriftvariante aus |
+| `alignment` | `'left'`, `'center'`, `'right'`, `'justify'` | Absatzausrichtung |
+| `lineHeight` | Zahl, Standard 1 | Zeilenhöhenmultiplikator |
+| `color`, `background` | Farbname oder Hex-Zeichenfolge | Textfarbe und Texthintergrund |
+| `characterSpacing` | Zahl, Punkte | Zusätzlicher Abstand zwischen Zeichen |
+| `wordBreak` | `'normal'` (Standard), `'break-all'` | Verhalten beim Zeilenumbruch |
+| `fontFeatures` | Array mit Zeichenfolgen | Schriftartspezifische typografische Merkmale |
+| `style` | Zeichenfolge oder Array mit Zeichenfolgen | Anzuwendende benannte Stile |
+| `markerColor` | Farbe | Farbe des Aufzählungszeichens |
+
+Unterstützt werden benannte Farben und Hexwerte wie `'#08786b'`. Schriftmerkmale hängen von der ausgewählten Schriftart ab. Für `bold` oder `italics` muss die jeweilige Variante registriert sein; das Setzen einer Eigenschaft ersetzt keine fehlende Schriftdatei.
+
+## Auszeichnungen
+
+| Eigenschaft | Typ / Werte |
+| --- | --- |
+| `decoration` | `'underline'`, `'lineThrough'`, `'overline'` oder ein Array |
+| `decorationStyle` | `'solid'`, `'dashed'`, `'dotted'`, `'double'`, `'wavy'` |
+| `decorationColor` | Farbe |
+| `decorationThickness` | Numerische Breite; seit 0.3.3 |
+
+```js
+var dd = {
+ content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]
+};
+```
+
+## Stile sind kein CSS
+
+Verwende die dokumentierten Feldnamen von pdfmake. Es gibt weder CSS-Kaskade noch DOM-Selektor oder Browser-Boxmodell. Ränder werden in Punkten angegeben und folgen der Reihenfolge `[links, oben, rechts, unten]`. Um mehrere Blöcke gemeinsam zu formatieren, verwende einen [Stapel](/docs/0.3/de/document-definition-object/stack/). Informationen zur Registrierung von Schriftvarianten und Zeichenabdeckung findest du unter [Schriften](/docs/0.3/de/fonts/).
diff --git a/content/document-definition-object/styling.es.md b/content/document-definition-object/styling.es.md
new file mode 100644
index 00000000..1e0082e9
--- /dev/null
+++ b/content/document-definition-object/styling.es.md
@@ -0,0 +1,73 @@
++++
+sourceDigest = "9369a9e17f5173482ecd79123f5aee3a2489a7678b916cec9f9003263fe860ae"
+title = "Estilos"
+description = "Aplica estilos al texto con estilos con nombre, variantes de fuente, alineación, colores y herencia en pdfmake 0.3."
+weight = 2010
+alwaysopen = true
++++
+
+## Aplicar estilo a un bloque o segmento en línea
+
+Una cadena es un párrafo sencillo. Usa un nodo de texto para añadir propiedades. Usa una matriz `text` para dar estilos distintos a segmentos dentro del **mismo párrafo**; una matriz de contenido o una pila crea bloques separados.
+
+{{< example id="styles" >}}
+
+## Reutilizar estilos con nombre
+
+```js
+var dd = {
+ defaultStyle: { fontSize: 11, lineHeight: 1.2 },
+ styles: {
+ heading: { fontSize: 24, bold: true },
+ muted: { color: '#536771' },
+ subheading: { extends: 'heading', fontSize: 16 }
+ },
+ content: [
+ { text: 'A heading', style: 'heading' },
+ { text: 'A muted heading', style: ['heading', 'muted'] },
+ { text: 'An explicit override', style: 'heading', fontSize: 18 },
+ { text: 'A subheading', style: 'subheading' }
+ ]
+};
+```
+
+`style` hace referencia a las entradas de `styles`. Cuando varias entradas de una matriz definen la misma propiedad, prevalece la última. Las propiedades explícitas del nodo prevalecen sobre sus estilos con nombre. `defaultStyle` proporciona los valores predeterminados del documento. Los estilos de los contenedores se pueden heredar por sus hijos; las propiedades explícitas de los hijos los sobrescriben.
+
+La propiedad `extends` para estilos con nombre está disponible desde la versión **0.3.3**. Acepta el nombre de un estilo principal o una matriz de nombres. Las propiedades del propio estilo prevalecen sobre las de sus estilos principales; si hay varios estilos principales, las entradas posteriores tienen prioridad cuando más de uno proporciona la misma propiedad. Mantén la herencia breve y sin ciclos para facilitar su comprensión.
+
+## Propiedades de texto habituales
+
+| Propiedad | Tipo / valores | Significado |
+| --- | --- | --- |
+| `font` | Nombre de familia registrada | Debe coincidir con el mapa de fuentes |
+| `fontSize` | Número, puntos | Tamaño del texto |
+| `bold`, `italics` | Boolean, predeterminado false | Selecciona la variante correspondiente de la fuente |
+| `alignment` | `'left'`, `'center'`, `'right'`, `'justify'` | Alineación del párrafo |
+| `lineHeight` | Número, predeterminado 1 | Multiplicador de la altura de línea |
+| `color`, `background` | Nombre de color o cadena hexadecimal | Color del texto y su fondo |
+| `characterSpacing` | Número, puntos | Espaciado adicional entre caracteres |
+| `wordBreak` | `'normal'` (predeterminado), `'break-all'` | Comportamiento de ajuste de línea |
+| `fontFeatures` | Matriz de cadenas | Funciones tipográficas específicas de la fuente |
+| `style` | Cadena o matriz de cadenas | Estilos con nombre que se aplicarán |
+| `markerColor` | Color | Color de la viñeta |
+
+Se admiten nombres de colores y valores hexadecimales como `'#08786b'`. Las funciones de fuente dependen de la fuente seleccionada. Activar `bold` o `italics` requiere que se haya registrado esa variante; establecer el indicador no proporciona un archivo de fuente que falte.
+
+## Decoraciones
+
+| Propiedad | Tipo / valores |
+| --- | --- |
+| `decoration` | `'underline'`, `'lineThrough'`, `'overline'` o una matriz |
+| `decorationStyle` | `'solid'`, `'dashed'`, `'dotted'`, `'double'`, `'wavy'` |
+| `decorationColor` | Color |
+| `decorationThickness` | Ancho numérico; desde 0.3.3 |
+
+```js
+var dd = {
+ content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]
+};
+```
+
+## Los estilos no son CSS
+
+Usa los nombres de campo documentados por pdfmake. No hay cascada CSS, selector DOM ni modelo de caja del navegador. Los márgenes usan valores en puntos y el orden `[izquierda, arriba, derecha, abajo]`. Para aplicar estilo a varios bloques juntos, usa una [pila](/docs/0.3/es/document-definition-object/stack/). Consulta [fuentes](/docs/0.3/es/fonts/) para el registro de variantes y la cobertura de caracteres.
diff --git a/content/document-definition-object/styling.fr.md b/content/document-definition-object/styling.fr.md
new file mode 100644
index 00000000..9df99df9
--- /dev/null
+++ b/content/document-definition-object/styling.fr.md
@@ -0,0 +1,73 @@
++++
+title = "Styles et mise en forme"
+description = "Mettez en forme le texte avec des styles nommés, des variantes de police, l’alignement, les couleurs et l’héritage dans pdfmake 0.3."
+weight = 2010
+alwaysopen = true
+sourceDigest = "9369a9e17f5173482ecd79123f5aee3a2489a7678b916cec9f9003263fe860ae"
++++
+
+## Mettre en forme un bloc ou un segment en ligne
+
+Une chaîne est un paragraphe simple. Utilisez un nœud de texte pour lui ajouter des propriétés. Un tableau `text` permet de définir des segments de styles différents au sein du **même paragraphe** ; un tableau `content` ou une pile crée des blocs distincts.
+
+{{< example id="styles" >}}
+
+## Réutiliser des styles nommés
+
+```js
+var dd = {
+ defaultStyle: { fontSize: 11, lineHeight: 1.2 },
+ styles: {
+ heading: { fontSize: 24, bold: true },
+ muted: { color: '#536771' },
+ subheading: { extends: 'heading', fontSize: 16 }
+ },
+ content: [
+ { text: 'A heading', style: 'heading' },
+ { text: 'A muted heading', style: ['heading', 'muted'] },
+ { text: 'An explicit override', style: 'heading', fontSize: 18 },
+ { text: 'A subheading', style: 'subheading' }
+ ]
+};
+```
+
+`style` fait référence aux entrées de `styles`. Lorsqu’elles définissent la même propriété, les styles placés plus tard dans un tableau sont prioritaires. Les propriétés explicites du nœud priment sur ses styles nommés. `defaultStyle` fournit les valeurs par défaut du document. Les styles des conteneurs peuvent être hérités par leurs enfants ; les propriétés explicites d’un enfant les remplacent.
+
+L’héritage des styles nommés avec `extends` est disponible depuis **0.3.3**. Il accepte le nom d’un parent ou un tableau de noms. Les propriétés propres au style priment sur celles de ses parents ; si plusieurs parents définissent la même propriété, celles du parent placé plus tard sont prioritaires. Gardez une hiérarchie courte et sans cycle pour qu’elle reste facile à comprendre.
+
+## Propriétés de texte courantes
+
+| Propriété | Type / valeurs | Signification |
+| --- | --- | --- |
+| `font` | Nom de famille enregistrée | Doit correspondre à votre configuration de polices |
+| `fontSize` | Nombre, en points | Taille du texte |
+| `bold`, `italics` | Booléen, `false` par défaut | Sélectionne la variante de police correspondante |
+| `alignment` | `'left'`, `'center'`, `'right'`, `'justify'` | Alignement du paragraphe |
+| `lineHeight` | Nombre, 1 par défaut | Multiplicateur de hauteur de ligne |
+| `color`, `background` | Nom de couleur ou chaîne hexadécimale | Couleur du texte et arrière-plan du texte |
+| `characterSpacing` | Nombre, en points | Espacement supplémentaire entre les caractères |
+| `wordBreak` | `'normal'` (par défaut), `'break-all'` | Comportement du retour à la ligne |
+| `fontFeatures` | Tableau de chaînes | Fonctionnalités typographiques propres à la police |
+| `style` | Chaîne ou tableau de chaînes | Styles nommés à appliquer |
+| `markerColor` | Couleur | Couleur de la puce |
+
+Les noms de couleurs et les valeurs hexadécimales comme `'#08786b'` sont pris en charge. Les fonctionnalités typographiques dépendent de la police sélectionnée. Pour utiliser `bold` ou `italics`, la variante correspondante doit être enregistrée ; activer l’option ne fournit pas le fichier de police manquant.
+
+## Décorations
+
+| Propriété | Type / valeurs |
+| --- | --- |
+| `decoration` | `'underline'`, `'lineThrough'`, `'overline'` ou un tableau |
+| `decorationStyle` | `'solid'`, `'dashed'`, `'dotted'`, `'double'`, `'wavy'` |
+| `decorationColor` | Couleur |
+| `decorationThickness` | Épaisseur numérique ; depuis 0.3.3 |
+
+```js
+var dd = {
+ content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]
+};
+```
+
+## Les styles ne sont pas du CSS
+
+Utilisez les noms de champs documentés par pdfmake. Il n’existe ni cascade CSS, ni sélecteur DOM, ni modèle de boîte du navigateur. Les marges sont exprimées en points et suivent l’ordre `[gauche, haut, droite, bas]`. Pour mettre en forme plusieurs blocs ensemble, utilisez une [pile](/docs/0.3/fr/document-definition-object/stack/). Consultez [Polices](/docs/0.3/fr/fonts/) pour l’enregistrement des variantes et la couverture des caractères.
diff --git a/content/document-definition-object/styling.md b/content/document-definition-object/styling.md
index b711a030..ee5e5429 100644
--- a/content/document-definition-object/styling.md
+++ b/content/document-definition-object/styling.md
@@ -1,100 +1,85 @@
+++
title = "Styling"
-description = ""
+description = "Style text with named styles, font variants, alignment, colors and inheritance in pdfmake 0.3."
weight = 2010
alwaysopen = true
+++
-pdfmake makes it possible to style any paragraph or its part:
+## Style a block or an inline run
-```js
-var docDefinition = {
- content: [
- // if you don't need styles, you can use a simple string to define a paragraph
- 'This is a standard paragraph, using default style',
+A string is a plain paragraph. Use a text node to add properties. Use a `text`
+array for differently styled runs within the **same paragraph**; a content array
+or stack creates separate blocks.
- // using a { text: '...' } object lets you set styling properties
- { text: 'This paragraph will have a bigger font', fontSize: 15 },
+{{< example id="styles" >}}
- // if you set the value of text to an array instead of a string, you'll be able
- // to style any part individually
- {
- text: [
- 'This paragraph is defined as an array of elements to make it possible to ',
- { text: 'restyle part of it and make it bigger ', fontSize: 15 },
- 'than the rest.'
- ]
- }
+## Reuse named styles
+
+```js
+var dd = {
+ defaultStyle: { fontSize: 11, lineHeight: 1.2 },
+ styles: {
+ heading: { fontSize: 24, bold: true },
+ muted: { color: '#536771' },
+ subheading: { extends: 'heading', fontSize: 16 }
+ },
+ content: [
+ { text: 'A heading', style: 'heading' },
+ { text: 'A muted heading', style: ['heading', 'muted'] },
+ { text: 'An explicit override', style: 'heading', fontSize: 18 },
+ { text: 'A subheading', style: 'subheading' }
]
};
```
-#### Style dictionaries
-It's also possible to define a dictionary of reusable styles:
+`style` refers to entries in `styles`. Later styles in an array take precedence
+when they define the same property. Explicit node properties take precedence over
+its named styles. `defaultStyle` supplies document defaults. Styles on containers
+can be inherited by their children; explicit child properties override them.
-```js
-var docDefinition = {
- content: [
- { text: 'This is a header', style: 'header' },
- 'No styling here, this is a standard paragraph',
- { text: 'Another text', style: 'anotherStyle' },
- { text: 'Multiple styles applied', style: [ 'header', 'anotherStyle' ] }
- ],
+Named-style `extends` is available since **0.3.3**. It accepts one parent name or
+an array. A style's own properties win over its parents; later parent entries
+take precedence when several parents supply the same property. Keep inheritance
+short and acyclic so the result is easy to understand.
- styles: {
- header: {
- fontSize: 22,
- bold: true
- },
- anotherStyle: {
- italics: true,
- alignment: 'right'
- },
- subheader: {
- fontSize: 15,
- extends: 'header' // or array of strings
- }
- }
-};
-```
+## Common text properties
-Property `extends` in style inherited/extends styles. _(Minimal pdfmake version: 0.3.3)_
+| Property | Type / values | Meaning |
+| --- | --- | --- |
+| `font` | Registered family name | Must match your font map |
+| `fontSize` | Number, points | Text size |
+| `bold`, `italics` | Boolean, default false | Select the corresponding font variant |
+| `alignment` | `'left'`, `'center'`, `'right'`, `'justify'` | Paragraph alignment |
+| `lineHeight` | Number, default 1 | Line-height multiplier |
+| `color`, `background` | Color name or hex string | Text color and text background |
+| `characterSpacing` | Number, points | Additional spacing between characters |
+| `wordBreak` | `'normal'` (default), `'break-all'` | Wrapping behavior |
+| `fontFeatures` | String array | Font-specific typographic features |
+| `style` | String or string array | Named styles to apply |
+| `markerColor` | Color | Bullet marker color |
-To have a deeper understanding of styling in pdfmake, style inheritance and local-style-overrides check STYLES1, STYLES2 and STYLES3 examples in [playground](http://pdfmake.org/playground.html).
+Named colors and hex values such as `'#08786b'` are supported. Font features
+depend on the selected font. Selecting `bold` or `italics` requires the variant
+to be registered; setting a flag does not supply a missing font file.
-#### Default style
+## Decorations
-And it is also possible to define a default style:
+| Property | Type / values |
+| --- | --- |
+| `decoration` | `'underline'`, `'lineThrough'`, `'overline'`, or an array |
+| `decorationStyle` | `'solid'`, `'dashed'`, `'dotted'`, `'double'`, `'wavy'` |
+| `decorationColor` | Color |
+| `decorationThickness` | Numeric width; since 0.3.3 |
```js
-var docDefinition = {
- content: [
- 'Text styled by default style'
- ],
-
- defaultStyle: {
- fontSize: 15,
- bold: true
- }
+var dd = {
+ content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]
};
```
-#### Style properties
+## Styles are not CSS
-* `font: string`: name of the font
-* `fontSize: number`: size of the font in pt
-* `fontFeatures: string[]`: array of advanced typographic features supported in TTF fonts (supported features depend on font file)
-* `lineHeight: number`: the line height (default: 1)
-* `bold: boolean`: whether to use bold text (default: false)
-* `italics: boolean`: whether to use italic text (default: false)
-* `alignment: string`: ('left' or 'center' or 'right' or 'justify') the alignment of the text
-* `characterSpacing: number`: size of the letter spacing in pt
-* `wordBreak: string`: controls how text is wrapped when it exceeds the available width (supported values: `'normal'` (default), `'break-all'`)
-* `color: string`: the color of the text (color name e.g., 'blue' or hexadecimal color e.g., '#ff5500')
-* `background: string` the background color of the text
-* `style: string | array`: defined style of item
-* `markerColor: string`: the color of the bullets in a buletted list
-* `decoration: string | string[]`: the text decoration to apply ('underline' or 'lineThrough' or 'overline')
-* `decorationStyle: string`: the style of the text decoration ('dashed' or 'dotted' or 'double' or 'wavy')
-* `decorationColor: string`: the color of the text decoration, see color
-* `decorationThickness: integer`: for `text` to set width of the decoration line _(Minimal pdfmake version: 0.3.3)_
\ No newline at end of file
+Use pdfmake's documented field names. There is no CSS cascade, DOM selector or
+browser box model. Margins use point values and `[left, top, right, bottom]` order.
+To style several blocks together, use a [stack](/docs/0.3/document-definition-object/stack/).
+See [fonts](/docs/0.3/fonts/) for variant registration and character coverage.
diff --git a/content/document-definition-object/styling.pt-br.md b/content/document-definition-object/styling.pt-br.md
new file mode 100644
index 00000000..b5d7db82
--- /dev/null
+++ b/content/document-definition-object/styling.pt-br.md
@@ -0,0 +1,73 @@
++++
+title = "Estilos"
+description = "Formate texto com estilos nomeados, variantes de fonte, alinhamento, cores e herança no pdfmake 0.3."
+weight = 2010
+alwaysopen = true
+sourceDigest = "9369a9e17f5173482ecd79123f5aee3a2489a7678b916cec9f9003263fe860ae"
++++
+
+## Aplique estilo a um bloco ou segmento em linha
+
+Uma string é um parágrafo simples. Use um nó de texto para adicionar propriedades. Use um array `text` para segmentos com estilos diferentes dentro do **mesmo parágrafo**; um array `content` ou uma pilha cria blocos separados.
+
+{{< example id="styles" >}}
+
+## Reutilize estilos nomeados
+
+```js
+var dd = {
+ defaultStyle: { fontSize: 11, lineHeight: 1.2 },
+ styles: {
+ heading: { fontSize: 24, bold: true },
+ muted: { color: '#536771' },
+ subheading: { extends: 'heading', fontSize: 16 }
+ },
+ content: [
+ { text: 'A heading', style: 'heading' },
+ { text: 'A muted heading', style: ['heading', 'muted'] },
+ { text: 'An explicit override', style: 'heading', fontSize: 18 },
+ { text: 'A subheading', style: 'subheading' }
+ ]
+};
+```
+
+`style` aponta para entradas em `styles`. Quando um array contém estilos que definem a mesma propriedade, os estilos posteriores têm precedência. As propriedades explícitas do nó têm precedência sobre seus estilos nomeados. `defaultStyle` fornece os valores padrão do documento. Estilos em contêineres podem ser herdados pelos filhos; propriedades explícitas nos filhos os sobrescrevem.
+
+Estilos nomeados com `extends` estão disponíveis desde a versão **0.3.3**. A propriedade aceita o nome de um único estilo pai ou um array. As propriedades do próprio estilo prevalecem sobre as dos pais; quando vários pais fornecem a mesma propriedade, os itens posteriores do array de pais prevalecem. Mantenha a herança curta e sem ciclos para facilitar a compreensão do resultado.
+
+## Propriedades de texto comuns
+
+| Propriedade | Tipo / valores | Significado |
+| --- | --- | --- |
+| `font` | Nome da família registrada | Deve corresponder ao mapa de fontes |
+| `fontSize` | Número, em pontos | Tamanho do texto |
+| `bold`, `italics` | Booleano, padrão `false` | Seleciona a variante de fonte correspondente |
+| `alignment` | `'left'`, `'center'`, `'right'`, `'justify'` | Alinhamento do parágrafo |
+| `lineHeight` | Número, padrão `1` | Multiplicador da altura da linha |
+| `color`, `background` | Nome de cor ou string hexadecimal | Cor do texto e fundo do texto |
+| `characterSpacing` | Número, em pontos | Espaçamento adicional entre caracteres |
+| `wordBreak` | `'normal'` (padrão), `'break-all'` | Comportamento da quebra de linha |
+| `fontFeatures` | Array de strings | Recursos tipográficos específicos da fonte |
+| `style` | String ou array de strings | Estilos nomeados a aplicar |
+| `markerColor` | Cor | Cor do marcador da lista |
+
+São aceitos nomes de cores e valores hexadecimais, como `'#08786b'`. Os recursos de fonte dependem da fonte selecionada. Usar `bold` ou `italics` requer que a variante correspondente esteja registrada; definir a flag não fornece um arquivo de fonte ausente.
+
+## Decorações
+
+| Propriedade | Tipo / valores |
+| --- | --- |
+| `decoration` | `'underline'`, `'lineThrough'`, `'overline'` ou um array |
+| `decorationStyle` | `'solid'`, `'dashed'`, `'dotted'`, `'double'`, `'wavy'` |
+| `decorationColor` | Cor |
+| `decorationThickness` | Largura numérica; disponível desde 0.3.3 |
+
+```js
+var dd = {
+ content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]
+};
+```
+
+## Estilos não são CSS
+
+Use os nomes de campos documentados pelo pdfmake. Não há cascata CSS, seletor DOM ou modelo de caixas do navegador. As margens usam valores em pontos e a ordem `[esquerda, superior, direita, inferior]`. Para estilizar vários blocos em conjunto, use uma [pilha](/docs/0.3/pt-br/document-definition-object/stack/). Consulte [fontes](/docs/0.3/pt-br/fonts/) para registrar variantes e verificar a cobertura de caracteres.
diff --git a/content/document-definition-object/svgs.de.md b/content/document-definition-object/svgs.de.md
new file mode 100644
index 00000000..49cee174
--- /dev/null
+++ b/content/document-definition-object/svgs.de.md
@@ -0,0 +1,56 @@
++++
+title = "SVGs"
+description = "Binde SVG-Inhalte in pdfmake 0.3 als Text oder SVGElement ein und skaliere sie proportional oder passend in ein Rechteck."
+weight = 2110
+alwaysopen = true
+sourceDigest = "1370a9ae1ce49896f1ce3301d0947639f4e5fd7225b9babd15b140e19eed060a"
++++
+
+SVGs ähneln [Bildern](/docs/0.3/de/document-definition-object/images/), derzeit können sie jedoch weder über eine Datei eingebunden noch aus einem Wörterbuch wiederverwendet werden.
+
+{{% alert theme="warning" %}}Der SVG-Knoten erwartet einen gültigen SVG-Wert. Ist der Wert ungültig oder leer, wird ein Fehler ausgelöst.{{% /alert %}}
+
+Für die Umwandlung von SVG in ein PDF-Dokument wird die Bibliothek [SVG-to-PDFKit](https://github.com/alafr/SVG-to-PDFKit) verwendet.
+
+Der Wert des Knotens `svg` kann eine Zeichenfolge oder ein `SVGElement`-Objekt sein (letzteres ist nur im Browser verfügbar).
+
+{{% alert theme="warning" %}}`SVGElement`-Objekte werden ab Version **0.3.1** unterstützt.{{% /alert %}}
+
+```js
+var docDefinition = {
+ content: [
+ {
+ // If no width/height/fit is used, then dimensions from the svg element is used.
+ svg: ''
+ },
+ {
+ // if you specify width, svg will scale proportionally
+ svg: '',
+ width: 150
+ },
+ {
+ // if you specify height, svg will scale proportionally
+ // Minimal pdfmake version: 0.3.2
+ svg: '',
+ height: 100
+ },
+ {
+ // if you specify both width and height - svg will be stretched
+ svg: '',
+ width: 600,
+ height: 400
+ },
+ {
+ // you can also fit the svg inside a rectangle
+ svg: '',
+ fit: [150, 100]
+ },
+ {
+ // if no width/height is specified in SVG element, you must set width and height for node
+ svg: '',
+ width: 300,
+ height: 200
+ },
+ ]
+};
+```
diff --git a/content/document-definition-object/svgs.es.md b/content/document-definition-object/svgs.es.md
new file mode 100644
index 00000000..3297bd9e
--- /dev/null
+++ b/content/document-definition-object/svgs.es.md
@@ -0,0 +1,56 @@
++++
+sourceDigest = "1370a9ae1ce49896f1ce3301d0947639f4e5fd7225b9babd15b140e19eed060a"
+title = "SVG"
+description = "Configura SVG en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2110
+alwaysopen = true
++++
+
+Los SVG se parecen mucho a las [imágenes](/docs/0.3/es/document-definition-object/images/), salvo que actualmente no se pueden referenciar por archivo ni reutilizar desde un diccionario.
+
+{{% alert theme="warning" %}}El nodo SVG requiere un valor SVG válido. Si el valor no es válido o está vacío, se produce un error.{{% /alert %}}
+
+Para transformar SVG en un documento PDF se usa la biblioteca [SVG-to-PDFKit](https://github.com/alafr/SVG-to-PDFKit).
+
+El valor del nodo `svg` puede ser una cadena o un objeto `SVGElement` (disponible solo en el navegador).
+
+{{% alert theme="warning" %}}La compatibilidad con objetos `SVGElement` requiere la versión **0.3.1** o posterior.{{% /alert %}}
+
+```js
+var docDefinition = {
+ content: [
+ {
+ // If no width/height/fit is used, then dimensions from the svg element is used.
+ svg: ''
+ },
+ {
+ // if you specify width, svg will scale proportionally
+ svg: '',
+ width: 150
+ },
+ {
+ // if you specify height, svg will scale proportionally
+ // Minimal pdfmake version: 0.3.2
+ svg: '',
+ height: 100
+ },
+ {
+ // if you specify both width and height - svg will be stretched
+ svg: '',
+ width: 600,
+ height: 400
+ },
+ {
+ // you can also fit the svg inside a rectangle
+ svg: '',
+ fit: [150, 100]
+ },
+ {
+ // if no width/height is specified in SVG element, you must set width and height for node
+ svg: '',
+ width: 300,
+ height: 200
+ },
+ ]
+};
+```
diff --git a/content/document-definition-object/svgs.fr.md b/content/document-definition-object/svgs.fr.md
new file mode 100644
index 00000000..7e2f3e53
--- /dev/null
+++ b/content/document-definition-object/svgs.fr.md
@@ -0,0 +1,56 @@
++++
+title = "SVG"
+description = "Configurez les SVG dans pdfmake 0.3 avec des exemples, des options et des notes d’utilisation."
+weight = 2110
+alwaysopen = true
+sourceDigest = "1370a9ae1ce49896f1ce3301d0947639f4e5fd7225b9babd15b140e19eed060a"
++++
+
+Les SVG ressemblent beaucoup aux [images](/docs/0.3/fr/document-definition-object/images/), mais il n’est actuellement pas possible de les référencer par fichier ni de les réutiliser depuis un dictionnaire.
+
+{{% alert theme="warning" %}}Le nœud SVG exige une valeur SVG valide. Une valeur invalide ou vide provoque une erreur.{{% /alert %}}
+
+La bibliothèque [SVG-to-PDFKit](https://github.com/alafr/SVG-to-PDFKit) est utilisée pour convertir les SVG en documents PDF.
+
+La valeur du nœud `svg` peut être une chaîne ou un objet `SVGElement` (disponible uniquement dans le navigateur).
+
+{{% alert theme="warning" %}}La prise en charge de l’objet `SVGElement` nécessite la version **0.3.1** ou ultérieure.{{% /alert %}}
+
+```js
+var docDefinition = {
+ content: [
+ {
+ // If no width/height/fit is used, then dimensions from the svg element is used.
+ svg: ''
+ },
+ {
+ // if you specify width, svg will scale proportionally
+ svg: '',
+ width: 150
+ },
+ {
+ // if you specify height, svg will scale proportionally
+ // Minimal pdfmake version: 0.3.2
+ svg: '',
+ height: 100
+ },
+ {
+ // if you specify both width and height - svg will be stretched
+ svg: '',
+ width: 600,
+ height: 400
+ },
+ {
+ // you can also fit the svg inside a rectangle
+ svg: '',
+ fit: [150, 100]
+ },
+ {
+ // if no width/height is specified in SVG element, you must set width and height for node
+ svg: '',
+ width: 300,
+ height: 200
+ },
+ ]
+};
+```
diff --git a/content/document-definition-object/svgs.md b/content/document-definition-object/svgs.md
index f88cdc6d..0b32d880 100644
--- a/content/document-definition-object/svgs.md
+++ b/content/document-definition-object/svgs.md
@@ -1,6 +1,6 @@
+++
title = "SVGs"
-description = ""
+description = "Configure svgs in pdfmake 0.3 with examples, options and usage notes."
weight = 2110
alwaysopen = true
+++
@@ -29,10 +29,10 @@ var docDefinition = {
},
{
// if you specify height, svg will scale proportionally
- // Minimal pdfmake version: 0.3.2
+ // Minimal pdfmake version: 0.3.2
svg: '',
height: 100
- },
+ },
{
// if you specify both width and height - svg will be stretched
svg: '',
diff --git a/content/document-definition-object/svgs.pt-br.md b/content/document-definition-object/svgs.pt-br.md
new file mode 100644
index 00000000..a8e258e9
--- /dev/null
+++ b/content/document-definition-object/svgs.pt-br.md
@@ -0,0 +1,55 @@
++++
+title = "SVGs"
+description = "Adicione conteúdo vetorial SVG aos documentos pdfmake 0.3 e controle suas dimensões e escala."
+weight = 2110
+sourceDigest = "1370a9ae1ce49896f1ce3301d0947639f4e5fd7225b9babd15b140e19eed060a"
++++
+
+SVGs são muito parecidos com [imagens](/docs/0.3/pt-br/document-definition-object/images/), mas atualmente não é possível referenciar SVGs por arquivo nem reutilizá-los a partir de um dicionário.
+
+{{% alert theme="warning" %}}O nó SVG espera um valor SVG válido. Se o valor estiver vazio ou for inválido, será lançado um erro.{{% /alert %}}
+
+A biblioteca [SVG-to-PDFKit](https://github.com/alafr/SVG-to-PDFKit) é usada para transformar SVG em um documento PDF.
+
+O valor do nó `svg` pode ser uma string ou um objeto `SVGElement` (disponível somente no navegador).
+
+{{% alert theme="warning" %}}O suporte ao objeto `SVGElement` requer a versão **0.3.1** ou posterior{{% /alert %}}
+
+```js
+var docDefinition = {
+ content: [
+ {
+ // If no width/height/fit is used, then dimensions from the svg element is used.
+ svg: ''
+ },
+ {
+ // if you specify width, svg will scale proportionally
+ svg: '',
+ width: 150
+ },
+ {
+ // if you specify height, svg will scale proportionally
+ // Minimal pdfmake version: 0.3.2
+ svg: '',
+ height: 100
+ },
+ {
+ // if you specify both width and height - svg will be stretched
+ svg: '',
+ width: 600,
+ height: 400
+ },
+ {
+ // you can also fit the svg inside a rectangle
+ svg: '',
+ fit: [150, 100]
+ },
+ {
+ // if no width/height is specified in SVG element, you must set width and height for node
+ svg: '',
+ width: 300,
+ height: 200
+ },
+ ]
+};
+```
diff --git a/content/document-definition-object/tables.de.md b/content/document-definition-object/tables.de.md
new file mode 100644
index 00000000..f5725c5b
--- /dev/null
+++ b/content/document-definition-object/tables.de.md
@@ -0,0 +1,104 @@
++++
+title = "Tabellen"
+description = "Erstelle Tabellen mit einheitlichen Zeilen, wiederholten Kopfzeilen, benutzerdefinierten Rahmen, Breiten und verbundenen Zellen."
+weight = 2030
+alwaysopen = true
+sourceDigest = "48bc3047dc6a23638e82fe81a22c544d203aad3bebf645cdee21772c669cefae"
++++
+
+## Mit Zeilen und wiederholter Kopfzeile beginnen
+
+Verwende eine Tabelle, wenn Zellen verschiedener Zeilen ausgerichtet werden sollen. `body` ist ein Array mit Zeilen-Arrays. Jede Zeile muss dieselbe Anzahl von Zellen enthalten; Zellen können Text oder andere pdfmake-Knoten enthalten. `headerRows: 1` wiederholt die erste Zeile, wenn die Tabelle auf einer neuen Seite fortgesetzt wird.
+
+{{< example id="tables" >}}
+
+## Breiten auswählen
+
+| Breite | Bedeutung | Geeignet, wenn |
+| --- | --- | --- |
+| Eine Zahl, zum Beispiel `80` | Feste Punkte | Codes, Mengen oder eine Spalte mit vorhersehbaren Beschriftungen |
+| `'*'` | Verbleibende Breite teilen | Eine Beschreibung den verfügbaren Platz ausfüllen soll |
+| `'auto'` | Inhalt messen | Kurze Beschriftungen nur die benötigte Breite belegen sollen |
+| Prozentangabe als Zeichenfolge | Prozentuale Breite | Ein proportionales Layout erforderlich ist; gemischte Breiten sorgfältig prüfen |
+
+Rahmen, Innenabstände, Seitenränder und andere Spalten belegen ebenfalls Platz. Beginne mit festen Breiten und Sternbreiten und verwende `auto`, wenn eine inhaltsabhängige Größe beabsichtigt ist. Vermeide große feste Breiten, die den Inhaltsbereich überschreiten.
+
+## Tabellen- und Zellfelder
+
+| Feld | Ebene | Typ / Zweck |
+| --- | --- | --- |
+| `body` | `table` | Nichtleere Zeilen-Arrays |
+| `widths` | `table` | Breitenangaben, eine pro Spalte |
+| `headerRows` | `table` | Anzahl der ersten Zeilen, die als Kopfzeile wiederholt werden |
+| `dontBreakRows` | `table` | Verhindert, dass eine einzelne Zeile auf mehrere Seiten aufgeteilt wird |
+| `keepWithHeaderRows` | `table` | Anzahl der folgenden Zeilen, die zusammen mit der Kopfzeile gehalten werden |
+| `layout` | Knoten neben `table` | Name eines integrierten Layouts, registrierter eigener Name oder Layoutobjekt |
+| `colSpan`, `rowSpan` | Zelle | Positive Anzahl der überspannten Spalten/Zeilen; Platzhalter sind weiterhin erforderlich |
+| `verticalAlignment` | Zelle | `'top'` (Standard), `'middle'` oder `'bottom'` |
+| `border` | Zelle | Vier boolesche Werte: links, oben, rechts, unten |
+| `borderColor` | Zelle | Vier Farben in derselben Reihenfolge |
+| `fillColor` | Zelle | Hintergrundfarbe oder unterstütztes Mustertupel |
+| `fillOpacity` | Zelle | Numerische Deckkraft des Hintergrunds |
+| `overlayPattern`, `overlayOpacity` | Zelle | Mustertupel und numerische Deckkraft, die über den Inhalt gelegt werden |
+
+Eine Zeile zusammenzuhalten sorgt nicht dafür, dass eine übergroße Zeile auf eine Seite passt. Prüfe lange Beschreibungen und verschachtelten Inhalt mit deiner tatsächlichen Seitengröße und deinen Schriften.
+
+## Zellen verbinden, ohne die Zeilenlänge zu ändern
+
+```js
+var dd = {
+ content: [{
+ table: {
+ widths: ['*', '*', '*'],
+ body: [
+ [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],
+ [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],
+ [{}, 'C', 'D']
+ ]
+ }
+ }]
+};
+```
+
+Die leeren Objekte belegen die von einer Zelle überspannten Plätze. Ohne sie ist eine Zeile nicht einheitlich. Verwende `undefined` nicht als Platzhalter. Das [Playground-Beispiel zu Zellüberspannungen](/docs/0.3/de/playground/?example=spans) zeigt diese Definition.
+
+## Integriertes Layout verwenden
+
+Die Layouts `noBorders`, `headerLineOnly` und `lightHorizontalLines` stehen unter ihrem Namen zur Verfügung. Setze `layout` neben `table`, nicht innerhalb davon:
+
+```js
+var dd = {
+ content: [{
+ layout: 'lightHorizontalLines',
+ table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }
+ }]
+};
+```
+
+## Eigenes Layout registrieren
+
+Registriere Layouts, bevor du das Dokument erstellst. Verwende in Node.js dein konfiguriertes `pdfmake`-Singleton und im Browser `pdfMake`.
+
+```js
+pdfMake.addTableLayouts({
+ compact: {
+ hLineWidth: function (index, node) {
+ return index === node.table.headerRows ? 1 : 0;
+ },
+ vLineWidth: function () { return 0; },
+ hLineColor: function () { return '#b7cfc4'; },
+ paddingLeft: function () { return 6; },
+ paddingRight: function () { return 6; }
+ }
+});
+
+var dd = {
+ content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]
+};
+```
+
+Das Snippet setzt voraus, dass Browser-Engine und Schriften geladen sind. Eine Layoutvariable zu definieren, registriert sie noch nicht. Verwende möglichst deterministische Callbacks und ändere gemeinsam genutzte Konfiguration nicht während paralleler Node.js-Aufträge.
+
+## Fehlerhafte Tabellen diagnostizieren
+
+Prüfe `body`, bevor du Rahmen oder Breiten änderst: Es muss Zeilen-Arrays mit einheitlicher Länge enthalten. Prüfe anschließend die Platzhalter für überspannte Zellen. Im lokalen Verbesserungszweig nennen Diagnosen den fehlerhaften Definitionspfad und die erwartete Zellanzahl. Siehe [Fehler und Diagnose](/docs/0.3/de/guides/errors/).
diff --git a/content/document-definition-object/tables.es.md b/content/document-definition-object/tables.es.md
new file mode 100644
index 00000000..a5450f20
--- /dev/null
+++ b/content/document-definition-object/tables.es.md
@@ -0,0 +1,104 @@
++++
+sourceDigest = "48bc3047dc6a23638e82fe81a22c544d203aad3bebf645cdee21772c669cefae"
+title = "Tablas"
+description = "Crea tablas coherentes con filas, encabezados repetidos, bordes personalizados, anchos y celdas combinadas."
+weight = 2030
+alwaysopen = true
++++
+
+## Empezar con filas y un encabezado repetido
+
+Usa una tabla cuando haya que alinear celdas de distintas filas. `body` es una matriz de matrices que representan filas. Todas las filas deben tener el mismo número de celdas; las celdas pueden contener texto u otros nodos de pdfmake. `headerRows: 1` repite la primera fila cuando la tabla continúa en otra página.
+
+{{< example id="tables" >}}
+
+## Elegir los anchos
+
+| Ancho | Significado | Útil cuando |
+| --- | --- | --- |
+| Un número, por ejemplo `80` | Puntos fijos | Códigos, cantidades o una columna de etiquetas predecible |
+| `'*'` | Comparte el ancho restante | Una descripción debe ocupar el espacio disponible |
+| `'auto'` | Mide el contenido | Las etiquetas cortas deben usar solo el ancho que necesitan |
+| Una cadena de porcentaje | Ancho basado en porcentajes | Se necesita una distribución proporcional; prueba con cuidado los anchos mixtos |
+
+Los bordes, el relleno, los márgenes de página y las demás columnas también consumen espacio. Empieza con anchos fijos y con `*`; luego usa `auto` cuando quieras deliberadamente un ajuste según el contenido. Evita añadir anchos fijos grandes que superen el área de contenido.
+
+## Campos de tabla y celda
+
+| Campo | Dónde | Tipo / propósito |
+| --- | --- | --- |
+| `body` | `table` | Matrices de filas no vacías |
+| `widths` | `table` | Descriptores de ancho, uno por columna |
+| `headerRows` | `table` | Número de filas iniciales que se repiten como encabezados |
+| `dontBreakRows` | `table` | Evita dividir una fila individual entre páginas |
+| `keepWithHeaderRows` | `table` | Número de filas siguientes que se mantienen junto al encabezado |
+| `layout` | Nodo, junto a `table` | Nombre de una distribución integrada, nombre personalizado registrado u objeto de distribución |
+| `colSpan`, `rowSpan` | Celda | Número positivo de columnas/filas que se abarcan; también se requieren celdas de marcador |
+| `verticalAlignment` | Celda | `'top'` (predeterminado), `'middle'` o `'bottom'` |
+| `border` | Celda | Cuatro booleanos: izquierda, arriba, derecha, abajo |
+| `borderColor` | Celda | Cuatro colores en el mismo orden |
+| `fillColor` | Celda | Color de fondo o tupla de patrón compatible |
+| `fillOpacity` | Celda | Opacidad numérica del fondo |
+| `overlayPattern`, `overlayOpacity` | Celda | Tupla de patrón y opacidad numérica que se pinta sobre el contenido |
+
+Mantener una fila unida no permite que una fila demasiado grande quepa en una página. Prueba las descripciones largas y el contenido anidado con el tamaño de página y las fuentes reales.
+
+## Combinar celdas sin cambiar la longitud de las filas
+
+```js
+var dd = {
+ content: [{
+ table: {
+ widths: ['*', '*', '*'],
+ body: [
+ [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],
+ [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],
+ [{}, 'C', 'D']
+ ]
+ }
+ }]
+};
+```
+
+Los objetos vacíos ocupan las celdas abarcadas por `span`. Si los omites, la fila tendrá una longitud incoherente. No uses `undefined` como marcador de posición. El [ejemplo de celdas combinadas del entorno de pruebas](/docs/0.3/es/playground/?example=spans) muestra esta definición.
+
+## Usar una distribución integrada
+
+`noBorders`, `headerLineOnly` y `lightHorizontalLines` están disponibles por nombre. Coloca `layout` junto a `table`, no dentro:
+
+```js
+var dd = {
+ content: [{
+ layout: 'lightHorizontalLines',
+ table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }
+ }]
+};
+```
+
+## Registrar una distribución personalizada
+
+Registra las distribuciones antes de crear el documento. En Node, usa el singleton de `pdfmake` configurado; en el navegador, usa `pdfMake`.
+
+```js
+pdfMake.addTableLayouts({
+ compact: {
+ hLineWidth: function (index, node) {
+ return index === node.table.headerRows ? 1 : 0;
+ },
+ vLineWidth: function () { return 0; },
+ hLineColor: function () { return '#b7cfc4'; },
+ paddingLeft: function () { return 6; },
+ paddingRight: function () { return 6; }
+ }
+});
+
+var dd = {
+ content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]
+};
+```
+
+El fragmento supone que el motor del navegador y las fuentes ya están cargados. Definir una variable de distribución no la registra. Prefiere callbacks deterministas y evita mutar la configuración compartida durante trabajos simultáneos de Node.
+
+## Diagnosticar tablas malformadas
+
+Comprueba `body` antes de cambiar los bordes o los anchos: debe contener matrices de filas con longitudes coherentes. Luego comprueba los marcadores de posición de las celdas combinadas. En la rama de mejoras local, los diagnósticos identifican la ruta de la definición problemática y el número de celdas esperado. Consulta [errores y diagnósticos](/docs/0.3/es/guides/errors/).
diff --git a/content/document-definition-object/tables.fr.md b/content/document-definition-object/tables.fr.md
new file mode 100644
index 00000000..1edc001a
--- /dev/null
+++ b/content/document-definition-object/tables.fr.md
@@ -0,0 +1,104 @@
++++
+title = "Tableaux"
+description = "Créez des tableaux avec des lignes cohérentes, des en-têtes répétés, des bordures personnalisées, des largeurs et des cellules fusionnées."
+weight = 2030
+alwaysopen = true
+sourceDigest = "48bc3047dc6a23638e82fe81a22c544d203aad3bebf645cdee21772c669cefae"
++++
+
+## Commencer par des lignes et un en-tête répété
+
+Utilisez un tableau lorsque les cellules de différentes lignes doivent s’aligner. `body` est un tableau de lignes, elles-mêmes représentées par des tableaux. Chaque ligne doit contenir le même nombre de cellules ; une cellule peut contenir du texte ou d’autres nœuds pdfmake. `headerRows: 1` répète la première ligne si le tableau se poursuit sur une autre page.
+
+{{< example id="tables" >}}
+
+## Choisir les largeurs
+
+| Largeur | Signification | Utile lorsque |
+| --- | --- | --- |
+| Un nombre, par exemple `80` | Largeur fixe en points | Pour des codes, des quantités ou une colonne d’intitulés de largeur prévisible |
+| `'*'` | Partage la largeur restante | Pour qu’une description occupe l’espace disponible |
+| `'auto'` | Mesure le contenu | Pour que des intitulés courts n’occupent que la largeur nécessaire |
+| Une chaîne en pourcentage | Largeur proportionnelle | Pour une mise en page proportionnelle ; testez soigneusement les largeurs mixtes |
+
+Les bordures, le remplissage, les marges de page et les autres colonnes consomment aussi de l’espace. Commencez par des largeurs fixes et étoilées, puis utilisez `auto` lorsque le dimensionnement selon le contenu est voulu. Évitez les grandes largeurs fixes qui dépassent la zone de contenu.
+
+## Propriétés des tableaux et des cellules
+
+| Propriété | Emplacement | Type / rôle |
+| --- | --- | --- |
+| `body` | `table` | Tableaux non vides représentant les lignes |
+| `widths` | `table` | Descripteurs de largeur, un par colonne |
+| `headerRows` | `table` | Nombre de lignes initiales répétées comme en-têtes |
+| `dontBreakRows` | `table` | Empêche une ligne individuelle de se couper entre deux pages |
+| `keepWithHeaderRows` | `table` | Nombre de lignes suivantes à garder avec l’en-tête |
+| `layout` | Nœud, à côté de `table` | Nom de disposition intégrée, nom personnalisé enregistré ou objet de disposition |
+| `colSpan`, `rowSpan` | Cellule | Nombre positif de colonnes ou lignes couvertes ; les cellules de remplacement restent nécessaires |
+| `verticalAlignment` | Cellule | `'top'` (par défaut), `'middle'` ou `'bottom'` |
+| `border` | Cellule | Quatre booléens : gauche, haut, droite, bas |
+| `borderColor` | Cellule | Quatre couleurs dans le même ordre |
+| `fillColor` | Cellule | Couleur d’arrière-plan ou tuple de motif pris en charge |
+| `fillOpacity` | Cellule | Opacité numérique de l’arrière-plan |
+| `overlayPattern`, `overlayOpacity` | Cellule | Tuple de motif et opacité numérique appliqués par-dessus le contenu |
+
+Garder une ligne entière ne permet pas de faire tenir une ligne trop grande sur une page. Testez les descriptions longues et les contenus imbriqués avec le format de page et les polices réellement utilisés.
+
+## Fusionner des cellules sans modifier la longueur des lignes
+
+```js
+var dd = {
+ content: [{
+ table: {
+ widths: ['*', '*', '*'],
+ body: [
+ [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],
+ [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],
+ [{}, 'C', 'D']
+ ]
+ }
+ }]
+};
+```
+
+Les objets vides occupent les cellules couvertes par une fusion. Les omettre rend la ligne incohérente. N’utilisez pas `undefined` comme valeur de remplacement. L’[exemple de fusion dans le playground](/docs/0.3/fr/playground/?example=spans) présente cette définition.
+
+## Utiliser une disposition intégrée
+
+Les dispositions `noBorders`, `headerLineOnly` et `lightHorizontalLines` sont disponibles par leur nom. Placez `layout` à côté de `table`, et non à l’intérieur :
+
+```js
+var dd = {
+ content: [{
+ layout: 'lightHorizontalLines',
+ table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }
+ }]
+};
+```
+
+## Enregistrer une disposition personnalisée
+
+Enregistrez les dispositions avant de créer le document. Dans Node, utilisez votre instance `pdfmake` configurée ; dans le navigateur, utilisez `pdfMake`.
+
+```js
+pdfMake.addTableLayouts({
+ compact: {
+ hLineWidth: function (index, node) {
+ return index === node.table.headerRows ? 1 : 0;
+ },
+ vLineWidth: function () { return 0; },
+ hLineColor: function () { return '#b7cfc4'; },
+ paddingLeft: function () { return 6; },
+ paddingRight: function () { return 6; }
+ }
+});
+
+var dd = {
+ content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]
+};
+```
+
+Cet extrait suppose que le moteur du navigateur et les polices sont chargés. Déclarer une variable de disposition ne suffit pas à l’enregistrer. Préférez des fonctions de rappel déterministes ; évitez de modifier une configuration partagée pendant des tâches Node concurrentes.
+
+## Diagnostiquer les tableaux mal formés
+
+Vérifiez `body` avant de modifier les bordures ou les largeurs : il doit contenir des tableaux de lignes dont les longueurs concordent. Vérifiez ensuite les cellules de remplacement des fusions. Dans la branche locale d’amélioration, les diagnostics indiquent le chemin de définition fautif et le nombre de cellules attendu. Consultez [Erreurs et diagnostics](/docs/0.3/fr/guides/errors/).
diff --git a/content/document-definition-object/tables.md b/content/document-definition-object/tables.md
index 48315efb..79e43923 100644
--- a/content/document-definition-object/tables.md
+++ b/content/document-definition-object/tables.md
@@ -1,146 +1,118 @@
+++
title = "Tables"
-description = ""
+description = "Build tables with consistent rows, repeating headers, custom borders, widths and merged cells."
weight = 2030
alwaysopen = true
+++
+## Start with rows and a repeating header
-Conceptually tables are similar to columns. They can however have headers, borders and cells spanning over multiple columns/rows.
+Use a table when cells in different rows need to align. `body` is an array of row
+arrays. Each row must have the same number of cells; cells can contain text or
+other pdfmake nodes. `headerRows: 1` repeats the first row when the table continues
+onto another page.
-{{% alert theme="warning" %}}The table node expects a valid table value. If the value is invalid or empty, an error is thrown. This includes the table.body property as well.{{% /alert %}}
+{{< example id="tables" >}}
-```js
-var docDefinition = {
- content: [
- {
- layout: 'lightHorizontalLines', // optional
- table: {
- // headers are automatically repeated if the table spans over multiple pages
- // you can declare how many rows should be treated as headers
- headerRows: 1,
- widths: [ '*', 'auto', 100, '*' ],
-
- body: [
- [ 'First', 'Second', 'Third', 'The last one' ],
- [ 'Value 1', 'Value 2', 'Value 3', 'Value 4' ],
- [ { text: 'Bold value', bold: true }, 'Val 2', 'Val 3', 'Val 4' ]
- ]
- }
- }
- ]
-};
-```
+## Choose widths
-##### Table-cell properties
+| Width | Meaning | Useful when |
+| --- | --- | --- |
+| A number, for example `80` | Fixed points | Codes, counts or a predictable label column |
+| `'*'` | Share the remaining width | A description should fill the available space |
+| `'auto'` | Measure the content | Short labels should use only the width they need |
+| A percentage string | Percentage-based width | A proportional layout is required; test mixed widths carefully |
-* `rowSpan: integer`:
-* `colSpan: integer`:
-* `verticalAlignment: string`: vertical alignment (values: `top` (default), `middle`, `bottom`)
-* `border: [boolean, boolean, boolean, boolean]`:
-* `borderColor: [string, string, string, string]`:
-* `fillColor: string`: the background color of a table cell
-* `fillOpacity: string`: the background opacity of a table cell
-* `overlayPattern: [string, string]`: overlay for a cell, painted over the contents
-* `overlayOpacity: number`: the opacity of the overlay
+Borders, padding, page margins and other columns consume space too. Start with
+fixed and star widths, then use `auto` where content-based sizing is intentional.
+Avoid adding large fixed widths that exceed the content area.
+## Table and cell fields
-##### Table layouts
+| Field | Where | Type / purpose |
+| --- | --- | --- |
+| `body` | `table` | Nonempty row arrays |
+| `widths` | `table` | Width descriptors, one per column |
+| `headerRows` | `table` | Number of leading rows repeated as headers |
+| `dontBreakRows` | `table` | Keep an individual row from splitting across pages |
+| `keepWithHeaderRows` | `table` | Number of following rows to keep with the header |
+| `layout` | Node, beside `table` | Built-in layout name, registered custom name, or layout object |
+| `colSpan`, `rowSpan` | Cell | Positive number of columns/rows covered; placeholders are still required |
+| `verticalAlignment` | Cell | `'top'` (default), `'middle'` or `'bottom'` |
+| `border` | Cell | Four booleans: left, top, right, bottom |
+| `borderColor` | Cell | Four colors in the same order |
+| `fillColor` | Cell | Background color or a supported pattern tuple |
+| `fillOpacity` | Cell | Numeric background opacity |
+| `overlayPattern`, `overlayOpacity` | Cell | Pattern tuple and numeric opacity painted over the contents |
-Can be used `layout` property for set table layout.
+Keeping a row together cannot make an oversized row fit on a page. Test long
+descriptions and nested content with your actual page size and fonts.
-Available table layouts:
+## Merge cells without changing the row length
-* `noBorders`
-* `headerLineOnly`
-* `lightHorizontalLines`
-
-##### Own table layouts
-
-Own table layouts must be defined before calling `pdfMake.createPdf(docDefinition)`.
```js
-// define table layouts
-var tableLayouts = {
- exampleLayout: {
- hLineWidth: function (i, node) {
- if (i === 0 || i === node.table.body.length) {
- return 0;
- }
- return (i === node.table.headerRows) ? 2 : 1;
- },
- vLineWidth: function (i) {
- return 0;
- },
- hLineColor: function (i) {
- return i === 1 ? 'black' : '#aaa';
- },
- paddingLeft: function (i) {
- return i === 0 ? 0 : 8;
- },
- paddingRight: function (i, node) {
- return (i === node.table.widths.length - 1) ? 0 : 8;
+var dd = {
+ content: [{
+ table: {
+ widths: ['*', '*', '*'],
+ body: [
+ [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],
+ [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],
+ [{}, 'C', 'D']
+ ]
}
- }
+ }]
};
-
-// add table layouts
-pdfMake.addTableLayouts(tableLayouts);
-
-// download the PDF
-pdfMake.createPdf(docDefinition).download();
```
+The empty objects occupy the cells covered by a span. Leaving them out produces
+an inconsistent row. Do not use `undefined` as a placeholder. The
+[spans playground example](/docs/0.3/playground/?example=spans) shows this definition.
-- On the server side:
+## Use a built-in layout
+
+`noBorders`, `headerLineOnly` and `lightHorizontalLines` are available by name.
+Put `layout` beside `table`, not inside it:
```js
-var pdfmake = require('pdfmake');
-pdfmake.addFonts(fonts);
-
-// Declaring your layout
-var myTableLayouts = {
- exampleLayout: {
- /*
- Your layout here.
- */
- }
+var dd = {
+ content: [{
+ layout: 'lightHorizontalLines',
+ table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }
+ }]
};
-
-// Building the PDF
-var pdf = pdfmake.createPdf(docDefinition);
-
-// Writing it to disk
-pdf.write('document.pdf').then(() => {
- // success event
-}, err => {
- // error event
- console.error(err);
-});
```
-##### colSpan and rowSpan
+## Register a custom layout
-{{% alert theme="info" %}}If you use colSpan or rowSpan, don't forget to use an empty cell for the next columns or rows. See example below.{{% /alert %}}
+Register layouts before creating the document. In Node use your configured
+`pdfmake` singleton; in the browser use `pdfMake`.
```js
+pdfMake.addTableLayouts({
+ compact: {
+ hLineWidth: function (index, node) {
+ return index === node.table.headerRows ? 1 : 0;
+ },
+ vLineWidth: function () { return 0; },
+ hLineColor: function () { return '#b7cfc4'; },
+ paddingLeft: function () { return 6; },
+ paddingRight: function () { return 6; }
+ }
+});
+
var dd = {
- content: [
- {
- table: {
- body: [
- [{text: 'Header with Colspan = 2', style: 'tableHeader', colSpan: 2, alignment: 'center'}, '', {text: 'Header 3', style: 'tableHeader', alignment: 'center'}],
- [{text: 'Header 1', style: 'tableHeader', alignment: 'center'}, {text: 'Header 2', style: 'tableHeader', alignment: 'center'}, {text: 'Header 3', style: 'tableHeader', alignment: 'center'}],
- ['Sample value 1', 'Sample value 2', 'Sample value 3'],
- [{rowSpan: 3, text: 'rowSpan set to 3\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor'}, 'Sample value 2', 'Sample value 3'],
- ['', 'Sample value 2', 'Sample value 3'],
- ['Sample value 1', 'Sample value 2', 'Sample value 3'],
- ['Sample value 1', {colSpan: 2, rowSpan: 2, text: 'Both:\nrowSpan and colSpan\ncan be defined at the same time'}, ''],
- ['Sample value 1', '', ''],
- ]
- }
- }
- ]
-}
+ content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]
+};
```
-All concepts related to tables are covered by TABLES example in [playground](http://pdfmake.org/playground.html).
+The snippet assumes the browser engine and fonts are loaded. Defining a layout
+variable alone does not register it. Prefer deterministic callbacks; avoid
+mutating shared configuration during concurrent Node jobs.
+
+## Diagnose malformed tables
+
+Check `body` before changing borders or widths: it must contain row arrays with
+consistent lengths. Check span placeholders next. In the local improvement branch,
+diagnostics identify the offending definition path and expected number of cells.
+See [errors and diagnostics](/docs/0.3/guides/errors/).
diff --git a/content/document-definition-object/tables.pt-br.md b/content/document-definition-object/tables.pt-br.md
new file mode 100644
index 00000000..e2f39135
--- /dev/null
+++ b/content/document-definition-object/tables.pt-br.md
@@ -0,0 +1,104 @@
++++
+title = "Tabelas"
+description = "Crie tabelas com linhas consistentes, cabeçalhos repetidos, bordas personalizadas, larguras e células mescladas."
+weight = 2030
+alwaysopen = true
+sourceDigest = "48bc3047dc6a23638e82fe81a22c544d203aad3bebf645cdee21772c669cefae"
++++
+
+## Comece com linhas e um cabeçalho repetido
+
+Use uma tabela quando as células de linhas diferentes precisam ficar alinhadas. `body` é um array de arrays de linhas. Cada linha precisa ter o mesmo número de células; as células podem conter texto ou outros nós do pdfmake. `headerRows: 1` repete a primeira linha quando a tabela continua em outra página.
+
+{{< example id="tables" >}}
+
+## Escolha as larguras
+
+| Largura | Significado | Útil quando |
+| --- | --- | --- |
+| Um número, por exemplo `80` | Pontos fixos | Códigos, quantidades ou uma coluna de rótulos previsível |
+| `'*'` | Compartilha a largura restante | Uma descrição deve ocupar o espaço disponível |
+| `'auto'` | Mede o conteúdo | Rótulos curtos devem usar apenas a largura necessária |
+| Uma string percentual | Largura baseada em porcentagem | É necessário um layout proporcional; teste cuidadosamente larguras combinadas |
+
+Bordas, preenchimento interno, margens da página e outras colunas também consomem espaço. Comece com larguras fixas e com asterisco; use `auto` quando o dimensionamento pelo conteúdo for intencional. Evite adicionar larguras fixas grandes que ultrapassem a área de conteúdo.
+
+## Campos da tabela e das células
+
+| Campo | Onde | Tipo / finalidade |
+| --- | --- | --- |
+| `body` | `table` | Arrays de linhas não vazios |
+| `widths` | `table` | Descritores de largura, um por coluna |
+| `headerRows` | `table` | Número de linhas iniciais repetidas como cabeçalhos |
+| `dontBreakRows` | `table` | Impede que uma linha individual seja dividida entre páginas |
+| `keepWithHeaderRows` | `table` | Número de linhas seguintes que devem permanecer junto ao cabeçalho |
+| `layout` | Nó, ao lado de `table` | Nome de layout integrado, nome registrado ou objeto de layout |
+| `colSpan`, `rowSpan` | Célula | Número positivo de colunas/linhas ocupadas; ainda são necessários marcadores de posição |
+| `verticalAlignment` | Célula | `'top'` (padrão), `'middle'` ou `'bottom'` |
+| `border` | Célula | Quatro booleanos: esquerda, superior, direita, inferior |
+| `borderColor` | Célula | Quatro cores na mesma ordem |
+| `fillColor` | Célula | Cor de fundo ou tupla de padrão compatível |
+| `fillOpacity` | Célula | Opacidade numérica do fundo |
+| `overlayPattern`, `overlayOpacity` | Célula | Tupla de padrão e opacidade numérica desenhados sobre o conteúdo |
+
+Manter uma linha inteira junta não faz uma linha alta demais caber na página. Teste descrições longas e conteúdo aninhado com o tamanho de página e as fontes que você realmente usa.
+
+## Mescle células sem alterar o tamanho da linha
+
+```js
+var dd = {
+ content: [{
+ table: {
+ widths: ['*', '*', '*'],
+ body: [
+ [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],
+ [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],
+ [{}, 'C', 'D']
+ ]
+ }
+ }]
+};
+```
+
+Os objetos vazios ocupam as células cobertas por um intervalo mesclado. Omiti-los produz uma linha inconsistente. Não use `undefined` como marcador de posição. O [exemplo de intervalos mesclados no playground](/docs/0.3/pt-br/playground/?example=spans) mostra essa definição.
+
+## Use um layout integrado
+
+`noBorders`, `headerLineOnly` e `lightHorizontalLines` podem ser usados pelo nome. Coloque `layout` ao lado de `table`, e não dentro dele:
+
+```js
+var dd = {
+ content: [{
+ layout: 'lightHorizontalLines',
+ table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }
+ }]
+};
+```
+
+## Registre um layout personalizado
+
+Registre os layouts antes de criar o documento. No Node, use a instância configurada de `pdfmake`; no navegador, use `pdfMake`.
+
+```js
+pdfMake.addTableLayouts({
+ compact: {
+ hLineWidth: function (index, node) {
+ return index === node.table.headerRows ? 1 : 0;
+ },
+ vLineWidth: function () { return 0; },
+ hLineColor: function () { return '#b7cfc4'; },
+ paddingLeft: function () { return 6; },
+ paddingRight: function () { return 6; }
+ }
+});
+
+var dd = {
+ content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]
+};
+```
+
+O trecho pressupõe que o mecanismo do navegador e as fontes foram carregados. Apenas definir uma variável de layout não a registra. Prefira callbacks determinísticos; evite alterar configuração compartilhada durante tarefas simultâneas do Node.
+
+## Diagnostique tabelas malformadas
+
+Verifique `body` antes de alterar bordas ou larguras: ele deve conter arrays de linhas com comprimentos consistentes. Em seguida, confira os marcadores de posição dos intervalos mesclados. No branch local de melhorias, os diagnósticos identificam o caminho da definição com problema e o número esperado de células. Consulte [erros e diagnósticos](/docs/0.3/pt-br/guides/errors/).
diff --git a/content/document-definition-object/toc.de.md b/content/document-definition-object/toc.de.md
new file mode 100644
index 00000000..4e013665
--- /dev/null
+++ b/content/document-definition-object/toc.de.md
@@ -0,0 +1,53 @@
++++
+title = "Inhaltsverzeichnis"
+description = "Erzeuge ein oder mehrere Inhaltsverzeichnisse aus markierten Elementen, mit Sortierung, Stilen und optionalen PDF-Lesezeichen."
+weight = 2230
+sourceDigest = "54b38f6844726a1c78499e217c2cf64d2cebd568ef974973ac6c9a7ee39cac11"
++++
+
+## Überschriften zur Aufnahme markieren
+
+```js
+var docDefinition = {
+ content: [
+ { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },
+ { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },
+ 'Document body',
+ { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }
+ ]
+};
+```
+
+Der `toc`-Knoten fügt das erzeugte Verzeichnis ein; `tocItem` markiert Textknoten, die darin aufgeführt werden sollen. Die Seitenzahlen werden während des Layouts berechnet.
+
+## Mehrere Inhaltsverzeichnisse
+
+Jedes Inhaltsverzeichnis ist ein eigener Inhaltsknoten. Mit IDs legst du fest, in welchen Listen die einzelnen Einträge erscheinen:
+
+```js
+var docDefinition = {
+ content: [
+ { toc: { id: 'main', title: 'All sections' } },
+ { toc: { id: 'details', title: 'Detailed sections' } },
+ { text: 'Overview', tocItem: 'main' },
+ { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }
+ ]
+};
+```
+
+Füge nicht zwei `toc`-Schlüssel in dasselbe Objekt ein; JavaScript behält nur den letzten Wert.
+
+## Optionen des Inhaltsverzeichnisses
+
+| Feld | Typ | Bedeutung |
+| --- | --- | --- |
+| `id` | string | Kennung für ein benanntes Inhaltsverzeichnis |
+| `title` | string oder Textknoten | Optionaler Titel |
+| `textStyle`, `numberStyle` | Stilobjekt | Formatierung des Eintragstextes und der Seitenzahl |
+| `textMargin` | Abstand | Abstand des Eintrags |
+| `hideEmpty` | boolean | Leeres Inhaltsverzeichnis ausblenden; Standard `false`, seit 0.3.3 |
+| `sortBy` | `'page'` oder `'title'` | Sortierreihenfolge; Standard `page`, seit 0.3.3 |
+| `sortLocale` | string | Gebietsschema für die Sortierung; standardmäßig das Laufzeitgebietsschema, seit 0.3.3 |
+| `outlines` | boolean | Einträge in PDF-Lesezeichen aufnehmen; seit 0.3.5 |
+
+Bei einem markierten Textknoten akzeptiert `tocItem` den Wert `true`, eine ToC-ID oder ein Array mit IDs. Mit `textStyle`, `numberStyle` und `textMargin` des Textknotens kannst du den Eintrag formatieren. Steuere Lesezeichen über [Gliederungen](/docs/0.3/de/document-definition-object/outlines/).
diff --git a/content/document-definition-object/toc.es.md b/content/document-definition-object/toc.es.md
new file mode 100644
index 00000000..29c37ca1
--- /dev/null
+++ b/content/document-definition-object/toc.es.md
@@ -0,0 +1,53 @@
++++
+sourceDigest = "54b38f6844726a1c78499e217c2cf64d2cebd568ef974973ac6c9a7ee39cac11"
+title = "Índice"
+description = "Genera uno o varios índices a partir de nodos marcados, con ordenación, estilos y esquemas PDF opcionales."
+weight = 2230
++++
+
+## Marcar encabezados para incluirlos
+
+```js
+var docDefinition = {
+ content: [
+ { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },
+ { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },
+ 'Document body',
+ { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }
+ ]
+};
+```
+
+El nodo `toc` inserta la lista generada; `tocItem` marca los nodos de texto que se incluirán. Los números de página se calculan durante la maquetación.
+
+## Varios índices
+
+Cada índice es un nodo de contenido independiente. Usa identificadores para elegir en qué lista aparece cada elemento:
+
+```js
+var docDefinition = {
+ content: [
+ { toc: { id: 'main', title: 'All sections' } },
+ { toc: { id: 'details', title: 'Detailed sections' } },
+ { text: 'Overview', tocItem: 'main' },
+ { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }
+ ]
+};
+```
+
+No pongas dos claves `toc` en el mismo objeto: JavaScript conserva únicamente el último valor.
+
+## Opciones de ToC
+
+| Campo | Tipo | Significado |
+| --- | --- | --- |
+| `id` | string | Identificador de un índice con nombre |
+| `title` | string o nodo de texto | Título opcional |
+| `textStyle`, `numberStyle` | objeto de estilo | Estilos del texto de la entrada y del número de página |
+| `textMargin` | margen | Espaciado de las entradas |
+| `hideEmpty` | boolean | Oculta un índice vacío; predeterminado: false, desde 0.3.3 |
+| `sortBy` | `'page'` o `'title'` | Orden; predeterminado: página, desde 0.3.3 |
+| `sortLocale` | string | Idioma para ordenar; de forma predeterminada, el idioma de ejecución, desde 0.3.3 |
+| `outlines` | boolean | Incluye las entradas en los marcadores del PDF; desde 0.3.5 |
+
+En un nodo de texto marcado, `tocItem` acepta `true`, un identificador de índice o una matriz de identificadores. Las propiedades `textStyle`, `numberStyle` y `textMargin` del nodo de texto permiten personalizar su entrada. Consulta [esquemas](/docs/0.3/es/document-definition-object/outlines/) para controlar los marcadores.
diff --git a/content/document-definition-object/toc.fr.md b/content/document-definition-object/toc.fr.md
new file mode 100644
index 00000000..667ddb28
--- /dev/null
+++ b/content/document-definition-object/toc.fr.md
@@ -0,0 +1,53 @@
++++
+title = "Table des matières"
+description = "Générez une ou plusieurs tables des matières depuis des nœuds marqués, avec tri, styles et signets PDF facultatifs."
+weight = 2230
+sourceDigest = "54b38f6844726a1c78499e217c2cf64d2cebd568ef974973ac6c9a7ee39cac11"
++++
+
+## Marquer les titres à inclure
+
+```js
+var docDefinition = {
+ content: [
+ { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },
+ { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },
+ 'Document body',
+ { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }
+ ]
+};
+```
+
+Le nœud `toc` insère la liste générée ; `tocItem` marque les nœuds texte à inclure. Les numéros de page sont calculés pendant la mise en page.
+
+## Plusieurs tables des matières
+
+Chaque ToC est un nœud de contenu distinct. Utilisez des identifiants pour sélectionner la liste à laquelle chaque élément appartient :
+
+```js
+var docDefinition = {
+ content: [
+ { toc: { id: 'main', title: 'All sections' } },
+ { toc: { id: 'details', title: 'Detailed sections' } },
+ { text: 'Overview', tocItem: 'main' },
+ { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }
+ ]
+};
+```
+
+Ne placez pas deux clés `toc` dans le même objet : JavaScript ne conserve que la dernière valeur.
+
+## Options de la table des matières
+
+| Champ | Type | Signification |
+| --- | --- | --- |
+| `id` | string | Identifiant de la ToC nommée |
+| `title` | string ou nœud texte | Titre facultatif |
+| `textStyle`, `numberStyle` | objet de style | Style du texte et des numéros de page des entrées |
+| `textMargin` | marge | Espacement des entrées |
+| `hideEmpty` | boolean | Masque une ToC vide ; false par défaut, depuis 0.3.3 |
+| `sortBy` | `'page'` ou `'title'` | Ordre ; page par défaut, depuis 0.3.3 |
+| `sortLocale` | string | Paramètre régional de tri ; celui de l’environnement par défaut, depuis 0.3.3 |
+| `outlines` | boolean | Inclut les entrées dans les signets PDF ; depuis 0.3.5 |
+
+Sur un nœud texte marqué, `tocItem` accepte `true`, un identifiant ou un tableau d’identifiants. Les propriétés `textStyle`, `numberStyle` et `textMargin` du nœud peuvent personnaliser son entrée. Consultez les [plans de document](/docs/0.3/fr/document-definition-object/outlines/) pour les options de signets.
diff --git a/content/document-definition-object/toc.md b/content/document-definition-object/toc.md
index 6eb69305..356ed0bd 100644
--- a/content/document-definition-object/toc.md
+++ b/content/document-definition-object/toc.md
@@ -1,88 +1,52 @@
+++
title = "Table of contents"
-description = ""
+description = "Generate one or more tables of contents from marked nodes, with sorting, styles and optional PDF outlines."
weight = 2230
-alwaysopen = true
+++
-The simplest example of a table of contents:
-```js
-var docDefinition = {
- content: [
- {
- toc: {
- title: {text: 'INDEX', style: 'header'}
- //textMargin: [0, 0, 0, 0],
- //textStyle: {italics: true},
- numberStyle: { bold: true },
- }
- },
- {
- text: 'This is a header',
- style: 'header',
- tocItem: true
- }
- ]
-}
-```
+## Mark headings for inclusion
-If `id` is used in toc, the tocItem can target that id:
```js
var docDefinition = {
content: [
- {
- toc: {
- id: 'mainToc',
- title: {text: 'INDEX', style: 'header'}
- }
- },
- {
- text: 'This is a header',
- style: 'header',
- tocItem: 'mainToc'
- }
+ { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },
+ { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },
+ 'Document body',
+ { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }
]
-}
+};
```
-If multiple Table of Contents are used, tocItem can be used to place the text in the correct toc:
+The `toc` node inserts the generated list; `tocItem` marks text nodes for inclusion. Page numbers are calculated during layout.
+
+## Multiple tables of contents
+
+Each ToC is a separate content node. Use IDs to choose which list receives each item:
+
```js
var docDefinition = {
content: [
- {
- toc: {
- id: 'mainToc',
- title: {text: 'INDEX', style: 'header'}
- },
- toc: {
- id: 'subToc',
- title: {text: 'SUB INDEX', style: 'header'}
- }
- },
- {
- text: 'This is a header',
- style: 'header',
- tocItem: ['mainToc', 'subToc']
- }
+ { toc: { id: 'main', title: 'All sections' } },
+ { toc: { id: 'details', title: 'Detailed sections' } },
+ { text: 'Overview', tocItem: 'main' },
+ { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }
]
-}
+};
```
-#### ToC properties
+Do not put two `toc` keys on the same object; JavaScript retains only the last value.
-* `id: string`: (optional) only usable if you use multiple ToC lists to identify
-* `title: string | text node`: (optional) title of ToC, string or text node
-* `hideEmpty: boolean`: (optional) (default `false`) hide ToC if is empty _(Minimal pdfmake version: 0.3.3)_
-* `textStyle`: (optional)
-* `numberStyle`: (optional)
-* `textMargin`: (optional)
-* `sortBy: string`: (optional) `'page'` (default) or `'title'` _(Minimal pdfmake version: 0.3.3)_
-* `sortLocale: string`: (optional) default browser or nodejs language is used _(Minimal pdfmake version: 0.3.3)_
-* `outlines: boolean`: (optional) adds all items to outlines / bookmarks (any existing outline settings on texts are respected) see this [article](/docs/0.3/document-definition-object/outlines/) _(Minimal version: 0.3.5)_
+## ToC options
-#### Node properties
+| Field | Type | Meaning |
+| --- | --- | --- |
+| `id` | string | Identifier for a named ToC |
+| `title` | string or text node | Optional title |
+| `textStyle`, `numberStyle` | style object | Entry text and page-number styling |
+| `textMargin` | margin | Entry spacing |
+| `hideEmpty` | boolean | Hide an empty ToC; default false, since 0.3.3 |
+| `sortBy` | `'page'` or `'title'` | Ordering; default page, since 0.3.3 |
+| `sortLocale` | string | Locale for sorting; runtime locale by default, since 0.3.3 |
+| `outlines` | boolean | Include entries in PDF bookmarks; since 0.3.5 |
-* `tocItem: boolean | string`:
-* `textStyle`: (optional)
-* `numberStyle`: (optional)
-* `textMargin`: (optional)
\ No newline at end of file
+On a marked text node, `tocItem` accepts `true`, one ToC ID or an array of IDs. Text-node `textStyle`, `numberStyle` and `textMargin` can customize its entry. See [outlines](/docs/0.3/document-definition-object/outlines/) for bookmark controls.
diff --git a/content/document-definition-object/toc.pt-br.md b/content/document-definition-object/toc.pt-br.md
new file mode 100644
index 00000000..fbc2d988
--- /dev/null
+++ b/content/document-definition-object/toc.pt-br.md
@@ -0,0 +1,53 @@
++++
+title = "Sumário"
+description = "Gere um ou mais sumários a partir de nós marcados, com ordenação, estilos e contornos PDF opcionais."
+weight = 2230
+sourceDigest = "54b38f6844726a1c78499e217c2cf64d2cebd568ef974973ac6c9a7ee39cac11"
++++
+
+## Marque títulos para incluí-los
+
+```js
+var docDefinition = {
+ content: [
+ { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },
+ { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },
+ 'Document body',
+ { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }
+ ]
+};
+```
+
+O nó `toc` insere a lista gerada; `tocItem` marca os nós de texto a incluir. Os números de página são calculados durante o layout.
+
+## Vários sumários
+
+Cada sumário é um nó de conteúdo separado. Use IDs para escolher em qual lista cada item aparecerá:
+
+```js
+var docDefinition = {
+ content: [
+ { toc: { id: 'main', title: 'All sections' } },
+ { toc: { id: 'details', title: 'Detailed sections' } },
+ { text: 'Overview', tocItem: 'main' },
+ { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }
+ ]
+};
+```
+
+Não coloque duas chaves `toc` no mesmo objeto; o JavaScript mantém somente o último valor.
+
+## Opções de sumário
+
+| Campo | Tipo | Significado |
+| --- | --- | --- |
+| `id` | string | Identificador de um sumário nomeado |
+| `title` | string ou nó de texto | Título opcional |
+| `textStyle`, `numberStyle` | objeto de estilo | Estilos do texto da entrada e do número da página |
+| `textMargin` | margem | Espaçamento da entrada |
+| `hideEmpty` | booleano | Oculta um sumário vazio; padrão `false`, desde 0.3.3 |
+| `sortBy` | `'page'` ou `'title'` | Ordenação; padrão `page`, desde 0.3.3 |
+| `sortLocale` | string | Localidade para ordenação; por padrão usa a localidade do runtime, desde 0.3.3 |
+| `outlines` | booleano | Inclui entradas nos marcadores PDF; desde 0.3.5 |
+
+Em um nó de texto marcado, `tocItem` aceita `true`, um ID de sumário ou um array de IDs. As propriedades `textStyle`, `numberStyle` e `textMargin` do nó de texto podem personalizar sua entrada. Consulte [contornos](/docs/0.3/pt-br/document-definition-object/outlines/) para controlar marcadores.
diff --git a/content/document-definition-object/watermark.de.md b/content/document-definition-object/watermark.de.md
new file mode 100644
index 00000000..8b81de3d
--- /dev/null
+++ b/content/document-definition-object/watermark.de.md
@@ -0,0 +1,59 @@
++++
+title = "Wasserzeichen"
+description = "Lege Wasserzeichen in pdfmake 0.3 mit Beispielen, Optionen und Anwendungshinweisen fest."
+weight = 2240
+alwaysopen = true
+sourceDigest = "6282ba69e28519af356033aef8c20701350b760f1926f0c1d592767e5cde5c02"
++++
+
+## Eigenschaften
+
+* `text` – Text des Wasserzeichens
+* `color` – Textfarbe
+* `opacity` – Deckkraft des Textes
+* `bold` – fette Textformatierung
+* `italics` – kursive Textformatierung
+* `fontSize` – eigene Schriftgröße des Textes (die ideale Größe wird automatisch berechnet)
+* `angle` – Drehwinkel des Textes
+
+## Beispiele
+
+Ein einfaches Beispiel für die Verwendung:
+```js
+var docDefinition = {
+ watermark: 'test watermark',
+ content: [
+ '...'
+ ]
+};
+```
+
+Beispiel mit Schriftformatierung:
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },
+ content: [
+ '...'
+ ]
+};
+```
+
+Beispiel mit eigener Schriftgröße:
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', fontSize: 20 },
+ content: [
+ '...'
+ ]
+};
+```
+
+Beispiel für den Drehwinkel des Wasserzeichens:
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', angle: 70 },
+ content: [
+ '...'
+ ]
+};
+```
diff --git a/content/document-definition-object/watermark.es.md b/content/document-definition-object/watermark.es.md
new file mode 100644
index 00000000..0370bcb4
--- /dev/null
+++ b/content/document-definition-object/watermark.es.md
@@ -0,0 +1,59 @@
++++
+sourceDigest = "6282ba69e28519af356033aef8c20701350b760f1926f0c1d592767e5cde5c02"
+title = "Marca de agua"
+description = "Configura marcas de agua en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 2240
+alwaysopen = true
++++
+
+## Propiedades
+
+* `text`: texto de la marca de agua
+* `color`: color del texto
+* `opacity`: opacidad del texto
+* `bold`: estilo en negrita del texto
+* `italics`: estilo en cursiva del texto
+* `fontSize`: tamaño de fuente propio (el tamaño ideal se calcula automáticamente)
+* `angle`: ángulo de rotación del texto
+
+## Ejemplos
+
+Ejemplo de uso básico:
+```js
+var docDefinition = {
+ watermark: 'test watermark',
+ content: [
+ '...'
+ ]
+};
+```
+
+Ejemplo de estilo de fuente:
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },
+ content: [
+ '...'
+ ]
+};
+```
+
+Ejemplo de tamaño de fuente propio:
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', fontSize: 20 },
+ content: [
+ '...'
+ ]
+};
+```
+
+Ejemplo de ángulo de rotación de la marca de agua:
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', angle: 70 },
+ content: [
+ '...'
+ ]
+};
+```
diff --git a/content/document-definition-object/watermark.fr.md b/content/document-definition-object/watermark.fr.md
new file mode 100644
index 00000000..9305698d
--- /dev/null
+++ b/content/document-definition-object/watermark.fr.md
@@ -0,0 +1,59 @@
++++
+title = "Filigrane"
+description = "Configurez un filigrane dans pdfmake 0.3 avec ses propriétés et des exemples."
+weight = 2240
+alwaysopen = true
+sourceDigest = "6282ba69e28519af356033aef8c20701350b760f1926f0c1d592767e5cde5c02"
++++
+
+## Propriétés
+
+* `text` - texte du filigrane
+* `color` - couleur du texte
+* `opacity` - opacité du texte
+* `bold` - style gras du texte
+* `italics` - style italique du texte
+* `fontSize` - taille de police personnalisée du texte (la taille idéale est calculée automatiquement)
+* `angle` - angle de rotation du texte
+
+## Exemples
+
+Exemple d’utilisation simple :
+```js
+var docDefinition = {
+ watermark: 'test watermark',
+ content: [
+ '...'
+ ]
+};
+```
+
+Exemple de style de police :
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },
+ content: [
+ '...'
+ ]
+};
+```
+
+Exemple avec une taille de police personnalisée :
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', fontSize: 20 },
+ content: [
+ '...'
+ ]
+};
+```
+
+Exemple d’angle de rotation du filigrane :
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', angle: 70 },
+ content: [
+ '...'
+ ]
+};
+```
diff --git a/content/document-definition-object/watermark.md b/content/document-definition-object/watermark.md
index 80fef1a9..fa0b520a 100644
--- a/content/document-definition-object/watermark.md
+++ b/content/document-definition-object/watermark.md
@@ -1,11 +1,11 @@
+++
title = "Watermark"
-description = ""
+description = "Configure watermark in pdfmake 0.3 with examples, options and usage notes."
weight = 2240
alwaysopen = true
+++
-#### Properties
+## Properties
* `text` - watermark text
* `color` - color of text
@@ -15,7 +15,7 @@ alwaysopen = true
* `fontSize` - own font size of text (ideal size is calculated automatically)
* `angle` - angle of text rotation
-#### Examples
+## Examples
Example of simple basic usage:
```js
@@ -55,4 +55,4 @@ var docDefinition = {
'...'
]
};
-```
\ No newline at end of file
+```
diff --git a/content/document-definition-object/watermark.pt-br.md b/content/document-definition-object/watermark.pt-br.md
new file mode 100644
index 00000000..2675d145
--- /dev/null
+++ b/content/document-definition-object/watermark.pt-br.md
@@ -0,0 +1,59 @@
++++
+title = "Marca-d'água"
+description = "Configure marcas-d'água de texto no pdfmake 0.3."
+weight = 2240
+alwaysopen = true
+sourceDigest = "6282ba69e28519af356033aef8c20701350b760f1926f0c1d592767e5cde5c02"
++++
+
+## Propriedades
+
+* `text` - texto da marca-d'água
+* `color` - cor do texto
+* `opacity` - opacidade do texto
+* `bold` - estilo em negrito do texto
+* `italics` - estilo em itálico do texto
+* `fontSize` - tamanho próprio da fonte (o tamanho ideal é calculado automaticamente)
+* `angle` - ângulo de rotação do texto
+
+## Exemplos
+
+Exemplo de uso básico simples:
+```js
+var docDefinition = {
+ watermark: 'test watermark',
+ content: [
+ '...'
+ ]
+};
+```
+
+Exemplo de estilo de fonte:
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },
+ content: [
+ '...'
+ ]
+};
+```
+
+Exemplo de tamanho próprio da fonte:
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', fontSize: 20 },
+ content: [
+ '...'
+ ]
+};
+```
+
+Exemplo do ângulo de rotação da marca-d'água:
+```js
+var docDefinition = {
+ watermark: { text: 'test watermark', angle: 70 },
+ content: [
+ '...'
+ ]
+};
+```
diff --git a/content/fonts/_index.de.md b/content/fonts/_index.de.md
new file mode 100644
index 00000000..cd0e8b71
--- /dev/null
+++ b/content/fonts/_index.de.md
@@ -0,0 +1,50 @@
++++
+title = "Schriften und Zeichensatzabdeckung"
+description = "Registriere Schriftfamilien und Varianten in Node.js oder im Browser und wähle Schriften, die die Sprachen deines Dokuments abdecken."
+weight = 25
+sourceDigest = "62a4549bbe46519fb6f576d6cab99d9ed5fc071bddcfb1b77fa75f75df6e785b"
++++
+
+## Schriftstrategie auswählen
+
+| Laufzeit | Schriftquelle | Einrichtung |
+| --- | --- | --- |
+| Node.js | Echte Schriftdateien | `addFonts` mit absoluten Pfaden |
+| Node.js | PDF-Standardschriften | `require('pdfmake/standard-fonts/Helvetica')` |
+| Browser | Gebündeltes Roboto-VFS | `build/vfs_fonts.js` laden |
+| Browser | Benutzerdefiniertes VFS oder URLs | [Eigene Browser-Schriften](/docs/0.3/de/fonts/custom-fonts-client-side/) |
+
+Die Standardschriftfamilie ist `Roboto`. In Node.js werden die Dateien nicht automatisch registriert. Jede Familie sollte `normal`, `bold`, `italics` und `bolditalics` passenden Schriftdaten zuordnen. Ein Stil, der eine nicht registrierte Variante auswählt, kann fehlschlagen, obwohl normaler Text funktioniert.
+
+## Lokale Schriften in Node.js registrieren
+
+Dieses Beispiel setzt voraus, dass sich lizenzierte Schriftdateien in einem Verzeichnis `fonts` neben deinem CommonJS-Skript befinden:
+
+```js
+const path = require('node:path');
+const pdfmake = require('pdfmake');
+const fonts = {
+ Roboto: {
+ normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),
+ bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),
+ italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),
+ bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')
+ }
+};
+const allowed = new Set(Object.values(fonts.Roboto));
+pdfmake.addFonts(fonts);
+pdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));
+pdfmake.setUrlAccessPolicy(() => false);
+```
+
+Die Zulassungsliste eignet sich für unveränderliche Dateien, die deiner Anwendung gehören. Wenn Pfade von nicht vertrauenswürdigen Benutzern kommen, musst du auch symbolische Links und Dateisystemberechtigungen berücksichtigen. Ein Zeichenfolgenpräfix wie `fonts/` ist keine sichere Zugriffsschranke.
+
+## Text auf Glyphenabdeckung abstimmen
+
+Standardschriften haben begrenzte Kodierungen und decken nicht beliebige Unicode-Zeichen ab. Wähle eingebettete Schriften mit den benötigten Glyphen deiner tatsächlichen Sprachen. Eine Unicode-Zeichenfolge allein garantiert nicht, dass die ausgewählte Schrift sie darstellen kann. Prüfe repräsentative Zeichen und alle fetten und kursiven Varianten in erzeugten PDFs.
+
+pdfmake bettet Schriften über PDFKit ein. Binde im Browser nur benötigte Schriftfamilien ein; VFS-Daten erhöhen Download- und Verarbeitungskosten. Beachte die Lizenz zur Weitergabe und Einbettung jeder Schrift.
+
+## Verwandte Anleitungen
+
+[14 Standardschriften](/docs/0.3/de/fonts/standard-14-fonts/) · [Browser-VFS](/docs/0.3/de/fonts/custom-fonts-client-side/vfs/) · [Schrift-URLs](/docs/0.3/de/fonts/custom-fonts-client-side/url/) · [Fehlerbehebung](/docs/0.3/de/guides/troubleshooting/)
diff --git a/content/fonts/_index.es.md b/content/fonts/_index.es.md
new file mode 100644
index 00000000..7276090c
--- /dev/null
+++ b/content/fonts/_index.es.md
@@ -0,0 +1,50 @@
++++
+title = "Fuentes y caracteres"
+description = "Selecciona y registra fuentes para pdfmake 0.3 que cubran los caracteres y las variantes necesarios en tus documentos."
+weight = 25
+sourceDigest = "62a4549bbe46519fb6f576d6cab99d9ed5fc071bddcfb1b77fa75f75df6e785b"
++++
+
+## Elige una estrategia de fuentes
+
+| Entorno | Origen de la fuente | Configuración |
+| --- | --- | --- |
+| Node.js | Archivos de fuente reales | `addFonts` con rutas absolutas |
+| Node.js | Fuentes PDF estándar | `require('pdfmake/standard-fonts/Helvetica')` |
+| Navegador | VFS de Roboto empaquetado | Carga `build/vfs_fonts.js` |
+| Navegador | VFS personalizado o URL | [Fuentes personalizadas para navegador](/docs/0.3/es/fonts/custom-fonts-client-side/) |
+
+La familia predeterminada es `Roboto`. Node.js no registra sus archivos automáticamente. Cada familia debe asignar datos de fuente adecuados a `normal`, `bold`, `italics` y `bolditalics`. Un estilo que seleccione una variante inexistente puede fallar aunque el texto normal se muestre bien.
+
+## Registrar fuentes locales en Node.js
+
+Este ejemplo supone que tienes archivos de fuentes con licencia en un directorio `fonts` junto al script CommonJS:
+
+```js
+const path = require('node:path');
+const pdfmake = require('pdfmake');
+const fonts = {
+ Roboto: {
+ normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),
+ bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),
+ italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),
+ bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')
+ }
+};
+const allowed = new Set(Object.values(fonts.Roboto));
+pdfmake.addFonts(fonts);
+pdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));
+pdfmake.setUrlAccessPolicy(() => false);
+```
+
+La lista de permitidos es adecuada para archivos inmutables que pertenezcan a la aplicación. Si las rutas provienen de usuarios no confiables, ten también en cuenta los enlaces simbólicos y los permisos del sistema de archivos. No consideres seguro un prefijo de cadena como `fonts/`.
+
+## Relacionar el texto con la cobertura de glifos
+
+Las fuentes estándar tienen codificaciones limitadas; no cubren Unicode arbitrario. Elige fuentes incrustadas con los glifos necesarios para los idiomas de tus documentos. Una cadena Unicode por sí sola no garantiza que la fuente seleccionada pueda representarla. Comprueba en los PDF generados los caracteres representativos y todas las variantes de negrita/cursiva.
+
+pdfmake incrusta fuentes mediante PDFKit. Incluye solo las familias de fuentes necesarias para el navegador; los datos VFS aumentan el coste de descarga y análisis. Respeta las licencias de redistribución e incrustación de cada fuente.
+
+## Guías relacionadas
+
+[Las 14 fuentes estándar](/docs/0.3/es/fonts/standard-14-fonts/) · [VFS del navegador](/docs/0.3/es/fonts/custom-fonts-client-side/vfs/) · [URL de fuentes](/docs/0.3/es/fonts/custom-fonts-client-side/url/) · [Solución de problemas](/docs/0.3/es/guides/troubleshooting/)
diff --git a/content/fonts/_index.fr.md b/content/fonts/_index.fr.md
new file mode 100644
index 00000000..5fe845e6
--- /dev/null
+++ b/content/fonts/_index.fr.md
@@ -0,0 +1,50 @@
++++
+title = "Polices et couverture des caractères"
+description = "Enregistrez des familles et variantes de polices dans Node.js ou le navigateur, et choisissez des polices adaptées aux langues de vos documents."
+weight = 25
+sourceDigest = "62a4549bbe46519fb6f576d6cab99d9ed5fc071bddcfb1b77fa75f75df6e785b"
++++
+
+## Choisir une stratégie de polices
+
+| Environnement | Source de polices | Configuration |
+| --- | --- | --- |
+| Node.js | Fichiers de police réels | `addFonts` avec des chemins absolus |
+| Node.js | Polices PDF standard | `require('pdfmake/standard-fonts/Helvetica')` |
+| Navigateur | VFS Roboto intégré | Charger `build/vfs_fonts.js` |
+| Navigateur | VFS personnalisé ou URL | [Polices personnalisées dans le navigateur](/docs/0.3/fr/fonts/custom-fonts-client-side/) |
+
+La famille par défaut est `Roboto`. Node.js n’enregistre pas automatiquement ses fichiers. Pour chaque famille, associez `normal`, `bold`, `italics` et `bolditalics` aux données de police appropriées. Un style qui sélectionne une variante manquante peut échouer même si le texte normal s’affiche.
+
+## Enregistrer des polices locales dans Node.js
+
+Cet exemple suppose que vous possédez les fichiers de police sous licence dans un dossier `fonts` à côté de votre script CommonJS :
+
+```js
+const path = require('node:path');
+const pdfmake = require('pdfmake');
+const fonts = {
+ Roboto: {
+ normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),
+ bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),
+ italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),
+ bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')
+ }
+};
+const allowed = new Set(Object.values(fonts.Roboto));
+pdfmake.addFonts(fonts);
+pdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));
+pdfmake.setUrlAccessPolicy(() => false);
+```
+
+Cette liste d’autorisation convient aux fichiers immuables gérés par l’application. Si les chemins proviennent d’utilisateurs non fiables, tenez également compte des liens symboliques et des permissions du système de fichiers. Une simple vérification de préfixe telle que `fonts/` ne constitue pas une limite de sécurité.
+
+## Faire correspondre le texte aux glyphes disponibles
+
+Les polices standard ont des encodages limités et ne couvrent pas n’importe quel caractère Unicode. Choisissez des polices incorporées qui contiennent les glyphes nécessaires aux langues de vos documents. Une chaîne Unicode ne garantit pas à elle seule que la police choisie saura l’afficher. Vérifiez des caractères représentatifs ainsi que toutes les variantes grasses et italiques dans les PDF générés.
+
+pdfmake incorpore les polices au moyen de PDFKit. Dans le navigateur, n’incluez que les familles nécessaires : les données VFS augmentent les coûts de téléchargement et d’analyse. Respectez les licences de redistribution et d’incorporation de chaque police.
+
+## Guides associés
+
+[Les 14 polices standard](/docs/0.3/fr/fonts/standard-14-fonts/) · [VFS du navigateur](/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/) · [URL de polices](/docs/0.3/fr/fonts/custom-fonts-client-side/url/) · [Dépannage](/docs/0.3/fr/guides/troubleshooting/)
diff --git a/content/fonts/_index.md b/content/fonts/_index.md
index 771cca3f..090892aa 100644
--- a/content/fonts/_index.md
+++ b/content/fonts/_index.md
@@ -1,8 +1,49 @@
+++
-title = "Fonts"
-description = ""
-weight = 15
-alwaysopen = true
+title = "Fonts and character coverage"
+description = "Register font families and variants in Node.js or browsers, and choose fonts that cover your document languages."
+weight = 25
+++
-Usage of fonts in next chapters.
\ No newline at end of file
+## Choose a font strategy
+
+| Runtime | Font source | Setup |
+| --- | --- | --- |
+| Node.js | Real font files | `addFonts` with absolute paths |
+| Node.js | Standard PDF fonts | `require('pdfmake/standard-fonts/Helvetica')` |
+| Browser | Bundled Roboto VFS | Load `build/vfs_fonts.js` |
+| Browser | Custom VFS or URLs | [Custom browser fonts](/docs/0.3/fonts/custom-fonts-client-side/) |
+
+The default family is `Roboto`. Node.js does not automatically register its files. Every family should map `normal`, `bold`, `italics` and `bolditalics` to appropriate font data. A style selecting a missing variant can fail even if normal text works.
+
+## Register local fonts in Node.js
+
+This example assumes you have licensed font files in a `fonts` directory beside your CommonJS script:
+
+```js
+const path = require('node:path');
+const pdfmake = require('pdfmake');
+const fonts = {
+ Roboto: {
+ normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),
+ bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),
+ italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),
+ bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')
+ }
+};
+const allowed = new Set(Object.values(fonts.Roboto));
+pdfmake.addFonts(fonts);
+pdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));
+pdfmake.setUrlAccessPolicy(() => false);
+```
+
+The allowlist is appropriate for application-owned, immutable files. When paths come from untrusted users, also account for symlinks and filesystem permissions. Do not treat a string prefix such as `fonts/` as a secure boundary.
+
+## Match text to glyph coverage
+
+Standard fonts have limited encodings; they do not cover arbitrary Unicode. Choose embedded fonts with the glyphs your actual languages need. A Unicode string alone does not guarantee the selected font can render it. Verify representative characters and all bold/italic variants in generated PDFs.
+
+pdfmake embeds fonts through PDFKit. Include only the browser font families you need; VFS data increases download and parse costs. Respect each font's redistribution and embedding license.
+
+## Related guides
+
+[Standard 14 fonts](/docs/0.3/fonts/standard-14-fonts/) · [Browser VFS](/docs/0.3/fonts/custom-fonts-client-side/vfs/) · [Font URLs](/docs/0.3/fonts/custom-fonts-client-side/url/) · [Troubleshooting](/docs/0.3/guides/troubleshooting/)
diff --git a/content/fonts/_index.pt-br.md b/content/fonts/_index.pt-br.md
new file mode 100644
index 00000000..e692761a
--- /dev/null
+++ b/content/fonts/_index.pt-br.md
@@ -0,0 +1,50 @@
++++
+title = "Fontes e cobertura de caracteres"
+description = "Registre famílias e variantes de fontes no Node.js ou no navegador e escolha fontes que cubram os idiomas do documento."
+weight = 25
+sourceDigest = "62a4549bbe46519fb6f576d6cab99d9ed5fc071bddcfb1b77fa75f75df6e785b"
++++
+
+## Escolha uma estratégia de fontes
+
+| Ambiente | Origem da fonte | Configuração |
+| --- | --- | --- |
+| Node.js | Arquivos de fonte reais | `addFonts` com caminhos absolutos |
+| Node.js | Fontes PDF padrão | `require('pdfmake/standard-fonts/Helvetica')` |
+| Navegador | VFS Roboto incluído | Carregue `build/vfs_fonts.js` |
+| Navegador | VFS personalizado ou URLs | [Fontes personalizadas no navegador](/docs/0.3/pt-br/fonts/custom-fonts-client-side/) |
+
+A família padrão é `Roboto`. O Node.js não registra seus arquivos automaticamente. Cada família deve associar `normal`, `bold`, `italics` e `bolditalics` aos dados de fonte adequados. Selecionar um estilo sem a variante correspondente pode causar uma falha, mesmo quando o texto normal funciona.
+
+## Registre fontes locais no Node.js
+
+Este exemplo pressupõe que você tem arquivos de fonte licenciados em um diretório `fonts` ao lado do script CommonJS:
+
+```js
+const path = require('node:path');
+const pdfmake = require('pdfmake');
+const fonts = {
+ Roboto: {
+ normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),
+ bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),
+ italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),
+ bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')
+ }
+};
+const allowed = new Set(Object.values(fonts.Roboto));
+pdfmake.addFonts(fonts);
+pdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));
+pdfmake.setUrlAccessPolicy(() => false);
+```
+
+A lista de permissões é adequada a arquivos imutáveis controlados pela aplicação. Quando os caminhos vêm de usuários não confiáveis, considere também links simbólicos e permissões do sistema de arquivos. Um prefixo de texto como `fonts/` não define um limite seguro.
+
+## Combine o texto com a cobertura de glifos
+
+As fontes padrão têm codificações limitadas; elas não abrangem Unicode arbitrário. Escolha fontes incorporadas que contenham os glifos necessários aos idiomas usados. Uma cadeia Unicode, por si só, não garante que a fonte selecionada consiga renderizá-la. Verifique caracteres representativos e todas as variantes em negrito e itálico nos PDFs gerados.
+
+O pdfmake incorpora fontes por meio do PDFKit. Inclua no navegador apenas as famílias necessárias; os dados do VFS aumentam o custo de download e análise. Respeite as licenças de redistribuição e incorporação de cada fonte.
+
+## Guias relacionados
+
+[As 14 fontes padrão](/docs/0.3/pt-br/fonts/standard-14-fonts/) · [VFS no navegador](/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/) · [URLs de fontes](/docs/0.3/pt-br/fonts/custom-fonts-client-side/url/) · [Solução de problemas](/docs/0.3/pt-br/guides/troubleshooting/)
diff --git a/content/fonts/custom-fonts-client-side/_index.de.md b/content/fonts/custom-fonts-client-side/_index.de.md
new file mode 100644
index 00000000..a75aee34
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/_index.de.md
@@ -0,0 +1,13 @@
++++
+title = "Eigene Schriften im Browser"
+description = "Verwende eigene Schriften in pdfmake 0.3 in Browseranwendungen."
+weight = 15
+alwaysopen = true
+sourceDigest = "ac4405571a6117ebb522a964e5a17a54067292ff7e11fe6f1321aedbbec503a3"
++++
+
+pdfmake verwendet standardmäßig die Schrift Roboto. Diese Anleitung erklärt, wie du in Browser-Code eigene Schriften mit pdfmake verwendest.
+
+## Es gibt zwei Möglichkeiten:
+* [Verwende ein virtuelles Dateisystem](/docs/0.3/de/fonts/custom-fonts-client-side/vfs/).
+* [Verwende eine Schriftdatei über eine URL (https://- oder http://-Protokoll)](/docs/0.3/de/fonts/custom-fonts-client-side/url/).
diff --git a/content/fonts/custom-fonts-client-side/_index.es.md b/content/fonts/custom-fonts-client-side/_index.es.md
new file mode 100644
index 00000000..cd24569d
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/_index.es.md
@@ -0,0 +1,13 @@
++++
+sourceDigest = "ac4405571a6117ebb522a964e5a17a54067292ff7e11fe6f1321aedbbec503a3"
+title = "Fuentes personalizadas (cliente)"
+description = "Configura fuentes personalizadas en el cliente con pdfmake 0.3 mediante ejemplos, opciones y notas de uso."
+weight = 15
+alwaysopen = true
++++
+
+pdfmake usa Roboto de forma predeterminada. Esta guía explica cómo utilizar tus propias fuentes con pdfmake en el código del cliente.
+
+## Hay dos formas de hacerlo:
+* [usar el sistema de archivos virtual](/docs/0.3/es/fonts/custom-fonts-client-side/vfs/)
+* [usar un archivo de fuente mediante una URL con protocolo https:// o http://](/docs/0.3/es/fonts/custom-fonts-client-side/url/)
diff --git a/content/fonts/custom-fonts-client-side/_index.fr.md b/content/fonts/custom-fonts-client-side/_index.fr.md
new file mode 100644
index 00000000..32a0d27f
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/_index.fr.md
@@ -0,0 +1,14 @@
++++
+title = "Polices personnalisées côté client"
+description = "Configurez vos propres polices dans pdfmake 0.3 côté client, avec des exemples et des options."
+weight = 15
+alwaysopen = true
+sourceDigest = "ac4405571a6117ebb522a964e5a17a54067292ff7e11fe6f1321aedbbec503a3"
++++
+
+pdfmake utilise Roboto par défaut. Ce guide explique comment utiliser vos propres polices avec pdfmake dans du code exécuté côté client.
+
+## Deux méthodes sont possibles
+
+- [Utiliser le système de fichiers virtuel](/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/)
+- [Utiliser un fichier de police via une URL (protocole https:// ou http://)](/docs/0.3/fr/fonts/custom-fonts-client-side/url/)
diff --git a/content/fonts/custom-fonts-client-side/_index.md b/content/fonts/custom-fonts-client-side/_index.md
index 32eec30f..d08ea75b 100644
--- a/content/fonts/custom-fonts-client-side/_index.md
+++ b/content/fonts/custom-fonts-client-side/_index.md
@@ -1,6 +1,6 @@
+++
title = "Custom fonts (client-side)"
-description = ""
+description = "Configure custom fonts (client-side) in pdfmake 0.3 with examples, options and usage notes."
weight = 15
alwaysopen = true
+++
diff --git a/content/fonts/custom-fonts-client-side/_index.pt-br.md b/content/fonts/custom-fonts-client-side/_index.pt-br.md
new file mode 100644
index 00000000..635b5fa7
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/_index.pt-br.md
@@ -0,0 +1,14 @@
++++
+title = "Fontes personalizadas no cliente"
+description = "Configure fontes personalizadas no lado do cliente com o pdfmake 0.3."
+weight = 15
+alwaysopen = true
+sourceDigest = "ac4405571a6117ebb522a964e5a17a54067292ff7e11fe6f1321aedbbec503a3"
++++
+
+Por padrão, o pdfmake usa a fonte Roboto. Este guia explica como usar suas próprias fontes com o pdfmake no código do cliente.
+
+## Há duas opções:
+
+* [usar um sistema de arquivos virtual](/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/)
+* [usar um arquivo de fonte por URL (`https://` ou `http://`)](/docs/0.3/pt-br/fonts/custom-fonts-client-side/url/)
diff --git a/content/fonts/custom-fonts-client-side/url/_index.de.md b/content/fonts/custom-fonts-client-side/url/_index.de.md
new file mode 100644
index 00000000..491e8d51
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/url/_index.de.md
@@ -0,0 +1,61 @@
++++
+title = "Über das URL-Protokoll"
+description = "Binde Schriftdateien über URL-Adressen in pdfmake ein und registriere sie für die Verwendung in der Browseranwendung."
+weight = 16
+alwaysopen = true
+sourceDigest = "bf188fde3eaf272b9276ccee602251c8d4292f0f32bc556e0350e2555a41e3ed"
++++
+
+Um eigene Schriften zu verwenden, sind zwei Schritte erforderlich:
+
+1. Weise `pdfMake.addFonts(...)` in JavaScript deine über eine URL erreichbaren Schriftdateien zu.
+2. Gib die Schrift in der Dokumentdefinition an.
+
+## 1. Weise `pdfMake.addFonts(...)` in JavaScript die Schriftdateien zu
+
+Schriftdateien müssen über eine URL (mit `https://`- oder `http://`-Protokoll) erreichbar sein. Rufe in deinem Code vor `pdfMake.createPdf(docDefinition)` `pdfMake.addFonts(...)` auf, wie im folgenden Beispiel:
+
+```javascript
+var fonts = {
+ yourFontName: {
+ normal: 'https://example.com/fonts/fontFile.ttf',
+ bold: 'https://example.com/fonts/fontFile2.ttf',
+ italics: 'https://example.com/fonts/fontFile3.ttf',
+ bolditalics: 'https://example.com/fonts/fontFile4.ttf'
+ },
+ anotherFontName: {
+
+ },
+
+ // download default Roboto font from unpkg.com
+ Roboto: {
+ normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',
+ bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',
+ italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',
+ bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'
+ },
+
+ // example of usage fonts in collection
+ PingFangSC: {
+ normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],
+ bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],
+ }
+};
+
+pdfMake.addFonts(fonts);
+```
+
+## 2. Gib die Schrift in deiner Dokumentdefinition an
+
+pdfMake verwendet standardmäßig `Roboto`. Damit deine eigene Schrift verwendet wird, musst du sie in der Dokumentdefinition angeben.
+
+Am einfachsten legst du sie global in **`defaultStyle`** fest:
+
+```javascript
+var docDefinition = {
+ content: ['Example document content'],
+ defaultStyle: {
+ font: 'yourFontName'
+ }
+}
+```
diff --git a/content/fonts/custom-fonts-client-side/url/_index.es.md b/content/fonts/custom-fonts-client-side/url/_index.es.md
new file mode 100644
index 00000000..3d5ca525
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/url/_index.es.md
@@ -0,0 +1,61 @@
++++
+sourceDigest = "bf188fde3eaf272b9276ccee602251c8d4292f0f32bc556e0350e2555a41e3ed"
+title = "Mediante protocolo URL"
+description = "Configura fuentes personalizadas mediante el protocolo URL en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 16
+alwaysopen = true
++++
+
+Para usar fuentes personalizadas, se requieren dos pasos:
+
+1. Asigna a `pdfMake.addFonts(...)` los archivos de fuente accesibles mediante URL en JavaScript.
+2. Especifica la fuente en la definición del documento.
+
+## 1. Asigna a `pdfMake.addFonts(...)` los archivos de fuente en JavaScript
+
+Los archivos de fuente deben ser accesibles mediante una URL con protocolo https:// o http://. En tu código, antes de llamar a `pdfMake.createPdf(docDefinition)`, asigna `pdfMake.addFonts(...)` como en el siguiente ejemplo:
+
+```javascript
+var fonts = {
+ yourFontName: {
+ normal: 'https://example.com/fonts/fontFile.ttf',
+ bold: 'https://example.com/fonts/fontFile2.ttf',
+ italics: 'https://example.com/fonts/fontFile3.ttf',
+ bolditalics: 'https://example.com/fonts/fontFile4.ttf'
+ },
+ anotherFontName: {
+
+ },
+
+ // download default Roboto font from unpkg.com
+ Roboto: {
+ normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',
+ bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',
+ italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',
+ bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'
+ },
+
+ // example of usage fonts in collection
+ PingFangSC: {
+ normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],
+ bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],
+ }
+};
+
+pdfMake.addFonts(fonts);
+```
+
+## 2. Especifica la fuente en la definición del documento
+
+pdfMake usa `Roboto` como fuente predeterminada. Por tanto, para usar tu fuente, debes especificarla en el objeto de definición del documento.
+
+La forma más sencilla es establecerla globalmente en `defaultStyle`:
+
+```javascript
+var docDefinition = {
+ content: ['Example document content'],
+ defaultStyle: {
+ font: 'yourFontName'
+ }
+}
+```
diff --git a/content/fonts/custom-fonts-client-side/url/_index.fr.md b/content/fonts/custom-fonts-client-side/url/_index.fr.md
new file mode 100644
index 00000000..b63b694d
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/url/_index.fr.md
@@ -0,0 +1,61 @@
++++
+title = "Par protocole URL"
+description = "Configurez l’utilisation des polices par protocole URL dans pdfmake 0.3 avec des exemples, des options et des notes d’utilisation."
+weight = 16
+alwaysopen = true
+sourceDigest = "bf188fde3eaf272b9276ccee602251c8d4292f0f32bc556e0350e2555a41e3ed"
++++
+
+L’utilisation de polices personnalisées nécessite deux étapes :
+
+1. Transmettez à `pdfMake.addFonts(...)` les fichiers de polices accessibles par URL depuis votre JavaScript.
+2. Spécifiez la police dans la définition du document.
+
+## 1. Transmettre les fichiers de polices à `pdfMake.addFonts(...)` dans votre JavaScript
+
+Les fichiers de polices doivent être accessibles par URL (protocole https:// ou http://). Dans votre code, avant d’appeler `pdfMake.createPdf(docDefinition)`, configurez `pdfMake.addFonts(...)` comme dans l’exemple ci-dessous :
+
+```javascript
+var fonts = {
+ yourFontName: {
+ normal: 'https://example.com/fonts/fontFile.ttf',
+ bold: 'https://example.com/fonts/fontFile2.ttf',
+ italics: 'https://example.com/fonts/fontFile3.ttf',
+ bolditalics: 'https://example.com/fonts/fontFile4.ttf'
+ },
+ anotherFontName: {
+
+ },
+
+ // download default Roboto font from unpkg.com
+ Roboto: {
+ normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',
+ bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',
+ italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',
+ bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'
+ },
+
+ // example of usage fonts in collection
+ PingFangSC: {
+ normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],
+ bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],
+ }
+};
+
+pdfMake.addFonts(fonts);
+```
+
+## 2. Spécifier la police dans la définition du document
+
+pdfMake utilise « Roboto » par défaut. Pour employer une autre police, spécifiez-la dans l’objet de définition du document.
+
+Le plus simple consiste à la définir globalement dans **defaultStyle** :
+
+```javascript
+var docDefinition = {
+ content: ['Example document content'],
+ defaultStyle: {
+ font: 'yourFontName'
+ }
+}
+```
diff --git a/content/fonts/custom-fonts-client-side/url/_index.md b/content/fonts/custom-fonts-client-side/url/_index.md
index be4f2230..3249deb1 100644
--- a/content/fonts/custom-fonts-client-side/url/_index.md
+++ b/content/fonts/custom-fonts-client-side/url/_index.md
@@ -1,6 +1,6 @@
+++
title = "via URL protocol"
-description = ""
+description = "Configure via url protocol in pdfmake 0.3 with examples, options and usage notes."
weight = 16
alwaysopen = true
+++
@@ -23,15 +23,15 @@ var fonts = {
bolditalics: 'https://example.com/fonts/fontFile4.ttf'
},
anotherFontName: {
- (...)
+
},
// download default Roboto font from unpkg.com
Roboto: {
- normal: 'https://unpkg.com/pdfmake@0.3/build/fonts/Roboto/Roboto-Regular.ttf',
- bold: 'https://unpkg.com/pdfmake@0.3/build/fonts/Roboto/Roboto-Medium.ttf',
- italics: 'https://unpkg.com/pdfmake@0.3/build/fonts/Roboto/Roboto-Italic.ttf',
- bolditalics: 'https://unpkg.com/pdfmake@0.3/build/fonts/Roboto/Roboto-MediumItalic.ttf'
+ normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',
+ bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',
+ italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',
+ bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'
},
// example of usage fonts in collection
@@ -52,7 +52,7 @@ The easiest way is to set it globally in the **defaultStyle**
```javascript
var docDefinition = {
- content: (...),
+ content: ['Example document content'],
defaultStyle: {
font: 'yourFontName'
}
diff --git a/content/fonts/custom-fonts-client-side/url/_index.pt-br.md b/content/fonts/custom-fonts-client-side/url/_index.pt-br.md
new file mode 100644
index 00000000..e415a136
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/url/_index.pt-br.md
@@ -0,0 +1,61 @@
++++
+title = "Por URL"
+description = "Configure fontes personalizadas acessíveis por URL no pdfmake 0.3."
+weight = 16
+alwaysopen = true
+sourceDigest = "bf188fde3eaf272b9276ccee602251c8d4292f0f32bc556e0350e2555a41e3ed"
++++
+
+Para usar fontes personalizadas, são necessárias duas etapas:
+
+1. atribua a `pdfMake.addFonts(...)` os arquivos de fonte acessíveis por URL no JavaScript;
+2. especifique a fonte na definição do documento.
+
+## 1. Atribua a `pdfMake.addFonts(...)` os arquivos de fonte no JavaScript
+
+Os arquivos de fonte precisam estar acessíveis por URL (protocolo `https://` ou `http://`). No código, antes de chamar `pdfMake.createPdf(docDefinition)`, configure `pdfMake.addFonts(...)` como no exemplo:
+
+```javascript
+var fonts = {
+ yourFontName: {
+ normal: 'https://example.com/fonts/fontFile.ttf',
+ bold: 'https://example.com/fonts/fontFile2.ttf',
+ italics: 'https://example.com/fonts/fontFile3.ttf',
+ bolditalics: 'https://example.com/fonts/fontFile4.ttf'
+ },
+ anotherFontName: {
+
+ },
+
+ // download default Roboto font from unpkg.com
+ Roboto: {
+ normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',
+ bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',
+ italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',
+ bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'
+ },
+
+ // example of usage fonts in collection
+ PingFangSC: {
+ normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],
+ bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],
+ }
+};
+
+pdfMake.addFonts(fonts);
+```
+
+## 2. Especifique a fonte na definição do documento
+
+O pdfMake usa `Roboto` como fonte padrão. Para usar sua fonte, especifique-a no objeto de definição do documento.
+
+A maneira mais simples é defini-la globalmente em **`defaultStyle`**:
+
+```javascript
+var docDefinition = {
+ content: ['Example document content'],
+ defaultStyle: {
+ font: 'yourFontName'
+ }
+}
+```
diff --git a/content/fonts/custom-fonts-client-side/vfs/_index.de.md b/content/fonts/custom-fonts-client-side/vfs/_index.de.md
new file mode 100644
index 00000000..96711573
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/vfs/_index.de.md
@@ -0,0 +1,61 @@
++++
+title = "Eigene Schriften mit VFS"
+description = "Erstelle ein virtuelles Schriftdateisystem außerhalb von node_modules, registriere Schriftvarianten und verwende eine eigene Familie in Browser-PDFs."
+weight = 15
+sourceDigest = "bea37c79f0184516d0fe4a72f5f5c7b3dfb11fa1b76e3eb1d2b51e41c2128cb2"
++++
+
+## Schriftcontainer erstellen
+
+Verwende lizenzierte Schriftdateien, die die benötigten Sprachen abdecken. Lege sie im Verzeichnis `fonts/` deiner Anwendung ab und erzeuge vom Projektstamm aus eine VFS-Datei:
+
+```sh
+node node_modules/pdfmake/build-vfs.js ./fonts ./vfs_fonts.js
+```
+
+Alle Dateien im angegebenen Verzeichnis werden als Base64-Einträge eingebettet. Lege erzeugte Anwendungsressourcen außerhalb von `node_modules` ab, damit eine Installation deine eigenen Schriften nicht überschreibt. Erzeuge die VFS-Datei neu, sobald sich die Schriftdateien ändern. Für normale [Schriftpfade in Node.js](/docs/0.3/de/fonts/) ist keine Browser-VFS erforderlich.
+
+## Laden und registrieren
+
+Lade die Engine vor dem erzeugten VFS-Skript. Wenn `pdfMake` bereits verfügbar ist, registriert das erzeugte Skript seine Dateien. In einem Bundler importierst du das VFS-Objekt und rufst `addVirtualFileSystem` explizit auf:
+
+```js
+import pdfMake from 'pdfmake/build/pdfmake';
+import customVfs from './vfs_fonts';
+
+pdfMake.addVirtualFileSystem(customVfs);
+pdfMake.addFonts({
+ MyFont: {
+ normal: 'MyFont-Regular.ttf',
+ bold: 'MyFont-Bold.ttf',
+ italics: 'MyFont-Italic.ttf',
+ bolditalics: 'MyFont-BoldItalic.ttf'
+ }
+});
+
+await pdfMake.createPdf({
+ defaultStyle: { font: 'MyFont' },
+ content: ['A document using my font.']
+}).download('document.pdf');
+```
+
+Ersetze die Namen durch die exakten Schlüssel in deiner erzeugten VFS-Datei. Schriftfamiliennamen wie `MyFont` verwendest du in Stilen; Dateischlüssel verweisen auf eingebettete Dateien. Definiere jede verwendete Variante. Du kannst mehrere Varianten derselben Datei zuordnen, wenn das beabsichtigt ist; dadurch entsteht aber keine echte fette oder kursive Schrift.
+
+## Schriftsammlungen
+
+Für unterstützte TrueType-Sammlungen kann ein Deskriptor als `[filename, faceName]` angegeben werden:
+
+```js
+pdfMake.addFonts({
+ PingFangSC: {
+ normal: ['pingfang.ttc', 'PingFangSC-Regular'],
+ bold: ['pingfang.ttc', 'PingFangSC-Semibold']
+ }
+});
+```
+
+Bette die Sammlung ein und verwende gültige Namen für die Schriftschnitte. Dieses Beispiel registriert nur normale und fette Schrift; ergänze kursive Varianten, bevor du sie verwendest.
+
+## Häufige Fehler
+
+Wenn eine Datei nicht gefunden wird, vergleiche den Dateinamen im Deskriptor mit den Schlüsseln der erzeugten VFS-Datei. Wenn eine Schrift nicht definiert ist, vergleiche `defaultStyle.font` mit der Schriftfamilienzuordnung. Wenn Zeichen fehlen, prüfe die Glyphenabdeckung der Schrift. Wenn das Browser-Bundle zu groß ist, entferne nicht verwendete Familien und Dateien aus dem Eingabeverzeichnis der VFS.
diff --git a/content/fonts/custom-fonts-client-side/vfs/_index.es.md b/content/fonts/custom-fonts-client-side/vfs/_index.es.md
new file mode 100644
index 00000000..ab5a9634
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/vfs/_index.es.md
@@ -0,0 +1,61 @@
++++
+sourceDigest = "bea37c79f0184516d0fe4a72f5f5c7b3dfb11fa1b76e3eb1d2b51e41c2128cb2"
+title = "Fuentes personalizadas con VFS"
+description = "Crea un sistema de archivos virtual para fuentes fuera de node_modules, registra variantes de fuente y usa una familia personalizada en los PDF del navegador."
+weight = 15
++++
+
+## Crear el contenedor de fuentes
+
+Usa archivos de fuentes con licencia que cubran los idiomas de destino. Colócalos en el directorio `fonts/` de la aplicación y genera un archivo VFS desde la raíz del proyecto:
+
+```sh
+node node_modules/pdfmake/build-vfs.js ./fonts ./vfs_fonts.js
+```
+
+Esto incrusta **todos los archivos** del directorio proporcionado como entradas Base64. Mantén los recursos generados de la aplicación fuera de `node_modules` para que una instalación no sobrescriba tus fuentes personalizadas. Vuelve a generar el VFS cada vez que cambien los archivos de fuente. El VFS del navegador no es necesario para las [rutas de fuentes normales de Node](/docs/0.3/es/fonts/).
+
+## Cargar y registrar
+
+Carga el motor antes del script VFS generado. El script generado registra sus archivos cuando `pdfMake` ya está disponible. En un empaquetador, importa el objeto VFS y llama explícitamente a `addVirtualFileSystem`:
+
+```js
+import pdfMake from 'pdfmake/build/pdfmake';
+import customVfs from './vfs_fonts';
+
+pdfMake.addVirtualFileSystem(customVfs);
+pdfMake.addFonts({
+ MyFont: {
+ normal: 'MyFont-Regular.ttf',
+ bold: 'MyFont-Bold.ttf',
+ italics: 'MyFont-Italic.ttf',
+ bolditalics: 'MyFont-BoldItalic.ttf'
+ }
+});
+
+await pdfMake.createPdf({
+ defaultStyle: { font: 'MyFont' },
+ content: ['A document using my font.']
+}).download('document.pdf');
+```
+
+Sustituye estos nombres por las claves exactas del VFS generado. Los nombres de familias de fuente como `MyFont` se usan en los estilos; las claves de archivo identifican los archivos incrustados. Define cada variante que uses. Puedes asignar varias variantes a un solo archivo si es intencional, pero eso no crea una variante real en negrita o cursiva.
+
+## Colecciones de fuentes
+
+Para una colección TrueType compatible, el descriptor puede ser `[filename, faceName]`:
+
+```js
+pdfMake.addFonts({
+ PingFangSC: {
+ normal: ['pingfang.ttc', 'PingFangSC-Regular'],
+ bold: ['pingfang.ttc', 'PingFangSC-Semibold']
+ }
+});
+```
+
+Incrusta la colección y usa nombres de variantes válidos. Este ejemplo solo registra normal y negrita; añade las variantes cursivas antes de usarlas.
+
+## Errores frecuentes
+
+Si no se encuentra un archivo, compara el nombre del descriptor con las claves del VFS generado. Si una fuente no está definida, compara `defaultStyle.font` con el mapa de familias. Si faltan caracteres, comprueba la cobertura de glifos de la fuente. Si el paquete del navegador es grande, elimina del directorio de entrada VFS las familias y los archivos que no uses.
diff --git a/content/fonts/custom-fonts-client-side/vfs/_index.fr.md b/content/fonts/custom-fonts-client-side/vfs/_index.fr.md
new file mode 100644
index 00000000..86adefcb
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/vfs/_index.fr.md
@@ -0,0 +1,61 @@
++++
+title = "Polices personnalisées avec le VFS"
+description = "Créez un système de fichiers virtuel en dehors de node_modules, enregistrez des variantes de polices et utilisez une famille personnalisée dans les PDF du navigateur."
+weight = 15
+sourceDigest = "bea37c79f0184516d0fe4a72f5f5c7b3dfb11fa1b76e3eb1d2b51e41c2128cb2"
++++
+
+## Créer le conteneur de polices
+
+Utilisez des fichiers de polices sous licence qui couvrent les langues visées. Placez-les dans le répertoire `fonts/` de votre application et générez un fichier VFS depuis la racine du projet :
+
+```sh
+node node_modules/pdfmake/build-vfs.js ./fonts ./vfs_fonts.js
+```
+
+Tous les fichiers du répertoire fourni sont intégrés sous forme d’entrées base64. Gardez les ressources générées de l’application en dehors de `node_modules` afin qu’une installation ne remplace pas vos polices personnalisées. Régénérez le VFS chaque fois que les fichiers de polices changent. Le VFS du navigateur n’est pas nécessaire pour les [chemins de polices Node.js](/docs/0.3/fr/fonts/).
+
+## Charger et enregistrer les polices
+
+Chargez le moteur avant le script VFS généré. Le script généré enregistre ses fichiers si `pdfMake` est déjà disponible. Avec un bundler, importez l’objet VFS et appelez explicitement `addVirtualFileSystem` :
+
+```js
+import pdfMake from 'pdfmake/build/pdfmake';
+import customVfs from './vfs_fonts';
+
+pdfMake.addVirtualFileSystem(customVfs);
+pdfMake.addFonts({
+ MyFont: {
+ normal: 'MyFont-Regular.ttf',
+ bold: 'MyFont-Bold.ttf',
+ italics: 'MyFont-Italic.ttf',
+ bolditalics: 'MyFont-BoldItalic.ttf'
+ }
+});
+
+await pdfMake.createPdf({
+ defaultStyle: { font: 'MyFont' },
+ content: ['A document using my font.']
+}).download('document.pdf');
+```
+
+Remplacez ces noms par les clés exactes du VFS généré. Les noms de famille, comme `MyFont`, sont utilisés dans les styles ; les clés de fichier désignent les fichiers incorporés. Définissez chaque variante que vous utilisez. Vous pouvez associer plusieurs variantes à un seul fichier si c’est intentionnel, mais cela ne crée pas de véritable graisse ou style italique.
+
+## Collections de polices
+
+Pour une collection TrueType prise en charge, un descripteur peut être un tableau `[filename, faceName]` :
+
+```js
+pdfMake.addFonts({
+ PingFangSC: {
+ normal: ['pingfang.ttc', 'PingFangSC-Regular'],
+ bold: ['pingfang.ttc', 'PingFangSC-Semibold']
+ }
+});
+```
+
+Incorporez la collection et utilisez des noms de faces valides. Cet exemple n’enregistre que les variantes normale et grasse ; ajoutez les variantes italiques avant de les utiliser.
+
+## Erreurs fréquentes
+
+Si un fichier est introuvable, comparez le nom de fichier du descripteur aux clés du VFS généré. Si une police n’est pas définie, comparez `defaultStyle.font` à la famille dans le mappage. Si des caractères manquent, vérifiez la couverture des glyphes de la police. Si le bundle du navigateur est volumineux, retirez du répertoire d’entrée VFS les familles et fichiers inutilisés.
diff --git a/content/fonts/custom-fonts-client-side/vfs/_index.md b/content/fonts/custom-fonts-client-side/vfs/_index.md
index 34f778d1..41ce94c8 100644
--- a/content/fonts/custom-fonts-client-side/vfs/_index.md
+++ b/content/fonts/custom-fonts-client-side/vfs/_index.md
@@ -1,100 +1,60 @@
+++
-title = "via Virtual file system (VFS)"
-description = ""
+title = "Custom fonts with VFS"
+description = "Build a virtual font filesystem outside node_modules, register font variants, and use a custom family in browser PDFs."
weight = 15
-alwaysopen = true
+++
-{{% alert theme="info" %}}This article is only for **client-side usage** (in browser)! For server-side use **real font files**.{{% /alert %}}
+## Build the font container
-## TL;DR
+Use licensed font files that cover your target languages. Place them in your application's `fonts/` directory and generate a VFS file from your project root:
-pdfmake uses a 2nd file: `vfs_fonts.js` for fonts (and other files) you wish to embed into your generated PDFs.
-
-When you run command `node build-vfs.js "./examples/fonts"` in the pdfmake package directory a new `build/vfs_fonts.js` file is created containing an **embedded copy** of all files from the local `examples/fonts` subdirectory.
-
-# Detailed Instructions
-
-To use custom fonts, 3 steps are required:
-
-1. create a new `vfs_fonts.js` file containing your font files
-1. assign `pdfMake.addFonts(...)` in your javascript
-1. specify the font in your doc-definition
-
-
-## 1. create a new `vfs_fonts.js` containing your font files
-
-* Install pdfmake `npm install pdfmake`
-* Go to package directory `./node_modules/pdfmake/`
-* Create the `examples/fonts` subdirectory in your pdfmake code directory, if it doesn't already exist.
-* Copy your fonts (and other files you wish to embed) into the `examples/fonts` subdirectory.
-* Run command `node build-vfs.js "./examples/fonts"`. Or run `node build-vfs.js` to show help.
-* Include your new **build/vfs_fonts.js** file in your code (in the same way you include `pdfmake.js` or `pdfmake.min.js`).
-
-{{% alert theme="info" %}}It is recommended to **move** `vfs_fonts.js` file into your own folder structure (should not be in `node_modules` folder).
-
-The next time you run `npm install` it might get replaced in `node_modules` with the original content.
-
-If your framework caches `node_modules` folder the changes may not take effect. Clear the cache or move `vfs_fonts.js` file outside of `node_modules` folder.{{% /alert %}}
-
-The above steps embeds **all** files from `examples/fonts` (into a local key/value variable `pdfMake.vfs`) - not only fonts. Which means you could put images in there, run `node build-vfs.js "./examples/fonts`, and reference them by filename in your doc-definition object.
-
-You don't need to reference the files in ```examples/fonts``` anymore because all files have been copied to the `vfs_fonts.js`.
+```sh
+node node_modules/pdfmake/build-vfs.js ./fonts ./vfs_fonts.js
+```
-For building script in other languages see [https://github.com/pdfmake/vfs-builders](https://github.com/pdfmake/vfs-builders).
+This embeds **all files** in the supplied directory as base64 entries. Keep generated application assets outside `node_modules` so an install cannot overwrite your custom fonts. Rebuild the VFS whenever the font files change. Browser VFS is unnecessary for normal [Node font paths](/docs/0.3/fonts/).
-## 2. assign `pdfMake.addFonts(...)` in your javascript
+## Load and register
-In your code, before calling `pdfMake.createPdf(docDefinition)` set `pdfMake.addFonts(...)` as in the example below (notice we don't specify paths, just filenames):
+Load the engine before your generated VFS script. The generated script registers its files when `pdfMake` is already available. In a bundler, import the VFS object and call `addVirtualFileSystem` explicitly:
-```javascript
-pdfMake.fonts = {
- yourFontName: {
- normal: 'fontFile.ttf',
- bold: 'fontFile2.ttf',
- italics: 'fontFile3.ttf',
- bolditalics: 'fontFile4.ttf'
- },
- anotherFontName: {
- (...)
- },
+```js
+import pdfMake from 'pdfmake/build/pdfmake';
+import customVfs from './vfs_fonts';
- // example of usage fonts in collection
- PingFangSC: {
- normal: ['pingfang.ttc', 'PingFangSC-Regular'],
- bold: ['pingfang.ttc', 'PingFangSC-Semibold'],
+pdfMake.addVirtualFileSystem(customVfs);
+pdfMake.addFonts({
+ MyFont: {
+ normal: 'MyFont-Regular.ttf',
+ bold: 'MyFont-Bold.ttf',
+ italics: 'MyFont-Italic.ttf',
+ bolditalics: 'MyFont-BoldItalic.ttf'
}
-}
+});
+
+await pdfMake.createPdf({
+ defaultStyle: { font: 'MyFont' },
+ content: ['A document using my font.']
+}).download('document.pdf');
```
-The keys defined here will be used as font names in your doc-definition styles.
+Replace these names with the exact keys in your generated VFS. Font family names such as `MyFont` are the names you use in styles; file keys identify embedded files. Define every variant you use. You can map multiple variants to one file when that is intentional, but this does not create a real bold or italic face.
-Each font-family defines 4 properties: normal, bold, italics and bolditalics referring to appropriate files (the ones you embedded from `examples/fonts/`). You should define all 4 components (even if they all point to the same font file).
+## Font collections
-By default pdfmake uses the following font structure:
+For a supported TrueType collection, a descriptor can be `[filename, faceName]`:
-```javascript
+```js
pdfMake.addFonts({
- Roboto: {
- normal: 'Roboto-Regular.ttf',
- bold: 'Roboto-Medium.ttf',
- italics: 'Roboto-Italic.ttf',
- bolditalics: 'Roboto-MediumItalic.ttf'
+ PingFangSC: {
+ normal: ['pingfang.ttc', 'PingFangSC-Regular'],
+ bold: ['pingfang.ttc', 'PingFangSC-Semibold']
}
});
```
-## 3. specify the font in your doc-definition
-
-pdfMake uses 'Roboto' as default font, so in order to use your font, you should specify it in your doc-definition object.
+Embed the collection and use valid face names. This example registers normal and bold only; add italic variants before using them.
-The easiest way is to set it globally in the **defaultStyle**
+## Common failures
-```javascript
-var docDefinition = {
- content: (...),
- defaultStyle: {
- font: 'yourFontName'
- }
-}
-```
+If a file cannot be found, compare the descriptor filename to the generated VFS keys. If a font is undefined, compare `defaultStyle.font` to the family map. If characters are missing, test the font's glyph coverage. If the browser bundle is large, remove unused families and files from the VFS input directory.
diff --git a/content/fonts/custom-fonts-client-side/vfs/_index.pt-br.md b/content/fonts/custom-fonts-client-side/vfs/_index.pt-br.md
new file mode 100644
index 00000000..a5fdcc1e
--- /dev/null
+++ b/content/fonts/custom-fonts-client-side/vfs/_index.pt-br.md
@@ -0,0 +1,61 @@
++++
+title = "Fontes personalizadas com VFS"
+description = "Crie um sistema virtual de arquivos de fontes fora de node_modules, registre variantes e use a família personalizada em PDFs no navegador."
+weight = 15
+sourceDigest = "bea37c79f0184516d0fe4a72f5f5c7b3dfb11fa1b76e3eb1d2b51e41c2128cb2"
++++
+
+## Crie o contêiner de fontes
+
+Use arquivos de fonte licenciados que cubram os idiomas desejados. Coloque-os no diretório `fonts/` da aplicação e gere um arquivo VFS a partir da raiz do projeto:
+
+```sh
+node node_modules/pdfmake/build-vfs.js ./fonts ./vfs_fonts.js
+```
+
+Isso incorpora **todos os arquivos** do diretório informado como entradas base64. Mantenha os assets gerados da aplicação fora de `node_modules` para que uma instalação não sobrescreva suas fontes personalizadas. Gere o VFS novamente sempre que os arquivos de fonte mudarem. O VFS do navegador é desnecessário para [caminhos de fontes no Node.js](/docs/0.3/pt-br/fonts/).
+
+## Carregue e registre
+
+Carregue o mecanismo antes do script VFS gerado. O script gerado registra os arquivos quando `pdfMake` já está disponível. Em um bundler, importe o objeto VFS e chame `addVirtualFileSystem` explicitamente:
+
+```js
+import pdfMake from 'pdfmake/build/pdfmake';
+import customVfs from './vfs_fonts';
+
+pdfMake.addVirtualFileSystem(customVfs);
+pdfMake.addFonts({
+ MyFont: {
+ normal: 'MyFont-Regular.ttf',
+ bold: 'MyFont-Bold.ttf',
+ italics: 'MyFont-Italic.ttf',
+ bolditalics: 'MyFont-BoldItalic.ttf'
+ }
+});
+
+await pdfMake.createPdf({
+ defaultStyle: { font: 'MyFont' },
+ content: ['A document using my font.']
+}).download('document.pdf');
+```
+
+Substitua os nomes pelas chaves exatas do VFS gerado. Nomes de família, como `MyFont`, são usados nos estilos; as chaves de arquivo identificam os arquivos incorporados. Defina todas as variantes que usar. É possível mapear várias variantes para um mesmo arquivo quando isso for intencional, mas isso não cria uma face realmente em negrito ou itálico.
+
+## Coleções de fontes
+
+Para uma coleção TrueType compatível, o descritor pode ser `[filename, faceName]`:
+
+```js
+pdfMake.addFonts({
+ PingFangSC: {
+ normal: ['pingfang.ttc', 'PingFangSC-Regular'],
+ bold: ['pingfang.ttc', 'PingFangSC-Semibold']
+ }
+});
+```
+
+Incorpore a coleção e use nomes de face válidos. Este exemplo registra apenas as variantes normal e negrito; adicione as variantes itálicas antes de usá-las.
+
+## Problemas comuns
+
+Se um arquivo não for encontrado, compare o nome no descritor com as chaves do VFS gerado. Se uma fonte estiver indefinida, compare `defaultStyle.font` com o mapa de famílias. Se faltarem caracteres, verifique a cobertura de glifos da fonte. Se o bundle do navegador ficar grande, remova do diretório de entrada do VFS as famílias e os arquivos que não são usados.
diff --git a/content/fonts/icons.de.md b/content/fonts/icons.de.md
new file mode 100644
index 00000000..a4c3547e
--- /dev/null
+++ b/content/fonts/icons.de.md
@@ -0,0 +1,44 @@
++++
+title = "Symbole"
+description = "Verwende Icon-Schriften in pdfmake 0.3 mit einer registrierten Schriftfamilie und einem eigenen Stil."
+weight = 15
+alwaysopen = true
+sourceDigest = "389a424f61b90f95836afb77e66802f06435c1b671de3c8b4054b385699698b1"
++++
+
+- Erstelle eine Schriftdatei bei http://fontello.com/ oder einem ähnlichen Dienst und lade sie herunter.
+
+- Erzeuge aus der Schriftdatei (zum Beispiel `.ttf`) eine `vfs_fonts.js`-Datei (siehe [eigene Schriften verwenden](/docs/0.3/de/fonts/custom-fonts-client-side/vfs/)).
+
+- Registriere die Schrift in JavaScript (es kann ausreichen, nur `normal` zu definieren):
+ ```js
+ pdfMake.fonts = {
+ Fontello: {
+ normal: 'fontello.ttf',
+ bold: 'fontello.ttf',
+ italics: 'fontello.ttf',
+ bolditalics: 'fontello.ttf'
+ }
+ }
+ ```
+
+- Lege einen Stil für Symbole an:
+` icon: {
+ font: 'Fontello'
+ }`
+- Erstelle einen Textabsatz:
+`
+ { text: '', style: 'icon' }, //icon wifi`
+- Verwende als Text das Zeichen aus den Kommentaren in `fontello-codes.css`, nicht den Escape-Wert.
+
+---
+
+Wenn du ein Symbol innerhalb eines Textes brauchst, musst du Textobjekte verschachteln:
+
+```
+ text: [
+ { text: '', style: 'icon' }, //icon gift
+ " my present"
+ ]
+```
+Dies gibt Folgendes aus: „[gift icon] my present“.
diff --git a/content/fonts/icons.es.md b/content/fonts/icons.es.md
new file mode 100644
index 00000000..eb154587
--- /dev/null
+++ b/content/fonts/icons.es.md
@@ -0,0 +1,44 @@
++++
+sourceDigest = "389a424f61b90f95836afb77e66802f06435c1b671de3c8b4054b385699698b1"
+title = "Iconos"
+description = "Configura iconos en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 15
+alwaysopen = true
++++
+
+- Crea una fuente en http://fontello.com/ o un servicio similar y descárgala.
+
+- A partir del archivo de fuente (por ejemplo, `.ttf`), crea el archivo `vfs_fonts.js` (consulta cómo [usar fuentes personalizadas](/docs/0.3/es/fonts/custom-fonts-client-side/vfs/)).
+
+- Define la fuente en JavaScript (puede bastar con definir `normal`):
+ ```js
+ pdfMake.fonts = {
+ Fontello: {
+ normal: 'fontello.ttf',
+ bold: 'fontello.ttf',
+ italics: 'fontello.ttf',
+ bolditalics: 'fontello.ttf'
+ }
+ }
+ ```
+
+- Añade un estilo para los iconos:
+` icon: {
+ font: 'Fontello'
+ }`
+- Crea un párrafo de texto:
+`
+ { text: '', style: 'icon' }, //icon wifi`
+- Usa como texto el carácter copiado de los comentarios de `fontello-codes.css` (no el valor escapado).
+
+---
+
+Si necesitas un icono dentro del texto, anida objetos de texto:
+
+```
+ text: [
+ { text: '', style: 'icon' }, //icon gift
+ " my present"
+ ]
+```
+Esto produce: «[icono de regalo] my present».
diff --git a/content/fonts/icons.fr.md b/content/fonts/icons.fr.md
new file mode 100644
index 00000000..7aeb622e
--- /dev/null
+++ b/content/fonts/icons.fr.md
@@ -0,0 +1,44 @@
++++
+title = "Icônes"
+description = "Configurez des icônes dans pdfmake 0.3 à l’aide de polices personnalisées."
+weight = 15
+alwaysopen = true
+sourceDigest = "389a424f61b90f95836afb77e66802f06435c1b671de3c8b4054b385699698b1"
++++
+
+- Créez une police sur http://fontello.com/ ou un site similaire, puis téléchargez-la.
+
+- À partir du fichier de police (par exemple `.ttf`), créez un fichier `vfs_fonts.js` (voir [comment utiliser des polices personnalisées](/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/)).
+
+- Déclarez la police en JavaScript (il peut suffire de définir `normal`) :
+ ```js
+ pdfMake.fonts = {
+ Fontello: {
+ normal: 'fontello.ttf',
+ bold: 'fontello.ttf',
+ italics: 'fontello.ttf',
+ bolditalics: 'fontello.ttf'
+ }
+ }
+ ```
+
+- Ajoutez un style pour les icônes :
+` icon: {
+ font: 'Fontello'
+ }`
+- Créez un paragraphe de texte :
+`
+ { text: '', style: 'icon' }, //icon wifi`
+- Copiez le caractère indiqué dans les commentaires de `fontello-codes.css` (et non sa valeur échappée).
+
+---
+
+Pour insérer une icône au sein d’un texte, imbriquez des objets de texte :
+
+```
+ text: [
+ { text: '', style: 'icon' }, //icon gift
+ " my present"
+ ]
+```
+Cela affiche « [icône cadeau] my present ».
diff --git a/content/fonts/icons.md b/content/fonts/icons.md
index 05886a74..82db8049 100644
--- a/content/fonts/icons.md
+++ b/content/fonts/icons.md
@@ -1,13 +1,13 @@
+++
title = "Icons"
-description = ""
+description = "Configure icons in pdfmake 0.3 with examples, options and usage notes."
weight = 15
alwaysopen = true
+++
- make a font at http://fontello.com/ or something and download it
-- from font file (for example .ttf) create vfs_fonts.js file (see how to [use custom fonts](/docs/0.3/fonts/custom-fonts-client-side/#1-create-a-new-vfs-fonts-js-containing-your-font-files))
+- from font file (for example .ttf) create vfs_fonts.js file (see how to [use custom fonts](/docs/0.3/fonts/custom-fonts-client-side/vfs/))
- define font in js (just defining normal might be enough):
```js
diff --git a/content/fonts/icons.pt-br.md b/content/fonts/icons.pt-br.md
new file mode 100644
index 00000000..765480f1
--- /dev/null
+++ b/content/fonts/icons.pt-br.md
@@ -0,0 +1,44 @@
++++
+title = "Ícones"
+description = "Configure ícones no pdfmake 0.3 com exemplos, opções e orientações de uso."
+weight = 15
+alwaysopen = true
+sourceDigest = "389a424f61b90f95836afb77e66802f06435c1b671de3c8b4054b385699698b1"
++++
+
+- Crie uma fonte em http://fontello.com/ ou em um serviço semelhante e baixe-a.
+
+- A partir do arquivo de fonte (por exemplo, `.ttf`), crie o arquivo `vfs_fonts.js` (consulte como [usar fontes personalizadas](/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/)).
+
+- Defina a fonte em JavaScript (talvez baste definir `normal`):
+ ```js
+ pdfMake.fonts = {
+ Fontello: {
+ normal: 'fontello.ttf',
+ bold: 'fontello.ttf',
+ italics: 'fontello.ttf',
+ bolditalics: 'fontello.ttf'
+ }
+ }
+ ```
+
+- Adicione um estilo para os ícones:
+` icon: {
+ font: 'Fontello'
+ }`
+- Crie um parágrafo de texto:
+`
+ { text: '', style: 'icon' }, //icon wifi`
+- Copie o texto dos comentários de `fontello-codes.css` (não o valor com escape).
+
+---
+
+Se precisar de um ícone dentro do texto, aninhe objetos de texto:
+
+```
+ text: [
+ { text: '', style: 'icon' }, //icon gift
+ " my present"
+ ]
+```
+O resultado será: "[ícone de presente] meu presente"
diff --git a/content/fonts/standard-14-fonts.de.md b/content/fonts/standard-14-fonts.de.md
new file mode 100644
index 00000000..a5cf950d
--- /dev/null
+++ b/content/fonts/standard-14-fonts.de.md
@@ -0,0 +1,83 @@
++++
+title = "Die 14 Standardschriften"
+description = "Verwende Standardschriftfamilien von PDF in Node.js und Browser-Bundles; beachte die begrenzte Zeichenkodierung."
+weight = 15
+alwaysopen = true
+sourceDigest = "b405dc401267671e4bd1aafcd6aa77046caff49e1ae6ed0019ab6d8f16361c4e"
++++
+
+PDF enthält [14 Standardschriften](http://www.enfocus.com/manuals/ReferenceGuide/PS/18/enUS/en-us/common/pse/concept/c_aa1044513.html).
+
+**Zeichenabdeckung:** Standardschriften verwenden begrenzte Kodierungen und unterstützen nicht beliebige Unicode-Zeichen. Verwende für mehrsprachige Dokumente eingebettete Schriften und prüfe die benötigten Glyphen.
+
+## Verwendung von pdfmake auf dem Server
+
+**Anwendungsbeispiel:**
+```js
+var fonts = {
+ Courier: {
+ normal: 'Courier',
+ bold: 'Courier-Bold',
+ italics: 'Courier-Oblique',
+ bolditalics: 'Courier-BoldOblique'
+ },
+ Helvetica: {
+ normal: 'Helvetica',
+ bold: 'Helvetica-Bold',
+ italics: 'Helvetica-Oblique',
+ bolditalics: 'Helvetica-BoldOblique'
+ },
+ Times: {
+ normal: 'Times-Roman',
+ bold: 'Times-Bold',
+ italics: 'Times-Italic',
+ bolditalics: 'Times-BoldItalic'
+ },
+ Symbol: {
+ normal: 'Symbol'
+ },
+ ZapfDingbats: {
+ normal: 'ZapfDingbats'
+ }
+};
+
+var pdfmake = require('pdfmake');
+pdfmake.addFonts(fonts);
+
+var docDefinition = {
+ content: ['First paragraph', 'Another paragraph'],
+ defaultStyle: {
+ font: 'Helvetica'
+ }
+};
+
+var pdf = pdfmake.createPdf(docDefinition);
+pdf.write('test.pdf').then(() => {
+ // success event
+}, err => {
+ console.error(err);
+});
+```
+
+## Verwendung von pdfmake im Browser
+
+Bundles mit Standardschriften sind im Verzeichnis `build/standard-fonts/` des pdfmake-Pakets verfügbar. Binde das Bundle jeder benötigten Schriftfamilie **nach** `pdfmake.min.js` ein. Jedes Bundle registriert seine Schriften automatisch bei `pdfMake`.
+
+Beispiel für Helvetica:
+
+```html
+
+
+
+```
+
+Verfügbare Bundles: `Courier.js`, `Helvetica.js`, `Times.js`, `Symbol.js` und `ZapfDingbats.js`. Setze `defaultStyle.font` auf eine registrierte Schriftfamilie, wie oben gezeigt.
diff --git a/content/fonts/standard-14-fonts.es.md b/content/fonts/standard-14-fonts.es.md
new file mode 100644
index 00000000..3151bdc6
--- /dev/null
+++ b/content/fonts/standard-14-fonts.es.md
@@ -0,0 +1,83 @@
++++
+sourceDigest = "b405dc401267671e4bd1aafcd6aa77046caff49e1ae6ed0019ab6d8f16361c4e"
+title = "Las 14 fuentes estándar"
+description = "Usa familias de fuentes PDF estándar en Node.js y en los paquetes para navegador, con codificaciones de caracteres limitadas."
+weight = 15
+alwaysopen = true
++++
+
+PDF incluye las [14 fuentes estándar](http://www.enfocus.com/manuals/ReferenceGuide/PS/18/enUS/en-us/common/pse/concept/c_aa1044513.html).
+
+**Cobertura de caracteres:** las fuentes estándar usan codificaciones limitadas y no admiten Unicode arbitrario. Para documentos multilingües, usa fuentes incrustadas y prueba los glifos que necesites.
+
+## Uso de pdfmake en el servidor
+
+**Ejemplo de uso:**
+```js
+var fonts = {
+ Courier: {
+ normal: 'Courier',
+ bold: 'Courier-Bold',
+ italics: 'Courier-Oblique',
+ bolditalics: 'Courier-BoldOblique'
+ },
+ Helvetica: {
+ normal: 'Helvetica',
+ bold: 'Helvetica-Bold',
+ italics: 'Helvetica-Oblique',
+ bolditalics: 'Helvetica-BoldOblique'
+ },
+ Times: {
+ normal: 'Times-Roman',
+ bold: 'Times-Bold',
+ italics: 'Times-Italic',
+ bolditalics: 'Times-BoldItalic'
+ },
+ Symbol: {
+ normal: 'Symbol'
+ },
+ ZapfDingbats: {
+ normal: 'ZapfDingbats'
+ }
+};
+
+var pdfmake = require('pdfmake');
+pdfmake.addFonts(fonts);
+
+var docDefinition = {
+ content: ['First paragraph', 'Another paragraph'],
+ defaultStyle: {
+ font: 'Helvetica'
+ }
+};
+
+var pdf = pdfmake.createPdf(docDefinition);
+pdf.write('test.pdf').then(() => {
+ // success event
+}, err => {
+ console.error(err);
+});
+```
+
+## Uso de pdfmake en el cliente
+
+Los paquetes de fuentes estándar están disponibles en el directorio `build/standard-fonts/` del paquete pdfmake. Incluye el paquete de cada familia que necesites **después** de `pdfmake.min.js`. Cada paquete registra automáticamente sus fuentes en `pdfMake`.
+
+Por ejemplo, para usar Helvetica:
+
+```html
+
+
+
+```
+
+Los paquetes disponibles son `Courier.js`, `Helvetica.js`, `Times.js`, `Symbol.js` y `ZapfDingbats.js`. Asigna `defaultStyle.font` a una familia de fuentes registrada, como se muestra arriba.
diff --git a/content/fonts/standard-14-fonts.fr.md b/content/fonts/standard-14-fonts.fr.md
new file mode 100644
index 00000000..d8305ff2
--- /dev/null
+++ b/content/fonts/standard-14-fonts.fr.md
@@ -0,0 +1,84 @@
++++
+title = "Les 14 polices standard"
+description = "Utilisez les familles de polices PDF standard dans les bundles Node.js et navigateur, avec leurs encodages de caractères limités."
+weight = 15
+alwaysopen = true
+sourceDigest = "b405dc401267671e4bd1aafcd6aa77046caff49e1ae6ed0019ab6d8f16361c4e"
++++
+
+Les PDF contiennent [14 polices standard](http://www.enfocus.com/manuals/ReferenceGuide/PS/18/enUS/en-us/common/pse/concept/c_aa1044513.html).
+
+**Couverture des caractères :** les polices standard utilisent des encodages limités et ne prennent pas en charge l’ensemble des caractères Unicode. Pour les documents multilingues, utilisez des polices incorporées et testez les glyphes nécessaires.
+
+## Utiliser pdfmake côté serveur
+
+**Exemple d’utilisation :**
+```js
+var fonts = {
+ Courier: {
+ normal: 'Courier',
+ bold: 'Courier-Bold',
+ italics: 'Courier-Oblique',
+ bolditalics: 'Courier-BoldOblique'
+ },
+ Helvetica: {
+ normal: 'Helvetica',
+ bold: 'Helvetica-Bold',
+ italics: 'Helvetica-Oblique',
+ bolditalics: 'Helvetica-BoldOblique'
+ },
+ Times: {
+ normal: 'Times-Roman',
+ bold: 'Times-Bold',
+ italics: 'Times-Italic',
+ bolditalics: 'Times-BoldItalic'
+ },
+ Symbol: {
+ normal: 'Symbol'
+ },
+ ZapfDingbats: {
+ normal: 'ZapfDingbats'
+ }
+};
+
+var pdfmake = require('pdfmake');
+pdfmake.addFonts(fonts);
+
+var docDefinition = {
+ content: ['First paragraph', 'Another paragraph'],
+ defaultStyle: {
+ font: 'Helvetica'
+ }
+};
+
+var pdf = pdfmake.createPdf(docDefinition);
+pdf.write('test.pdf').then(() => {
+ // success event
+}, err => {
+ console.error(err);
+});
+```
+
+
+## Utiliser pdfmake côté client
+
+Les bundles des polices standard sont disponibles dans le répertoire `build/standard-fonts/` du package pdfmake. Incluez le bundle de chaque famille dont vous avez besoin **après** `pdfmake.min.js`. Chaque bundle enregistre automatiquement ses polices auprès de `pdfMake`.
+
+Par exemple, pour utiliser Helvetica :
+
+```html
+
+
+
+```
+
+Les bundles disponibles sont `Courier.js`, `Helvetica.js`, `Times.js`, `Symbol.js` et `ZapfDingbats.js`. Définissez `defaultStyle.font` avec le nom d’une famille enregistrée, comme dans l’exemple ci-dessus.
diff --git a/content/fonts/standard-14-fonts.md b/content/fonts/standard-14-fonts.md
index cb6dec9e..eb19ffca 100644
--- a/content/fonts/standard-14-fonts.md
+++ b/content/fonts/standard-14-fonts.md
@@ -1,13 +1,13 @@
+++
title = "Standard 14 fonts"
-description = ""
+description = "Use standard PDF font families in Node.js and browser bundles, with limited character encodings."
weight = 15
alwaysopen = true
+++
PDF contains [standard 14 fonts](http://www.enfocus.com/manuals/ReferenceGuide/PS/18/enUS/en-us/common/pse/concept/c_aa1044513.html).
-**Attention!** This fonts supports only **ANSI** code page (only english characters)!
+**Character coverage:** Standard fonts use limited encodings and do not support arbitrary Unicode. Use embedded fonts for multilingual documents and test the glyphs you need.
## Use in pdfmake on the server side
@@ -66,8 +66,8 @@ Standard font bundles are available in the pdfmake package's `build/standard-fon
For example, to use Helvetica:
```html
-
-
+
+
+
+
+```
+
+Os bundles disponíveis são `Courier.js`, `Helvetica.js`, `Times.js`, `Symbol.js` e `ZapfDingbats.js`. Defina `defaultStyle.font` como uma família registrada, conforme mostrado acima.
diff --git a/content/getting-started/_index.de.md b/content/getting-started/_index.de.md
new file mode 100644
index 00000000..940ef133
--- /dev/null
+++ b/content/getting-started/_index.de.md
@@ -0,0 +1,71 @@
++++
+sourceDigest = "f826ae5d92343da4bd37277368403475123e72ebb5b4d8d754e27ac70adb8ab1"
+title = "Einrichtung"
+description = "Installiere pdfmake 0.3 für Node.js oder den Browser und wähle die passende Promise-basierte Ausgabe."
+weight = 10
++++
+
+## Die Laufzeit entscheidet
+
+- [Node.js](/docs/0.3/de/getting-started/server-side/): PDF-Dateien schreiben oder Bytes an eine API-Antwort übergeben.
+- [Browser](/docs/0.3/de/getting-started/client-side/): Vorschau öffnen oder eine PDF herunterladen.
+
+Beide Laufzeiten verwenden dieselbe [Dokumentdefinition](/docs/0.3/de/document-definition-object/), benötigen aber unterschiedliche Imports und Schriftregistrierung. Vermische die Einrichtung nicht mit älteren `PdfPrinter`-Beispielen. Die Ausgabe in 0.3 ist Promise-basiert: Fehler mit `await` und `try/catch` behandeln.
+
+[Die erste PDF](/docs/0.3/de/learn/first-pdf/) zeigt den gesamten Ablauf.
+
+## Vor dem Start
+
+Verwende die Dokumentation passend zur installierten Version (`npm ls pdfmake`). Beginne mit einem minimalen Beispiel, bevor du eigene Schriften, entfernte Bilder oder Tabellenlayouts hinzufügst. Wenn du eine Anwendung mit Version 0.1/0.2 betreibst, folge der [Migrationsanleitung](/docs/0.3/de/migration-from-0.1/).
+
+## JavaScript und TypeScript
+
+Dieser Entwicklungszweig liefert eigene TypeScript-Deklarationen mit der Library aus und trennt Node- und Browser-APIs. Installiere für den lokal gepackten Zweig TypeScript ohne `@types/pdfmake`. Das veröffentlichte npm-Paket 0.3.12 benötigt weiterhin passende Community-Typen; die hier beschriebenen nativen Deklarationen und die Vorabvalidierung sind noch unveröffentlicht. Geprüft wird mit TypeScript 5.9.3.
+
+```sh
+npm install pdfmake@0.3.12
+npm install --save-dev typescript@~5.9.3
+```
+
+Node.js: Speichere dies als `document.mts`. Mit `NodeNext` bildet der Compiler die tatsächlichen Node-Imports ab. Eine CommonJS-Datei mit `.cts` kann stattdessen mit `import pdfmake = require("pdfmake")` beginnen. Verlasse dich nicht auf benannte Laufzeit-Imports.
+
+```json
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "strict": true,
+ "esModuleInterop": true
+ }
+}
+```
+
+```ts
+import pdfmake from 'pdfmake';
+import type { TDocumentDefinitions } from 'pdfmake/interfaces.js';
+import { strict as assert } from 'node:assert';
+
+pdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });
+pdfmake.setUrlAccessPolicy(() => false);
+pdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));
+const definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };
+const buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();
+assert.equal(buffer.subarray(0, 5).toString(), '%PDF-');
+```
+
+Browser-Bundler: Importiere den fertigen Browser-Einstieg und registriere das VFS direkt. Verwende `module: "ESNext"` und `moduleResolution: "Bundler"` im Bundler-Projekt; diese Optionen benötigen einen Bundler und sind nicht zum direkten Ausführen der Ausgabe in Node gedacht.
+
+```ts
+import pdfmake from 'pdfmake/build/pdfmake.js';
+import vfs from 'pdfmake/build/vfs_fonts.js';
+import type { TDocumentDefinitions } from 'pdfmake/interfaces';
+
+pdfmake.addVirtualFileSystem(vfs);
+const definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;
+export async function render(): Promise {
+ return pdfmake.createPdf(definition).getBlob();
+}
+```
+
+Typen bieten Vervollständigung und Prüfungen beim Kompilieren. Sie validieren kein externes JSON und garantieren kein erfolgreiches Layout. Die eigenen Deklarationen unterscheiden Node-`write` von Browser-`getBlob`, `download`, `open` und `print`. Verwende für Bundler explizite Browser-Imports. Playground und eingebettete Beispiele prüfen TypeScript lokal vor dem Rendern. Siehe [Dokumentvalidierung](/docs/0.3/de/guides/errors/) für Laufzeitprüfungen.
diff --git a/content/getting-started/_index.es.md b/content/getting-started/_index.es.md
new file mode 100644
index 00000000..706672dd
--- /dev/null
+++ b/content/getting-started/_index.es.md
@@ -0,0 +1,69 @@
++++
+title = "Instalación"
+description = "Instala pdfmake 0.3 en Node.js o el navegador y elige una salida basada en Promises para tu aplicación."
+weight = 10
+sourceDigest = "f826ae5d92343da4bd37277368403475123e72ebb5b4d8d754e27ac70adb8ab1"
++++
+
+## Elige el entorno de ejecución
+
+- [Node.js](/docs/0.3/es/getting-started/server-side/): escribir un archivo, devolver un Buffer desde una API o consumir un flujo.
+- [Navegador](/docs/0.3/es/getting-started/client-side/): descargar, abrir, imprimir u obtener un Blob.
+
+Ambos entornos usan la misma [definición del documento](/docs/0.3/es/document-definition-object/). Los métodos de salida devuelven Promises. La carga de fuentes es distinta entre archivos de Node y contenedores de fuentes del navegador.
+
+## Antes de empezar
+
+Usa la documentación correspondiente a la versión instalada (`npm ls pdfmake`). Empieza con un ejemplo mínimo antes de añadir fuentes personalizadas, imágenes remotas o distribuciones de tablas. Para aplicaciones 0.1/0.2, sigue la [guía de migración](/docs/0.3/es/migration-from-0.1/).
+
+## JavaScript y TypeScript
+
+Esta rama de desarrollo incluye declaraciones TypeScript propias con la biblioteca y separa las API de Node y navegador. Para el paquete construido localmente, instala TypeScript sin `@types/pdfmake`. El paquete npm publicado 0.3.12 aún necesita sus tipos comunitarios correspondientes; las declaraciones nativas y la validación previa descritas aquí todavía no están publicadas. El compilador comprobado es TypeScript 5.9.3.
+
+```sh
+npm install pdfmake@0.3.12
+npm install --save-dev typescript@~5.9.3
+```
+
+Node.js: guarda este ejemplo como `document.mts`. `NodeNext` permite al compilador seguir la resolución real de Node. Un archivo CommonJS `.cts` puede empezar con `import pdfmake = require("pdfmake")`. Evita depender de imports de ejecución con nombre.
+
+```json
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "strict": true,
+ "esModuleInterop": true
+ }
+}
+```
+
+```ts
+import pdfmake from 'pdfmake';
+import type { TDocumentDefinitions } from 'pdfmake/interfaces.js';
+import { strict as assert } from 'node:assert';
+
+pdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });
+pdfmake.setUrlAccessPolicy(() => false);
+pdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));
+const definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };
+const buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();
+assert.equal(buffer.subarray(0, 5).toString(), '%PDF-');
+```
+
+Con un bundler para el navegador, importa el punto de entrada precompilado y registra directamente el VFS. Usa `module: "ESNext"` y `moduleResolution: "Bundler"`; estas opciones requieren un bundler y no sirven para ejecutar la salida directamente en Node.
+
+```ts
+import pdfmake from 'pdfmake/build/pdfmake.js';
+import vfs from 'pdfmake/build/vfs_fonts.js';
+import type { TDocumentDefinitions } from 'pdfmake/interfaces';
+
+pdfmake.addVirtualFileSystem(vfs);
+const definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;
+export async function render(): Promise {
+ return pdfmake.createPdf(definition).getBlob();
+}
+```
+
+Los tipos ofrecen autocompletado y comprobaciones al compilar. No validan JSON externo ni garantizan el diseño. Las declaraciones incluidas distinguen `write` en Node de `getBlob`, `download`, `open` y `print` en el navegador. Usa imports explícitos del navegador con bundlers. El playground y los ejemplos integrados comprueban TypeScript localmente antes del renderizado. Consulta la [validación de documentos](/docs/0.3/es/guides/errors/) para las comprobaciones en ejecución.
diff --git a/content/getting-started/_index.fr.md b/content/getting-started/_index.fr.md
new file mode 100644
index 00000000..9d3aca0a
--- /dev/null
+++ b/content/getting-started/_index.fr.md
@@ -0,0 +1,69 @@
++++
+title = "Bien démarrer"
+description = "Choisissez Node.js ou le navigateur, enregistrez les polices et générez votre premier PDF avec pdfmake 0.3."
+weight = 10
+sourceDigest = "f826ae5d92343da4bd37277368403475123e72ebb5b4d8d754e27ac70adb8ab1"
++++
+
+## Choisir votre environnement
+
+- [Node.js](/docs/0.3/fr/getting-started/server-side/) : écrire un fichier, renvoyer un Buffer depuis une API ou consommer un flux.
+- [Navigateur](/docs/0.3/fr/getting-started/client-side/) : télécharger, ouvrir, imprimer ou obtenir un Blob.
+
+Les deux environnements utilisent la même [définition de document](/docs/0.3/fr/document-definition-object/). Les méthodes de sortie renvoient des Promises. Le chargement des polices diffère entre les fichiers Node et les conteneurs de polices du navigateur.
+
+## Avant de commencer
+
+Consultez la documentation correspondant à la version installée (`npm ls pdfmake`). Commencez par un exemple minimal avant d’ajouter des polices personnalisées, des images distantes ou des dispositions de tableau. Pour les applications 0.1/0.2, suivez le [guide de migration](/docs/0.3/fr/migration-from-0.1/).
+
+## JavaScript et TypeScript
+
+Cette branche de développement fournit ses propres déclarations TypeScript avec la bibliothèque et sépare les API Node et navigateur. Pour le paquet construit localement, installez TypeScript sans `@types/pdfmake`. Le paquet npm publié 0.3.12 nécessite encore les types communautaires correspondants ; les déclarations natives et la validation préalable présentées ici ne sont pas encore publiées. Le compilateur vérifié est TypeScript 5.9.3.
+
+```sh
+npm install pdfmake@0.3.12
+npm install --save-dev typescript@~5.9.3
+```
+
+Node.js : enregistrez cet exemple dans `document.mts`. `NodeNext` permet au compilateur de suivre la résolution réelle de Node. Un fichier CommonJS `.cts` peut commencer par `import pdfmake = require("pdfmake")`. Évitez les imports nommés à l’exécution.
+
+```json
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "strict": true,
+ "esModuleInterop": true
+ }
+}
+```
+
+```ts
+import pdfmake from 'pdfmake';
+import type { TDocumentDefinitions } from 'pdfmake/interfaces.js';
+import { strict as assert } from 'node:assert';
+
+pdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });
+pdfmake.setUrlAccessPolicy(() => false);
+pdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));
+const definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };
+const buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();
+assert.equal(buffer.subarray(0, 5).toString(), '%PDF-');
+```
+
+Avec un bundler pour navigateur, importez le point d’entrée précompilé et enregistrez directement le VFS. Utilisez `module: "ESNext"` et `moduleResolution: "Bundler"` ; ces options nécessitent un bundler et ne conviennent pas à une sortie exécutée directement par Node.
+
+```ts
+import pdfmake from 'pdfmake/build/pdfmake.js';
+import vfs from 'pdfmake/build/vfs_fonts.js';
+import type { TDocumentDefinitions } from 'pdfmake/interfaces';
+
+pdfmake.addVirtualFileSystem(vfs);
+const definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;
+export async function render(): Promise {
+ return pdfmake.createPdf(definition).getBlob();
+}
+```
+
+Les types apportent la complétion et les vérifications à la compilation. Ils ne valident pas le JSON externe et ne garantissent pas la mise en page. Les déclarations fournies distinguent `write` dans Node de `getBlob`, `download`, `open` et `print` dans le navigateur. Utilisez les imports explicites du navigateur pour les bundlers. Le playground et les exemples intégrés vérifient TypeScript localement avant le rendu. Consultez la [validation des documents](/docs/0.3/fr/guides/errors/) pour les contrôles à l’exécution.
diff --git a/content/getting-started/_index.md b/content/getting-started/_index.md
index f8d9fb90..8e454f66 100644
--- a/content/getting-started/_index.md
+++ b/content/getting-started/_index.md
@@ -1,8 +1,68 @@
+++
title = "Getting started"
-description = ""
+description = "Choose Node.js or browser setup, register fonts, and generate your first pdfmake 0.3 PDF."
weight = 10
-alwaysopen = true
+++
-Pdfmake is runnable in browser (client-side) and in Node.js (server-side). Usages are described in next chapters.
\ No newline at end of file
+## Choose your runtime
+
+- [Node.js](/docs/0.3/getting-started/server-side/): write a file, return a Buffer from an API, or consume a stream.
+- [Browser](/docs/0.3/getting-started/client-side/): download, open, print, or obtain a Blob.
+
+Both runtimes use the same [document definition](/docs/0.3/document-definition-object/). Output helpers return Promises. Font loading differs between Node files and browser font containers.
+
+## Before you begin
+
+Use the docs for your installed version (`npm ls pdfmake`). Start with a minimal example before adding custom fonts, remote images or table layouts. For 0.1/0.2 applications, follow the [migration guide](/docs/0.3/migration-from-0.1/).
+
+## JavaScript and TypeScript
+
+This development branch bundles native TypeScript declarations with the library, with separate Node and browser APIs. Install TypeScript without `@types/pdfmake` when using the locally packed branch. The published npm package 0.3.12 still needs its matching community types; the native declarations and preflight API described here are unreleased. The tested compiler is TypeScript 5.9.3.
+
+```sh
+npm install pdfmake@0.3.12
+npm install --save-dev typescript@~5.9.3
+```
+
+Node.js: save this as `document.mts`. Use `NodeNext` so the compiler models actual Node imports. A CommonJS `.cts` file can instead start with `import pdfmake = require("pdfmake")`. Avoid relying on named runtime imports.
+
+```json
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "strict": true,
+ "esModuleInterop": true
+ }
+}
+```
+
+```ts
+import pdfmake from 'pdfmake';
+import type { TDocumentDefinitions } from 'pdfmake/interfaces.js';
+import { strict as assert } from 'node:assert';
+
+pdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });
+pdfmake.setUrlAccessPolicy(() => false);
+pdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));
+const definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };
+const buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();
+assert.equal(buffer.subarray(0, 5).toString(), '%PDF-');
+```
+
+Browser bundlers: import the prebuilt browser entry and register the VFS directly. Use `module: "ESNext"` and `moduleResolution: "Bundler"` in your bundler project; these options require a bundler and are not a configuration for directly running Node output.
+
+```ts
+import pdfmake from 'pdfmake/build/pdfmake.js';
+import vfs from 'pdfmake/build/vfs_fonts.js';
+import type { TDocumentDefinitions } from 'pdfmake/interfaces';
+
+pdfmake.addVirtualFileSystem(vfs);
+const definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;
+export async function render(): Promise {
+ return pdfmake.createPdf(definition).getBlob();
+}
+```
+
+Types provide completion and compile-time checks. They do not validate external JSON or guarantee a successful layout. The bundled declarations distinguish Node `write` from browser `getBlob`, `download`, `open` and `print`. Use explicit browser imports for bundlers. The playground and inline examples check TypeScript locally before rendering. See [document validation](/docs/0.3/guides/errors/) for runtime checks.
diff --git a/content/getting-started/_index.pt-br.md b/content/getting-started/_index.pt-br.md
new file mode 100644
index 00000000..0ee72bf4
--- /dev/null
+++ b/content/getting-started/_index.pt-br.md
@@ -0,0 +1,69 @@
++++
+title = "Primeiros passos"
+description = "Escolha a configuração para Node.js ou navegador, registre fontes e gere seu primeiro PDF com o pdfmake 0.3."
+weight = 10
+sourceDigest = "f826ae5d92343da4bd37277368403475123e72ebb5b4d8d754e27ac70adb8ab1"
++++
+
+## Escolha o ambiente de execução
+
+- [Node.js](/docs/0.3/pt-br/getting-started/server-side/): grave um arquivo, retorne um Buffer de uma API ou consuma um stream.
+- [Navegador](/docs/0.3/pt-br/getting-started/client-side/): baixe, abra, imprima ou obtenha um Blob.
+
+Os dois ambientes usam a mesma [definição de documento](/docs/0.3/pt-br/document-definition-object/). Os métodos de saída retornam Promises. O carregamento de fontes é diferente entre arquivos no Node.js e contêineres de fontes no navegador.
+
+## Antes de começar
+
+Consulte a documentação da versão instalada (`npm ls pdfmake`). Comece com um exemplo mínimo antes de adicionar fontes personalizadas, imagens remotas ou layouts de tabela. Em aplicações 0.1/0.2, siga o [guia de migração](/docs/0.3/pt-br/migration-from-0.1/).
+
+## JavaScript e TypeScript
+
+Esta branch de desenvolvimento inclui declarações TypeScript próprias na biblioteca e separa as APIs do Node e do navegador. Para o pacote gerado localmente, instale TypeScript sem `@types/pdfmake`. O pacote npm publicado 0.3.12 ainda exige os tipos comunitários correspondentes; as declarações nativas e a validação prévia descritas aqui ainda não foram publicadas. O compilador verificado é TypeScript 5.9.3.
+
+```sh
+npm install pdfmake@0.3.12
+npm install --save-dev typescript@~5.9.3
+```
+
+Node.js: salve este exemplo como `document.mts`. `NodeNext` permite ao compilador seguir a resolução real do Node. Um arquivo CommonJS `.cts` pode começar com `import pdfmake = require("pdfmake")`. Evite depender de imports nomeados em tempo de execução.
+
+```json
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "strict": true,
+ "esModuleInterop": true
+ }
+}
+```
+
+```ts
+import pdfmake from 'pdfmake';
+import type { TDocumentDefinitions } from 'pdfmake/interfaces.js';
+import { strict as assert } from 'node:assert';
+
+pdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });
+pdfmake.setUrlAccessPolicy(() => false);
+pdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));
+const definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };
+const buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();
+assert.equal(buffer.subarray(0, 5).toString(), '%PDF-');
+```
+
+Com um bundler para navegador, importe a entrada pré-compilada e registre o VFS diretamente. Use `module: "ESNext"` e `moduleResolution: "Bundler"`; essas opções exigem um bundler e não servem para executar a saída diretamente no Node.
+
+```ts
+import pdfmake from 'pdfmake/build/pdfmake.js';
+import vfs from 'pdfmake/build/vfs_fonts.js';
+import type { TDocumentDefinitions } from 'pdfmake/interfaces';
+
+pdfmake.addVirtualFileSystem(vfs);
+const definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;
+export async function render(): Promise {
+ return pdfmake.createPdf(definition).getBlob();
+}
+```
+
+Os tipos oferecem preenchimento automático e verificações na compilação. Eles não validam JSON externo nem garantem o layout. As declarações incluídas distinguem `write` no Node de `getBlob`, `download`, `open` e `print` no navegador. Use imports explícitos do navegador com bundlers. O playground e os exemplos integrados verificam TypeScript localmente antes da renderização. Consulte a [validação de documentos](/docs/0.3/pt-br/guides/errors/) para verificações em tempo de execução.
diff --git a/content/getting-started/client-side/_index.de.md b/content/getting-started/client-side/_index.de.md
new file mode 100644
index 00000000..222894c3
--- /dev/null
+++ b/content/getting-started/client-side/_index.de.md
@@ -0,0 +1,62 @@
++++
+title = "Browser-Schnellstart"
+description = "Lade pdfmake 0.3 und das Schrift-Bundle und lade dann ein PDF als Reaktion auf eine Benutzeraktion herunter."
+weight = 11
+sourceDigest = "01745b0861d3d7c78def82206112d36936e7fb0d4c4486fbdd53bc321fbb1530"
++++
+
+## Browserressourcen installieren und kopieren
+
+```sh
+npm install pdfmake@0.3.12
+```
+
+Kopiere `node_modules/pdfmake/build/pdfmake.min.js` und `node_modules/pdfmake/build/vfs_fonts.js` neben diese HTML-Datei. Stelle das Verzeichnis über deinen lokalen Entwicklungsserver bereit.
+
+## PDF erzeugen
+
+```html
+
+
+My first PDF
+
+
+
+
+
+
+
+
+```
+
+Lade die Engine **vor** ihrem Schrift-Bundle. `vfs_fonts.js` stellt die standardmäßigen Roboto-Schriftdateien bereit. Für dieses Beispiel benötigst du keine serverseitige Rendering-API. Wenn das Promise von `download()` erfüllt wird, wurde der Download gestartet; es bestätigt nicht, dass der Benutzer die Datei gespeichert hat.
+
+## Einen Bundler verwenden
+
+```js
+import pdfMake from 'pdfmake/build/pdfmake';
+import pdfFonts from 'pdfmake/build/vfs_fonts';
+
+pdfMake.addVirtualFileSystem(pdfFonts);
+await pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');
+```
+
+Dieser Code wird innerhalb des Moduls oder eines asynchronen Event-Handlers deiner Anwendung ausgeführt. Wenn du ein SSR-Framework nutzt, darf der Import nicht in serverseitig ausgeführten Code geraten. Verwende in TypeScript Typdefinitionen, die zu deiner installierten pdfmake-Version passen; Typen machen eine ältere Laufzeit nicht mit der 0.3-API kompatibel.
+
+## Öffnen und drucken
+
+Rufe `open()` oder `print()` während einer Benutzeraktion auf, um Popup-Blocker zu vermeiden. Wenn du zuerst Daten abrufst, öffne synchron ein Fenster und übergib es anschließend an die Ausgabemethode. Siehe [Browsermethoden](/docs/0.3/de/getting-started/client-side/methods/).
+
+## Nächste Schritte
+
+[Eigene Schriften](/docs/0.3/de/fonts/custom-fonts-client-side/) · [Browsermethoden](/docs/0.3/de/getting-started/client-side/methods/) · [Fehlerbehebung](/docs/0.3/de/guides/troubleshooting/)
diff --git a/content/getting-started/client-side/_index.es.md b/content/getting-started/client-side/_index.es.md
new file mode 100644
index 00000000..a8482bd4
--- /dev/null
+++ b/content/getting-started/client-side/_index.es.md
@@ -0,0 +1,62 @@
++++
+sourceDigest = "01745b0861d3d7c78def82206112d36936e7fb0d4c4486fbdd53bc321fbb1530"
+title = "Inicio rápido en el navegador"
+description = "Carga pdfmake 0.3 y su paquete de fuentes y descarga un PDF mediante una acción del usuario."
+weight = 11
++++
+
+## Instalar y copiar los recursos del navegador
+
+```sh
+npm install pdfmake@0.3.12
+```
+
+Copia `node_modules/pdfmake/build/pdfmake.min.js` y `node_modules/pdfmake/build/vfs_fonts.js` junto a este archivo HTML. Sirve el directorio con tu servidor de desarrollo local.
+
+## Generar un PDF
+
+```html
+
+
+My first PDF
+
+
+
+
+
+
+
+
+```
+
+Carga el motor **antes** del paquete de fuentes. `vfs_fonts.js` proporciona los archivos de la fuente Roboto predeterminada. Este ejemplo no requiere una API de renderizado en el servidor. Si la Promise de `download()` se resuelve, significa que se inició la descarga; no confirma que el usuario guardase el archivo.
+
+## Usar un empaquetador
+
+```js
+import pdfMake from 'pdfmake/build/pdfmake';
+import pdfFonts from 'pdfmake/build/vfs_fonts';
+
+pdfMake.addVirtualFileSystem(pdfFonts);
+await pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');
+```
+
+Este código se ejecuta dentro del módulo de la aplicación o de un controlador de eventos asíncrono. Si usas un marco SSR, mantén las importaciones fuera de la ejecución exclusiva del servidor. Para TypeScript, utiliza declaraciones compatibles con la versión de pdfmake instalada; los tipos no hacen que un entorno de ejecución anterior admita la API 0.3.
+
+## Abrir e imprimir
+
+Llama a `open()` o `print()` como respuesta a un gesto del usuario para evitar que el navegador bloquee ventanas emergentes. Si primero cargas datos, abre una ventana de forma síncrona y pásala después al método de salida. Consulta los [métodos del navegador](/docs/0.3/es/getting-started/client-side/methods/).
+
+## Pasos siguientes
+
+[Fuentes personalizadas](/docs/0.3/es/fonts/custom-fonts-client-side/) · [Métodos del navegador](/docs/0.3/es/getting-started/client-side/methods/) · [Solución de problemas](/docs/0.3/es/guides/troubleshooting/)
diff --git a/content/getting-started/client-side/_index.fr.md b/content/getting-started/client-side/_index.fr.md
new file mode 100644
index 00000000..0e882c00
--- /dev/null
+++ b/content/getting-started/client-side/_index.fr.md
@@ -0,0 +1,62 @@
++++
+title = "Démarrage rapide dans le navigateur"
+description = "Chargez pdfmake 0.3 et son lot de polices, puis téléchargez un PDF à la suite d’une action de l’utilisateur."
+weight = 11
+sourceDigest = "01745b0861d3d7c78def82206112d36936e7fb0d4c4486fbdd53bc321fbb1530"
++++
+
+## Installer et copier les ressources du navigateur
+
+```sh
+npm install pdfmake@0.3.12
+```
+
+Copiez `node_modules/pdfmake/build/pdfmake.min.js` et `node_modules/pdfmake/build/vfs_fonts.js` à côté de ce fichier HTML. Servez le dossier avec votre serveur de développement local.
+
+## Générer un PDF
+
+```html
+
+
+My first PDF
+
+
+
+
+
+
+
+
+```
+
+Chargez le moteur **avant** son lot de polices. `vfs_fonts.js` fournit les fichiers Roboto par défaut. Cet exemple ne nécessite pas d’API de rendu côté serveur. La résolution de `download()` signifie que le téléchargement a été lancé ; elle ne confirme pas que l’utilisateur a enregistré le fichier.
+
+## Utiliser un bundler
+
+```js
+import pdfMake from 'pdfmake/build/pdfmake';
+import pdfFonts from 'pdfmake/build/vfs_fonts';
+
+pdfMake.addVirtualFileSystem(pdfFonts);
+await pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');
+```
+
+Ce code s’exécute dans le module de votre application ou dans un gestionnaire d’événement asynchrone. Avec un framework SSR, ne chargez pas ces imports côté serveur. Pour TypeScript, utilisez des déclarations compatibles avec la version pdfmake installée ; les types ne permettent pas à une ancienne version d’exécuter l’API 0.3.
+
+## Ouvrir et imprimer
+
+Appelez `open()` ou `print()` à la suite d’une action de l’utilisateur pour éviter le blocage des fenêtres surgissantes. Si vous récupérez d’abord des données, ouvrez une fenêtre de façon synchrone, puis transmettez-la à la méthode de sortie. Consultez [Méthodes du navigateur](/docs/0.3/fr/getting-started/client-side/methods/).
+
+## Étapes suivantes
+
+[Polices personnalisées](/docs/0.3/fr/fonts/custom-fonts-client-side/) · [Méthodes du navigateur](/docs/0.3/fr/getting-started/client-side/methods/) · [Dépannage](/docs/0.3/fr/guides/troubleshooting/)
diff --git a/content/getting-started/client-side/_index.md b/content/getting-started/client-side/_index.md
index 91f1792b..a184d4e2 100644
--- a/content/getting-started/client-side/_index.md
+++ b/content/getting-started/client-side/_index.md
@@ -1,124 +1,61 @@
+++
-title = "Client-side"
-description = ""
+title = "Browser quickstart"
+description = "Load pdfmake 0.3 and its font bundle, then download a PDF from a user action."
weight = 11
-alwaysopen = true
+++
-To begin in browser with the default configuration, you should include two files:
-
-* **pdfmake.min.js**,
-* **vfs_fonts.js** - default font definition (it contains Roboto, you can however [use custom fonts instead](/docs/0.3/fonts/custom-fonts-client-side/))
-
-```html
-
-
-
-
- my first pdfmake example
-
-
-
-
-...
-```
-
-### Library sources
-
-#### CDN
-
-* [https://app.unpkg.com/pdfmake](https://app.unpkg.com/pdfmake@0.3/files/build)
- * `https://unpkg.com/pdfmake@0.3/build/pdfmake.min.js`
- * `https://unpkg.com/pdfmake@0.3/build/vfs_fonts.js`
-* [https://www.jsdelivr.com/package/npm/pdfmake](https://www.jsdelivr.com/package/npm/pdfmake?tab=files&path=build)
- * `https://cdn.jsdelivr.net/npm/pdfmake@0.3/build/pdfmake.min.js`
- * `https://cdn.jsdelivr.net/npm/pdfmake@0.3/build/vfs_fonts.js`
-* https://cdnjs.com/libraries/pdfmake (The service is currently unavailable.)
-
-#### npm
+## Install and copy the browser assets
+```sh
+npm install pdfmake@0.3.12
```
-npm install pdfmake
-```
-
-Files for client-side is available here:
-
-* `require('pdfmake/build/pdfmake.js');`
-* `require('pdfmake/build/vfs_fonts.js');`
-Using javascript frameworks:
+Copy `node_modules/pdfmake/build/pdfmake.min.js` and `node_modules/pdfmake/build/vfs_fonts.js` next to this HTML file. Serve the directory with your local development server.
-```js
-var pdfMake = require('pdfmake/build/pdfmake.js');
-require('pdfmake/build/vfs_fonts.js');
-```
-
-or
-
-```js
-var pdfMake = require('pdfmake/build/pdfmake.js');
-var pdfFonts = require('pdfmake/build/vfs_fonts.js');
-pdfMake.addVirtualFileSystem(pdfFonts);
-```
+## Generate a PDF
-or
+```html
+
+
+My first PDF
+
+
+
+
+
+
+
+
+```
+
+Load the engine **before** its font bundle. `vfs_fonts.js` supplies the default Roboto font files. You do not need a server-side rendering API for this example. `download()` resolving means the download has been initiated; it does not confirm a user saved the file.
+
+## Use a bundler
```js
-import pdfMake from "pdfmake/build/pdfmake";
-import "pdfmake/build/vfs_fonts";
-```
+import pdfMake from 'pdfmake/build/pdfmake';
+import pdfFonts from 'pdfmake/build/vfs_fonts';
-or
-
-```js
-import pdfMake from "pdfmake/build/pdfmake";
-import pdfFonts from "pdfmake/build/vfs_fonts";
pdfMake.addVirtualFileSystem(pdfFonts);
+await pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');
```
-TypeScript:
-
-```js
-import * as pdfMake from "pdfmake/build/pdfmake";
-import * as pdfFonts from 'pdfmake/build/vfs_fonts';
-
-(pdfMake).addVirtualFileSystem(pdfFonts);
-```
-
-For Ionic and Angular see [issue](https://github.com/bpampuch/pdfmake/issues/1030).
+This code runs inside your application's module or async event handler. Keep imports out of server-only execution when using SSR frameworks. For TypeScript, use declarations compatible with your installed pdfmake version; types do not make an older runtime support the 0.3 API.
-If a **Cannot read property 'TYPED_ARRAY_SUPPORT' of undefined** error is thrown, add this to webpack config:
-```
-exclude: [ /node_modules/, /pdfmake.js$/ ]
-```
-(see [issue](https://github.com/bpampuch/pdfmake/issues/1100#issuecomment-336728521))
+## Open and print
+Call `open()` or `print()` from a user gesture to avoid popup blocking. When fetching data first, open a window synchronously and pass it to the output method afterward. See [browser methods](/docs/0.3/getting-started/client-side/methods/).
-#### Composer
-
-You can use asset-packagist.org service, see: [npm-asset/pdfmake](https://asset-packagist.org/package/npm-asset/pdfmake)
-
-Example of composer.json:
-```json
-{
- "require": {
- "npm-asset/pdfmake": "^0.3.0"
- },
- "replace": {
- "npm-asset/pdfkit": "*",
- "npm-asset/linebreak": "*",
- "npm-asset/svg-to-pdfkit": "*",
- "npm-asset/xmldoc": "*"
- },
- "repositories": [
- {
- "type": "composer",
- "url": "https://asset-packagist.org"
- }
- ]
-}
-```
-
-#### Repository
+## Next steps
-Copy them directly from the build directory from the repository. Otherwise you can always [build it version 0.3.x from sources](https://github.com/bpampuch/pdfmake#building-from-sources).
+[Custom fonts](/docs/0.3/fonts/custom-fonts-client-side/) · [Browser methods](/docs/0.3/getting-started/client-side/methods/) · [Troubleshooting](/docs/0.3/guides/troubleshooting/)
diff --git a/content/getting-started/client-side/_index.pt-br.md b/content/getting-started/client-side/_index.pt-br.md
new file mode 100644
index 00000000..bf718640
--- /dev/null
+++ b/content/getting-started/client-side/_index.pt-br.md
@@ -0,0 +1,62 @@
++++
+title = "Início rápido no navegador"
+description = "Carregue o pdfmake 0.3 e seu bundle de fontes e, em seguida, baixe um PDF em resposta a uma ação do usuário."
+weight = 11
+sourceDigest = "01745b0861d3d7c78def82206112d36936e7fb0d4c4486fbdd53bc321fbb1530"
++++
+
+## Instale e copie os assets do navegador
+
+```sh
+npm install pdfmake@0.3.12
+```
+
+Copie `node_modules/pdfmake/build/pdfmake.min.js` e `node_modules/pdfmake/build/vfs_fonts.js` para junto deste arquivo HTML. Sirva o diretório usando seu servidor local de desenvolvimento.
+
+## Gere um PDF
+
+```html
+
+
+My first PDF
+
+
+
+
+
+
+
+
+```
+
+Carregue o mecanismo **antes** do bundle de fontes. `vfs_fonts.js` fornece os arquivos da fonte Roboto padrão. Este exemplo não exige uma API de renderização no servidor. A resolução de `download()` significa que o download foi iniciado; ela não confirma que o usuário salvou o arquivo.
+
+## Use um bundler
+
+```js
+import pdfMake from 'pdfmake/build/pdfmake';
+import pdfFonts from 'pdfmake/build/vfs_fonts';
+
+pdfMake.addVirtualFileSystem(pdfFonts);
+await pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');
+```
+
+Este código é executado dentro do módulo da aplicação ou de um manipulador de eventos assíncrono. Ao usar frameworks com SSR, mantenha as importações fora da execução exclusiva do servidor. No TypeScript, use declarações compatíveis com a versão instalada do pdfmake; os tipos não fazem uma versão antiga do runtime aceitar a API 0.3.
+
+## Abra e imprima
+
+Chame `open()` ou `print()` a partir de uma ação do usuário para evitar bloqueios de pop-up. Se primeiro buscar dados, abra uma janela de forma síncrona e passe-a ao método de saída depois. Consulte os [métodos do navegador](/docs/0.3/pt-br/getting-started/client-side/methods/).
+
+## Próximas etapas
+
+[Fontes personalizadas](/docs/0.3/pt-br/fonts/custom-fonts-client-side/) · [Métodos do navegador](/docs/0.3/pt-br/getting-started/client-side/methods/) · [Solução de problemas](/docs/0.3/pt-br/guides/troubleshooting/)
diff --git a/content/getting-started/client-side/examples.de.md b/content/getting-started/client-side/examples.de.md
new file mode 100644
index 00000000..fd2ac5e3
--- /dev/null
+++ b/content/getting-started/client-side/examples.de.md
@@ -0,0 +1,9 @@
++++
+title = "Beispiele"
+description = "Sieh dir Beispiele für die Verwendung von pdfmake 0.3 an."
+weight = 12
+alwaysopen = true
+sourceDigest = "564c62eedf95371a7703dae15a84350aa49933c3eb606a9e4ed6cdb4541f38d7"
++++
+
+Sieh dir den [Playground](/docs/0.3/de/playground/) und die [Beispiele](https://github.com/bpampuch/pdfmake/tree/master/examples) an.
diff --git a/content/getting-started/client-side/examples.es.md b/content/getting-started/client-side/examples.es.md
new file mode 100644
index 00000000..a9b8b3c6
--- /dev/null
+++ b/content/getting-started/client-side/examples.es.md
@@ -0,0 +1,9 @@
++++
+sourceDigest = "564c62eedf95371a7703dae15a84350aa49933c3eb606a9e4ed6cdb4541f38d7"
+title = "Ejemplos"
+description = "Configura ejemplos en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 12
+alwaysopen = true
++++
+
+Consulta el [entorno de pruebas](/docs/0.3/es/playground/) y los [ejemplos](https://github.com/bpampuch/pdfmake/tree/master/examples).
diff --git a/content/getting-started/client-side/examples.fr.md b/content/getting-started/client-side/examples.fr.md
new file mode 100644
index 00000000..67babd72
--- /dev/null
+++ b/content/getting-started/client-side/examples.fr.md
@@ -0,0 +1,9 @@
++++
+title = "Exemples"
+description = "Découvrez des exemples pour pdfmake 0.3 et essayez-les dans le playground."
+weight = 12
+alwaysopen = true
+sourceDigest = "564c62eedf95371a7703dae15a84350aa49933c3eb606a9e4ed6cdb4541f38d7"
++++
+
+Consultez [le playground](/docs/0.3/fr/playground/) et les [exemples](https://github.com/bpampuch/pdfmake/tree/master/examples).
diff --git a/content/getting-started/client-side/examples.md b/content/getting-started/client-side/examples.md
index fa4dc867..8b68b417 100644
--- a/content/getting-started/client-side/examples.md
+++ b/content/getting-started/client-side/examples.md
@@ -1,8 +1,8 @@
+++
title = "Examples"
-description = ""
+description = "Configure examples in pdfmake 0.3 with examples, options and usage notes."
weight = 12
alwaysopen = true
+++
-Check out [the playground](http://bpampuch.github.io/pdfmake/playground.html) and [examples](https://github.com/bpampuch/pdfmake/tree/master/examples).
\ No newline at end of file
+Check out [the playground](/docs/0.3/playground/) and [examples](https://github.com/bpampuch/pdfmake/tree/master/examples).
diff --git a/content/getting-started/client-side/examples.pt-br.md b/content/getting-started/client-side/examples.pt-br.md
new file mode 100644
index 00000000..856407f3
--- /dev/null
+++ b/content/getting-started/client-side/examples.pt-br.md
@@ -0,0 +1,9 @@
++++
+title = "Exemplos"
+description = "Explore exemplos de uso do pdfmake 0.3 no navegador."
+weight = 12
+alwaysopen = true
+sourceDigest = "564c62eedf95371a7703dae15a84350aa49933c3eb606a9e4ed6cdb4541f38d7"
++++
+
+Confira o [playground](/docs/0.3/pt-br/playground/) e os [exemplos](https://github.com/bpampuch/pdfmake/tree/master/examples).
diff --git a/content/getting-started/client-side/methods.de.md b/content/getting-started/client-side/methods.de.md
new file mode 100644
index 00000000..c1927a3a
--- /dev/null
+++ b/content/getting-started/client-side/methods.de.md
@@ -0,0 +1,77 @@
++++
+title = "Ausgabemethoden im Browser"
+description = "Lade PDFs herunter, öffne, drucke oder erhalte PDF-Bytes und Blobs mit Promise-basierten Browsermethoden in pdfmake 0.3."
+weight = 11
+sourceDigest = "9223df7c21e72e445796980b101e0e55c3724007a9f7b3f7e0888260b13476f1"
++++
+
+## Dokument erstellen
+
+Nachdem du [Engine und Schriften geladen hast](/docs/0.3/de/getting-started/client-side/):
+
+```js
+const output = pdfMake.createPdf(docDefinition, options);
+```
+
+Das optionale zweite Argument enthält [Rendering-Optionen](/docs/0.3/de/options/). `createPdf` gibt sofort einen Ausgabe-Wrapper zurück. Ausgabemethoden liefern Promises; behandle deren Ablehnungen.
+
+## Ausgabe auswählen
+
+| Methode | Ergebnis | Verhalten |
+| --- | --- | --- |
+| `download(filename?)` | `undefined` | Startet einen Download; Standarddateiname ist `file.pdf` |
+| `open(window?)` | `undefined` | Öffnet das erzeugte PDF in einem neuen oder angegebenen Fenster |
+| `print(window?)` | `undefined` | Öffnet ein PDF mit Druckaktion; das Verhalten hängt vom Viewer ab |
+| `getBlob()` | `Blob` | Binärdaten mit MIME-Typ `application/pdf` |
+| `getBuffer()` | Buffer-kompatible Bytes | Rohe PDF-Bytes |
+| `getBase64()` | `string` | Base64-kodiertes PDF |
+| `getDataUrl()` | `string` | Base64-Data-URL |
+| `getStream()` | PDFKit-Stream | Ausgabe auf niedriger Ebene; verwende normalerweise Blob oder Bytes |
+
+```js
+try {
+ await pdfMake.createPdf(docDefinition).download('report.pdf');
+} catch (error) {
+ console.error('PDF generation failed', error);
+}
+```
+
+Ein erfülltes Download-Promise bestätigt nicht, dass der Benutzer die Datei gespeichert hat. Drucken hängt vom Browser und PDF-Viewer ab; verlasse dich nicht auf stilles Drucken.
+
+## Nach asynchroner Arbeit öffnen
+
+Öffne das Fenster direkt im Click-Handler des Benutzers, bevor du auf Daten wartest. Andernfalls können Popup-Blocker das Öffnen verhindern.
+
+```js
+async function openReport() {
+ const win = window.open('', '_blank');
+ if (!win) throw new Error('Allow popups to open the PDF');
+ try {
+ const response = await fetch('/report-data');
+ if (!response.ok) throw new Error('Could not load report data');
+ const data = await response.json();
+ const definition = { content: [String(data.title)] };
+ await pdfMake.createPdf(definition).open(win);
+ } catch (error) {
+ win.close();
+ throw error;
+ }
+}
+```
+
+Rufe `openReport` im Click-Handler deiner Anwendung auf und behandle das abgelehnte Promise. Ersetze zum Drucken `.open(win)` durch `.print(win)`. Mit `window` navigierst du im aktuellen Tab. Lege den PDF-Titel über die [Dokumentmetadaten](/docs/0.3/de/document-definition-object/document-medatadata/) fest; Dateinamen und Titel im Viewer hängen vom Browser ab.
+
+## Blob-URLs verwalten
+
+```js
+const blob = await pdfMake.createPdf(docDefinition).getBlob();
+const url = URL.createObjectURL(blob);
+document.querySelector('#preview').src = url;
+// Revoke url when replacing the preview or removing it, after it is no longer needed.
+```
+
+Lass die URL bestehen, solange der Viewer sie verwendet. Rufe beim Aufräumen `URL.revokeObjectURL(url)` auf. Verwende für jeden Renderdurchlauf einen neuen Ausgabe-Wrapper. Kombiniere die manuelle Verarbeitung eines Streams nicht mit Buffer- oder Blob-Hilfsmethoden auf demselben Ausgabe-Wrapper.
+
+## URL-Zugriffsrichtlinie
+
+Seit **0.3.6** akzeptiert `setUrlAccessPolicy(callback)` einen synchronen booleschen Callback. Diese Funktion ist keine vollständige Netzwerksandbox; Weiterleitungen im Browser können stattfinden, bevor die endgültige URL geprüft wird. Siehe [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/).
diff --git a/content/getting-started/client-side/methods.es.md b/content/getting-started/client-side/methods.es.md
new file mode 100644
index 00000000..e3730010
--- /dev/null
+++ b/content/getting-started/client-side/methods.es.md
@@ -0,0 +1,77 @@
++++
+sourceDigest = "9223df7c21e72e445796980b101e0e55c3724007a9f7b3f7e0888260b13476f1"
+title = "Métodos de salida en el navegador"
+description = "Descarga, abre, imprime u obtén bytes y objetos Blob de PDF con los métodos de navegador de pdfmake 0.3 basados en Promise."
+weight = 11
++++
+
+## Crear un documento
+
+Después de [cargar el motor y las fuentes](/docs/0.3/es/getting-started/client-side/):
+
+```js
+const output = pdfMake.createPdf(docDefinition, options);
+```
+
+El segundo argumento opcional contiene las [opciones de renderizado](/docs/0.3/es/options/). `createPdf` devuelve inmediatamente un contenedor de salida. Los métodos de salida devuelven Promises; gestiona sus rechazos.
+
+## Elegir un formato de salida
+
+| Método | Se resuelve como | Comportamiento |
+| --- | --- | --- |
+| `download(filename?)` | `undefined` | Inicia una descarga; el nombre predeterminado es `file.pdf` |
+| `open(window?)` | `undefined` | Navega a un PDF generado en una ventana nueva o proporcionada |
+| `print(window?)` | `undefined` | Abre un PDF con una acción de impresión; el comportamiento depende del visor |
+| `getBlob()` | `Blob` | Datos binarios con el tipo MIME `application/pdf` |
+| `getBuffer()` | Bytes compatibles con Buffer | Bytes PDF sin procesar |
+| `getBase64()` | `string` | PDF codificado en Base64 |
+| `getDataUrl()` | `string` | URL de datos Base64 |
+| `getStream()` | Flujo de PDFKit | Salida de bajo nivel; normalmente conviene usar Blob o bytes |
+
+```js
+try {
+ await pdfMake.createPdf(docDefinition).download('report.pdf');
+} catch (error) {
+ console.error('PDF generation failed', error);
+}
+```
+
+Que la Promise de descarga se resuelva no confirma que el usuario haya guardado el archivo. La impresión depende del navegador y del visor PDF; no cuentes con una impresión silenciosa.
+
+## Abrir después de un proceso asíncrono
+
+Abre la ventana directamente en el controlador de clic del usuario, antes de esperar los datos. De lo contrario, los bloqueadores de ventanas emergentes podrían impedirlo.
+
+```js
+async function openReport() {
+ const win = window.open('', '_blank');
+ if (!win) throw new Error('Allow popups to open the PDF');
+ try {
+ const response = await fetch('/report-data');
+ if (!response.ok) throw new Error('Could not load report data');
+ const data = await response.json();
+ const definition = { content: [String(data.title)] };
+ await pdfMake.createPdf(definition).open(win);
+ } catch (error) {
+ win.close();
+ throw error;
+ }
+}
+```
+
+Llama a `openReport` desde el controlador de clic de la aplicación y gestiona el rechazo de su Promise. Para imprimir, sustituye `.open(win)` por `.print(win)`. Pasar `window` navega por la pestaña actual. Establece el [título de los metadatos](/docs/0.3/es/document-definition-object/document-medatadata/) del documento para asignar un nombre al PDF; los nombres y títulos que muestra el visor dependen del navegador.
+
+## Gestionar URL de Blob
+
+```js
+const blob = await pdfMake.createPdf(docDefinition).getBlob();
+const url = URL.createObjectURL(blob);
+document.querySelector('#preview').src = url;
+// Revoke url when replacing the preview or removing it, after it is no longer needed.
+```
+
+Mantén la URL activa mientras el visor la use. Llama a `URL.revokeObjectURL(url)` durante la limpieza. Usa un contenedor de salida nuevo para cada renderizado. Evita mezclar el consumo manual del flujo con los métodos de búfer o Blob en la misma salida.
+
+## Política de acceso a URL
+
+Desde la versión **0.3.6**, `setUrlAccessPolicy(callback)` acepta una función de retorno síncrono booleano. No es un entorno de red completamente aislado y las redirecciones del navegador pueden producirse antes de que se compruebe la URL final. Consulta [seguridad de recursos](/docs/0.3/es/guides/resource-security/).
diff --git a/content/getting-started/client-side/methods.fr.md b/content/getting-started/client-side/methods.fr.md
new file mode 100644
index 00000000..1473f126
--- /dev/null
+++ b/content/getting-started/client-side/methods.fr.md
@@ -0,0 +1,77 @@
++++
+title = "Méthodes de sortie du navigateur"
+description = "Téléchargez, ouvrez ou imprimez des PDF et obtenez leurs octets ou Blob avec les méthodes Promise de pdfmake 0.3 pour navigateur."
+weight = 11
+sourceDigest = "9223df7c21e72e445796980b101e0e55c3724007a9f7b3f7e0888260b13476f1"
++++
+
+## Créer un document
+
+Après avoir [chargé le moteur et les polices](/docs/0.3/fr/getting-started/client-side/) :
+
+```js
+const output = pdfMake.createPdf(docDefinition, options);
+```
+
+Le deuxième argument facultatif contient les [options de rendu](/docs/0.3/fr/options/). `createPdf` renvoie immédiatement un objet de sortie. Les méthodes de sortie renvoient des Promises ; gérez leurs rejets.
+
+## Choisir une sortie
+
+| Méthode | Valeur résolue | Comportement |
+| --- | --- | --- |
+| `download(filename?)` | `undefined` | Lance un téléchargement ; le nom de fichier par défaut est `file.pdf` |
+| `open(window?)` | `undefined` | Navigue vers le PDF généré dans une nouvelle fenêtre ou une fenêtre fournie |
+| `print(window?)` | `undefined` | Ouvre un PDF avec une action d’impression ; le comportement varie selon le lecteur |
+| `getBlob()` | `Blob` | Données binaires avec le type MIME `application/pdf` |
+| `getBuffer()` | Octets compatibles avec Buffer | Octets PDF bruts |
+| `getBase64()` | `string` | PDF encodé en base64 |
+| `getDataUrl()` | `string` | URL de données base64 |
+| `getStream()` | Flux PDFKit | Sortie de bas niveau ; préférez généralement Blob ou les octets |
+
+```js
+try {
+ await pdfMake.createPdf(docDefinition).download('report.pdf');
+} catch (error) {
+ console.error('PDF generation failed', error);
+}
+```
+
+La résolution de la Promise de téléchargement ne confirme pas que l’utilisateur a enregistré le fichier. L’impression dépend du navigateur et du lecteur PDF ; ne vous fiez pas à l’impression silencieuse.
+
+## Ouvrir après une opération asynchrone
+
+Ouvrez la fenêtre directement dans le gestionnaire de clic de l’utilisateur, avant d’attendre les données. Sinon, le bloqueur de fenêtres surgissantes peut refuser l’ouverture.
+
+```js
+async function openReport() {
+ const win = window.open('', '_blank');
+ if (!win) throw new Error('Allow popups to open the PDF');
+ try {
+ const response = await fetch('/report-data');
+ if (!response.ok) throw new Error('Could not load report data');
+ const data = await response.json();
+ const definition = { content: [String(data.title)] };
+ await pdfMake.createPdf(definition).open(win);
+ } catch (error) {
+ win.close();
+ throw error;
+ }
+}
+```
+
+Appelez `openReport` depuis le gestionnaire de clic de votre application et gérez le rejet de sa Promise. Pour imprimer, remplacez `.open(win)` par `.print(win)`. Le passage de `window` navigue dans l’onglet actuel. Définissez le [titre des métadonnées](/docs/0.3/fr/document-definition-object/document-medatadata/) du document pour identifier le PDF ; le nom de fichier et le titre affichés par le lecteur dépendent du navigateur.
+
+## Gérer les URL Blob
+
+```js
+const blob = await pdfMake.createPdf(docDefinition).getBlob();
+const url = URL.createObjectURL(blob);
+document.querySelector('#preview').src = url;
+// Revoke url when replacing the preview or removing it, after it is no longer needed.
+```
+
+Conservez l’URL tant que le lecteur l’utilise. Appelez `URL.revokeObjectURL(url)` lors du nettoyage. Utilisez un nouvel objet de sortie pour chaque rendu. Évitez de mélanger la lecture manuelle d’un flux avec les méthodes buffer ou Blob sur la même sortie.
+
+## Politique d’accès aux URL
+
+Depuis la version **0.3.6**, `setUrlAccessPolicy(callback)` accepte une fonction synchrone qui renvoie un booléen. Elle ne constitue pas un bac à sable réseau complet, et les redirections du navigateur peuvent avoir lieu avant la vérification de l’URL finale. Consultez la [sécurité des ressources](/docs/0.3/fr/guides/resource-security/).
diff --git a/content/getting-started/client-side/methods.md b/content/getting-started/client-side/methods.md
index d83137df..01abf67e 100644
--- a/content/getting-started/client-side/methods.md
+++ b/content/getting-started/client-side/methods.md
@@ -1,144 +1,76 @@
+++
-title = "Methods"
-description = ""
+title = "Browser output methods"
+description = "Download, open, print or obtain PDF bytes and Blobs with Promise-based pdfmake 0.3 browser methods."
weight = 11
-alwaysopen = true
+++
-#### Base usage
+## Create a document
-This call will generate a PDF document, methods to get document are described below.
+After [loading the engine and fonts](/docs/0.3/getting-started/client-side/):
```js
-pdfMake.createPdf(docDefinition);
-pdfMake.createPdf(docDefinition, options);
+const output = pdfMake.createPdf(docDefinition, options);
```
-Parameters:
+The optional second argument contains [rendering options](/docs/0.3/options/). `createPdf` returns an output wrapper immediately. Output helpers return Promises; handle their rejection.
-* `docDefinition` - object with document definition, see [chapter](/docs/0.3/document-definition-object/)
-* `options` _(optional)_ - advanced options see [options chapter](/docs/0.3/options/)
+## Choose an output
-#### Download the PDF
-```js
-pdfMake.createPdf(docDefinition).download();
-pdfMake.createPdf(docDefinition).download('file.pdf');
-```
-Parameters:
+| Method | Resolves to | Behavior |
+| --- | --- | --- |
+| `download(filename?)` | `undefined` | Initiate a download; filename defaults to `file.pdf` |
+| `open(window?)` | `undefined` | Navigate a new or supplied window to the generated PDF |
+| `print(window?)` | `undefined` | Open a PDF carrying a print action; viewer behavior varies |
+| `getBlob()` | `Blob` | Binary data with MIME type `application/pdf` |
+| `getBuffer()` | Buffer-compatible bytes | Raw PDF bytes |
+| `getBase64()` | `string` | Base64-encoded PDF |
+| `getDataUrl()` | `string` | Base64 data URL |
+| `getStream()` | PDFKit stream | Low-level output; usually prefer Blob or bytes |
-* `filename` _(optional)_ - PDF document file name (default 'file.pdf')
-
-#### Open the PDF in a new window
```js
-pdfMake.createPdf(docDefinition).open();
-pdfMake.createPdf(docDefinition).open(win);
+try {
+ await pdfMake.createPdf(docDefinition).download('report.pdf');
+} catch (error) {
+ console.error('PDF generation failed', error);
+}
```
-Parameters:
-* `win` _(optional)_ - window (when an asynchronous operation)
+A resolved download Promise does not confirm that the user saved the file. Printing depends on the browser and PDF viewer; do not rely on silent printing.
-Name can be defined only by using metadata `title` property (see [Document metadata](/docs/0.3/document-definition-object/document-medatadata/)).
+## Open after asynchronous work
-Asynchronous example:
-```js
-$scope.generatePdf = function() {
- // create the window before the callback
- var win = window.open('', '_blank');
- $http.post('/someUrl', data).then(function(response) {
- // pass the "win" argument
- pdfMake.createPdf(docDefinition).open(win);
- });
-};
-```
+Open the window directly inside a user click handler, before awaiting data. Otherwise popup blockers may reject it.
-Open in same window:
```js
-pdfMake.createPdf(docDefinition).open(window);
+async function openReport() {
+ const win = window.open('', '_blank');
+ if (!win) throw new Error('Allow popups to open the PDF');
+ try {
+ const response = await fetch('/report-data');
+ if (!response.ok) throw new Error('Could not load report data');
+ const data = await response.json();
+ const definition = { content: [String(data.title)] };
+ await pdfMake.createPdf(definition).open(win);
+ } catch (error) {
+ win.close();
+ throw error;
+ }
+}
```
-#### Print the PDF
-```js
-pdfMake.createPdf(docDefinition).print();
-pdfMake.createPdf(docDefinition).print(win);
-```
-Parameters:
+Call `openReport` from your application's click handler and handle its rejected Promise. For printing, replace `.open(win)` with `.print(win)`. Passing `window` navigates the current tab. Set the document's [metadata title](/docs/0.3/document-definition-object/document-medatadata/) to label the PDF; viewer filenames and titles remain browser-dependent.
-* `win` _(optional)_ - window (when an asynchronous operation)
+## Manage Blob URLs
-Asynchronous example:
```js
-$scope.generatePdf = function() {
- // create the window before the callback
- var win = window.open('', '_blank');
- $http.post('/someUrl', data).then(function(response) {
- // pass the "win" argument
- pdfMake.createPdf(docDefinition).print(win);
- });
-};
+const blob = await pdfMake.createPdf(docDefinition).getBlob();
+const url = URL.createObjectURL(blob);
+document.querySelector('#preview').src = url;
+// Revoke url when replacing the preview or removing it, after it is no longer needed.
```
-Print in same window:
-```js
-pdfMake.createPdf(docDefinition).print(window);
-```
-
-#### Get the PDF document as URL data
-
-Example of put the PDF document into your own page as URL data:
-```js
-pdfMake.createPdf(docDefinition).getDataUrl().then((dataUrl) => {
- const targetElement = document.querySelector('#iframeContainer');
- const iframe = document.createElement('iframe');
- iframe.src = dataUrl;
- targetElement.appendChild(iframe);
-}, err => {
- console.error(err);
-});
-```
-
-#### Get the PDF document as base64 data
-```js
-pdfMake.createPdf(docDefinition).getBase64().then((data) => {
- alert(data);
-}, err => {
- console.error(err);
-});
-```
-
-#### Get the PDF document as Blob
-```js
-pdfMake.createPdf(docDefinition).getBlob().then((blob) => {
- // ...
-}, err => {
- console.error(err);
-});
-```
-
-#### Get the PDF as buffer
-```js
-pdfMake.createPdf(docDefinition).getBuffer().then((buffer) => {
- // ...
-}, err => {
- console.error(err);
-});
-```
-
-#### Get the PDF document as stream
-
-```js
-pdfMake.createPdf(docDefinition).getStream().then((stream) => {
- // ...
-}, err => {
- console.error(err);
-});
-```
-
-#### URL Access Policy
-
-{{% alert theme="warning" %}}Minimal version: **0.3.6**{{% /alert %}}
-
-The `setUrlAccessPolicy()` method allows you to define a custom security policy for external URLs before they are downloaded.
+Keep the URL alive while the viewer uses it. Call `URL.revokeObjectURL(url)` during cleanup. Use a fresh output wrapper for each render. Avoid mixing manual stream consumption with buffer or Blob helpers on the same output.
-This can be used to restrict allowed domains, enforce HTTPS, or prevent SSRF attacks by blocking private or internal network addresses.
+## URL access policy
-For details see [documentation](/docs/0.3/getting-started/server-side/methods/#url-access-policy).
\ No newline at end of file
+Since **0.3.6**, `setUrlAccessPolicy(callback)` accepts a synchronous boolean callback. It is not a complete network sandbox, and browser redirects may happen before the final URL is checked. See [resource security](/docs/0.3/guides/resource-security/).
diff --git a/content/getting-started/client-side/methods.pt-br.md b/content/getting-started/client-side/methods.pt-br.md
new file mode 100644
index 00000000..1f6d556c
--- /dev/null
+++ b/content/getting-started/client-side/methods.pt-br.md
@@ -0,0 +1,77 @@
++++
+title = "Métodos de saída no navegador"
+description = "Baixe, abra, imprima ou obtenha bytes e Blobs de PDF com os métodos assíncronos do pdfmake 0.3 no navegador."
+weight = 11
+sourceDigest = "9223df7c21e72e445796980b101e0e55c3724007a9f7b3f7e0888260b13476f1"
++++
+
+## Crie um documento
+
+Depois de [carregar o mecanismo e as fontes](/docs/0.3/pt-br/getting-started/client-side/):
+
+```js
+const output = pdfMake.createPdf(docDefinition, options);
+```
+
+O segundo argumento, opcional, contém as [opções de renderização](/docs/0.3/pt-br/options/). `createPdf` retorna imediatamente um wrapper de saída. Os métodos de saída retornam Promises; trate as rejeições.
+
+## Escolha um formato de saída
+
+| Método | Valor resolvido | Comportamento |
+| --- | --- | --- |
+| `download(filename?)` | `undefined` | Inicia um download; o nome padrão é `file.pdf` |
+| `open(window?)` | `undefined` | Navega uma janela nova ou fornecida até o PDF gerado |
+| `print(window?)` | `undefined` | Abre um PDF com uma ação de impressão; o comportamento varia conforme o visualizador |
+| `getBlob()` | `Blob` | Dados binários com tipo MIME `application/pdf` |
+| `getBuffer()` | Bytes compatíveis com Buffer | Bytes brutos do PDF |
+| `getBase64()` | `string` | PDF codificado em base64 |
+| `getDataUrl()` | `string` | URL de dados em base64 |
+| `getStream()` | Stream do PDFKit | Saída de baixo nível; em geral, prefira Blob ou bytes |
+
+```js
+try {
+ await pdfMake.createPdf(docDefinition).download('report.pdf');
+} catch (error) {
+ console.error('PDF generation failed', error);
+}
+```
+
+O sucesso da Promise de download não confirma que o usuário salvou o arquivo. A impressão depende do navegador e do visualizador de PDF; não conte com impressão silenciosa.
+
+## Abra após trabalho assíncrono
+
+Abra a janela diretamente dentro do manipulador de clique do usuário, antes de aguardar os dados. Caso contrário, os bloqueadores de pop-ups podem rejeitá-la.
+
+```js
+async function openReport() {
+ const win = window.open('', '_blank');
+ if (!win) throw new Error('Allow popups to open the PDF');
+ try {
+ const response = await fetch('/report-data');
+ if (!response.ok) throw new Error('Could not load report data');
+ const data = await response.json();
+ const definition = { content: [String(data.title)] };
+ await pdfMake.createPdf(definition).open(win);
+ } catch (error) {
+ win.close();
+ throw error;
+ }
+}
+```
+
+Chame `openReport` no manipulador de clique da aplicação e trate a Promise rejeitada. Para imprimir, substitua `.open(win)` por `.print(win)`. Passar `window` navega a aba atual. Defina o [título nos metadados](/docs/0.3/pt-br/document-definition-object/document-medatadata/) do documento para identificá-lo; os nomes de arquivo e títulos exibidos dependem do navegador.
+
+## Gerencie URLs de Blob
+
+```js
+const blob = await pdfMake.createPdf(docDefinition).getBlob();
+const url = URL.createObjectURL(blob);
+document.querySelector('#preview').src = url;
+// Revoke url when replacing the preview or removing it, after it is no longer needed.
+```
+
+Mantenha a URL ativa enquanto o visualizador a estiver usando. Chame `URL.revokeObjectURL(url)` durante a limpeza. Use um novo wrapper de saída para cada renderização. Evite misturar o consumo manual de streams com os métodos de buffer ou Blob na mesma saída.
+
+## Política de acesso a URLs
+
+Desde a versão **0.3.6**, `setUrlAccessPolicy(callback)` aceita uma função síncrona que retorna um booleano. Ela não é um sandbox de rede completo, e redirecionamentos no navegador podem ocorrer antes da verificação da URL final. Consulte [segurança de recursos](/docs/0.3/pt-br/guides/resource-security/).
diff --git a/content/getting-started/client-side/supported-browsers.de.md b/content/getting-started/client-side/supported-browsers.de.md
new file mode 100644
index 00000000..c32512b3
--- /dev/null
+++ b/content/getting-started/client-side/supported-browsers.de.md
@@ -0,0 +1,27 @@
++++
+title = "Unterstützte Browser"
+description = "Prüfe die Browserkompatibilität sowie Einschränkungen der Hilfsfunktionen zum Öffnen, Drucken und Herunterladen."
+weight = 11
+alwaysopen = true
+sourceDigest = "3ea8d830019ccfb8321db6f8c7fe9d40ba017ac0b435e042cefefa32be20db66"
++++
+
+* Edge
+* Firefox
+* Chrome
+* Chrome (Android)
+* Opera
+* Safari (iOS)
+* Safari (iOS) iPhone
+
+{{% panel theme="warning" header="Einschränkungen" %}}Die Methoden **`open()`** und **`print()`** werden nur in folgenden Browsern unterstützt:
+
+* Firefox
+* Chrome
+* Opera{{% /panel %}}
+
+{{% alert theme="warning" %}}Browser-Erweiterungen können die Funktion von pdfmake beeinflussen (insbesondere `open()` und `print()`). Wenn pdfmake nicht funktioniert, deaktiviere testweise die Erweiterungen.{{% /alert %}}
+
+{{% panel theme="danger" header="Problematische Erweiterungen" %}}AdBlock{{% /panel %}}
+
+Die vollständige Beschreibung findest du im [Issue](https://github.com/bpampuch/pdfmake/issues/800).
diff --git a/content/getting-started/client-side/supported-browsers.es.md b/content/getting-started/client-side/supported-browsers.es.md
new file mode 100644
index 00000000..516a0e19
--- /dev/null
+++ b/content/getting-started/client-side/supported-browsers.es.md
@@ -0,0 +1,27 @@
++++
+sourceDigest = "3ea8d830019ccfb8321db6f8c7fe9d40ba017ac0b435e042cefefa32be20db66"
+title = "Navegadores compatibles"
+description = "Consulta la compatibilidad de los navegadores y las limitaciones de las funciones para abrir, imprimir y descargar."
+weight = 11
+alwaysopen = true
++++
+
+* Edge
+* Firefox
+* Chrome
+* Chrome (Android)
+* Opera
+* Safari (iOS)
+* Safari (iOS) iPhone
+
+{{% panel theme="warning" header="Limitations" %}}Los métodos **`open()`** e **`print()`** solo son compatibles con:
+
+* Firefox
+* Chrome
+* Opera{{% /panel %}}
+
+{{% alert theme="warning" %}}Los complementos instalados en los navegadores pueden afectar al funcionamiento de pdfmake (especialmente a `open()` y `print()`). Si pdfmake no funciona, prueba a desactivar los complementos.{{% /alert %}}
+
+{{% panel theme="danger" header="Problematic add-ons" %}}AdBlock{{% /panel %}}
+
+La descripción completa está disponible en este [incidente](https://github.com/bpampuch/pdfmake/issues/800).
diff --git a/content/getting-started/client-side/supported-browsers.fr.md b/content/getting-started/client-side/supported-browsers.fr.md
new file mode 100644
index 00000000..55bbb40a
--- /dev/null
+++ b/content/getting-started/client-side/supported-browsers.fr.md
@@ -0,0 +1,27 @@
++++
+title = "Navigateurs pris en charge"
+description = "Vérifiez la compatibilité des navigateurs et les limites des fonctions d’ouverture, d’impression et de téléchargement."
+weight = 11
+alwaysopen = true
+sourceDigest = "3ea8d830019ccfb8321db6f8c7fe9d40ba017ac0b435e042cefefa32be20db66"
++++
+
+* Edge
+* Firefox
+* Chrome
+* Chrome (Android)
+* Opera
+* Safari (iOS)
+* Safari (iOS) iPhone
+
+{{% panel theme="warning" header="Limitations" %}}Les méthodes **`open()`** et **`print()`** ne sont prises en charge que dans :
+
+* Firefox
+* Chrome
+* Opera{{% /panel %}}
+
+{{% alert theme="warning" %}}Les extensions de navigateur peuvent affecter le fonctionnement de pdfmake (en particulier `open()` et `print()`). Si pdfmake ne fonctionne pas, essayez de désactiver les extensions du navigateur.{{% /alert %}}
+
+{{% panel theme="danger" header="Extensions problématiques" %}}AdBlock{{% /panel %}}
+
+La description complète est disponible dans cette [issue](https://github.com/bpampuch/pdfmake/issues/800).
diff --git a/content/getting-started/client-side/supported-browsers.md b/content/getting-started/client-side/supported-browsers.md
index afd2d3c2..dcec7fe2 100644
--- a/content/getting-started/client-side/supported-browsers.md
+++ b/content/getting-started/client-side/supported-browsers.md
@@ -1,6 +1,6 @@
+++
title = "Supported browsers"
-description = ""
+description = "Check browser compatibility and limitations of open, print and download helpers."
weight = 11
alwaysopen = true
+++
@@ -23,4 +23,4 @@ alwaysopen = true
{{% panel theme="danger" header="Problematic add-ons" %}}AdBlock{{% /panel %}}
-Fully description is available in [issue](https://github.com/bpampuch/pdfmake/issues/800).
\ No newline at end of file
+Fully description is available in [issue](https://github.com/bpampuch/pdfmake/issues/800).
diff --git a/content/getting-started/client-side/supported-browsers.pt-br.md b/content/getting-started/client-side/supported-browsers.pt-br.md
new file mode 100644
index 00000000..a6377d51
--- /dev/null
+++ b/content/getting-started/client-side/supported-browsers.pt-br.md
@@ -0,0 +1,27 @@
++++
+title = "Navegadores compatíveis"
+description = "Consulte a compatibilidade dos navegadores e as limitações dos métodos para abrir, imprimir e baixar PDFs."
+weight = 11
+alwaysopen = true
+sourceDigest = "3ea8d830019ccfb8321db6f8c7fe9d40ba017ac0b435e042cefefa32be20db66"
++++
+
+* Edge
+* Firefox
+* Chrome
+* Chrome (Android)
+* Opera
+* Safari (iOS)
+* Safari (iOS) iPhone
+
+{{% panel theme="warning" header="Limitações" %}}Os métodos **`open()`** e **`print()`** são compatíveis apenas com:
+
+* Firefox
+* Chrome
+* Opera{{% /panel %}}
+
+{{% alert theme="warning" %}}As extensões instaladas no navegador podem afetar o funcionamento do pdfmake (especialmente `open()` e `print()`). Se o pdfmake não funcionar, tente desativar as extensões do navegador.{{% /alert %}}
+
+{{% panel theme="danger" header="Extensão problemática" %}}AdBlock{{% /panel %}}
+
+A descrição completa está disponível nesta [issue](https://github.com/bpampuch/pdfmake/issues/800).
diff --git a/content/getting-started/examples-from-comunity/_index.de.md b/content/getting-started/examples-from-comunity/_index.de.md
new file mode 100644
index 00000000..4d09fdd7
--- /dev/null
+++ b/content/getting-started/examples-from-comunity/_index.de.md
@@ -0,0 +1,10 @@
++++
+title = "Beispiele aus der Community"
+description = "Entdecke Beispiele aus der Community für pdfmake 0.3."
+weight = 13
+alwaysopen = false
+sourceDigest = "e2c8721f10e846c4674b764d9275542cc75f8c76e79e0ec6f97f2fae8194e6e5"
++++
+
+- [Vue.js-Beispiel](https://github.com/bpampuch/pdfmake/issues/2498)
+- [React-Native-Beispiel](https://github.com/ieschalier/rn-pdfmake)
diff --git a/content/getting-started/examples-from-comunity/_index.es.md b/content/getting-started/examples-from-comunity/_index.es.md
new file mode 100644
index 00000000..4bc2ccdd
--- /dev/null
+++ b/content/getting-started/examples-from-comunity/_index.es.md
@@ -0,0 +1,10 @@
++++
+sourceDigest = "e2c8721f10e846c4674b764d9275542cc75f8c76e79e0ec6f97f2fae8194e6e5"
+title = "Ejemplos de la comunidad"
+description = "Consulta ejemplos de la comunidad para pdfmake 0.3."
+weight = 13
+alwaysopen = false
++++
+
+- [Ejemplo de Vue.js](https://github.com/bpampuch/pdfmake/issues/2498)
+- [Ejemplo de React Native](https://github.com/ieschalier/rn-pdfmake)
diff --git a/content/getting-started/examples-from-comunity/_index.fr.md b/content/getting-started/examples-from-comunity/_index.fr.md
new file mode 100644
index 00000000..81d45cc5
--- /dev/null
+++ b/content/getting-started/examples-from-comunity/_index.fr.md
@@ -0,0 +1,10 @@
++++
+title = "Exemples de la communauté"
+description = "Configurez et explorez des exemples pdfmake 0.3 partagés par la communauté."
+weight = 13
+alwaysopen = false
+sourceDigest = "e2c8721f10e846c4674b764d9275542cc75f8c76e79e0ec6f97f2fae8194e6e5"
++++
+
+- [Exemple avec Vue.js](https://github.com/bpampuch/pdfmake/issues/2498)
+- [Exemple avec React Native](https://github.com/ieschalier/rn-pdfmake)
diff --git a/content/getting-started/examples-from-comunity/_index.md b/content/getting-started/examples-from-comunity/_index.md
index 9336ff05..81c466ed 100644
--- a/content/getting-started/examples-from-comunity/_index.md
+++ b/content/getting-started/examples-from-comunity/_index.md
@@ -1,9 +1,9 @@
+++
title = "Examples from the community"
-description = ""
+description = "Configure examples from the community in pdfmake 0.3 with examples, options and usage notes."
weight = 13
alwaysopen = false
+++
- [vue.js example](https://github.com/bpampuch/pdfmake/issues/2498)
-- [react-native example](https://github.com/ieschalier/rn-pdfmake)
\ No newline at end of file
+- [react-native example](https://github.com/ieschalier/rn-pdfmake)
diff --git a/content/getting-started/examples-from-comunity/_index.pt-br.md b/content/getting-started/examples-from-comunity/_index.pt-br.md
new file mode 100644
index 00000000..7031bbbb
--- /dev/null
+++ b/content/getting-started/examples-from-comunity/_index.pt-br.md
@@ -0,0 +1,10 @@
++++
+title = "Exemplos da comunidade"
+description = "Veja exemplos da comunidade que integram o pdfmake com outras plataformas."
+weight = 13
+alwaysopen = false
+sourceDigest = "e2c8721f10e846c4674b764d9275542cc75f8c76e79e0ec6f97f2fae8194e6e5"
++++
+
+- [Exemplo com Vue.js](https://github.com/bpampuch/pdfmake/issues/2498)
+- [Exemplo com React Native](https://github.com/ieschalier/rn-pdfmake)
diff --git a/content/getting-started/server-side/_index.de.md b/content/getting-started/server-side/_index.de.md
new file mode 100644
index 00000000..3d969879
--- /dev/null
+++ b/content/getting-started/server-side/_index.de.md
@@ -0,0 +1,73 @@
++++
+title = "Node.js-Schnellstart"
+description = "Erzeuge mit Node.js, pdfmake 0.3, Standardschriften und Promise-basierter Ausgabe eine vollständige PDF-Datei."
+weight = 12
+sourceDigest = "8cca67c7aaa82929be7388e0f7844c6250300ff14631cb12f266686f1cae3789"
++++
+
+## Installieren
+
+Verwende **Node.js 20 oder neuer**. Erstelle eine Anwendung und installiere pdfmake:
+
+```sh
+npm init -y
+npm install pdfmake@0.3.12
+```
+
+Die genaue Version macht das Beispiel reproduzierbar. Prüfe die Versionshinweise und teste, bevor du ein neueres Patch-Release auswählst.
+
+## Erste PDF-Datei schreiben
+
+Speichere das vollständige Beispiel als `first-pdf.cjs` und führe `node first-pdf.cjs` aus.
+
+```js
+// docs-test: node-quickstart
+const pdfmake = require('pdfmake');
+
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
+
+async function main() {
+ const definition = {
+ defaultStyle: { font: 'Helvetica' },
+ content: [
+ { text: 'Hello, pdfmake!', fontSize: 24, bold: true },
+ 'Your first PDF, generated in Node.js.'
+ ]
+ };
+ await pdfmake.createPdf(definition).write('document.pdf');
+}
+
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+`write()` wird erfüllt, wenn die Ausgabedatei geschlossen ist. Behandle abgelehnte Promises, damit eine fehlgeschlagene Generierung nicht unbemerkt zu einer erfolgreichen API-Antwort führt.
+
+Helvetica benötigt keine lokalen Schriftdateien. Daher sperrt das Beispiel externe URLs und erlaubt über die lokale Richtlinie nur Standard-Schriftkennungen. Die aktuelle Implementierung prüft diese Kennungen, obwohl sie keine Dateipfade sind. Standardschriften haben eine begrenzte Zeichenabdeckung. Für mehrsprachige Dokumente [registriere geeignete Schriftdateien](/docs/0.3/de/fonts/) und erlaube ihre aufgelösten Pfade ausdrücklich.
+
+## PDF-Bytes über eine API zurückgeben
+
+```js
+const buffer = await pdfmake.createPdf({
+ defaultStyle: { font: 'Helvetica' },
+ content: ['API document']
+}).getBuffer();
+
+// Adapt these lines to your HTTP framework:
+response.setHeader('Content-Type', 'application/pdf');
+response.setHeader('Content-Disposition', 'attachment; filename="document.pdf"');
+response.end(buffer);
+```
+
+Dieses Snippet setzt voraus, dass `pdfmake` wie oben konfiguriert und `response` das Response-Objekt deines Frameworks ist. Prüfe Anfragedaten, bevor du eine Definition erstellst. Erzeuge für jede Anfrage eine neue Definition; das Layout verändert sie.
+
+## ESM-Anwendungen
+
+Das Node.js-Paket exportiert ein konfiguriertes Singleton. Verwende in einer ESM-Anwendung `import pdfmake from 'pdfmake'`; erstelle keine Instanz mit `new PdfPrinter(...)` wie in älteren Beispielen. Registriere Schriften und Richtlinien einmal beim Anwendungsstart. Ändere die Singleton-Konfiguration nicht für parallele Anfragen.
+
+## Nächste Schritte
+
+[Ausgabemethoden](/docs/0.3/de/getting-started/server-side/methods/) · [Ressourcenzugriff](/docs/0.3/de/guides/resource-security/) · [Rezept: Rechnung](/docs/0.3/de/guides/invoice/)
diff --git a/content/getting-started/server-side/_index.es.md b/content/getting-started/server-side/_index.es.md
new file mode 100644
index 00000000..78010159
--- /dev/null
+++ b/content/getting-started/server-side/_index.es.md
@@ -0,0 +1,73 @@
++++
+sourceDigest = "8cca67c7aaa82929be7388e0f7844c6250300ff14631cb12f266686f1cae3789"
+title = "Inicio rápido con Node.js"
+description = "Crea un archivo PDF completo en Node.js con pdfmake 0.3, fuentes estándar y salida basada en Promise."
+weight = 12
++++
+
+## Instalar
+
+Usa Node.js **20 o posterior**. Crea una aplicación e instala pdfmake:
+
+```sh
+npm init -y
+npm install pdfmake@0.3.12
+```
+
+La versión exacta hace que el ejemplo sea reproducible. Revisa las notas de la versión y prueba antes de elegir un parche más reciente.
+
+## Escribir tu primer PDF
+
+Guarda este ejemplo completo como `first-pdf.cjs` y ejecútalo con `node first-pdf.cjs`.
+
+```js
+// docs-test: node-quickstart
+const pdfmake = require('pdfmake');
+
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
+
+async function main() {
+ const definition = {
+ defaultStyle: { font: 'Helvetica' },
+ content: [
+ { text: 'Hello, pdfmake!', fontSize: 24, bold: true },
+ 'Your first PDF, generated in Node.js.'
+ ]
+ };
+ await pdfmake.createPdf(definition).write('document.pdf');
+}
+
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+`write()` se resuelve cuando el archivo de salida está cerrado. Gestiona el rechazo de las Promises para que un error de generación no produzca en silencio una respuesta de API correcta.
+
+Helvetica no necesita archivos de fuentes locales, por lo que el ejemplo deniega las URL externas y permite solo los identificadores de las fuentes estándar mediante la política local. La implementación actual comprueba estos identificadores aunque no sean rutas de archivo. Las fuentes estándar tienen cobertura de caracteres limitada. Para documentos multilingües, [registra archivos de fuentes adecuados](/docs/0.3/es/fonts/) y permite explícitamente sus rutas resueltas.
+
+## Devolver bytes PDF desde una API
+
+```js
+const buffer = await pdfmake.createPdf({
+ defaultStyle: { font: 'Helvetica' },
+ content: ['API document']
+}).getBuffer();
+
+// Adapt these lines to your HTTP framework:
+response.setHeader('Content-Type', 'application/pdf');
+response.setHeader('Content-Disposition', 'attachment; filename="document.pdf"');
+response.end(buffer);
+```
+
+Este fragmento supone que `pdfmake` está configurado como se indicó antes y que `response` es el objeto de respuesta de tu marco de trabajo. Valida los datos de la solicitud antes de construir una definición. Crea una definición nueva por solicitud; la maquetación la modifica.
+
+## Aplicaciones ESM
+
+El paquete Node exporta un singleton configurado. En una aplicación ESM, usa `import pdfmake from 'pdfmake'`; no lo instancies con `new PdfPrinter(...)` como en los ejemplos antiguos. Registra las fuentes y las políticas una vez al iniciar la aplicación. Evita cambiar la configuración del singleton por cada solicitud simultánea.
+
+## Pasos siguientes
+
+[Métodos de salida](/docs/0.3/es/getting-started/server-side/methods/) · [Acceso a recursos](/docs/0.3/es/guides/resource-security/) · [Receta para una factura](/docs/0.3/es/guides/invoice/)
diff --git a/content/getting-started/server-side/_index.fr.md b/content/getting-started/server-side/_index.fr.md
new file mode 100644
index 00000000..88305c9c
--- /dev/null
+++ b/content/getting-started/server-side/_index.fr.md
@@ -0,0 +1,73 @@
++++
+title = "Démarrage rapide avec Node.js"
+description = "Créez un fichier PDF complet avec pdfmake 0.3 dans Node.js, les polices standard et des sorties fondées sur des Promises."
+weight = 12
+sourceDigest = "8cca67c7aaa82929be7388e0f7844c6250300ff14631cb12f266686f1cae3789"
++++
+
+## Installer
+
+Utilisez Node.js **20 ou ultérieur**. Créez une application et installez pdfmake :
+
+```sh
+npm init -y
+npm install pdfmake@0.3.12
+```
+
+La version exacte rend cet exemple reproductible. Consultez les notes de version et effectuez des tests avant de choisir un correctif plus récent.
+
+## Écrire votre premier PDF
+
+Enregistrez cet exemple complet sous `first-pdf.cjs`, puis exécutez `node first-pdf.cjs`.
+
+```js
+// docs-test: node-quickstart
+const pdfmake = require('pdfmake');
+
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
+
+async function main() {
+ const definition = {
+ defaultStyle: { font: 'Helvetica' },
+ content: [
+ { text: 'Hello, pdfmake!', fontSize: 24, bold: true },
+ 'Your first PDF, generated in Node.js.'
+ ]
+ };
+ await pdfmake.createPdf(definition).write('document.pdf');
+}
+
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+`write()` se résout lorsque le fichier de sortie est fermé. Gérez le rejet des Promises afin qu’un échec de génération ne produise pas silencieusement une réponse API présentée comme réussie.
+
+Helvetica ne nécessite aucun fichier de police local ; l’exemple bloque donc les URL externes et n’autorise, via la stratégie locale, que les identifiants de polices standard. L’implémentation actuelle vérifie ces identifiants même s’il ne s’agit pas de chemins de fichiers. Les polices standard couvrent un nombre limité de caractères. Pour les documents multilingues, [enregistrez des fichiers de police adaptés](/docs/0.3/fr/fonts/) et autorisez explicitement leurs chemins résolus.
+
+## Renvoyer les octets PDF depuis une API
+
+```js
+const buffer = await pdfmake.createPdf({
+ defaultStyle: { font: 'Helvetica' },
+ content: ['API document']
+}).getBuffer();
+
+// Adapt these lines to your HTTP framework:
+response.setHeader('Content-Type', 'application/pdf');
+response.setHeader('Content-Disposition', 'attachment; filename="document.pdf"');
+response.end(buffer);
+```
+
+Cet extrait suppose que `pdfmake` est configuré comme ci-dessus et que `response` est l’objet de réponse de votre framework. Validez les données reçues avant de construire une définition. Créez une définition neuve pour chaque requête : la mise en page la modifie.
+
+## Applications ESM
+
+Le paquet Node exporte une instance configurée. Dans une application ESM, utilisez `import pdfmake from 'pdfmake'` ; ne créez pas d’instance avec `new PdfPrinter(...)` comme dans les anciens exemples. Enregistrez les polices et les stratégies une seule fois au démarrage de l’application. Évitez de modifier la configuration de l’instance partagée pendant des requêtes concurrentes.
+
+## Étapes suivantes
+
+[Méthodes de sortie](/docs/0.3/fr/getting-started/server-side/methods/) · [Accès aux ressources](/docs/0.3/fr/guides/resource-security/) · [Recette de facture](/docs/0.3/fr/guides/invoice/)
diff --git a/content/getting-started/server-side/_index.md b/content/getting-started/server-side/_index.md
index 7091b10b..d92e1abc 100644
--- a/content/getting-started/server-side/_index.md
+++ b/content/getting-started/server-side/_index.md
@@ -1,48 +1,72 @@
+++
-title = "Server-side"
-description = ""
+title = "Node.js quickstart"
+description = "Create a complete PDF file in Node.js using pdfmake 0.3, standard fonts and Promise-based output."
weight = 12
-alwaysopen = true
+++
-On server-side you can simply install via npm:
-```
-npm install pdfmake
+## Install
+
+Use Node.js **20 or later**. Create an application and install pdfmake:
+
+```sh
+npm init -y
+npm install pdfmake@0.3.12
```
-#### Example of usage:
+The exact version makes this example reproducible. Check release notes and test before choosing a newer patch.
+
+## Write your first PDF
+
+Save this complete example as `first-pdf.cjs`, then run `node first-pdf.cjs`.
+
```js
-// Define font files
-var fonts = {
- Roboto: {
- normal: 'fonts/Roboto-Regular.ttf',
- bold: 'fonts/Roboto-Medium.ttf',
- italics: 'fonts/Roboto-Italic.ttf',
- bolditalics: 'fonts/Roboto-MediumItalic.ttf'
- }
-};
-
-var pdfmake = require('pdfmake');
-pdfmake.addFonts(fonts);
+// docs-test: node-quickstart
+const pdfmake = require('pdfmake');
-var docDefinition = {
- // ...
-};
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
-var options = {
- // ...
+async function main() {
+ const definition = {
+ defaultStyle: { font: 'Helvetica' },
+ content: [
+ { text: 'Hello, pdfmake!', fontSize: 24, bold: true },
+ 'Your first PDF, generated in Node.js.'
+ ]
+ };
+ await pdfmake.createPdf(definition).write('document.pdf');
}
-var pdf = pdfmake.createPdf(docDefinition);
-pdf.write('document.pdf').then(() => {
- // success event
-}, err => {
- // error event
- console.error(err);
-});
- ```
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+`write()` resolves when the output file has closed. Handle rejected Promises so failed generation cannot silently produce a successful API response.
+
+Helvetica needs no local font files, so the example denies external URLs and allows only the standard font identifiers through the local policy. The current implementation checks these identifiers even though they are not file paths. Standard fonts have limited character coverage. For multilingual documents, [register suitable font files](/docs/0.3/fonts/) and explicitly allow their resolved paths.
+
+## Return PDF bytes from an API
+
+```js
+const buffer = await pdfmake.createPdf({
+ defaultStyle: { font: 'Helvetica' },
+ content: ['API document']
+}).getBuffer();
+
+// Adapt these lines to your HTTP framework:
+response.setHeader('Content-Type', 'application/pdf');
+response.setHeader('Content-Disposition', 'attachment; filename="document.pdf"');
+response.end(buffer);
+```
+
+This snippet assumes `pdfmake` is configured as above and `response` is your framework's response object. Validate request data before building a definition. Construct a fresh definition for each request; layout mutates it.
+
+## ESM applications
+
+The Node package exports a configured singleton. In an ESM application use `import pdfmake from 'pdfmake'`; do not instantiate it with `new PdfPrinter(...)` as in older examples. Register fonts and policies once during application startup. Avoid changing singleton configuration per concurrent request.
-Parameters for `createPdf`:
+## Next steps
-* `docDefinition` - object with document definition, see [chapter](/docs/0.3/document-definition-object/)
-* `options` _(optional)_ - advanced options see [options chapter](/docs/0.3/options/)
\ No newline at end of file
+[Output methods](/docs/0.3/getting-started/server-side/methods/) · [Resource access](/docs/0.3/guides/resource-security/) · [Invoice recipe](/docs/0.3/guides/invoice/)
diff --git a/content/getting-started/server-side/_index.pt-br.md b/content/getting-started/server-side/_index.pt-br.md
new file mode 100644
index 00000000..dcaa72ca
--- /dev/null
+++ b/content/getting-started/server-side/_index.pt-br.md
@@ -0,0 +1,73 @@
++++
+title = "Início rápido no Node.js"
+description = "Crie um arquivo PDF completo no Node.js com pdfmake 0.3, fontes padrão e saída baseada em Promises."
+weight = 12
+sourceDigest = "8cca67c7aaa82929be7388e0f7844c6250300ff14631cb12f266686f1cae3789"
++++
+
+## Instale
+
+Use Node.js **20 ou posterior**. Crie uma aplicação e instale o pdfmake:
+
+```sh
+npm init -y
+npm install pdfmake@0.3.12
+```
+
+A versão exata torna o exemplo reproduzível. Consulte as notas de versão e teste antes de escolher uma atualização.
+
+## Gere seu primeiro PDF
+
+Salve este exemplo completo como `first-pdf.cjs` e execute `node first-pdf.cjs`.
+
+```js
+// docs-test: node-quickstart
+const pdfmake = require('pdfmake');
+
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
+
+async function main() {
+ const definition = {
+ defaultStyle: { font: 'Helvetica' },
+ content: [
+ { text: 'Hello, pdfmake!', fontSize: 24, bold: true },
+ 'Your first PDF, generated in Node.js.'
+ ]
+ };
+ await pdfmake.createPdf(definition).write('document.pdf');
+}
+
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+`write()` resolve quando o arquivo de saída é fechado. Trate Promises rejeitadas para que uma falha na geração não produza silenciosamente uma resposta de API bem-sucedida.
+
+O Helvetica não precisa de arquivos de fonte locais, então o exemplo bloqueia URLs externas e permite, pela política local, apenas os identificadores das fontes padrão. A implementação atual verifica esses identificadores mesmo que eles não sejam caminhos de arquivo. As fontes padrão têm cobertura limitada de caracteres. Para documentos multilíngues, [registre arquivos de fonte adequados](/docs/0.3/pt-br/fonts/) e permita explicitamente os caminhos resolvidos.
+
+## Retorne bytes de PDF por uma API
+
+```js
+const buffer = await pdfmake.createPdf({
+ defaultStyle: { font: 'Helvetica' },
+ content: ['API document']
+}).getBuffer();
+
+// Adapt these lines to your HTTP framework:
+response.setHeader('Content-Type', 'application/pdf');
+response.setHeader('Content-Disposition', 'attachment; filename="document.pdf"');
+response.end(buffer);
+```
+
+Este trecho pressupõe que `pdfmake` foi configurado como acima e que `response` é o objeto de resposta do seu framework. Valide os dados da requisição antes de criar a definição. Crie uma definição nova para cada requisição; o layout a altera.
+
+## Aplicações ESM
+
+O pacote Node.js exporta um singleton configurado. Em uma aplicação ESM, use `import pdfmake from 'pdfmake'`; não o instancie com `new PdfPrinter(...)` como nos exemplos antigos. Registre fontes e políticas uma vez na inicialização da aplicação. Evite mudar a configuração do singleton por requisição concorrente.
+
+## Próximas etapas
+
+[Métodos de saída](/docs/0.3/pt-br/getting-started/server-side/methods/) · [Acesso a recursos](/docs/0.3/pt-br/guides/resource-security/) · [Receita para faturas](/docs/0.3/pt-br/guides/invoice/)
diff --git a/content/getting-started/server-side/examples.de.md b/content/getting-started/server-side/examples.de.md
new file mode 100644
index 00000000..608d9b55
--- /dev/null
+++ b/content/getting-started/server-side/examples.de.md
@@ -0,0 +1,9 @@
++++
+title = "Beispiele"
+description = "Sieh dir Beispiele für die Verwendung von pdfmake 0.3 an."
+weight = 13
+alwaysopen = true
+sourceDigest = "948d95fa838012c81b3343e5bcfafa089a1340bd04b510cdff7f3b4e5a44a8bb"
++++
+
+Siehe die [Beispiele](https://github.com/bpampuch/pdfmake/tree/master/examples) und das [Skript des Dev-Playground-Servers](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js).
diff --git a/content/getting-started/server-side/examples.es.md b/content/getting-started/server-side/examples.es.md
new file mode 100644
index 00000000..ce2336f4
--- /dev/null
+++ b/content/getting-started/server-side/examples.es.md
@@ -0,0 +1,9 @@
++++
+sourceDigest = "948d95fa838012c81b3343e5bcfafa089a1340bd04b510cdff7f3b4e5a44a8bb"
+title = "Ejemplos"
+description = "Configura ejemplos en pdfmake 0.3 con ejemplos, opciones y notas de uso."
+weight = 13
+alwaysopen = true
++++
+
+Consulta los [ejemplos](https://github.com/bpampuch/pdfmake/tree/master/examples) y el [script del servidor del entorno de desarrollo](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js).
diff --git a/content/getting-started/server-side/examples.fr.md b/content/getting-started/server-side/examples.fr.md
new file mode 100644
index 00000000..b1c0e049
--- /dev/null
+++ b/content/getting-started/server-side/examples.fr.md
@@ -0,0 +1,9 @@
++++
+title = "Exemples"
+description = "Découvrez les exemples et le serveur de développement du playground pour pdfmake 0.3."
+weight = 13
+alwaysopen = true
+sourceDigest = "948d95fa838012c81b3343e5bcfafa089a1340bd04b510cdff7f3b4e5a44a8bb"
++++
+
+Consultez les [exemples](https://github.com/bpampuch/pdfmake/tree/master/examples) et le [script du serveur dev-playground](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js).
diff --git a/content/getting-started/server-side/examples.md b/content/getting-started/server-side/examples.md
index e7eb518e..bd8ba811 100644
--- a/content/getting-started/server-side/examples.md
+++ b/content/getting-started/server-side/examples.md
@@ -1,8 +1,8 @@
+++
title = "Examples"
-description = ""
+description = "Configure examples in pdfmake 0.3 with examples, options and usage notes."
weight = 13
alwaysopen = true
+++
-see [examples](https://github.com/bpampuch/pdfmake/tree/master/examples) and [dev-playground server script](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js)
\ No newline at end of file
+see [examples](https://github.com/bpampuch/pdfmake/tree/master/examples) and [dev-playground server script](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js)
diff --git a/content/getting-started/server-side/examples.pt-br.md b/content/getting-started/server-side/examples.pt-br.md
new file mode 100644
index 00000000..74ff400b
--- /dev/null
+++ b/content/getting-started/server-side/examples.pt-br.md
@@ -0,0 +1,9 @@
++++
+title = "Exemplos"
+description = "Explore exemplos de uso do pdfmake 0.3 no servidor."
+weight = 13
+alwaysopen = true
+sourceDigest = "948d95fa838012c81b3343e5bcfafa089a1340bd04b510cdff7f3b4e5a44a8bb"
++++
+
+Consulte os [exemplos](https://github.com/bpampuch/pdfmake/tree/master/examples) e o [script do servidor do playground de desenvolvimento](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js).
diff --git a/content/getting-started/server-side/methods.de.md b/content/getting-started/server-side/methods.de.md
new file mode 100644
index 00000000..ff3c9012
--- /dev/null
+++ b/content/getting-started/server-side/methods.de.md
@@ -0,0 +1,71 @@
++++
+title = "Ausgabemethoden in Node.js"
+description = "Referenz für createPdf, Buffer, Base64, Datei- und Streamausgabe sowie Ressourcenrichtlinien in pdfmake 0.3."
+weight = 12
+sourceDigest = "f0daec88513f195e653aeface6a0c5a92da517ba092a13919c74940aa3169a09"
++++
+
+## Dokument erstellen
+
+```js
+const output = pdfmake.createPdf(docDefinition, options);
+```
+
+`docDefinition` ist eine [Dokumentdefinition](/docs/0.3/de/document-definition-object/). `options` ist ein optionales [Optionsobjekt](/docs/0.3/de/options/). `createPdf` gibt sofort einen Ausgabe-Wrapper zurück; Fehler bei der Generierung lehnen das Promise der Ausgabemethode ab. Ungültige Argumenttypen können synchron einen Fehler auslösen.
+
+## Ausgabemethoden
+
+| Methode | Ergebnis | Verwendung |
+| --- | --- | --- |
+| `write(filename)` | `undefined` | Datei schreiben und auf das Schließen warten |
+| `getBuffer()` | `Buffer` | PDF-Bytes für eine API zurückgeben |
+| `getBase64()` | `string` | Bytes als Base64 kodieren |
+| `getDataUrl()` | `string` | Base64 das Präfix `data:application/pdf;base64,` voranstellen |
+| `getStream()` | PDFKit-Dokumentstream | Stream direkt verwalten |
+
+```js
+try {
+ const output = pdfmake.createPdf(docDefinition);
+ const bytes = await output.getBuffer();
+ // Send or store bytes here.
+} catch (error) {
+ // Report generation failure to your caller.
+}
+```
+
+`getBuffer()` speichert sein Promise zwischen; `getBase64()` und `getDataUrl()` verwenden dieselben Bytes wieder. Erzeuge für einen unabhängigen Renderdurchlauf einen neuen Ausgabe-Wrapper. Kombiniere die manuelle Streamverarbeitung nicht mit Buffer- oder Dateihilfsmethoden auf demselben Wrapper.
+
+## Stream verarbeiten
+
+```js
+const stream = await pdfmake.createPdf(docDefinition).getStream();
+stream.on('error', error => { /* Handle generation errors. */ });
+destination.on('error', error => { /* Handle destination errors. */ });
+stream.pipe(destination);
+stream.end();
+```
+
+`destination` muss ein von deiner Anwendung verwalteter beschreibbarer Stream sein. Registriere Ereignis-Listener, bevor du `end()` aufrufst. Für eine einfache Datei ist `write()` vorzuziehen. Streaming macht das Dokumentlayout nicht inkrementell: pdfmake legt das Dokumentlayout fertig, bevor der Stream zurückgegeben wird.
+
+## URL-Zugriffsrichtlinie
+
+Verfügbar seit **0.3.6**. Konfiguriere sie vor dem Erstellen von Dokumenten:
+
+```js
+pdfmake.setUrlAccessPolicy(url => {
+ const parsed = new URL(url);
+ return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';
+});
+```
+
+Der Callback muss synchron den booleschen Wert `true` zurückgeben, damit eine URL erlaubt wird. Eine `async`-Funktion gibt ein Promise zurück und wird in der aktuellen Implementierung abgelehnt. Eine Zulassungsliste ist nur eine Schutzmaßnahme gegen SSRF; setze Netzwerkregeln ein oder verwende geprüfte Bytes, wenn du nicht vertrauenswürdige Eingaben verarbeitest. Siehe [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/).
+
+## Zugriff auf lokale Dateien
+
+Verfügbar seit **0.3.8**. Wenn alle Ressourcen eingebettet sind, kannst du lokale Dateien sperren:
+
+```js
+pdfmake.setLocalAccessPolicy(() => false);
+```
+
+Erlaube für lokale Schriften oder Bilder exakt aufgelöste Pfade statt eines Zeichenfolgenpräfixes. Siehe die [vollständige Einrichtung lokaler Schriften](/docs/0.3/de/fonts/). `undefined` löscht eine konfigurierte Richtlinie; eine nicht gesetzte Richtlinie sperrt nicht automatisch alle Zugriffe.
diff --git a/content/getting-started/server-side/methods.es.md b/content/getting-started/server-side/methods.es.md
new file mode 100644
index 00000000..f4559cb9
--- /dev/null
+++ b/content/getting-started/server-side/methods.es.md
@@ -0,0 +1,71 @@
++++
+sourceDigest = "f0daec88513f195e653aeface6a0c5a92da517ba092a13919c74940aa3169a09"
+title = "Métodos de salida en Node.js"
+description = "Referencia de createPdf, Buffer, base64, salida a archivos, flujos y políticas de recursos en pdfmake 0.3."
+weight = 12
++++
+
+## Crear un documento
+
+```js
+const output = pdfmake.createPdf(docDefinition, options);
+```
+
+`docDefinition` es una [definición de documento](/docs/0.3/es/document-definition-object/). `options` es un [objeto de opciones](/docs/0.3/es/options/) opcional. `createPdf` devuelve inmediatamente un contenedor de salida; los errores de generación rechazan la Promise del método de salida. Los tipos de argumentos no válidos pueden producir una excepción síncrona.
+
+## Métodos de salida
+
+| Método | Se resuelve como | Uso |
+| --- | --- | --- |
+| `write(filename)` | `undefined` | Escribe un archivo y espera a que se cierre |
+| `getBuffer()` | `Buffer` | Devuelve bytes PDF desde una API |
+| `getBase64()` | `string` | Codifica los bytes en Base64 |
+| `getDataUrl()` | `string` | Antepone `data:application/pdf;base64,` a Base64 |
+| `getStream()` | Flujo de documento PDFKit | Gestiona directamente un flujo |
+
+```js
+try {
+ const output = pdfmake.createPdf(docDefinition);
+ const bytes = await output.getBuffer();
+ // Send or store bytes here.
+} catch (error) {
+ // Report generation failure to your caller.
+}
+```
+
+`getBuffer()` almacena en caché su Promise; `getBase64()` y `getDataUrl()` reutilizan esos bytes. Crea un contenedor de salida nuevo para un renderizado independiente. No combines el consumo manual del flujo con los métodos de búfer o archivo en el mismo contenedor.
+
+## Consumir un flujo
+
+```js
+const stream = await pdfmake.createPdf(docDefinition).getStream();
+stream.on('error', error => { /* Handle generation errors. */ });
+destination.on('error', error => { /* Handle destination errors. */ });
+stream.pipe(destination);
+stream.end();
+```
+
+`destination` debe ser un flujo escribible gestionado por la aplicación. Añade los listeners antes de llamar a `end()`. Para un archivo sencillo, es preferible usar `write()`. La salida en flujo no hace que la maquetación del documento sea incremental: pdfmake sigue maquetando el documento antes de devolver este flujo.
+
+## Política de acceso a URL
+
+Disponible desde la versión **0.3.6**. Configúrala antes de crear documentos:
+
+```js
+pdfmake.setUrlAccessPolicy(url => {
+ const parsed = new URL(url);
+ return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';
+});
+```
+
+Para permitir una URL, el callback debe devolver el valor booleano `true` **de forma síncrona**. Una función `async` devuelve una Promise y la implementación actual la rechaza. Una lista de permitidos es solo una capa de protección contra SSRF; usa controles de red o proporciona bytes validados cuando proceses entradas que no sean de confianza. Consulta [seguridad de recursos](/docs/0.3/es/guides/resource-security/).
+
+## Política de acceso a archivos locales
+
+Disponible desde la versión **0.3.8**. Si todos los recursos están incrustados, deniega el acceso a archivos locales:
+
+```js
+pdfmake.setLocalAccessPolicy(() => false);
+```
+
+Para fuentes o imágenes locales, permite las rutas resueltas exactas en lugar de un prefijo de cadena. Consulta la [configuración completa de fuentes locales](/docs/0.3/es/fonts/). `undefined` borra una política configurada; omitir la política no equivale a denegar todo.
diff --git a/content/getting-started/server-side/methods.fr.md b/content/getting-started/server-side/methods.fr.md
new file mode 100644
index 00000000..2ca935b7
--- /dev/null
+++ b/content/getting-started/server-side/methods.fr.md
@@ -0,0 +1,71 @@
++++
+title = "Méthodes de sortie Node.js"
+description = "Référence de createPdf, Buffer, base64, sortie fichier, flux et politiques de ressources dans pdfmake 0.3."
+weight = 12
+sourceDigest = "f0daec88513f195e653aeface6a0c5a92da517ba092a13919c74940aa3169a09"
++++
+
+## Créer un document
+
+```js
+const output = pdfmake.createPdf(docDefinition, options);
+```
+
+`docDefinition` est une [définition de document](/docs/0.3/fr/document-definition-object/). `options` est un [objet d’options](/docs/0.3/fr/options/) facultatif. `createPdf` renvoie immédiatement un objet de sortie ; les erreurs de génération rejettent la Promise de la méthode de sortie. Des types d’arguments invalides peuvent provoquer une exception synchrone.
+
+## Méthodes de sortie
+
+| Méthode | Valeur résolue | Utilisation |
+| --- | --- | --- |
+| `write(filename)` | `undefined` | Écrit un fichier et attend sa fermeture |
+| `getBuffer()` | `Buffer` | Renvoie les octets PDF depuis une API |
+| `getBase64()` | `string` | Encode les octets en base64 |
+| `getDataUrl()` | `string` | Préfixe le base64 avec `data:application/pdf;base64,` |
+| `getStream()` | Flux de document PDFKit | Gère directement un flux |
+
+```js
+try {
+ const output = pdfmake.createPdf(docDefinition);
+ const bytes = await output.getBuffer();
+ // Send or store bytes here.
+} catch (error) {
+ // Report generation failure to your caller.
+}
+```
+
+`getBuffer()` met sa Promise en cache ; `getBase64()` et `getDataUrl()` réutilisent ces octets. Créez un nouvel objet de sortie pour chaque rendu indépendant. Ne combinez pas la lecture manuelle d’un flux avec les méthodes de sortie buffer ou fichier sur le même objet.
+
+## Consommer un flux
+
+```js
+const stream = await pdfmake.createPdf(docDefinition).getStream();
+stream.on('error', error => { /* Handle generation errors. */ });
+destination.on('error', error => { /* Handle destination errors. */ });
+stream.pipe(destination);
+stream.end();
+```
+
+`destination` doit être un flux inscriptible géré par votre application. Ajoutez les écouteurs avant d’appeler `end()`. Pour écrire simplement un fichier, préférez `write()`. La sortie en flux ne rend pas la mise en page incrémentale : pdfmake compose le document avant de renvoyer ce flux.
+
+## Politique d’accès aux URL
+
+Disponible depuis la version **0.3.6**. Configurez cette politique avant de créer les documents :
+
+```js
+pdfmake.setUrlAccessPolicy(url => {
+ const parsed = new URL(url);
+ return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';
+});
+```
+
+La fonction de rappel doit renvoyer **synchroniquement** la valeur booléenne `true` pour autoriser une URL. Une fonction `async` renvoie une Promise et est rejetée par l’implémentation actuelle. Une liste d’autorisation n’est qu’une couche de protection contre les SSRF ; utilisez des contrôles réseau ou fournissez des octets validés si vous traitez des entrées non fiables. Consultez la [sécurité des ressources](/docs/0.3/fr/guides/resource-security/).
+
+## Politique d’accès aux fichiers locaux
+
+Disponible depuis la version **0.3.8**. Refusez l’accès aux fichiers locaux lorsque toutes les ressources sont intégrées :
+
+```js
+pdfmake.setLocalAccessPolicy(() => false);
+```
+
+Pour les polices ou images locales, autorisez des chemins résolus exacts plutôt qu’un préfixe de chaîne. Consultez la [configuration complète des polices locales](/docs/0.3/fr/fonts/). `undefined` efface une politique configurée ; l’absence de politique ne signifie pas que tout accès est refusé.
diff --git a/content/getting-started/server-side/methods.md b/content/getting-started/server-side/methods.md
index 9a97f7c9..69c4e9da 100644
--- a/content/getting-started/server-side/methods.md
+++ b/content/getting-started/server-side/methods.md
@@ -1,164 +1,70 @@
+++
-title = "Methods"
-description = ""
+title = "Node.js output methods"
+description = "Reference for createPdf, Buffer, base64, file output, streams and resource policies in pdfmake 0.3."
weight = 12
-alwaysopen = true
+++
-#### Base usage
-
-This call will generate a PDF document, methods to get document are described below.
+## Create a document
```js
-pdfmake.createPdf(docDefinition);
-pdfmake.createPdf(docDefinition, options);
+const output = pdfmake.createPdf(docDefinition, options);
```
-Parameters:
-
-* `docDefinition` - object with document definition, see [chapter](/docs/0.3/document-definition-object/)
-* `options` _(optional)_ - advanced options see [options chapter](/docs/0.3/options/)
-
-#### Write the PDF document as file
-```js
-pdfmake.createPdf(docDefinition).write(filename).then(() => {
- // finished
-}, err => {
- console.error(err);
-});
-```
-Parameters:
+`docDefinition` is a [document definition](/docs/0.3/document-definition-object/). `options` is an optional [options object](/docs/0.3/options/). `createPdf` returns an output wrapper immediately; generation errors reject the output method's Promise. Invalid argument types can throw synchronously.
-* `filename` - PDF document file name
-* `options` _(optional)_ - advanced options see [options chapter](/docs/0.3/options/)
+## Output helpers
-#### Get the PDF document as URL data
+| Method | Resolves to | Use |
+| --- | --- | --- |
+| `write(filename)` | `undefined` | Write a file and wait for it to close |
+| `getBuffer()` | `Buffer` | Return PDF bytes from an API |
+| `getBase64()` | `string` | Encode the bytes as base64 |
+| `getDataUrl()` | `string` | Prefix base64 with `data:application/pdf;base64,` |
+| `getStream()` | PDFKit document stream | Manage a stream directly |
```js
-pdfmake.createPdf(docDefinition).getDataUrl().then((dataUrl) => {
- // ...
-}, err => {
- console.error(err);
-});
+try {
+ const output = pdfmake.createPdf(docDefinition);
+ const bytes = await output.getBuffer();
+ // Send or store bytes here.
+} catch (error) {
+ // Report generation failure to your caller.
+}
```
-#### Get the PDF document as base64 data
-```js
-pdfmake.createPdf(docDefinition).getBase64().then((data) => {
- console.log(data);
-}, err => {
- console.error(err);
-});
-```
+`getBuffer()` caches its Promise; `getBase64()` and `getDataUrl()` reuse those bytes. Create a new output wrapper for an independent render. Do not combine manual stream consumption with buffer/file helpers on the same wrapper.
-#### Get the PDF document as buffer
-```js
-pdfmake.createPdf(docDefinition).getBuffer().then((buffer) => {
- // ...
-}, err => {
- console.error(err);
-});
-```
-
-#### Get the PDF document as stream
+## Consume a stream
```js
-pdfmake.createPdf(docDefinition).getStream().then((stream) => {
- // ...
-}, err => {
- console.error(err);
-});
+const stream = await pdfmake.createPdf(docDefinition).getStream();
+stream.on('error', error => { /* Handle generation errors. */ });
+destination.on('error', error => { /* Handle destination errors. */ });
+stream.pipe(destination);
+stream.end();
```
-#### URL Access Policy
+`destination` must be a writable stream managed by your application. Attach listeners before calling `end()`. Prefer `write()` for a simple file. Streaming output does not make document layout incremental: pdfmake still lays out the document before returning this stream.
-{{% alert theme="warning" %}}Minimal version: **0.3.6**{{% /alert %}}
+## URL access policy
-The `setUrlAccessPolicy()` method allows you to define a custom security policy for external URLs before they are downloaded.
-
-This can be used to restrict allowed domains, enforce HTTPS, or prevent SSRF attacks by blocking private or internal network addresses.
-
-Basic example:
-```js
-pdfmake.setUrlAccessPolicy((url) => {
- // check allowed domain
- return url.startsWith("https://example.com/");
-});
-```
+Available since **0.3.6**. Configure it before creating documents:
-Allow only https urls:
```js
-pdfmake.setUrlAccessPolicy((url) => {
+pdfmake.setUrlAccessPolicy(url => {
const parsed = new URL(url);
-
- if (parsed.protocol !== "https:") {
- return false;
- }
-
- return true;
+ return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';
});
```
-Disallow localhost url:
-```js
-pdfmake.setUrlAccessPolicy(async (url) => {
- const parsed = new URL(url);
-
- if (parsed.hostname === "localhost") {
- return false;
- }
+The callback must return the boolean `true` **synchronously** to allow a URL. An `async` function returns a Promise and is rejected by the current implementation. An allowlist is only one layer of SSRF protection; use network controls or supply validated bytes when processing untrusted input. See [resource security](/docs/0.3/guides/resource-security/).
- return true;
-});
-```
+## Local file access policy
-Example with basic SSRF protection:
-
-**Sample only - change it according to your own protection requirements.**
+Available since **0.3.8**. Deny local files when all resources are embedded:
```js
-import dns from 'dns/promises';
-
-pdfmake.setUrlAccessPolicy(async (url) => {
- const parsed = new URL(url);
-
- // Resolve hostname to IP address
- const { address } = await dns.lookup(parsed.hostname);
-
- // Block localhost
- if (address === "127.0.0.1" || address === "::1") {
- return false;
- }
-
- // Block private IPv4 ranges
- if (
- address.startsWith("10.") ||
- address.startsWith("192.168.") ||
- address.startsWith("172.16.") ||
- address.startsWith("172.17.") ||
- address.startsWith("172.18.") ||
- address.startsWith("172.19.") ||
- address.startsWith("172.2") // 172.20–29
- ) {
- return false;
- }
-
- return true;
-});
+pdfmake.setLocalAccessPolicy(() => false);
```
-#### Local file Access Policy
-
-{{% alert theme="warning" %}}Minimal version: **0.3.8**{{% /alert %}}
-
-The `setLocalAccessPolicy()` method allows you to define a custom security policy for local files.
-
-This can be used to restrict allowed local paths.
-
-Basic example:
-```js
-pdfmake.setLocalAccessPolicy((path) => {
- // check allowed local file path
- return path.startsWith("fonts/");
-});
-```
\ No newline at end of file
+For local fonts or images, allow exact resolved paths rather than a string prefix. See the [complete local font setup](/docs/0.3/fonts/). `undefined` clears a configured policy; an omitted policy is not a deny-all policy.
diff --git a/content/getting-started/server-side/methods.pt-br.md b/content/getting-started/server-side/methods.pt-br.md
new file mode 100644
index 00000000..6294340a
--- /dev/null
+++ b/content/getting-started/server-side/methods.pt-br.md
@@ -0,0 +1,71 @@
++++
+title = "Métodos de saída no Node.js"
+description = "Referência de createPdf, Buffer, base64, gravação de arquivos, streams e políticas de acesso a recursos no pdfmake 0.3."
+weight = 12
+sourceDigest = "f0daec88513f195e653aeface6a0c5a92da517ba092a13919c74940aa3169a09"
++++
+
+## Crie um documento
+
+```js
+const output = pdfmake.createPdf(docDefinition, options);
+```
+
+`docDefinition` é uma [definição de documento](/docs/0.3/pt-br/document-definition-object/). `options` é um [objeto de opções](/docs/0.3/pt-br/options/) opcional. `createPdf` retorna imediatamente um wrapper de saída; erros de geração rejeitam a Promise do método de saída. Tipos de argumentos inválidos podem lançar uma exceção síncrona.
+
+## Métodos de saída
+
+| Método | Valor resolvido | Uso |
+| --- | --- | --- |
+| `write(filename)` | `undefined` | Grava um arquivo e aguarda seu fechamento |
+| `getBuffer()` | `Buffer` | Retorna bytes do PDF para uma API |
+| `getBase64()` | `string` | Codifica os bytes em base64 |
+| `getDataUrl()` | `string` | Prefixa base64 com `data:application/pdf;base64,` |
+| `getStream()` | Stream de documento PDFKit | Gerencia diretamente um stream |
+
+```js
+try {
+ const output = pdfmake.createPdf(docDefinition);
+ const bytes = await output.getBuffer();
+ // Send or store bytes here.
+} catch (error) {
+ // Report generation failure to your caller.
+}
+```
+
+`getBuffer()` armazena sua Promise em cache; `getBase64()` e `getDataUrl()` reutilizam esses bytes. Crie um novo wrapper de saída para uma renderização independente. Não combine o consumo manual do stream com métodos de buffer ou gravação de arquivo no mesmo wrapper.
+
+## Consuma um stream
+
+```js
+const stream = await pdfmake.createPdf(docDefinition).getStream();
+stream.on('error', error => { /* Handle generation errors. */ });
+destination.on('error', error => { /* Handle destination errors. */ });
+stream.pipe(destination);
+stream.end();
+```
+
+`destination` precisa ser um stream gravável gerenciado pela aplicação. Adicione os listeners antes de chamar `end()`. Para gravar um arquivo simples, prefira `write()`. A saída por stream não torna o layout incremental: o pdfmake ainda organiza o documento antes de retornar esse stream.
+
+## Política de acesso a URLs
+
+Disponível desde a versão **0.3.6**. Configure-a antes de criar documentos:
+
+```js
+pdfmake.setUrlAccessPolicy(url => {
+ const parsed = new URL(url);
+ return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';
+});
+```
+
+A função de callback deve retornar o booleano `true` **sincronamente** para permitir uma URL. Uma função `async` retorna uma Promise e é rejeitada pela implementação atual. Uma lista de permissões é apenas uma camada de proteção contra SSRF; use controles de rede ou forneça bytes validados ao processar entradas não confiáveis. Consulte [segurança de recursos](/docs/0.3/pt-br/guides/resource-security/).
+
+## Política de acesso a arquivos locais
+
+Disponível desde a versão **0.3.8**. Se todos os recursos estiverem incorporados, bloqueie arquivos locais:
+
+```js
+pdfmake.setLocalAccessPolicy(() => false);
+```
+
+Para fontes ou imagens locais, permita os caminhos resolvidos exatos em vez de um prefixo de texto. Consulte a [configuração completa de fontes locais](/docs/0.3/pt-br/fonts/). `undefined` remove uma política configurada; uma política omitida não bloqueia tudo.
diff --git a/content/getting-started/server-side/supported-nodejs-versions.de.md b/content/getting-started/server-side/supported-nodejs-versions.de.md
new file mode 100644
index 00000000..563ed29d
--- /dev/null
+++ b/content/getting-started/server-side/supported-nodejs-versions.de.md
@@ -0,0 +1,12 @@
++++
+title = "Unterstützte Node.js-Versionen"
+description = "Prüfe die Laufzeitanforderung des Pakets und die CI-Laufzeitmatrix für pdfmake 0.3."
+weight = 11
+sourceDigest = "a3773119140b35aeeb52b0f988b7fbc41e35370ef21c63bcb1f6d8de8683380d"
++++
+
+## Laufzeitanforderung
+
+Das Paket 0.3.12 gibt in `package.json` **Node.js >=20** als Mindestversion an. Die vorgeschlagene CI-Matrix umfasst Node.js 20, 22 und 24 unter Linux, Windows und macOS. Diese Kompatibilitätstests sind unabhängig vom Sicherheits-Support der Node.js-Versionen.
+
+Verwende in der Produktion eine Node.js-Version, die noch gewartet wird. Sieh im [offiziellen Veröffentlichungsplan von Node.js](https://github.com/nodejs/Release#release-schedule) nach, bevor du eine Laufzeit auswählst. Teste deine Schriften, Ressourcen und Dokumentlast mit genau der Version, die du bereitstellst.
diff --git a/content/getting-started/server-side/supported-nodejs-versions.es.md b/content/getting-started/server-side/supported-nodejs-versions.es.md
new file mode 100644
index 00000000..5951f631
--- /dev/null
+++ b/content/getting-started/server-side/supported-nodejs-versions.es.md
@@ -0,0 +1,12 @@
++++
+sourceDigest = "a3773119140b35aeeb52b0f988b7fbc41e35370ef21c63bcb1f6d8de8683380d"
+title = "Versiones de Node.js compatibles"
+description = "Consulta el requisito de versión del paquete y la matriz de entornos de integración continua para pdfmake 0.3."
+weight = 11
++++
+
+## Requisito de versión
+
+El paquete 0.3.12 declara **Node.js >=20** en `package.json`. La matriz de CI propuesta incluye Node.js 20, 22 y 24 en Linux, Windows y macOS. La cobertura de compatibilidad es independiente del soporte de seguridad de Node.js upstream.
+
+Para producción, usa una versión de Node.js que siga en mantenimiento. Consulta el [calendario oficial de versiones de Node.js](https://github.com/nodejs/Release#release-schedule) antes de elegir el entorno de ejecución. Prueba tus fuentes, recursos y carga de documentos en la versión exacta que vas a desplegar.
diff --git a/content/getting-started/server-side/supported-nodejs-versions.fr.md b/content/getting-started/server-side/supported-nodejs-versions.fr.md
new file mode 100644
index 00000000..afed2fbf
--- /dev/null
+++ b/content/getting-started/server-side/supported-nodejs-versions.fr.md
@@ -0,0 +1,12 @@
++++
+title = "Versions de Node.js prises en charge"
+description = "Vérifiez la version minimale requise par le paquet et la matrice d’exécution d’intégration continue de pdfmake 0.3."
+weight = 11
+sourceDigest = "a3773119140b35aeeb52b0f988b7fbc41e35370ef21c63bcb1f6d8de8683380d"
++++
+
+## Version minimale requise
+
+Le paquet 0.3.12 déclare **Node.js >=20** dans `package.json`. La matrice CI proposée couvre Node.js 20, 22 et 24 sous Linux, Windows et macOS. La couverture de compatibilité est distincte de la prise en charge de sécurité de Node.js en amont.
+
+En production, utilisez une version de Node.js encore maintenue. Consultez le [calendrier officiel des versions de Node.js](https://github.com/nodejs/Release#release-schedule) avant de choisir votre environnement. Testez vos polices, vos ressources et votre charge de génération sur la version exacte que vous déployez.
diff --git a/content/getting-started/server-side/supported-nodejs-versions.md b/content/getting-started/server-side/supported-nodejs-versions.md
index ab6318b6..710e32fd 100644
--- a/content/getting-started/server-side/supported-nodejs-versions.md
+++ b/content/getting-started/server-side/supported-nodejs-versions.md
@@ -1,10 +1,11 @@
+++
title = "Supported Node.js versions"
-description = ""
+description = "Check the package engine requirement and continuous-integration runtime matrix for pdfmake 0.3."
weight = 11
-alwaysopen = true
+++
-* 20 LTS (End-of-life: April 2026)
-* 22 LTS (End-of-life: April 2027)
-* 24 LTS (End-of-life: April 2028)
\ No newline at end of file
+## Engine requirement
+
+The 0.3.12 package declares **Node.js >=20** in `package.json`. The proposed CI matrix covers Node.js 20, 22 and 24 on Linux, Windows and macOS. Compatibility coverage is separate from upstream Node.js security support.
+
+Use a Node.js release that is still maintained for production. Consult the [official Node.js release schedule](https://github.com/nodejs/Release#release-schedule) before choosing a runtime. Test your own fonts, resources and document workload on the exact version you deploy.
diff --git a/content/getting-started/server-side/supported-nodejs-versions.pt-br.md b/content/getting-started/server-side/supported-nodejs-versions.pt-br.md
new file mode 100644
index 00000000..cc7d23a0
--- /dev/null
+++ b/content/getting-started/server-side/supported-nodejs-versions.pt-br.md
@@ -0,0 +1,12 @@
++++
+title = "Versões compatíveis do Node.js"
+description = "Consulte o requisito do pacote e a matriz de ambientes de execução da integração contínua para o pdfmake 0.3."
+weight = 11
+sourceDigest = "a3773119140b35aeeb52b0f988b7fbc41e35370ef21c63bcb1f6d8de8683380d"
++++
+
+## Requisito do mecanismo
+
+O pacote 0.3.12 declara **Node.js >=20** em `package.json`. A matriz de CI proposta abrange Node.js 20, 22 e 24 em Linux, Windows e macOS. A cobertura de compatibilidade é diferente do suporte de segurança oferecido pelo projeto Node.js.
+
+Em produção, use uma versão do Node.js que ainda receba manutenção. Consulte o [cronograma oficial de versões do Node.js](https://github.com/nodejs/Release#release-schedule) antes de escolher o ambiente de execução. Teste suas fontes, recursos e carga de documentos na versão exata que será implantada.
diff --git a/content/guides/_index.de.md b/content/guides/_index.de.md
new file mode 100644
index 00000000..42e4e479
--- /dev/null
+++ b/content/guides/_index.de.md
@@ -0,0 +1,17 @@
++++
+title = "Anleitungen und Rezepte"
+description = "Praktische Rezepte für pdfmake 0.3 zu APIs, Rechnungen, Sicherheit, Leistung, Migration und KI-gestützter Entwicklung."
+weight = 15
+sourceDigest = "cb74b315d38242522e55688bb21f3467ea69795d4ed5f0279aa709979a5549cf"
++++
+
+## Dokumente erstellen und betreiben
+
+- [Playground-Anleitung](/docs/0.3/de/guides/playground/): Beispiele bearbeiten, Seiten prüfen und Quelldateien lokal behalten.
+- [Rezept: Rechnung](/docs/0.3/de/guides/invoice/): ein vollständiges ausführbares Dokument mit Tabelle, Summen und Seitenzahlen.
+- [API-Übersicht](/docs/0.3/de/guides/api-reference/): wo Konfiguration, Definitionen und Ausgabemethoden hingehören.
+- [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/): URLs, Dateien und nicht vertrauenswürdige Eingaben sicher verarbeiten.
+- [Leistung](/docs/0.3/de/guides/performance/): Layout, Ausgabe, Speicher und Parallelität getrennt messen.
+- [Fehlerbehebung](/docs/0.3/de/guides/troubleshooting/): Probleme mit Schriften, Imports, Tabellen und Ausgaben diagnostizieren.
+- [LLM- und MCP-Integration](/docs/0.3/de/guides/llm-and-mcp/): versionierte Dokumentation online und offline mit KI-Werkzeugen verwenden.
+- [Mitwirken](/docs/0.3/de/guides/contributing/): Quellcode finden und Regressionen testen.
diff --git a/content/guides/_index.es.md b/content/guides/_index.es.md
new file mode 100644
index 00000000..3ce0512b
--- /dev/null
+++ b/content/guides/_index.es.md
@@ -0,0 +1,18 @@
++++
+title = "Guías y recetas"
+description = "Recetas prácticas de pdfmake 0.3 para API, facturas, seguridad, rendimiento, migración y desarrollo asistido por IA."
+weight = 15
+sourceDigest = "cb74b315d38242522e55688bb21f3467ea69795d4ed5f0279aa709979a5549cf"
++++
+
+## Crear y gestionar documentos
+
+- [Guía del entorno de pruebas](/docs/0.3/es/guides/playground/): edita ejemplos, inspecciona páginas y conserva los archivos de código fuente localmente.
+
+- [Receta para una factura](/docs/0.3/es/guides/invoice/): documento ejecutable completo con tabla, totales y números de página.
+- [Referencia de la API](/docs/0.3/es/guides/api-reference/): dónde corresponden la configuración, las definiciones y los métodos de salida.
+- [Seguridad de recursos](/docs/0.3/es/guides/resource-security/): gestión segura de URL, archivos y entradas que no sean de confianza.
+- [Rendimiento](/docs/0.3/es/guides/performance/): mide por separado la maquetación, la salida, la memoria y la concurrencia.
+- [Solución de problemas](/docs/0.3/es/guides/troubleshooting/): diagnostica problemas con fuentes, importaciones, tablas y salida.
+- [Integración con LLM y MCP](/docs/0.3/es/guides/llm-and-mcp/): documentación versionada para herramientas de IA, en línea y sin conexión.
+- [Contribuciones](/docs/0.3/es/guides/contributing/): navegación por el código fuente y pruebas de regresión.
diff --git a/content/guides/_index.fr.md b/content/guides/_index.fr.md
new file mode 100644
index 00000000..1c11901b
--- /dev/null
+++ b/content/guides/_index.fr.md
@@ -0,0 +1,17 @@
++++
+title = "Guides et recettes"
+description = "Des recettes pratiques pour pdfmake 0.3 : API, factures, sécurité, performances, dépannage et développement assisté par l’IA."
+weight = 15
+sourceDigest = "cb74b315d38242522e55688bb21f3467ea69795d4ed5f0279aa709979a5549cf"
++++
+
+## Créer et gérer des documents
+
+- [Guide du playground](/docs/0.3/fr/guides/playground/) : modifiez les exemples, examinez les pages et conservez les fichiers source en local.
+- [Recette de facture](/docs/0.3/fr/guides/invoice/) : un document complet et exécutable avec tableau, totaux et numéros de page.
+- [Référence de l’API](/docs/0.3/fr/guides/api-reference/) : où placer la configuration, les définitions et les méthodes de sortie.
+- [Sécurité des ressources](/docs/0.3/fr/guides/resource-security/) : gérer les URL, les fichiers et les entrées non fiables en toute sécurité.
+- [Performances](/docs/0.3/fr/guides/performance/) : mesurer séparément la mise en page, la sortie, la mémoire et la concurrence.
+- [Dépannage](/docs/0.3/fr/guides/troubleshooting/) : diagnostiquer les problèmes de polices, d’imports, de tableaux et de génération.
+- [Intégration LLM et MCP](/docs/0.3/fr/guides/llm-and-mcp/) : documentation versionnée pour les outils d’IA, en ligne et hors ligne.
+- [Contribuer](/docs/0.3/fr/guides/contributing/) : explorer les sources et exécuter les tests de non-régression.
diff --git a/content/guides/_index.md b/content/guides/_index.md
new file mode 100644
index 00000000..b1508820
--- /dev/null
+++ b/content/guides/_index.md
@@ -0,0 +1,17 @@
++++
+title = "Guides and recipes"
+description = "Practical pdfmake 0.3 recipes for APIs, invoices, security, performance, migration and AI-assisted development."
+weight = 15
++++
+
+## Build and operate documents
+
+- [Playground guide](/docs/0.3/guides/playground/): edit examples, inspect pages and keep source files locally.
+
+- [Invoice recipe](/docs/0.3/guides/invoice/): a complete runnable document with a table, totals and page numbers.
+- [API reference](/docs/0.3/guides/api-reference/): where configuration, definitions and output methods belong.
+- [Resource security](/docs/0.3/guides/resource-security/): safe handling of URLs, files and untrusted inputs.
+- [Performance](/docs/0.3/guides/performance/): measure layout, output, memory and concurrency separately.
+- [Troubleshooting](/docs/0.3/guides/troubleshooting/): diagnose fonts, imports, tables and output failures.
+- [LLM and MCP integration](/docs/0.3/guides/llm-and-mcp/): versioned docs for AI tools, online and offline.
+- [Contributing](/docs/0.3/guides/contributing/): source navigation and regression testing.
diff --git a/content/guides/_index.pt-br.md b/content/guides/_index.pt-br.md
new file mode 100644
index 00000000..b1e5644a
--- /dev/null
+++ b/content/guides/_index.pt-br.md
@@ -0,0 +1,20 @@
++++
+title = "Guias práticos"
+description = "Resolva erros, proteja recursos, mantenha documentos localmente e integre pdfmake 0.3 à sua aplicação com exemplos claros."
+weight = 15
+sourceDigest = "cb74b315d38242522e55688bb21f3467ea69795d4ed5f0279aa709979a5549cf"
++++
+
+## Para o trabalho diário
+
+- [Erros e diagnósticos](/docs/0.3/pt-br/guides/errors/): diferencie sintaxe JavaScript, estrutura do documento, recursos e saída; leia os diagnósticos do playground e da biblioteca.
+- [Segurança de recursos](/docs/0.3/pt-br/guides/resource-security/): controle arquivos locais, imagens, URLs e entradas não confiáveis.
+- [Exemplo de fatura](/docs/0.3/pt-br/guides/invoice/): gere uma fatura completa com tabela de itens, total, estilos e número de página.
+- [Desempenho e memória](/docs/0.3/pt-br/guides/performance/): meça custos de layout e saída, reduza recursos repetidos e controle a concorrência.
+- [Solução de problemas](/docs/0.3/pt-br/guides/troubleshooting/): verifique fontes, tabelas, importações, Promises e recursos.
+- [Integração com LLM e MCP](/docs/0.3/pt-br/guides/llm-and-mcp/): consulte a documentação em Markdown ou por ferramentas MCP.
+- [Visão geral da API](/docs/0.3/pt-br/guides/api-reference/): encontre métodos de configuração, opções de renderização e funções de saída.
+- [Contribuição e arquitetura do código-fonte](/docs/0.3/pt-br/guides/contributing/): valide mudanças na biblioteca ou na documentação.
+- [Playground](/docs/0.3/pt-br/guides/playground/): edite, veja a prévia automática e salve localmente.
+
+Crie uma definição nova para cada solicitação: o layout modifica o objeto. Valide os dados e nunca execute callbacks JavaScript de origem não confiável.
diff --git a/content/guides/api-reference.de.md b/content/guides/api-reference.de.md
new file mode 100644
index 00000000..75831903
--- /dev/null
+++ b/content/guides/api-reference.de.md
@@ -0,0 +1,36 @@
++++
+title = "API-Übersicht"
+description = "Finde Konfigurationsmethoden, Rendering-Optionen und Ausgabemethoden der Node.js- und Browser-APIs von pdfmake 0.3."
+weight = 2
+sourceDigest = "f1491a6775394bd4e30fc8da29d4972607400a030e766c3e7acd329137b35166"
++++
+
+## Einmal konfigurieren, oft rendern
+
+Beide Einstiegspunkte stellen ein Singleton bereit. Konfiguriere Schriften, Richtlinien und Layouts beim Start der Anwendung. Ändere keine gemeinsam genutzte Konfiguration, während parallele Anfragen rendern.
+
+| Methode | Laufzeit | Verhalten |
+| --- | --- | --- |
+| `addFonts(fonts)` | Beide | Schriftfamilien zusammenführen; eine angegebene Familie ersetzt die bisherige Zuordnung |
+| `setFonts(fonts)` | Beide | Gesamte Schriftzuordnung ersetzen |
+| `clearFonts()` | Beide | Registrierte Schriften entfernen |
+| `addTableLayouts(layouts)` | Beide | Benannte Layoutfunktionen zusammenführen |
+| `setTableLayouts(layouts)` | Beide | Benannte Layoutfunktionen ersetzen |
+| `clearTableLayouts()` | Beide | Benutzerdefinierte Layouts entfernen |
+| `setProgressCallback(callback)` | Beide | Rendering-Fortschritt empfangen; kein Profiler für das Seitenlayout |
+| `setUrlAccessPolicy(callback)` | Beide, seit 0.3.6 | Ressourcen-URLs nur zulassen, wenn der Callback synchron `true` zurückgibt |
+| `setLocalAccessPolicy(callback)` | Node.js, seit 0.3.8 | Lokale Ressourcen nur zulassen, wenn der Callback synchron `true` zurückgibt |
+| `addVirtualFileSystem(vfs)` | Browser | Base64-Schrift- und Ressourcendaten zum virtuellen Dateisystem hinzufügen |
+| `addFontContainer(container)` | Browser | Einen gebündelten Schriftcontainer registrieren |
+
+## Rendern
+
+`createPdf(docDefinition, options?)` akzeptiert Objekte und gibt einen Ausgabe-Wrapper zurück. Verwende [Dokumentfelder](/docs/0.3/de/document-definition-object/) im ersten Argument und [Rendering-Optionen](/docs/0.3/de/options/) im zweiten.
+
+| Ausgabe | Node.js | Browser |
+| --- | --- | --- |
+| `getBuffer()`, `getBase64()`, `getDataUrl()`, `getStream()` | Ja | Ja |
+| `write(filename)` | Ja | Nein |
+| `download(filename?)`, `open(window?)`, `print(window?)`, `getBlob()` | Nein | Ja |
+
+Alle Ausgabemethoden geben Promises zurück. Behandle abgelehnte Promises immer. Der `createPdf`-Wrapper selbst ist kein Promise. Details zum Lebenszyklus findest du unter [Node.js-Methoden](/docs/0.3/de/getting-started/server-side/methods/) und [Browsermethoden](/docs/0.3/de/getting-started/client-side/methods/).
diff --git a/content/guides/api-reference.es.md b/content/guides/api-reference.es.md
new file mode 100644
index 00000000..1bfe0a2c
--- /dev/null
+++ b/content/guides/api-reference.es.md
@@ -0,0 +1,36 @@
++++
+sourceDigest = "f1491a6775394bd4e30fc8da29d4972607400a030e766c3e7acd329137b35166"
+title = "Resumen de la API"
+description = "Consulta los métodos de configuración, las opciones de renderizado y los métodos de salida de las API de Node.js y navegador de pdfmake 0.3."
+weight = 2
++++
+
+## Configurar una vez y renderizar muchas veces
+
+Ambos puntos de entrada exponen un singleton. Configura las fuentes, las políticas y las distribuciones al iniciar la aplicación. No sustituyas la configuración compartida mientras se renderizan solicitudes simultáneas.
+
+| Método | Entorno | Comportamiento |
+| --- | --- | --- |
+| `addFonts(fonts)` | Ambos | Combina familias de fuentes; una familia proporcionada sustituye la asignación anterior |
+| `setFonts(fonts)` | Ambos | Sustituye todo el mapa de fuentes |
+| `clearFonts()` | Ambos | Borra las fuentes registradas |
+| `addTableLayouts(layouts)` | Ambos | Combina funciones de distribución con nombre |
+| `setTableLayouts(layouts)` | Ambos | Sustituye las distribuciones con nombre |
+| `clearTableLayouts()` | Ambos | Borra las distribuciones personalizadas |
+| `setProgressCallback(callback)` | Ambos | Recibe el progreso del renderizado; no es un perfilador de maquetación por página |
+| `setUrlAccessPolicy(callback)` | Ambos, desde 0.3.6 | Permite URL de recursos solo si el callback devuelve `true` de forma síncrona |
+| `setLocalAccessPolicy(callback)` | Node, desde 0.3.8 | Permite recursos locales solo si el callback devuelve `true` de forma síncrona |
+| `addVirtualFileSystem(vfs)` | Navegador | Añade datos Base64 de fuentes y recursos al sistema de archivos virtual |
+| `addFontContainer(container)` | Navegador | Registra un contenedor de fuentes empaquetado |
+
+## Renderizar
+
+`createPdf(docDefinition, options?)` acepta objetos y devuelve un contenedor de salida. Usa los [campos del documento](/docs/0.3/es/document-definition-object/) en el primer argumento y las [opciones de renderizado](/docs/0.3/es/options/) en el segundo.
+
+| Salida | Node | Navegador |
+| --- | --- | --- |
+| `getBuffer()`, `getBase64()`, `getDataUrl()`, `getStream()` | Sí | Sí |
+| `write(filename)` | Sí | No |
+| `download(filename?)`, `open(window?)`, `print(window?)`, `getBlob()` | No | Sí |
+
+Todos los métodos de salida devuelven Promises. Gestiona siempre los rechazos. El contenedor que devuelve `createPdf` no es una Promise. Consulta [métodos de Node](/docs/0.3/es/getting-started/server-side/methods/) y [métodos del navegador](/docs/0.3/es/getting-started/client-side/methods/) para conocer los detalles del ciclo de vida.
diff --git a/content/guides/api-reference.fr.md b/content/guides/api-reference.fr.md
new file mode 100644
index 00000000..dddc487a
--- /dev/null
+++ b/content/guides/api-reference.fr.md
@@ -0,0 +1,36 @@
++++
+title = "API en bref"
+description = "Retrouvez les méthodes de configuration, les options de rendu et les fonctions de sortie de l’API pdfmake 0.3 pour Node.js et le navigateur."
+weight = 2
+sourceDigest = "f1491a6775394bd4e30fc8da29d4972607400a030e766c3e7acd329137b35166"
++++
+
+## Configurer une fois, générer plusieurs fois
+
+Les deux points d’entrée exposent un singleton. Configurez les polices, les règles d’accès et les mises en page au démarrage de l’application. Ne remplacez pas la configuration partagée pendant le rendu de requêtes concurrentes.
+
+| Méthode | Environnement | Comportement |
+| --- | --- | --- |
+| `addFonts(fonts)` | Les deux | Fusionne les familles de polices ; une famille fournie remplace le mappage précédent de cette famille |
+| `setFonts(fonts)` | Les deux | Remplace l’ensemble de la table de polices |
+| `clearFonts()` | Les deux | Efface les polices enregistrées |
+| `addTableLayouts(layouts)` | Les deux | Fusionne les fonctions de mise en page nommées |
+| `setTableLayouts(layouts)` | Les deux | Remplace les mises en page nommées |
+| `clearTableLayouts()` | Les deux | Efface les mises en page personnalisées |
+| `setProgressCallback(callback)` | Les deux | Reçoit la progression du rendu ; ce n’est pas un profileur de mise en page |
+| `setUrlAccessPolicy(callback)` | Les deux, depuis 0.3.6 | Autorise les URL de ressources uniquement si la fonction renvoie `true` de façon synchrone |
+| `setLocalAccessPolicy(callback)` | Node, depuis 0.3.8 | Autorise les ressources locales uniquement si la fonction renvoie `true` de façon synchrone |
+| `addVirtualFileSystem(vfs)` | Navigateur | Ajoute des données de police ou de ressource encodées en base64 au système de fichiers virtuel |
+| `addFontContainer(container)` | Navigateur | Enregistre un conteneur de polices empaqueté |
+
+## Générer
+
+`createPdf(docDefinition, options?)` accepte des objets et renvoie un conteneur de sortie. Utilisez les [champs de document](/docs/0.3/fr/document-definition-object/) dans le premier argument et les [options de rendu](/docs/0.3/fr/options/) dans le second.
+
+| Sortie | Node | Navigateur |
+| --- | --- | --- |
+| `getBuffer()`, `getBase64()`, `getDataUrl()`, `getStream()` | Oui | Oui |
+| `write(filename)` | Oui | Non |
+| `download(filename?)`, `open(window?)`, `print(window?)`, `getBlob()` | Non | Oui |
+
+Toutes les fonctions de sortie renvoient des Promises. Gérez toujours leur rejet. Le conteneur renvoyé par `createPdf` n’est pas une Promise. Consultez les détails du cycle de vie pour les [méthodes Node](/docs/0.3/fr/getting-started/server-side/methods/) et les [méthodes navigateur](/docs/0.3/fr/getting-started/client-side/methods/).
diff --git a/content/guides/api-reference.md b/content/guides/api-reference.md
new file mode 100644
index 00000000..ecb59954
--- /dev/null
+++ b/content/guides/api-reference.md
@@ -0,0 +1,35 @@
++++
+title = "API at a glance"
+description = "Find configuration methods, rendering options and output helpers for the pdfmake 0.3 Node.js and browser APIs."
+weight = 2
++++
+
+## Configure once, render many
+
+Both entry points expose a singleton. Configure fonts, policies and layouts at application startup. Do not replace shared configuration while concurrent requests are rendering.
+
+| Method | Runtime | Behavior |
+| --- | --- | --- |
+| `addFonts(fonts)` | Both | Merge font families; a supplied family replaces the previous family mapping |
+| `setFonts(fonts)` | Both | Replace the whole font map |
+| `clearFonts()` | Both | Clear registered fonts |
+| `addTableLayouts(layouts)` | Both | Merge named layout functions |
+| `setTableLayouts(layouts)` | Both | Replace named layouts |
+| `clearTableLayouts()` | Both | Clear custom layouts |
+| `setProgressCallback(callback)` | Both | Receive rendering progress; not a page-layout profiler |
+| `setUrlAccessPolicy(callback)` | Both, since 0.3.6 | Allow resource URLs only when callback returns `true` synchronously |
+| `setLocalAccessPolicy(callback)` | Node, since 0.3.8 | Allow local resources only when callback returns `true` synchronously |
+| `addVirtualFileSystem(vfs)` | Browser | Add base64 font/resource data to the virtual filesystem |
+| `addFontContainer(container)` | Browser | Register a packaged font container |
+
+## Render
+
+`createPdf(docDefinition, options?)` accepts objects and returns an output wrapper. Use [document fields](/docs/0.3/document-definition-object/) in the first argument and [render options](/docs/0.3/options/) in the second.
+
+| Output | Node | Browser |
+| --- | --- | --- |
+| `getBuffer()`, `getBase64()`, `getDataUrl()`, `getStream()` | Yes | Yes |
+| `write(filename)` | Yes | No |
+| `download(filename?)`, `open(window?)`, `print(window?)`, `getBlob()` | No | Yes |
+
+All output helpers return Promises. Always handle rejection. The `createPdf` wrapper itself is not a Promise. See [Node methods](/docs/0.3/getting-started/server-side/methods/) and [browser methods](/docs/0.3/getting-started/client-side/methods/) for lifecycle details.
diff --git a/content/guides/api-reference.pt-br.md b/content/guides/api-reference.pt-br.md
new file mode 100644
index 00000000..b4ba410c
--- /dev/null
+++ b/content/guides/api-reference.pt-br.md
@@ -0,0 +1,36 @@
++++
+title = "Visão geral da API"
+description = "Consulte os métodos de configuração, as opções de renderização e as funções de saída das APIs Node.js e navegador do pdfmake 0.3."
+weight = 2
+sourceDigest = "f1491a6775394bd4e30fc8da29d4972607400a030e766c3e7acd329137b35166"
++++
+
+## Configure uma vez, renderize várias vezes
+
+Ambas as entradas expõem um singleton. Configure fontes, políticas e layouts na inicialização da aplicação. Não substitua a configuração compartilhada enquanto houver solicitações simultâneas em renderização.
+
+| Método | Ambiente | Comportamento |
+| --- | --- | --- |
+| `addFonts(fonts)` | Ambos | Mescla famílias de fontes; uma família fornecida substitui o mapeamento anterior dessa família |
+| `setFonts(fonts)` | Ambos | Substitui todo o mapa de fontes |
+| `clearFonts()` | Ambos | Limpa as fontes registradas |
+| `addTableLayouts(layouts)` | Ambos | Mescla funções de layout nomeadas |
+| `setTableLayouts(layouts)` | Ambos | Substitui os layouts nomeados |
+| `clearTableLayouts()` | Ambos | Limpa os layouts personalizados |
+| `setProgressCallback(callback)` | Ambos | Recebe o progresso da renderização; não é um profiler de layout de páginas |
+| `setUrlAccessPolicy(callback)` | Ambos, desde 0.3.6 | Permite URLs de recursos somente quando o callback retorna `true` de forma síncrona |
+| `setLocalAccessPolicy(callback)` | Node, desde 0.3.8 | Permite recursos locais somente quando o callback retorna `true` de forma síncrona |
+| `addVirtualFileSystem(vfs)` | Navegador | Adiciona dados de fontes/recursos em base64 ao sistema de arquivos virtual |
+| `addFontContainer(container)` | Navegador | Registra um contêiner de fontes empacotado |
+
+## Renderize
+
+`createPdf(docDefinition, options?)` aceita objetos e retorna um invólucro de saída. Use [campos do documento](/docs/0.3/pt-br/document-definition-object/) no primeiro argumento e [opções de renderização](/docs/0.3/pt-br/options/) no segundo.
+
+| Saída | Node | Navegador |
+| --- | --- | --- |
+| `getBuffer()`, `getBase64()`, `getDataUrl()`, `getStream()` | Sim | Sim |
+| `write(filename)` | Sim | Não |
+| `download(filename?)`, `open(window?)`, `print(window?)`, `getBlob()` | Não | Sim |
+
+Todas as funções de saída retornam Promises. Trate sempre as rejeições. O invólucro retornado por `createPdf` não é uma Promise. Consulte [métodos do Node](/docs/0.3/pt-br/getting-started/server-side/methods/) e [métodos do navegador](/docs/0.3/pt-br/getting-started/client-side/methods/) para detalhes do ciclo de vida.
diff --git a/content/guides/contributing.de.md b/content/guides/contributing.de.md
new file mode 100644
index 00000000..74a098b2
--- /dev/null
+++ b/content/guides/contributing.de.md
@@ -0,0 +1,48 @@
++++
+title = "Mitwirken und Quellcodearchitektur"
+description = "Lerne die Rendering-Pipeline von pdfmake kennen, ergänze gezielte Regressionstests und prüfe Beiträge zur Bibliothek oder Dokumentation lokal."
+weight = 7
+sourceDigest = "ca6cb5430de16efbb426ec56f526fac9bd29bebd50ca1a5c9f971b896f29363b"
++++
+
+## Quellcodeübersicht
+
+Die Bibliothek und diese Website liegen in getrennten Repositories:
+
+- [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake): Engine, Bundles, Tests und Beispiele.
+- [pdfmake/docs](https://github.com/pdfmake/docs): diese versionierte Entwicklerwebsite und die Dokumentationswerkzeuge.
+
+Der Node.js-Einstieg der Bibliothek ist `src/index.js`; gemeinsame Konfiguration liegt in `src/base.js`. Die Browserintegration befindet sich unter `src/browser-extensions/`. `Printer` bereitet Ressourcen vor und erzeugt die PDFKit-Ausgabe. `DocPreprocessor` normalisiert Knoten, `DocMeasure` und `TextInlines` messen sie, `LayoutBuilder` und `TableProcessor` teilen sie auf Seiten auf, und `Renderer` schreibt PDFKit-Zeichenanweisungen.
+
+## Änderungen an der Engine prüfen
+
+```sh
+npm ci
+npm test
+npm run build:examples
+npm run test:package
+```
+
+`npm test` erstellt generierte Node.js- und Browserartefakte und führt dann Mocha und ESLint aus. Unit-Tests importieren kompiliertes `js/`; erstelle diese Dateien nach Änderungen in `src/` erneut. Bearbeite `js/` oder `build/` nicht direkt. Der neue Paket-Rauchtest installiert das tatsächliche Tarball in einem temporären Consumer mit Produktionsabhängigkeiten und prüft anschließend die Node.js-Ausgabe und beide Browser-Bundles. Er ersetzt Tests in echten Browsern nicht.
+
+Bewahre bei Optimierungen Text, Schriftmetriken, Stilvererbung und Seiteneinteilung. Ergänze einen Regressionstest für einen Randfall und vergleiche, wenn möglich, mit dem bisherigen Verhalten. Halte Leistungsbenchmarks getrennt von Korrektheitstests.
+
+## Dokumentationsänderungen prüfen
+
+Verwende Node.js >=24.11 und Hugo **0.168.0**. Führe im Repository Folgendes aus:
+
+```sh
+npm ci
+npm run docs:generate
+npm test
+npm run build
+npm run dev
+```
+
+Öffne die von Hugo ausgegebene Adresse. Die Generierung erstellt den Website-Suchindex, Markdown-Exporte und den MCP-Korpus aus `content/`. Tests prüfen Metadaten, Beispiele und MCP-Verhalten. Der Build prüft generierte interne Links und Fragmentziele. Übernimm die neu generierten Ausgaben zusammen mit den Quelldateien, damit Clients den Korpus ohne Hugo-Installation verwenden können.
+
+## Releases
+
+Die Bibliothek behält den GitHub-Release-Trigger des Upstream-Projekts bei. Der vorgeschlagene Workflow prüft, ob Tag und Version übereinstimmen, erstellt und testet das Paket, generiert Beispiele, prüft ein gepacktes Consumer-Projekt und veröffentlicht anschließend genau dieses Tarball mit Herkunftsnachweis. Lokale Tests veröffentlichen nichts in der Registry.
+
+Der Dokumentationsworkflow erstellt und lädt bei Pushes und Pull Requests ein Prüf-Artefakt hoch; er überschreibt nicht die versionierte Produktionswebsite. Die bestehende Bereitstellung für mehrere Versionen muss mit den Maintainer:innen abgestimmt werden, bevor die Deployment-Konfiguration geändert wird.
diff --git a/content/guides/contributing.es.md b/content/guides/contributing.es.md
new file mode 100644
index 00000000..7f29f2ad
--- /dev/null
+++ b/content/guides/contributing.es.md
@@ -0,0 +1,48 @@
++++
+sourceDigest = "ca6cb5430de16efbb426ec56f526fac9bd29bebd50ca1a5c9f971b896f29363b"
+title = "Contribuciones y arquitectura del código fuente"
+description = "Explora la canalización de renderizado de pdfmake, añade pruebas de regresión específicas y valida localmente las contribuciones a la biblioteca o a la documentación."
+weight = 7
++++
+
+## Mapa del código fuente
+
+La biblioteca y este sitio tienen repositorios independientes:
+
+- [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake): motor, paquetes, pruebas y ejemplos.
+- [pdfmake/docs](https://github.com/pdfmake/docs): sitio de desarrollo versionado y herramientas de documentación.
+
+La entrada de Node de la biblioteca es `src/index.js`; la configuración común está en `src/base.js`. La integración del navegador se encuentra en `src/browser-extensions/`. `Printer` prepara recursos y crea la salida de PDFKit. `DocPreprocessor` normaliza nodos, `DocMeasure` y `TextInlines` los miden, `LayoutBuilder` y `TableProcessor` los paginan y `Renderer` escribe las instrucciones de dibujo de PDFKit.
+
+## Validar cambios del motor
+
+```sh
+npm ci
+npm test
+npm run build:examples
+npm run test:package
+```
+
+`npm test` genera los artefactos de Node y del navegador y luego ejecuta Mocha y ESLint. Las pruebas unitarias importan `js/` compilado, así que vuelve a compilar después de editar `src/`. No edites `js/` ni `build/` directamente. La nueva prueba de humo del paquete instala el tarball real en un consumidor temporal con dependencias de producción y luego prueba la salida de Node y ambos paquetes para navegador. No sustituye las pruebas en navegadores reales.
+
+Al optimizar, conserva el texto, las métricas de fuentes, la herencia de estilos y la paginación. Añade una prueba de regresión para un caso límite y, cuando sea posible, compara con el comportamiento anterior. Mantén los benchmarks de rendimiento separados de las comprobaciones de corrección.
+
+## Validar cambios de documentación
+
+Usa Node >=24.11 y Hugo **0.168.0**. Desde este repositorio:
+
+```sh
+npm ci
+npm run docs:generate
+npm test
+npm run build
+npm run dev
+```
+
+Abre la dirección que muestra Hugo. La generación produce el índice de búsqueda del sitio, las exportaciones Markdown y el corpus MCP a partir de `content/`. Las pruebas comprueban los metadatos, los ejemplos y el comportamiento MCP. La compilación verifica los enlaces internos generados y los destinos de fragmentos. Confirma las salidas generadas junto con las modificaciones de origen para que los clientes puedan usar el corpus sin instalar Hugo.
+
+## Publicaciones
+
+La biblioteca conserva su activador upstream de GitHub Releases. El flujo de trabajo propuesto comprueba que coincidan la etiqueta y la versión, genera, prueba, compila los ejemplos, prueba un paquete de consumo y luego publica el mismo tarball con procedencia. Las pruebas locales no publican nada en el registro.
+
+El flujo de trabajo de documentación genera y carga un artefacto para revisión en las inserciones y solicitudes de cambios; no sobrescribe el sitio de producción versionado. La organización existente para publicar varias versiones de ese sitio debe coordinarse con los mantenedores antes de cambiar el despliegue.
diff --git a/content/guides/contributing.fr.md b/content/guides/contributing.fr.md
new file mode 100644
index 00000000..9baf664a
--- /dev/null
+++ b/content/guides/contributing.fr.md
@@ -0,0 +1,48 @@
++++
+title = "Contribuer et architecture du code source"
+description = "Parcourez le pipeline de rendu pdfmake, ajoutez des tests de régression ciblés et validez localement vos contributions à la bibliothèque ou à la documentation."
+weight = 7
+sourceDigest = "ca6cb5430de16efbb426ec56f526fac9bd29bebd50ca1a5c9f971b896f29363b"
++++
+
+## Plan du code source
+
+La bibliothèque et ce site sont hébergés dans des dépôts distincts :
+
+- [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake) : moteur, bundles, tests et exemples.
+- [pdfmake/docs](https://github.com/pdfmake/docs) : ce site de documentation versionné et ses outils.
+
+Le point d’entrée Node de la bibliothèque est `src/index.js` ; la configuration commune se trouve dans `src/base.js`. L’intégration navigateur se trouve dans `src/browser-extensions/`. `Printer` prépare les ressources et crée la sortie PDFKit. `DocPreprocessor` normalise les nœuds, `DocMeasure` et `TextInlines` les mesurent, `LayoutBuilder` et `TableProcessor` gèrent la pagination, et `Renderer` écrit les instructions de dessin PDFKit.
+
+## Valider les changements du moteur
+
+```sh
+npm ci
+npm test
+npm run build:examples
+npm run test:package
+```
+
+`npm test` construit les artefacts Node et navigateur générés, puis exécute Mocha et ESLint. Les tests unitaires importent le dossier compilé `js/` : reconstruisez-le après toute modification de `src/`. Ne modifiez pas directement `js/` ou `build/`. Le nouveau test de fumée du paquet installe l’archive réelle dans un consommateur temporaire avec les dépendances de production, puis teste la sortie Node et les deux bundles navigateur. Il ne remplace pas les tests dans de vrais navigateurs.
+
+Lors d’une optimisation, préservez le texte, les métriques de police, l’héritage des styles et la pagination. Ajoutez un test de régression pour le cas limite et, si possible, une comparaison avec le comportement précédent. Gardez les benchmarks de performance séparés des contrôles de correction.
+
+## Valider les changements de documentation
+
+Utilisez Node >=24.11 et Hugo **0.168.0**. Depuis ce dépôt :
+
+```sh
+npm ci
+npm run docs:generate
+npm test
+npm run build
+npm run dev
+```
+
+Ouvrez l’adresse affichée par Hugo. La génération produit l’index de recherche du site, les exports Markdown et le corpus MCP depuis `content/`. Les tests vérifient les métadonnées, les exemples et le comportement MCP. La compilation vérifie les liens internes générés et les fragments de destination. Commitez les sorties régénérées avec les modifications sources afin que les clients puissent utiliser le corpus sans installer Hugo.
+
+## Versions
+
+La bibliothèque conserve son déclencheur GitHub Release en amont. Le workflow proposé vérifie la correspondance entre l’étiquette et la version, construit, teste, génère les exemples, teste un consommateur du paquet puis publie cette même archive avec provenance. Les tests locaux ne publient rien dans le registre.
+
+Le workflow de documentation construit et téléverse un artefact de revue pour les pushes et les demandes de fusion ; il ne remplace pas le site de production versionné. Toute modification du mécanisme existant de publication multi-version du site doit être coordonnée avec les responsables du dépôt.
diff --git a/content/guides/contributing.md b/content/guides/contributing.md
new file mode 100644
index 00000000..bf0a91fe
--- /dev/null
+++ b/content/guides/contributing.md
@@ -0,0 +1,47 @@
++++
+title = "Contributing and source architecture"
+description = "Navigate the pdfmake rendering pipeline, add focused regression tests, and validate library or documentation contributions locally."
+weight = 7
++++
+
+## Source map
+
+The library and this site have separate repositories:
+
+- [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake): engine, bundles, tests and examples.
+- [pdfmake/docs](https://github.com/pdfmake/docs): this versioned developer site and documentation tools.
+
+The library's Node entry is `src/index.js`; common configuration lives in `src/base.js`. Browser integration lives in `src/browser-extensions/`. `Printer` prepares resources and creates PDFKit output. `DocPreprocessor` normalizes nodes, `DocMeasure` and `TextInlines` measure them, `LayoutBuilder` and `TableProcessor` paginate them, and `Renderer` writes PDFKit drawing instructions.
+
+## Validate engine changes
+
+```sh
+npm ci
+npm test
+npm run build:examples
+npm run test:package
+```
+
+`npm test` builds generated Node and browser artifacts, then runs Mocha and ESLint. Unit tests import compiled `js/`, so rebuild after editing `src/`. Do not edit `js/` or `build/` directly. The new package smoke test installs the actual tarball in a temporary consumer with production dependencies, then exercises Node output and both browser bundles. It does not replace testing in real browsers.
+
+Preserve text, font metrics, style inheritance and pagination when optimizing. Add an edge-case regression and, when possible, a comparison with the previous behavior. Keep a performance benchmark separate from correctness gates.
+
+## Validate documentation changes
+
+Use Node >=24.11 and Hugo **0.168.0**. From this repository:
+
+```sh
+npm ci
+npm run docs:generate
+npm test
+npm run build
+npm run dev
+```
+
+Open the address printed by Hugo. Generation produces the website search index, Markdown exports and MCP corpus from `content/`. Tests check metadata, examples and MCP behavior. The build verifies generated internal links and fragment targets. Commit regenerated outputs alongside source edits so clients can use the corpus without installing Hugo.
+
+## Releases
+
+The library retains its upstream GitHub Release trigger. The proposed workflow checks tag/version agreement, builds, tests, generates examples, tests a packed consumer, then publishes that same tarball with provenance. No registry publication happens when running local tests.
+
+The docs workflow builds and uploads a review artifact on pushes and pull requests; it does not overwrite the versioned production site. That site's existing multi-version publishing arrangement must be coordinated with maintainers before changing deployment.
diff --git a/content/guides/contributing.pt-br.md b/content/guides/contributing.pt-br.md
new file mode 100644
index 00000000..3c5f0053
--- /dev/null
+++ b/content/guides/contributing.pt-br.md
@@ -0,0 +1,48 @@
++++
+title = "Contribuição e arquitetura do código-fonte"
+description = "Explore o pipeline de renderização do pdfmake, adicione testes de regressão específicos e valide contribuições à biblioteca ou à documentação localmente."
+weight = 7
+sourceDigest = "ca6cb5430de16efbb426ec56f526fac9bd29bebd50ca1a5c9f971b896f29363b"
++++
+
+## Mapa do código-fonte
+
+A biblioteca e este site têm repositórios separados:
+
+- [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake): motor, bundles, testes e exemplos.
+- [pdfmake/docs](https://github.com/pdfmake/docs): este site de desenvolvimento versionado e as ferramentas de documentação.
+
+A entrada Node da biblioteca é `src/index.js`; a configuração comum fica em `src/base.js`. A integração com o navegador fica em `src/browser-extensions/`. `Printer` prepara os recursos e cria a saída do PDFKit. `DocPreprocessor` normaliza os nós, `DocMeasure` e `TextInlines` os medem, `LayoutBuilder` e `TableProcessor` os distribuem pelas páginas, e `Renderer` grava as instruções de desenho do PDFKit.
+
+## Valide mudanças no motor
+
+```sh
+npm ci
+npm test
+npm run build:examples
+npm run test:package
+```
+
+`npm test` compila artefatos gerados para Node e navegador e, em seguida, executa Mocha e ESLint. Os testes unitários importam o conteúdo compilado em `js/`; recompile depois de editar `src/`. O novo teste de integridade do pacote instala o tarball real em um consumidor temporário com dependências de produção e exercita a saída do Node e os dois bundles de navegador. Ele não substitui testes em navegadores reais.
+
+Ao otimizar, preserve texto, métricas de fontes, herança de estilos e paginação. Acrescente uma regressão de caso extremo e, quando possível, uma comparação com o comportamento anterior. Mantenha benchmarks de desempenho separados dos critérios de correção.
+
+## Valide mudanças na documentação
+
+Use Node >=24.11 e Hugo **0.168.0**. Neste repositório, execute:
+
+```sh
+npm ci
+npm run docs:generate
+npm test
+npm run build
+npm run dev
+```
+
+Abra o endereço exibido pelo Hugo. A geração produz o índice de busca do site, as exportações Markdown e o corpus MCP a partir de `content/`. Os testes verificam metadados, exemplos e o comportamento do MCP. O build verifica links internos gerados e destinos de fragmentos. Faça commit dos resultados regenerados junto com as edições-fonte para que os clientes possam usar o corpus sem instalar Hugo.
+
+## Releases
+
+A biblioteca mantém o gatilho de GitHub Release upstream. O workflow proposto verifica se tag e versão correspondem, compila, testa, gera exemplos, testa um consumidor do pacote e publica o mesmo tarball com proveniência. Executar testes localmente não publica nada no registro.
+
+O workflow da documentação compila e envia um artefato para revisão em pushes e pull requests; ele não sobrescreve o site de produção versionado. A organização de publicação multiversão existente para esse site deve ser coordenada com os mantenedores antes de alterar o deployment.
diff --git a/content/guides/errors.de.md b/content/guides/errors.de.md
new file mode 100644
index 00000000..6468eda2
--- /dev/null
+++ b/content/guides/errors.de.md
@@ -0,0 +1,76 @@
++++
+title = "Fehler und Diagnose"
+description = "Finde JavaScript-Syntaxfehler, ungültige Dokumentknoten, Ressourcenfehler und unterbrochene Ausgaben anhand aussagekräftiger Diagnosen."
+weight = 2
+sourceDigest = "e4dda1a91f9ef3e34e7b45d6b46a0bc638ea75a858d155ea73e148259ff35728"
++++
+
+## Zuerst die fehlerhafte Phase bestimmen
+
+Eine ungültige Definition sollte einen Fehler auslösen und Inhalte nicht stillschweigend auslassen. Entscheidend ist, an welcher Stelle der Fehler auftritt und wie er an deine Anwendung weitergegeben wird.
+
+| Phase | Typischer Fehler | Wo beheben? |
+| --- | --- | --- |
+| JavaScript-Parsing | Fehlendes Komma, Anführungszeichen oder schließende Klammer | Quellcode-Editor; die Bibliothek wurde noch nicht aufgerufen |
+| Ausführung der Definition | `ReferenceError` oder fehlschlagender Callback | Anwendungscode, der die Definition erstellt |
+| Dokumentstruktur | Falscher Knotentyp, ungültige Tabellenzeilen oder Liste | Angegebener Pfad in der Definition |
+| Ressourcenladen | Fehlende Schrift, abgelehnte URL, nicht lesbares Bild | Schrift-/Ressourcenregistrierung und Zugriffsrichtlinien |
+| Layout/Rendering | Zu großer Inhalt, ungültige Abmessungen oder Callback-Fehler | Kleinste Definition, die den Fehler reproduziert |
+| Ausgabe | Geschlossener Stream, Schreibrechte oder Fehler des Ziels | Fehlerbehandlung für Buffer, Stream oder Datei |
+
+## Immer auf die Ausgabe warten
+
+```js
+async function generateReport(pdfmake, definition) {
+ try {
+ return await pdfmake.createPdf(definition).getBuffer();
+ } catch (error) {
+ console.error('PDF generation failed', {
+ message: error.message,
+ code: error.code,
+ phase: error.phase,
+ path: error.path
+ });
+ throw error;
+ }
+}
+```
+
+Gib einen Fehler an den API-Aufrufer zurück oder zeige `error.message` in der Benutzeroberfläche an. Gib keine leere PDF zurück und melde keinen Erfolg, nachdem die Ablehnung verschluckt wurde. Vermeide es, Dokumentinhalte oder geheime Zugangsdaten für Ressourcen zu protokollieren.
+
+## Dokumentpfad lesen
+
+Der lokale Verbesserungszweig der Bibliothek ergänzt `PDFMAKE_INVALID_DOCUMENT`-Diagnosen mit `phase: 'preprocess'` und einer Eigenschaft `path`. Ein Beispiel:
+
+```text
+Unrecognized document structure: ...
+Document path: content[0].columns[0].ul[1]
+```
+
+Der Pfad verweist auf den zweiten Listeneintrag in der ersten Spalte des ersten Hauptinhaltsknotens. Prüfe auf Tippfehler wie `{ txt: 'Hello' }` statt `{ text: 'Hello' }`. Bei fehlerhaften Tabellenzeilen werden die Zeile und die erwartete Anzahl an Zellen angegeben. Leere Tabellen melden, dass `table.body` nichtleere Zeilen-Arrays enthalten muss. Behalte `{}`-Platzhalter für überspannte Zellen bei. Vorhandener Fehlertext bleibt bestehen; verwende nach Möglichkeit die Diagnosefelder statt Zeichenfolgen aus der Meldung zu parsen.
+
+Diese strukturierten Diagnosen sind **neu im lokalen Verbesserungszweig**; das veröffentlichte Paket 0.3.12 enthält sie noch nicht. Allgemeine Fehler liefern weiterhin eine Meldung. Der Zweig lehnt außerdem vorzeitig geschlossene Buffer-Streams ab, statt deren Promise unerfüllt zu lassen.
+
+## Syntaxfehler im Playground
+
+Der Editor parst die Definition, bevor er sie ausführt, markiert die fehlerhafte Stelle und zeigt Zeile und Spalte an. **Im Editor zum Fehler springen** fokussiert die Stelle. Undo/Redo und das Fehlerfeld ermöglichen Korrekturen, ohne deine Arbeit zu verlieren. Bei Live-Vorschau bleibt die letzte erfolgreiche PDF während der Bearbeitung und nach Fehlern sichtbar; der Download ist deaktiviert, wenn die Vorschau nicht mehr zum aktuellen Quelltext passt.
+
+## Schwierige Fehler eingrenzen
+
+Verwende dieselben Schriften und dieselbe Laufzeit. Ersetze den Inhalt durch einen einzelnen Absatz und füge die Blöcke schrittweise wieder hinzu, bis das Problem erneut auftritt. Prüfe bei Tabellen zuerst Zeilenlängen und Zellüberspannungen, bevor du Breiten anpasst. Verwende bei Ressourcenfehlern zunächst eine bekannte lokale Schrift und ein eingebettetes Bild. Weitere Symptome findest du unter [Fehlerbehebung](/docs/0.3/de/guides/troubleshooting/).
+
+## Die vollständige Definition vor dem Rendern prüfen
+
+Die lokale, unveröffentlichte API `validateDocument(input, options)` prüft alle deklarierten Dokumenteigenschaften und sammelt mehrere Fehler mit Pfaden. Zusätzlich prüft sie Tabellen, Spans, Referenzen, Zahlenbereiche und Zyklen. Sie verändert keine Eingabe, führt keine Callbacks aus und greift auf keine Ressourcen zu. Unbekannte Eigenschaften sind standardmäßig Warnungen; mit `strict: true` werden sie zu Fehlern.
+
+```js
+const input = { content: [{ text: 'Report', fontSize: 'large' }] };
+const report = pdfMake.validateDocument(input, { strict: true });
+for (const issue of report.errors) {
+ console.error(issue.path, issue.code, issue.message);
+}
+```
+
+Das Ergebnis enthält `valid`, `errors`, `warnings`, `deferred` und `truncated`. Jeder Befund enthält `path`, `code`, `severity` und `message`. Standardgrenzen: 100 Befunde, 100 Verschachtelungsebenen und 50.000 untersuchte Werte. Ein ausgeschöpftes Limit meldet niemals Erfolg. Callback-Ergebnisse, Ressourcenverfügbarkeit und -dekodierung sowie das endgültige Layout werden weiterhin beim Rendern geprüft. JavaScript muss bereits syntaktisch gültig sein, bevor diese Objekt-API aufgerufen werden kann.
+
+Übergebe `{ validation: true }` als zweites Argument an `createPdf`, um ungültige Definitionen vor dem Laden von Ressourcen abzulehnen. Ein ungültiges Dokument wirft einen `DocumentValidationError` mit `code: "PDFMAKE_VALIDATION_ERROR"`, `phase: "validation"` und einem `diagnostics`-Array. Bestehende Aufrufe bleiben kompatibel; die automatische Vorabprüfung ist optional. Der lokale Playground führt sie mit der verbesserten Library automatisch aus.
diff --git a/content/guides/errors.es.md b/content/guides/errors.es.md
new file mode 100644
index 00000000..c33b1cf4
--- /dev/null
+++ b/content/guides/errors.es.md
@@ -0,0 +1,76 @@
++++
+sourceDigest = "e4dda1a91f9ef3e34e7b45d6b46a0bc638ea75a858d155ea73e148259ff35728"
+title = "Errores y diagnósticos"
+description = "Detecta errores de sintaxis JavaScript, nodos de documento malformados, fallos de recursos e interrupciones de salida con diagnósticos útiles."
+weight = 2
++++
+
+## Identifica primero la etapa que falla
+
+Una definición no válida debe producir un error, no omitir contenido en silencio. La pregunta útil es en qué punto falló y cómo llega el error a la aplicación.
+
+| Etapa | Fallo habitual | Dónde corregirlo |
+| --- | --- | --- |
+| Análisis de JavaScript | Falta una coma, una comilla o una llave de cierre | Editor de código; todavía no se ha llamado a la biblioteca |
+| Ejecución de la definición | `ReferenceError` o fallo de un callback | Código de la aplicación que construye la definición |
+| Estructura del documento | Tipo de nodo mal escrito, fila de tabla o lista no válida | Ruta de definición indicada |
+| Carga de recursos | Falta una fuente, URL rechazada, imagen ilegible | Registro de fuentes/recursos y políticas de acceso |
+| Maquetación/renderizado | Contenido demasiado grande, dimensiones no válidas o fallo de un callback | Definición más pequeña que reproduzca el problema |
+| Salida | Flujo cerrado, permisos de escritura o fallo del destino | Gestión de errores de búfer/flujo/archivo |
+
+## Espera siempre la salida
+
+```js
+async function generateReport(pdfmake, definition) {
+ try {
+ return await pdfmake.createPdf(definition).getBuffer();
+ } catch (error) {
+ console.error('PDF generation failed', {
+ message: error.message,
+ code: error.code,
+ phase: error.phase,
+ path: error.path
+ });
+ throw error;
+ }
+}
+```
+
+Devuelve un error a quien llama la API o muestra `error.message` en la interfaz. No respondas con un PDF vacío ni informes de éxito después de descartar el rechazo. Evita registrar el contenido de los documentos o credenciales privadas de recursos.
+
+## Leer una ruta del documento
+
+La rama local de mejoras de la biblioteca añade diagnósticos `PDFMAKE_INVALID_DOCUMENT` con `phase: 'preprocess'` y una propiedad `path`. Por ejemplo:
+
+```text
+Unrecognized document structure: ...
+Document path: content[0].columns[0].ul[1]
+```
+
+Esto apunta al segundo elemento de la lista en la primera columna del primer nodo del cuerpo. Comprueba si hay un error tipográfico, como `{ txt: 'Hello' }` en lugar de `{ text: 'Hello' }`. Las filas de tabla malformadas identifican la fila y el número de celdas esperado. Las tablas vacías explican que `table.body` necesita matrices de filas no vacías. Conserva los marcadores `{}` para las celdas combinadas. Se mantiene el texto de error existente; cuando estén disponibles, los consumidores deben usar los campos de diagnóstico en lugar de analizar las cadenas del mensaje.
+
+Estos diagnósticos estructurados son **nuevos en la rama local de mejoras**; el paquete publicado 0.3.12 todavía no los incluye. Los errores genéricos siguen teniendo un mensaje. La rama también rechaza los flujos de búfer cerrados antes de tiempo, en vez de dejar pendiente su Promise.
+
+## Errores de sintaxis en el entorno de pruebas
+
+El editor analiza la definición antes de ejecutarla, marca la ubicación defectuosa y muestra la línea y la columna. **Go to error in editor** lleva el cursor a esa ubicación. Las funciones Deshacer/Rehacer y el panel de errores permiten corregir el problema sin perder el trabajo. Con la vista previa en directo, el último PDF generado correctamente permanece visible durante las ediciones y los fallos, pero su descarga se desactiva cuando ya no coincide con el código actual.
+
+## Reducir los fallos difíciles
+
+Mantén las mismas fuentes y el mismo entorno de ejecución. Sustituye el cuerpo por un párrafo y luego vuelve a añadir bloques hasta que reaparezca el problema. En las tablas, comprueba la longitud de las filas y las celdas combinadas antes de ajustar los anchos. Si fallan los recursos, empieza con una fuente local conocida y una imagen incrustada. Consulta [solución de problemas](/docs/0.3/es/guides/troubleshooting/) para ver más síntomas.
+
+## Validar la definición completa antes del renderizado
+
+La API local aún no publicada `validateDocument(input, options)` comprueba todas las propiedades declaradas del documento y reúne varios errores con sus rutas. También comprueba tablas, celdas combinadas, referencias, rangos numéricos y ciclos. No modifica la entrada, ejecuta callbacks ni accede a recursos. Las propiedades desconocidas generan advertencias; `strict: true` las convierte en errores.
+
+```js
+const input = { content: [{ text: 'Report', fontSize: 'large' }] };
+const report = pdfMake.validateDocument(input, { strict: true });
+for (const issue of report.errors) {
+ console.error(issue.path, issue.code, issue.message);
+}
+```
+
+El resultado contiene `valid`, `errors`, `warnings`, `deferred` y `truncated`. Cada diagnóstico incluye `path`, `code`, `severity` y `message`. Límites predeterminados: 100 diagnósticos, 100 niveles y 50 000 valores inspeccionados. Un límite agotado nunca informa de éxito. Los resultados de callbacks, la disponibilidad y decodificación de recursos y el diseño final se comprueban durante el renderizado. JavaScript debe ser sintácticamente válido antes de llamar a esta API de objetos.
+
+Pasa `{ validation: true }` como segundo argumento a `createPdf` para rechazar definiciones incorrectas antes de cargar recursos. Un documento no válido lanza un `DocumentValidationError` con `code: "PDFMAKE_VALIDATION_ERROR"`, `phase: "validation"` y un array `diagnostics`. Los usos existentes siguen siendo compatibles; la comprobación previa es opcional. El playground local la ejecuta automáticamente con la biblioteca mejorada.
diff --git a/content/guides/errors.fr.md b/content/guides/errors.fr.md
new file mode 100644
index 00000000..00211539
--- /dev/null
+++ b/content/guides/errors.fr.md
@@ -0,0 +1,76 @@
++++
+title = "Erreurs et diagnostics"
+description = "Repérez les erreurs de syntaxe JavaScript, les nœuds de document mal formés, les échecs de ressources et les sorties interrompues à l’aide de diagnostics exploitables."
+weight = 2
+sourceDigest = "e4dda1a91f9ef3e34e7b45d6b46a0bc638ea75a858d155ea73e148259ff35728"
++++
+
+## Identifier d’abord l’étape en échec
+
+Une définition non valide doit provoquer une erreur, plutôt que d’omettre du contenu sans avertissement. Il faut déterminer où l’échec s’est produit et comment cette erreur remonte dans votre application.
+
+| Étape | Échec courant | Où le corriger |
+| --- | --- | --- |
+| Analyse JavaScript | Virgule, guillemet ou accolade fermante manquante | Éditeur de code ; la bibliothèque n’a pas encore été appelée |
+| Exécution de la définition | `ReferenceError` ou échec d’une fonction de rappel | Code de l’application qui construit la définition |
+| Structure du document | Type de nœud mal orthographié, lignes de tableau ou liste non valides | Chemin de définition signalé |
+| Chargement des ressources | Police manquante, URL refusée, image illisible | Enregistrement des polices/ressources et règles d’accès |
+| Mise en page/rendu | Contenu trop volumineux, dimensions non valides ou fonction de rappel en échec | Plus petite définition permettant de reproduire le problème |
+| Sortie | Flux fermé, droits d’écriture ou échec de destination | Gestion des erreurs de buffer, flux ou fichier |
+
+## Toujours attendre la sortie
+
+```js
+async function generateReport(pdfmake, definition) {
+ try {
+ return await pdfmake.createPdf(definition).getBuffer();
+ } catch (error) {
+ console.error('PDF generation failed', {
+ message: error.message,
+ code: error.code,
+ phase: error.phase,
+ path: error.path
+ });
+ throw error;
+ }
+}
+```
+
+Renvoyez l’erreur à l’appelant de l’API ou affichez `error.message` dans l’interface. Ne répondez pas avec un PDF vide et n’annoncez pas un succès après avoir ignoré le rejet. Évitez de journaliser le contenu du document ou les identifiants privés des ressources.
+
+## Lire le chemin dans le document
+
+La branche locale d’amélioration de la bibliothèque ajoute des diagnostics `PDFMAKE_INVALID_DOCUMENT` avec `phase: 'preprocess'` et une propriété `path`. Par exemple :
+
+```text
+Unrecognized document structure: ...
+Document path: content[0].columns[0].ul[1]
+```
+
+Ce chemin désigne le deuxième élément de liste dans la première colonne du premier nœud du corps. Cherchez une faute telle que `{ txt: 'Hello' }` à la place de `{ text: 'Hello' }`. Pour des lignes de tableau mal formées, le diagnostic indique la ligne et le nombre de cellules attendu. Les tableaux vides précisent que `table.body` doit contenir des tableaux de lignes non vides. Conservez les objets `{}` de remplacement pour les cellules fusionnées. Le texte d’erreur existant est maintenu ; lorsque les champs de diagnostic sont disponibles, les appelants doivent les utiliser au lieu d’analyser les chaînes de message.
+
+Ces diagnostics structurés sont **nouveaux dans la branche locale d’amélioration** ; le paquet publié 0.3.12 ne les contient pas encore. Les erreurs génériques comportent toujours un message. La branche rejette également les flux de buffer fermés prématurément au lieu de laisser leur Promise en attente.
+
+## Erreurs de syntaxe dans le playground
+
+L’éditeur analyse la définition avant son exécution, marque l’emplacement fautif et affiche la ligne et la colonne. **Aller à l’erreur dans l’éditeur** place le curseur à cet endroit. L’annulation/restauration et le panneau d’erreurs permettent de corriger le problème sans perdre le travail. Avec l’aperçu en direct, le dernier PDF généré avec succès reste visible pendant les modifications et les échecs, mais son téléchargement est désactivé s’il ne correspond plus au code actuel.
+
+## Réduire les échecs difficiles à diagnostiquer
+
+Conservez les mêmes polices et le même environnement d’exécution. Remplacez le corps par un seul paragraphe, puis réajoutez les blocs jusqu’à ce que le problème réapparaisse. Pour les tableaux, vérifiez les longueurs des lignes et les fusions avant d’ajuster les largeurs. En cas d’échec lié aux ressources, commencez par une police locale connue et une image intégrée. Consultez [Dépannage](/docs/0.3/fr/guides/troubleshooting/) pour découvrir d’autres symptômes.
+
+## Valider la définition complète avant le rendu
+
+L’API locale non publiée `validateDocument(input, options)` vérifie toutes les propriétés déclarées du document et rassemble plusieurs erreurs avec leurs chemins. Elle contrôle aussi les tableaux, les cellules fusionnées, les références, les plages numériques et les cycles. Elle ne modifie pas l’entrée, n’exécute aucun callback et n’accède à aucune ressource. Les propriétés inconnues produisent des avertissements ; `strict: true` les transforme en erreurs.
+
+```js
+const input = { content: [{ text: 'Report', fontSize: 'large' }] };
+const report = pdfMake.validateDocument(input, { strict: true });
+for (const issue of report.errors) {
+ console.error(issue.path, issue.code, issue.message);
+}
+```
+
+Le résultat contient `valid`, `errors`, `warnings`, `deferred` et `truncated`. Chaque diagnostic contient `path`, `code`, `severity` et `message`. Limites par défaut : 100 diagnostics, 100 niveaux et 50 000 valeurs inspectées. Une limite atteinte ne donne jamais un résultat valide. Les résultats des callbacks, la disponibilité et le décodage des ressources ainsi que la mise en page finale restent vérifiés pendant le rendu. Le code JavaScript doit déjà être syntaxiquement valide pour appeler cette API objet.
+
+Passez `{ validation: true }` comme deuxième argument à `createPdf` pour rejeter une définition incorrecte avant de charger les ressources. Le document invalide lève un `DocumentValidationError` avec `code: "PDFMAKE_VALIDATION_ERROR"`, `phase: "validation"` et un tableau `diagnostics`. Les appels existants restent compatibles ; cette vérification préalable est facultative. Le playground local l’exécute automatiquement avec la bibliothèque améliorée.
diff --git a/content/guides/errors.md b/content/guides/errors.md
new file mode 100644
index 00000000..a9600e58
--- /dev/null
+++ b/content/guides/errors.md
@@ -0,0 +1,94 @@
++++
+title = "Errors and diagnostics"
+description = "Find JavaScript syntax mistakes, malformed document nodes, resource failures and interrupted output, with actionable diagnostics."
+weight = 2
++++
+
+## First identify the failing stage
+
+An invalid definition should fail rather than silently omit content. The useful
+question is where it failed and how that error reaches your application.
+
+| Stage | Typical failure | Where to fix it |
+| --- | --- | --- |
+| JavaScript parsing | Missing comma, quote or closing brace | Source editor; the library has not been called yet |
+| Definition execution | `ReferenceError` or a failing callback | Application code constructing the definition |
+| Document structure | Misspelled node type, invalid table rows or list | The reported definition path |
+| Resource loading | Missing font, rejected URL, unreadable image | Font/resource registration and access policies |
+| Layout/rendering | Content too large, invalid dimensions or callback failure | The smallest reproducing definition |
+| Output | Closed stream, write permissions or destination failure | Buffer/stream/file error handling |
+
+## Always await the output
+
+```js
+async function generateReport(pdfmake, definition) {
+ try {
+ return await pdfmake.createPdf(definition).getBuffer();
+ } catch (error) {
+ console.error('PDF generation failed', {
+ message: error.message,
+ code: error.code,
+ phase: error.phase,
+ path: error.path
+ });
+ throw error;
+ }
+}
+```
+
+Return an error to the API caller or display `error.message` in the UI. Do not
+respond with an empty PDF or report success after swallowing the rejection.
+Avoid logging document contents or private resource credentials.
+
+## Read a document path
+
+The local library improvement branch adds `PDFMAKE_INVALID_DOCUMENT` diagnostics
+with `phase: 'preprocess'` and a `path` property. For example:
+
+```text
+Unrecognized document structure: ...
+Document path: content[0].columns[0].ul[1]
+```
+
+This points to the second list item in the first column of the first body node.
+Check for a typo such as `{ txt: 'Hello' }` instead of `{ text: 'Hello' }`.
+Malformed table rows identify the row and expected number of cells. Empty tables
+explain that `table.body` needs nonempty row arrays. Retain `{}` placeholders for
+spanned cells. Existing error text is retained; callers should use the diagnostic
+fields when present instead of parsing message strings.
+
+These structured diagnostics are **new in the local improvement branch**; the
+published 0.3.12 package does not yet contain them. Generic errors still have a
+message. The branch also rejects prematurely closed buffer streams instead of
+leaving their Promise pending.
+
+## Syntax errors in the playground
+
+The editor parses the definition before executing it, marks the faulty location,
+and displays a line and column. **Go to error in editor** focuses the location.
+Undo/redo and the error panel let you correct a mistake without losing work.
+With live preview, the last successful PDF stays visible during edits and failures,
+but its download is disabled when it no longer matches the current source.
+
+## Reduce difficult failures
+
+Keep the same fonts and runtime. Replace the body with a single paragraph, then
+add blocks back until the issue returns. For tables, check row lengths and spans
+before adjusting widths. For resource failures, start with a known local font and
+embedded image. See [troubleshooting](/docs/0.3/guides/troubleshooting/) for more symptoms.
+
+## Validate the complete definition before rendering
+
+The local, unreleased API `validateDocument(input, options)` checks all declared document properties and collects multiple errors with paths. It also checks tables, spans, references, numeric ranges and circular structures. It does not mutate input, execute callbacks or access resources. Unknown properties are warnings by default; use `strict: true` to treat them as errors.
+
+```js
+const input = { content: [{ text: 'Report', fontSize: 'large' }] };
+const report = pdfMake.validateDocument(input, { strict: true });
+for (const issue of report.errors) {
+ console.error(issue.path, issue.code, issue.message);
+}
+```
+
+The result contains `valid`, `errors`, `warnings`, `deferred` and `truncated`. Each diagnostic includes `path`, `code`, `severity` and `message`. Defaults: 100 diagnostics, 100 nesting levels and 50,000 inspected values. An exhausted limit never reports success. Callback results, resource availability/decoding and final layout remain render-time checks. JavaScript syntax must already parse before this object API can run.
+
+Pass `{ validation: true }` as the second argument to `createPdf` to reject invalid definitions before resource loading. An invalid document throws a `DocumentValidationError` with `code: "PDFMAKE_VALIDATION_ERROR"`, `phase: "validation"` and a `diagnostics` array. Existing calls remain compatible; automatic preflight is opt-in. The local playground runs this check automatically when using the improved library.
diff --git a/content/guides/errors.pt-br.md b/content/guides/errors.pt-br.md
new file mode 100644
index 00000000..3abee4b1
--- /dev/null
+++ b/content/guides/errors.pt-br.md
@@ -0,0 +1,76 @@
++++
+title = "Erros e diagnósticos"
+description = "Encontre erros de sintaxe JavaScript, nós de documento malformados, falhas de recursos e interrupções de saída com diagnósticos úteis."
+weight = 2
+sourceDigest = "e4dda1a91f9ef3e34e7b45d6b46a0bc638ea75a858d155ea73e148259ff35728"
++++
+
+## Primeiro, identifique a etapa que falhou
+
+Uma definição inválida deve falhar em vez de omitir conteúdo silenciosamente. A pergunta útil é em que etapa ocorreu a falha e como esse erro chega à sua aplicação.
+
+| Etapa | Falha comum | Onde corrigir |
+| --- | --- | --- |
+| Análise de JavaScript | Vírgula, aspas ou chave de fechamento ausente | Editor-fonte; a biblioteca ainda não foi chamada |
+| Execução da definição | `ReferenceError` ou callback que falhou | Código da aplicação que constrói a definição |
+| Estrutura do documento | Tipo de nó escrito incorretamente, linhas de tabela ou lista inválidas | Caminho da definição informado |
+| Carregamento de recursos | Fonte ausente, URL rejeitada, imagem ilegível | Registro de fontes/recursos e políticas de acesso |
+| Layout/renderização | Conteúdo grande demais, dimensões inválidas ou falha de callback | Menor definição que reproduza o problema |
+| Saída | Stream fechado, falta de permissão de escrita ou destino indisponível | Tratamento de erros de buffer/stream/arquivo |
+
+## Sempre aguarde a saída
+
+```js
+async function generateReport(pdfmake, definition) {
+ try {
+ return await pdfmake.createPdf(definition).getBuffer();
+ } catch (error) {
+ console.error('PDF generation failed', {
+ message: error.message,
+ code: error.code,
+ phase: error.phase,
+ path: error.path
+ });
+ throw error;
+ }
+}
+```
+
+Retorne um erro ao chamador da API ou exiba `error.message` na interface. Não responda com um PDF vazio nem informe sucesso depois de descartar a rejeição. Evite registrar o conteúdo do documento ou credenciais de recursos privados.
+
+## Leia o caminho do documento
+
+O branch local de melhorias da biblioteca adiciona diagnósticos `PDFMAKE_INVALID_DOCUMENT` com `phase: 'preprocess'` e uma propriedade `path`. Por exemplo:
+
+```text
+Unrecognized document structure: ...
+Document path: content[0].columns[0].ul[1]
+```
+
+Isso aponta para o segundo item da lista no primeiro nó do corpo da primeira coluna. Verifique erros de digitação como `{ txt: 'Hello' }` em vez de `{ text: 'Hello' }`. Linhas de tabela malformadas identificam a linha e o número esperado de células. Tabelas vazias explicam que `table.body` precisa conter arrays de linhas não vazios. Mantenha placeholders `{}` para células mescladas. O texto de erro existente é preservado; quando disponíveis, os chamadores devem usar os campos de diagnóstico em vez de analisar strings de mensagem.
+
+Esses diagnósticos estruturados são **novos no branch local de melhorias**; o pacote 0.3.12 publicado ainda não os contém. Erros genéricos continuam tendo uma mensagem. O branch também rejeita streams de buffer fechados prematuramente em vez de deixar a Promise pendente.
+
+## Erros de sintaxe no playground
+
+O editor analisa a definição antes de executá-la, marca o local com erro e exibe linha e coluna. **Go to error in editor** leva o foco ao local. Desfazer/refazer e o painel de erros permitem corrigir o problema sem perder o trabalho. Com a prévia ao vivo, o último PDF gerado com sucesso continua visível durante edições e falhas, mas seu download fica desativado quando ele deixa de corresponder ao código atual.
+
+## Reduza falhas difíceis
+
+Mantenha as mesmas fontes e o mesmo ambiente. Substitua o corpo por um único parágrafo e, em seguida, reintroduza os blocos até o problema voltar. Em tabelas, confira o comprimento das linhas e os spans antes de ajustar as larguras. Para falhas de recursos, comece com uma fonte local conhecida e uma imagem incorporada. Consulte [solução de problemas](/docs/0.3/pt-br/guides/troubleshooting/) para ver outros sintomas.
+
+## Validar a definição completa antes da renderização
+
+A API local ainda não publicada `validateDocument(input, options)` verifica todas as propriedades declaradas do documento e reúne vários erros com seus caminhos. Também verifica tabelas, células mescladas, referências, intervalos numéricos e ciclos. Não modifica a entrada, executa callbacks nem acessa recursos. Propriedades desconhecidas geram avisos; `strict: true` transforma esses avisos em erros.
+
+```js
+const input = { content: [{ text: 'Report', fontSize: 'large' }] };
+const report = pdfMake.validateDocument(input, { strict: true });
+for (const issue of report.errors) {
+ console.error(issue.path, issue.code, issue.message);
+}
+```
+
+O resultado contém `valid`, `errors`, `warnings`, `deferred` e `truncated`. Cada diagnóstico inclui `path`, `code`, `severity` e `message`. Limites padrão: 100 diagnósticos, 100 níveis e 50.000 valores inspecionados. Um limite esgotado nunca informa sucesso. Os resultados dos callbacks, a disponibilidade e a decodificação dos recursos e o layout final continuam sendo verificados durante a renderização. O JavaScript já precisa ser sintaticamente válido antes de chamar esta API de objetos.
+
+Passe `{ validation: true }` como segundo argumento para `createPdf` para rejeitar definições inválidas antes de carregar recursos. Um documento inválido lança um `DocumentValidationError` com `code: "PDFMAKE_VALIDATION_ERROR"`, `phase: "validation"` e um array `diagnostics`. As chamadas existentes permanecem compatíveis; a verificação prévia é opcional. O playground local a executa automaticamente com a biblioteca aprimorada.
diff --git a/content/guides/invoice.de.md b/content/guides/invoice.de.md
new file mode 100644
index 00000000..3e21fbab
--- /dev/null
+++ b/content/guides/invoice.de.md
@@ -0,0 +1,59 @@
++++
+title = "Rezept: Rechnung"
+description = "Erzeuge eine vollständige Rechnungs-PDF mit wiederverwendbaren Stilen, wiederholter Tabellenkopfzeile, Summen und Seitenzahlen."
+weight = 1
+sourceDigest = "834285f04d4a3a792e6f17f99a72113c67334451ebcb39a498d27c528c9f8cc4"
++++
+
+## Beispiel ausführen
+
+Installiere `pdfmake@0.3.12`, speichere den folgenden Inhalt als `invoice.cjs` und führe `node invoice.cjs` aus. Das Beispiel verwendet die Standardschrift Helvetica mit ASCII-Inhalt, um externe Ressourcen zu vermeiden. Für eine größere Sprachenabdeckung solltest du eingebettete Schriften verwenden.
+
+```js
+// docs-test: invoice
+const pdfmake = require('pdfmake');
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
+
+async function main() {
+ const items = [
+ { description: 'Design services', quantity: 2, unitPriceCents: 12500 },
+ { description: 'Document review', quantity: 1, unitPriceCents: 7500 }
+ ];
+ const money = cents => (cents / 100).toFixed(2) + ' EUR';
+ const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);
+ const definition = {
+ defaultStyle: { font: 'Helvetica', fontSize: 10 },
+ pageMargins: [40, 50, 40, 50],
+ info: { title: 'Invoice INV-001', author: 'Example Studio' },
+ footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),
+ content: [
+ { text: 'INVOICE', style: 'title' },
+ { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },
+ { layout: 'lightHorizontalLines', table: {
+ headerRows: 1,
+ widths: ['*', 'auto', 'auto', 'auto'],
+ body: [
+ ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),
+ ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),
+ { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])
+ ]
+ } },
+ { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }
+ ],
+ styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }
+ };
+ await pdfmake.createPdf(definition).write('invoice.pdf');
+}
+
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+## An deine Anwendung anpassen
+
+Dies ist ein Layoutbeispiel und keine Steuer- oder Buchhaltungslösung. Prüfe Mengen und Preise, bevor du die Definition erzeugst. In diesem Beispiel werden Beträge als ganzzahlige Cent-Werte gespeichert, um Dezimalfehler durch wiederholte Addition zu vermeiden; wende deine fachlichen Rundungsregeln separat an. Ersetze für eine HTTP-Antwort `write()` durch `getBuffer()`, wie in der [Node.js-Schnellstartanleitung](/docs/0.3/de/getting-started/server-side/) gezeigt.
+
+`headerRows: 1` wiederholt die Tabellenkopfzeile, wenn die Zeilen auf einer neuen Seite fortgesetzt werden. Jede Zeile muss dieselbe Länge wie `widths` haben. Erzeuge für jede Rechnung eine neue Definition.
diff --git a/content/guides/invoice.es.md b/content/guides/invoice.es.md
new file mode 100644
index 00000000..ec8477a3
--- /dev/null
+++ b/content/guides/invoice.es.md
@@ -0,0 +1,59 @@
++++
+sourceDigest = "834285f04d4a3a792e6f17f99a72113c67334451ebcb39a498d27c528c9f8cc4"
+title = "Receta para una factura"
+description = "Genera un PDF de factura completo con estilos reutilizables, encabezado de tabla repetido, totales y números de página."
+weight = 1
++++
+
+## Ejecutar el ejemplo
+
+Instala `pdfmake@0.3.12`, guarda el siguiente código como `invoice.cjs` y ejecútalo con `node invoice.cjs`. Usa Helvetica estándar con contenido ASCII para evitar recursos externos. Para una cobertura más amplia de idiomas, usa fuentes incrustadas.
+
+```js
+// docs-test: invoice
+const pdfmake = require('pdfmake');
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
+
+async function main() {
+ const items = [
+ { description: 'Design services', quantity: 2, unitPriceCents: 12500 },
+ { description: 'Document review', quantity: 1, unitPriceCents: 7500 }
+ ];
+ const money = cents => (cents / 100).toFixed(2) + ' EUR';
+ const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);
+ const definition = {
+ defaultStyle: { font: 'Helvetica', fontSize: 10 },
+ pageMargins: [40, 50, 40, 50],
+ info: { title: 'Invoice INV-001', author: 'Example Studio' },
+ footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),
+ content: [
+ { text: 'INVOICE', style: 'title' },
+ { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },
+ { layout: 'lightHorizontalLines', table: {
+ headerRows: 1,
+ widths: ['*', 'auto', 'auto', 'auto'],
+ body: [
+ ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),
+ ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),
+ { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])
+ ]
+ } },
+ { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }
+ ],
+ styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }
+ };
+ await pdfmake.createPdf(definition).write('invoice.pdf');
+}
+
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+## Adaptarlo a tu aplicación
+
+Este ejemplo se centra en la maquetación; no implementa impuestos ni contabilidad. Valida las cantidades y los precios antes de generar la definición. Aquí los importes se expresan en céntimos enteros para evitar acumular errores decimales; aplica por separado las reglas de redondeo de tu dominio. Para una respuesta HTTP, sustituye `write()` por `getBuffer()`, como se muestra en el [inicio rápido de Node.js](/docs/0.3/es/getting-started/server-side/).
+
+`headerRows: 1` repite el encabezado de la tabla cuando las filas continúan en una página nueva. Mantén la misma longitud en cada fila que en `widths`. Crea una definición nueva para cada factura.
diff --git a/content/guides/invoice.fr.md b/content/guides/invoice.fr.md
new file mode 100644
index 00000000..1a09eda0
--- /dev/null
+++ b/content/guides/invoice.fr.md
@@ -0,0 +1,59 @@
++++
+title = "Recette de facture"
+description = "Générez un PDF de facture complet avec styles réutilisables, en-tête de tableau répété, totaux et numéros de page."
+weight = 1
+sourceDigest = "834285f04d4a3a792e6f17f99a72113c67334451ebcb39a498d27c528c9f8cc4"
++++
+
+## Exécuter l’exemple
+
+Installez `pdfmake@0.3.12`, enregistrez ce fichier sous `invoice.cjs` et lancez `node invoice.cjs`. L’exemple utilise Helvetica standard et du contenu ASCII afin d’éviter les ressources externes. Pour une couverture linguistique plus large, utilisez des polices incorporées.
+
+```js
+// docs-test: invoice
+const pdfmake = require('pdfmake');
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
+
+async function main() {
+ const items = [
+ { description: 'Design services', quantity: 2, unitPriceCents: 12500 },
+ { description: 'Document review', quantity: 1, unitPriceCents: 7500 }
+ ];
+ const money = cents => (cents / 100).toFixed(2) + ' EUR';
+ const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);
+ const definition = {
+ defaultStyle: { font: 'Helvetica', fontSize: 10 },
+ pageMargins: [40, 50, 40, 50],
+ info: { title: 'Invoice INV-001', author: 'Example Studio' },
+ footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),
+ content: [
+ { text: 'INVOICE', style: 'title' },
+ { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },
+ { layout: 'lightHorizontalLines', table: {
+ headerRows: 1,
+ widths: ['*', 'auto', 'auto', 'auto'],
+ body: [
+ ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),
+ ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),
+ { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])
+ ]
+ } },
+ { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }
+ ],
+ styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }
+ };
+ await pdfmake.createPdf(definition).write('invoice.pdf');
+}
+
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+## Adapter l’exemple à votre application
+
+Il s’agit d’un exemple de mise en page, pas d’une implémentation fiscale ou comptable. Validez les quantités et les prix avant de générer la définition. Cet exemple utilise des centimes entiers pour éviter l’accumulation d’erreurs décimales ; appliquez séparément les règles d’arrondi de votre domaine. Pour une réponse HTTP, remplacez `write()` par `getBuffer()`, comme dans le [démarrage rapide Node.js](/docs/0.3/fr/getting-started/server-side/).
+
+`headerRows: 1` répète l’en-tête du tableau lorsque les lignes se poursuivent sur une nouvelle page. Chaque ligne doit avoir la même longueur que `widths`. Créez une nouvelle définition pour chaque facture.
diff --git a/content/guides/invoice.md b/content/guides/invoice.md
new file mode 100644
index 00000000..0e47f65f
--- /dev/null
+++ b/content/guides/invoice.md
@@ -0,0 +1,58 @@
++++
+title = "Invoice recipe"
+description = "Generate a complete invoice PDF with reusable styles, a repeating table header, totals and page numbers."
+weight = 1
++++
+
+## Run the example
+
+Install `pdfmake@0.3.12`, save this as `invoice.cjs`, and run `node invoice.cjs`. It uses standard Helvetica with ASCII content to avoid external resources. Use embedded fonts for wider language coverage.
+
+```js
+// docs-test: invoice
+const pdfmake = require('pdfmake');
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
+
+async function main() {
+ const items = [
+ { description: 'Design services', quantity: 2, unitPriceCents: 12500 },
+ { description: 'Document review', quantity: 1, unitPriceCents: 7500 }
+ ];
+ const money = cents => (cents / 100).toFixed(2) + ' EUR';
+ const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);
+ const definition = {
+ defaultStyle: { font: 'Helvetica', fontSize: 10 },
+ pageMargins: [40, 50, 40, 50],
+ info: { title: 'Invoice INV-001', author: 'Example Studio' },
+ footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),
+ content: [
+ { text: 'INVOICE', style: 'title' },
+ { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },
+ { layout: 'lightHorizontalLines', table: {
+ headerRows: 1,
+ widths: ['*', 'auto', 'auto', 'auto'],
+ body: [
+ ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),
+ ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),
+ { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])
+ ]
+ } },
+ { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }
+ ],
+ styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }
+ };
+ await pdfmake.createPdf(definition).write('invoice.pdf');
+}
+
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+## Adapt it to your application
+
+This is a layout example, not a tax or accounting implementation. Validate quantities and prices before generating the definition. Amounts use integer cents to avoid decimal accumulation in this example; apply your domain's rounding rules separately. For an HTTP response, replace `write()` with `getBuffer()` as shown in the [Node.js quickstart](/docs/0.3/getting-started/server-side/).
+
+`headerRows: 1` repeats the table header when rows continue onto a new page. Keep each row the same length as `widths`. Make a fresh definition for every invoice.
diff --git a/content/guides/invoice.pt-br.md b/content/guides/invoice.pt-br.md
new file mode 100644
index 00000000..194b1897
--- /dev/null
+++ b/content/guides/invoice.pt-br.md
@@ -0,0 +1,59 @@
++++
+title = "Exemplo de fatura"
+description = "Gere um PDF de fatura completo com estilos reutilizáveis, cabeçalho de tabela repetido, totais e numeração de páginas."
+weight = 1
+sourceDigest = "834285f04d4a3a792e6f17f99a72113c67334451ebcb39a498d27c528c9f8cc4"
++++
+
+## Execute o exemplo
+
+Instale `pdfmake@0.3.12`, salve este código como `invoice.cjs` e execute `node invoice.cjs`. Ele usa Helvetica padrão com conteúdo ASCII para evitar recursos externos. Para maior cobertura de idiomas, use fontes incorporadas.
+
+```js
+// docs-test: invoice
+const pdfmake = require('pdfmake');
+const fonts = require('pdfmake/standard-fonts/Helvetica');
+pdfmake.addFonts(fonts);
+pdfmake.setUrlAccessPolicy(() => false);
+const standardNames = new Set(Object.values(fonts.Helvetica));
+pdfmake.setLocalAccessPolicy(name => standardNames.has(name));
+
+async function main() {
+ const items = [
+ { description: 'Design services', quantity: 2, unitPriceCents: 12500 },
+ { description: 'Document review', quantity: 1, unitPriceCents: 7500 }
+ ];
+ const money = cents => (cents / 100).toFixed(2) + ' EUR';
+ const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);
+ const definition = {
+ defaultStyle: { font: 'Helvetica', fontSize: 10 },
+ pageMargins: [40, 50, 40, 50],
+ info: { title: 'Invoice INV-001', author: 'Example Studio' },
+ footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),
+ content: [
+ { text: 'INVOICE', style: 'title' },
+ { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },
+ { layout: 'lightHorizontalLines', table: {
+ headerRows: 1,
+ widths: ['*', 'auto', 'auto', 'auto'],
+ body: [
+ ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),
+ ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),
+ { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])
+ ]
+ } },
+ { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }
+ ],
+ styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }
+ };
+ await pdfmake.createPdf(definition).write('invoice.pdf');
+}
+
+main().catch(error => { console.error(error); process.exitCode = 1; });
+```
+
+## Adapte à sua aplicação
+
+Este é um exemplo de layout, não uma implementação fiscal ou contábil. Valide quantidades e preços antes de gerar a definição. Neste exemplo, os valores usam centavos inteiros para evitar o acúmulo de erros decimais; aplique separadamente as regras de arredondamento do seu domínio. Para uma resposta HTTP, substitua `write()` por `getBuffer()`, como no [início rápido para Node.js](/docs/0.3/pt-br/getting-started/server-side/).
+
+`headerRows: 1` repete o cabeçalho da tabela quando as linhas continuam em uma página seguinte. Mantenha o mesmo número de células em cada linha e em `widths`. Crie uma definição nova para cada fatura.
diff --git a/content/guides/llm-and-mcp.de.md b/content/guides/llm-and-mcp.de.md
new file mode 100644
index 00000000..2a058a59
--- /dev/null
+++ b/content/guides/llm-and-mcp.de.md
@@ -0,0 +1,59 @@
++++
+title = "LLM- und MCP-Integration"
+description = "Verwende versionierte Markdown-Ressourcen, llms.txt und einen lokalen MCP-Dokumentationsserver mit reinem Lesezugriff für pdfmake 0.3."
+weight = 6
+sourceDigest = "f369b718c3c46a1865fd7a38d3ccd5b001b457935d5a0a4bd9fccb22d194bbd3"
++++
+
+## Dokumentation ohne MCP verwenden
+
+Jede Seite ist als generiertes Markdown verfügbar. Dieselbe Quelle erzeugt:
+
+- [llms.txt](/docs/0.3/de/llms.txt): Seitenverzeichnis mit Beschreibungen und Markdown-Links.
+- [llms-full.txt](/docs/0.3/de/llms-full.txt): den vollständigen, versionierten Markdown-Korpus.
+- [docs-index.json](/docs/0.3/de/docs-index.json): Seiten-IDs, Titel, Beschreibungen, Quell-URLs und vollständiges Markdown.
+
+Diese Dateien erleichtern das Auffinden von Inhalten, garantieren aber keine Suchmaschinenindexierung oder Aufnahme in Modellindizes. Nenne im Prompt die installierte Bibliotheksversion. Bitte das Modell, die verwendete Dokumentationsseite anzugeben und Promise-basierte Ausgabemethoden zu verwenden. Die `AGENTS.md`-Datei der Bibliothek beschreibt den Quellprozess und Testbefehle für Coding-Agenten.
+
+## Lokalen MCP-Server starten
+
+Klone das Dokumentationsrepository, installiere die Abhängigkeiten, erzeuge den Korpus und starte den Server:
+
+```sh
+git clone https://github.com/pdfmake/docs.git
+cd docs
+npm ci
+npm run docs:generate
+node mcp/server.mjs
+```
+
+Bis zur Annahme durch das Upstream-Projekt gehört dieser Server zum lokalen Verbesserungszweig. Starte ihn über die stdio-Konfiguration deines MCP-Clients und verwende absolute Pfade:
+
+```json
+{
+ "mcpServers": {
+ "pdfmake-docs": {
+ "command": "node",
+ "args": ["/absolute/path/to/docs/mcp/server.mjs"]
+ }
+ }
+}
+```
+
+Ersetze den Beispielpfad durch den Pfad deines Klons. In Windows-JSON-Pfaden musst du `/` oder escaped `\\` verwenden. Die Speicherorte der Clientkonfiguration unterscheiden sich. Der Server schreibt Protokollnachrichten nach stdout und Fehler nach stderr. Nach der Installation der Abhängigkeiten benötigt er weder einen API-Schlüssel noch ein Modellkonto oder eine Netzwerkverbindung.
+
+## Werkzeuge und Ressourcen
+
+| Funktion | Eingabe | Ergebnis |
+| --- | --- | --- |
+| `search_docs` | `query`, optional `limit` (1–10), optional `language` | Rangsortierte Seiten mit exakten IDs, Sprache, Version, Quell-URLs und Auszügen |
+| `get_doc` | Exakte `id` aus der Suche | Vollständige Markdown-Seite |
+| MCP-Ressourcen | `pdfmake://docs/0.3/de/` | Dieselbe versionierte Markdown-Seite |
+
+Der Server kann nur den mitgelieferten Dokumentationskorpus lesen. Er kann keine PDFs rendern, keinen Code auswerten, keine vom Aufrufer ausgewählten Dateisystempfade lesen und keine entfernten URLs aufrufen. Erzeuge den Korpus nach Dokumentationsänderungen erneut und starte den Server neu.
+
+`language` akzeptiert `en` (Standard), `de`, `fr`, `es` und `pt-br`. Jede unterstützte Sprache enthält dieselbe vollständige Menge an Dokumentationsseiten. Bei der Suche werden Sprachen nicht unbemerkt vermischt. Eine übersetzte ID wie `de/learn/first-pdf` kann mit `get_doc` oder über die Ressource `pdfmake://docs/0.3/de/learn/first-pdf` abgerufen werden. Jede Sprache hat eigene Discovery-Dateien, zum Beispiel `/docs/0.3/de/llms.txt` und `/docs/0.3/de/llms-full.txt`.
+
+## Promptvorschlag
+
+> Ich verwende pdfmake 0.3.x in Node.js. Suche in der passenden Dokumentation, bevor du Code erzeugst. Verwende die Node-Singleton-API, registriere Schriften, konfiguriere synchrone Ressourcenrichtlinien, warte Ausgabemethoden mit await ab und nenne die verwendeten Seiten-IDs. Erstelle für jede Anfrage eine neue Dokumentdefinition.
diff --git a/content/guides/llm-and-mcp.es.md b/content/guides/llm-and-mcp.es.md
new file mode 100644
index 00000000..09a21fbb
--- /dev/null
+++ b/content/guides/llm-and-mcp.es.md
@@ -0,0 +1,59 @@
++++
+sourceDigest = "f369b718c3c46a1865fd7a38d3ccd5b001b457935d5a0a4bd9fccb22d194bbd3"
+title = "Integración con LLM y MCP"
+description = "Usa recursos Markdown versionados, llms.txt y un servidor MCP local de solo lectura para la documentación de pdfmake 0.3."
+weight = 6
++++
+
+## Usar la documentación sin MCP
+
+Cada página está disponible como Markdown generado. Las mismas fuentes producen:
+
+- [llms.txt](/docs/0.3/es/llms.txt): índice de páginas con descripciones y enlaces Markdown.
+- [llms-full.txt](/docs/0.3/es/llms-full.txt): corpus completo de Markdown versionado.
+- [docs-index.json](/docs/0.3/es/docs-index.json): identificadores de páginas, títulos, descripciones, URL de origen y Markdown completo.
+
+Son ayudas para descubrir contenido, no una garantía de indexación en motores de búsqueda o modelos. Incluye en tu prompt la versión de la biblioteca instalada. Pide al modelo que cite la página y use los métodos de salida basados en Promise. El archivo `AGENTS.md` de la biblioteca explica a los agentes de programación la canalización de origen y los comandos de prueba.
+
+## Ejecutar el servidor MCP local
+
+Clona el repositorio de documentación, instala sus dependencias, genera el corpus e inicia el servidor:
+
+```sh
+git clone https://github.com/pdfmake/docs.git
+cd docs
+npm ci
+npm run docs:generate
+node mcp/server.mjs
+```
+
+Este servidor forma parte de la rama local de mejoras hasta que se acepte upstream. Inícialo mediante la configuración stdio de tu cliente MCP, con rutas absolutas:
+
+```json
+{
+ "mcpServers": {
+ "pdfmake-docs": {
+ "command": "node",
+ "args": ["/absolute/path/to/docs/mcp/server.mjs"]
+ }
+ }
+}
+```
+
+Sustituye la ruta de ejemplo por la ruta de tu clon. En JSON de Windows, las rutas deben usar `/` o `\\` escapadas. Las ubicaciones de configuración varían según el cliente. El servidor escribe los mensajes del protocolo en stdout y los errores en stderr. No requiere una clave API, una cuenta de modelo ni una conexión de red después de instalar las dependencias.
+
+## Herramientas y recursos
+
+| Funcionalidad | Entrada | Resultado |
+| --- | --- | --- |
+| `search_docs` | `query`, `limit` opcional (1–10), `language` opcional | Páginas ordenadas por relevancia con sus identificadores exactos, idioma, versión, URL de origen y extractos |
+| `get_doc` | `id` exacto obtenido en la búsqueda | Página Markdown completa |
+| Recursos MCP | `pdfmake://docs/0.3/` | La misma página Markdown versionada |
+
+El servidor solo puede leer su corpus de documentación incluido. No puede renderizar PDF, evaluar código, leer rutas del sistema de archivos seleccionadas por quien llama ni consultar URL remotas. Vuelve a generar el corpus y a iniciar el servidor después de editar documentación.
+
+`language` acepta `en` (predeterminado), `de`, `fr`, `es` y `pt-br`. Cada idioma admitido contiene el mismo conjunto completo de páginas de documentación. La búsqueda nunca mezcla idiomas en silencio. Se puede leer un identificador traducido como `de/learn/first-pdf` con `get_doc` o mediante el recurso `pdfmake://docs/0.3/de/learn/first-pdf`. Cada idioma también tiene sus propios archivos de descubrimiento; por ejemplo, `/docs/0.3/de/llms.txt` y `/docs/0.3/de/llms-full.txt`.
+
+## Prompt sugerido
+
+> Uso pdfmake 0.3.x en Node.js. Busca la documentación correspondiente antes de generar código. Usa la API singleton de Node, registra las fuentes, configura políticas de recursos síncronas, espera la salida e indica los identificadores de las páginas usadas. Crea una definición de documento nueva en cada solicitud.
diff --git a/content/guides/llm-and-mcp.fr.md b/content/guides/llm-and-mcp.fr.md
new file mode 100644
index 00000000..5458a106
--- /dev/null
+++ b/content/guides/llm-and-mcp.fr.md
@@ -0,0 +1,59 @@
++++
+title = "Intégration LLM et MCP"
+description = "Utilisez les ressources Markdown versionnées, llms.txt et un serveur MCP local en lecture seule pour la documentation pdfmake 0.3."
+weight = 6
+sourceDigest = "f369b718c3c46a1865fd7a38d3ccd5b001b457935d5a0a4bd9fccb22d194bbd3"
++++
+
+## Utiliser la documentation sans MCP
+
+Chaque page est disponible en Markdown généré. La même source produit :
+
+- [llms.txt](/docs/0.3/fr/llms.txt) : index des pages avec descriptions et liens Markdown.
+- [llms-full.txt](/docs/0.3/fr/llms-full.txt) : corpus Markdown versionné complet.
+- [docs-index.json](/docs/0.3/fr/docs-index.json) : identifiants, titres, descriptions, URL sources et Markdown complet des pages.
+
+Ces fichiers facilitent la découverte ; ils ne garantissent ni l’indexation par un moteur de recherche ni celle par un modèle. Indiquez dans votre prompt la version de la bibliothèque installée. Demandez au modèle de citer la page et d’utiliser les méthodes de sortie basées sur Promise. Le fichier `AGENTS.md` de la bibliothèque explique le pipeline source et les commandes de test destinées aux agents de programmation.
+
+## Exécuter le serveur MCP local
+
+Clonez le dépôt de documentation, installez ses dépendances, générez le corpus et démarrez le serveur :
+
+```sh
+git clone https://github.com/pdfmake/docs.git
+cd docs
+npm ci
+npm run docs:generate
+node mcp/server.mjs
+```
+
+Ce serveur fait partie de la branche d’amélioration locale jusqu’à son acceptation en amont. Démarrez-le au moyen de la configuration stdio de votre client MCP, en utilisant des chemins absolus :
+
+```json
+{
+ "mcpServers": {
+ "pdfmake-docs": {
+ "command": "node",
+ "args": ["/absolute/path/to/docs/mcp/server.mjs"]
+ }
+ }
+}
+```
+
+Remplacez le chemin d’exemple par celui de votre clone. Dans un JSON Windows, utilisez `/` ou échappez les antislashs avec `\\`. L’emplacement de la configuration dépend du client. Le serveur écrit les messages du protocole sur stdout et les erreurs sur stderr. Après l’installation des dépendances, aucune clé API, aucun compte de modèle ni connexion réseau n’est nécessaire.
+
+## Outils et ressources
+
+| Capacité | Entrée | Résultat |
+| --- | --- | --- |
+| `search_docs` | `query`, `limit` facultatif (1–10), `language` facultatif | Pages classées avec identifiants exacts, langue, version, URL sources et extraits |
+| `get_doc` | `id` exact issu de la recherche | Page Markdown complète |
+| Ressources MCP | `pdfmake://docs/0.3/` | Même page Markdown versionnée |
+
+Le serveur ne peut lire que son corpus de documentation intégré. Il ne peut pas générer de PDF, exécuter du code d’exemple, lire des chemins du système de fichiers choisis par l’appelant ni parcourir des URL distantes. Régénérez le corpus et redémarrez le serveur après toute modification de la documentation.
+
+`language` accepte `en` (par défaut), `de`, `fr`, `es` et `pt-br`. Chaque langue prise en charge contient le même ensemble complet de pages de documentation. La recherche ne mélange jamais silencieusement les langues. Un identifiant traduit, tel que `de/learn/first-pdf`, peut être lu avec `get_doc` ou la ressource `pdfmake://docs/0.3/de/learn/first-pdf`. Chaque langue possède également ses propres fichiers de découverte, par exemple `/docs/0.3/de/llms.txt` et `/docs/0.3/de/llms-full.txt`.
+
+## Exemple de prompt
+
+> J’utilise pdfmake 0.3.x dans Node.js. Consulte la documentation correspondant à cette version avant de générer du code. Utilise l’API singleton Node, enregistre les polices, configure des politiques de ressources synchrones, attends la sortie et cite les identifiants des pages utilisées. Crée une nouvelle définition de document pour chaque requête.
diff --git a/content/guides/llm-and-mcp.md b/content/guides/llm-and-mcp.md
new file mode 100644
index 00000000..44d1dfef
--- /dev/null
+++ b/content/guides/llm-and-mcp.md
@@ -0,0 +1,58 @@
++++
+title = "LLM and MCP integration"
+description = "Use versioned Markdown resources, llms.txt and a local read-only MCP documentation server with pdfmake 0.3."
+weight = 6
++++
+
+## Use documentation without MCP
+
+Every page is available as generated Markdown. The same source produces:
+
+- [llms.txt](/docs/0.3/llms.txt): page index with descriptions and Markdown links.
+- [llms-full.txt](/docs/0.3/llms-full.txt): the complete versioned Markdown corpus.
+- [docs-index.json](/docs/0.3/docs-index.json): page IDs, titles, descriptions, source URLs and full Markdown.
+
+These are discovery aids, not a search-engine or model-indexing guarantee. Keep the installed library version in your prompt. Ask the model to cite the page and use Promise output methods. The library's `AGENTS.md` explains its source pipeline and test commands to coding agents.
+
+## Run the local MCP server
+
+Clone the documentation repository, install its dependencies, generate the corpus and start the server:
+
+```sh
+git clone https://github.com/pdfmake/docs.git
+cd docs
+npm ci
+npm run docs:generate
+node mcp/server.mjs
+```
+
+This server is part of the local improvement branch until accepted upstream. Start it through your MCP client's stdio configuration, using absolute paths:
+
+```json
+{
+ "mcpServers": {
+ "pdfmake-docs": {
+ "command": "node",
+ "args": ["/absolute/path/to/docs/mcp/server.mjs"]
+ }
+ }
+}
+```
+
+Replace the example path with your clone's path. On Windows JSON paths must use `/` or escaped `\\`. Client configuration locations vary. The server writes protocol messages to stdout and errors to stderr. It does not require an API key, model account or network connection after dependency installation.
+
+## Tools and resources
+
+| Capability | Input | Result |
+| --- | --- | --- |
+| `search_docs` | `query`, optional `limit` (1–10), optional `language` | Ranked pages with exact IDs, language, version, source URLs and excerpts |
+| `get_doc` | Exact `id` from search | Complete Markdown page |
+| MCP resources | `pdfmake://docs/0.3/` | The same versioned Markdown page |
+
+The server can only read its bundled documentation corpus. It cannot render PDFs, evaluate code, read caller-selected filesystem paths or browse remote URLs. Re-run generation and restart it after editing documentation.
+
+`language` accepts `en` (default), `de`, `fr`, `es` and `pt-br`. Every supported language contains the same complete set of documentation pages. Search never silently mixes languages. A translated ID such as `de/learn/first-pdf` can be read with `get_doc` or the resource `pdfmake://docs/0.3/de/learn/first-pdf`. Each language also has its own discovery files, for example `/docs/0.3/de/llms.txt` and `/docs/0.3/de/llms-full.txt`.
+
+## Suggested prompt
+
+> I use pdfmake 0.3.x in Node.js. Search the matching documentation before generating code. Use the Node singleton API, register fonts, configure synchronous resource policies, await output, and cite the page IDs used. Build a fresh document definition per request.
diff --git a/content/guides/llm-and-mcp.pt-br.md b/content/guides/llm-and-mcp.pt-br.md
new file mode 100644
index 00000000..42fe2194
--- /dev/null
+++ b/content/guides/llm-and-mcp.pt-br.md
@@ -0,0 +1,59 @@
++++
+title = "Integração com LLM e MCP"
+description = "Use recursos Markdown versionados, llms.txt e um servidor MCP local e somente leitura para a documentação do pdfmake 0.3."
+weight = 6
+sourceDigest = "f369b718c3c46a1865fd7a38d3ccd5b001b457935d5a0a4bd9fccb22d194bbd3"
++++
+
+## Consulte a documentação sem MCP
+
+Cada página também está disponível como Markdown gerado. A mesma fonte produz:
+
+- [llms.txt](/docs/0.3/pt-br/llms.txt): índice de páginas com descrições e links Markdown.
+- [llms-full.txt](/docs/0.3/pt-br/llms-full.txt): corpus Markdown completo e versionado.
+- [docs-index.json](/docs/0.3/pt-br/docs-index.json): IDs de páginas, títulos, descrições, URLs de origem e Markdown completo.
+
+Esses arquivos ajudam na descoberta; eles não garantem indexação por mecanismos de busca ou modelos. Informe ao modelo a versão da biblioteca instalada. Peça que cite as páginas e use métodos de saída baseados em Promise. O `AGENTS.md` da biblioteca explica o pipeline do código-fonte e os comandos de teste usados por agentes de programação.
+
+## Execute o servidor MCP local
+
+Clone o repositório da documentação, instale as dependências, gere o corpus e inicie o servidor:
+
+```sh
+git clone https://github.com/pdfmake/docs.git
+cd docs
+npm ci
+npm run docs:generate
+node mcp/server.mjs
+```
+
+Este servidor faz parte do branch local de melhorias até ser aceito upstream. Inicie-o pela configuração stdio do seu cliente MCP, usando caminhos absolutos:
+
+```json
+{
+ "mcpServers": {
+ "pdfmake-docs": {
+ "command": "node",
+ "args": ["/absolute/path/to/docs/mcp/server.mjs"]
+ }
+ }
+}
+```
+
+Substitua o caminho de exemplo pelo caminho do seu clone. Em JSON no Windows, use `/` ou `\\` escapado. O local da configuração varia conforme o cliente. O servidor escreve mensagens do protocolo em stdout e erros em stderr. Depois de instalar as dependências, ele não precisa de chave de API, conta de modelo nem conexão de rede.
+
+## Ferramentas e recursos
+
+| Recurso | Entrada | Resultado |
+| --- | --- | --- |
+| `search_docs` | `query`, `limit` opcional (1–10), `language` opcional | Páginas ordenadas por relevância, com IDs exatos, idioma, versão, URLs de origem e trechos |
+| `get_doc` | `id` exato obtido na busca | Página Markdown completa |
+| Recursos MCP | `pdfmake://docs/0.3/` | A mesma página Markdown versionada |
+
+O servidor só lê o corpus de documentação empacotado. Ele não renderiza PDFs, executa código, lê caminhos do sistema de arquivos escolhidos pelo chamador nem acessa URLs remotas. Gere novamente o corpus e reinicie o servidor depois de editar a documentação.
+
+`language` aceita `en` (padrão), `de`, `fr`, `es` e `pt-br`. Cada idioma compatível contém o mesmo conjunto completo de páginas da documentação. A busca nunca mistura idiomas sem avisar. Um ID traduzido como `de/learn/first-pdf` pode ser lido com `get_doc` ou pelo recurso `pdfmake://docs/0.3/de/learn/first-pdf`. Cada idioma também tem seus próprios arquivos de descoberta, por exemplo `/docs/0.3/de/llms.txt` e `/docs/0.3/de/llms-full.txt`.
+
+## Sugestão de prompt
+
+> Uso pdfmake 0.3.x no Node.js. Consulte a documentação correspondente antes de gerar código. Use a API singleton do Node, registre as fontes, configure políticas síncronas de recursos, aguarde a saída e cite os IDs das páginas usados. Crie uma definição de documento nova para cada solicitação.
diff --git a/content/guides/performance.de.md b/content/guides/performance.de.md
new file mode 100644
index 00000000..ac835174
--- /dev/null
+++ b/content/guides/performance.de.md
@@ -0,0 +1,37 @@
++++
+title = "Leistung und Speicher"
+description = "Miss Layout- und Ausgabekosten von pdfmake, reduziere wiederholte Ressourcen und steuere die Parallelität, ohne das Dokumentverhalten zu ändern."
+weight = 4
+sourceDigest = "9aada83a6a91e02de05a173270245ef69b2e909bde55078052abdcaddacc0bf2"
++++
+
+## Arbeitslast messen
+
+Vergleiche repräsentative Dokumente mit derselben Node.js-Version, denselben Schriften und Eingabedaten. Erfasse Median und hohe Latenzwerte, Spitzenspeicherverbrauch, Seitenzahl und Ausgabegröße. Miss den Kaltstart und das Laden der Schriften getrennt von wiederholten Renderdurchläufen. Vergleiche Dokumente mit vielen Tabellen, langem Text und vielen Bildern separat.
+
+```js
+const start = performance.now();
+const bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();
+console.log({ milliseconds: performance.now() - start, bytes: bytes.length });
+```
+
+`makeFreshDefinition()` ist eine eigene Factory-Funktion. Verwende keine Dokumentdefinition wieder, die das Layout bereits verändert hat. Prüfe neben der Geschwindigkeit auch den Text, die Seitenzahlen und repräsentative gerenderte Seiten.
+
+## Vermeidbare Arbeit reduzieren
+
+- Lege wiederholte Bilder im Wörterbuch `images` ab und verweise über ihren Schlüssel darauf. Skaliere große Quelldateien vor dem Einbetten; die Anzeigemaße verkleinern nicht die ursprünglichen Bilddaten.
+- Verwende feste Breiten, wenn dein Layout es zulässt. Inhaltsabhängige `auto`-Breiten erfordern Textmessungen; miss die Leistung, bevor du Tabellen neu gestaltest.
+- Registriere Schriften einmal. Liefere in Browseranwendungen nur die benötigten Schriftfamilien und Varianten aus.
+- Lass `fontLayoutCache` aktiviert, sofern kein gemessenes Kompatibilitätsproblem das Deaktivieren erfordert. Siehe [Rendering-Optionen](/docs/0.3/de/options/).
+- Vermeide Base64, wenn deine API binäre PDF-Bytes zurückgeben kann. Base64 stellt je drei Bytes mit vier Zeichen dar und legt außerdem eine Zeichenfolge im Speicher an.
+- Verwende `write()` oder verarbeite Streams direkt, um den zusätzlichen zusammengefügten Buffer von `getBuffer()` zu vermeiden, wenn du nur eine Datei oder einen Stream benötigst. Das Layout wird trotzdem vor der Ausgabe berechnet.
+
+## Parallelität steuern
+
+Mehr gleichzeitige PDF-Aufträge können den Speicherverbrauch und die Verzögerungen der Event-Loop erhöhen. Begrenze die Zahl paralleler Renderdurchläufe und teste die Auslastung, statt nur eine Anfrage zu messen. Verwende Worker-Threads oder separate Prozesse, wenn blockierende Arbeit die Reaktionsfähigkeit der API beeinträchtigt. Ändere veränderliche Singleton-Konfiguration nicht pro Anfrage.
+
+## Benchmark für die Bibliotheksentwicklung
+
+Der Verbesserungszweig der Bibliothek enthält `npm run benchmark:text`, ausführbar nach `npm run build:node`. Der Benchmark vergleicht das Abflachen von Text-Arrays mit dem vorherigen Algorithmus anhand deterministischer gemischter Eingaben und prüft, ob die Ergebnisse übereinstimmen. Die optimierte Schleife vermeidet wiederholtes Kopieren von Präfixen. Der gemessene Geschwindigkeitsgewinn betrifft nur diese Hilfsfunktion; er sagt nichts über die Gesamtdauer der PDF-Erzeugung aus.
+
+Zeitgrenzwerte sind bewusst nicht Teil von CI, da gemeinsam genutzte Runner unzuverlässige Messwerte liefern. Verwende Korrektheitstests als Freigabekriterium und halte Benchmark-Ergebnisse mit den Umgebungsdetails zur Prüfung fest.
diff --git a/content/guides/performance.es.md b/content/guides/performance.es.md
new file mode 100644
index 00000000..bccda473
--- /dev/null
+++ b/content/guides/performance.es.md
@@ -0,0 +1,37 @@
++++
+sourceDigest = "9aada83a6a91e02de05a173270245ef69b2e909bde55078052abdcaddacc0bf2"
+title = "Rendimiento y memoria"
+description = "Mide los costes de maquetación y salida de pdfmake, reduce los recursos repetidos y controla la concurrencia sin cambiar el comportamiento del documento."
+weight = 4
++++
+
+## Medir tu carga de trabajo
+
+Evalúa documentos representativos con la misma versión de Node, las mismas fuentes y los mismos datos de entrada. Registra la latencia mediana y de cola, la memoria máxima, el número de páginas y el tamaño de salida. Separa el inicio en frío y la carga de fuentes de los renderizados repetidos. Compara por separado documentos con muchas tablas, texto extenso e imágenes.
+
+```js
+const start = performance.now();
+const bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();
+console.log({ milliseconds: performance.now() - start, bytes: bytes.length });
+```
+
+`makeFreshDefinition()` es una función de fábrica propia. No reutilices una definición que ya haya sido modificada por la maquetación. Comprueba el texto, el número de páginas y algunas páginas representativas renderizadas, además de la velocidad.
+
+## Reducir trabajo evitable
+
+- Coloca las imágenes repetidas en el diccionario `images` y haz referencia a ellas por su clave. Reduce el tamaño de las imágenes de origen grandes antes de incrustarlas; las dimensiones de visualización no reducen el tamaño de los datos originales.
+- Siempre que la distribución lo permita, prefiere los anchos fijos. Los anchos `auto` determinados por el contenido requieren medir el texto; mide el rendimiento antes de rediseñar las tablas.
+- Registra las fuentes una vez. En aplicaciones de navegador, incluye solo las familias y variantes necesarias.
+- Mantén activado `fontLayoutCache` salvo que un problema de compatibilidad medido requiera desactivarlo. Consulta las [opciones de renderizado](/docs/0.3/es/options/).
+- Evita Base64 cuando tu API pueda devolver bytes PDF binarios. Base64 representa cada tres bytes con cuatro caracteres y también reserva una cadena.
+- Usa `write()` o consume el flujo directamente para evitar el Buffer concatenado adicional que produce `getBuffer()` cuando solo necesitas un archivo o un flujo. La maquetación sigue ocurriendo antes de consumir la salida.
+
+## Controlar la concurrencia
+
+Más trabajos PDF simultáneos pueden aumentar el uso de memoria y la latencia del bucle de eventos. Limita el número de renderizados simultáneos y prueba el rendimiento con carga, en vez de medir una sola solicitud. Usa hilos de trabajo o procesos independientes si el trabajo bloqueante afecta la capacidad de respuesta de la API. Mantén fuera del código por solicitud la configuración singleton mutable.
+
+## Benchmark de desarrollo de la biblioteca
+
+La rama de mejoras de la biblioteca incluye `npm run benchmark:text` después de `npm run build:node`. Compara el aplanamiento de matrices de texto con el algoritmo anterior mediante una entrada mixta determinista y comprueba que los resultados sean equivalentes. El bucle optimizado evita copiar repetidamente los prefijos. Su aceleración mide solo esa función; no afirma que mejore en la misma proporción la generación completa de PDF.
+
+Los umbrales de tiempo están excluidos deliberadamente de CI porque los ejecutores compartidos producen mediciones ruidosas. Usa las pruebas de corrección como condición de aceptación y conserva los resultados del benchmark junto con los detalles del entorno para revisarlos.
diff --git a/content/guides/performance.fr.md b/content/guides/performance.fr.md
new file mode 100644
index 00000000..cf10412d
--- /dev/null
+++ b/content/guides/performance.fr.md
@@ -0,0 +1,37 @@
++++
+title = "Performances et mémoire"
+description = "Mesurez le coût de mise en page et de sortie de pdfmake, réduisez les ressources répétées et maîtrisez la concurrence sans changer le comportement du document."
+weight = 4
+sourceDigest = "9aada83a6a91e02de05a173270245ef69b2e909bde55078052abdcaddacc0bf2"
++++
+
+## Mesurer votre charge de travail
+
+Évaluez des documents représentatifs avec la même version de Node, les mêmes polices et les mêmes données d’entrée. Notez la latence médiane et de queue, la mémoire maximale, le nombre de pages et la taille de sortie. Séparez le démarrage à froid et le chargement des polices des rendus répétés. Comparez distinctement les documents contenant de nombreux tableaux, de longs textes ou beaucoup d’images.
+
+```js
+const start = performance.now();
+const bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();
+console.log({ milliseconds: performance.now() - start, bytes: bytes.length });
+```
+
+`makeFreshDefinition()` est votre propre fonction de création. Ne réutilisez pas une définition déjà modifiée par la mise en page. Vérifiez aussi le texte, le nombre de pages et des pages rendues représentatives, pas seulement la vitesse.
+
+## Réduire le travail évitable
+
+- Placez les images répétées dans le dictionnaire `images` et référencez-les par leur clé. Redimensionnez les sources volumineuses avant de les intégrer ; les dimensions d’affichage ne réduisent pas leur charge utile.
+- Préférez des largeurs fixes si votre mise en page le permet. Les largeurs `auto` calculées selon le contenu nécessitent la mesure du texte ; mesurez les performances avant de remanier les tableaux.
+- Enregistrez les polices une fois. Dans les applications navigateur, ne livrez que les familles et variantes nécessaires.
+- Laissez `fontLayoutCache` activé sauf si un problème de compatibilité constaté impose de le désactiver. Consultez les [options de rendu](/docs/0.3/fr/options/).
+- Évitez base64 si votre API peut renvoyer les octets PDF binaires. Base64 représente trois octets par quatre caractères et alloue également une chaîne.
+- Utilisez `write()` ou consommez directement le flux pour éviter le Buffer concaténé supplémentaire créé par `getBuffer()` si vous avez uniquement besoin d’un fichier ou d’un flux. La mise en page a toutefois lieu avant la consommation de la sortie.
+
+## Maîtriser la concurrence
+
+Un plus grand nombre de tâches PDF simultanées peut augmenter la mémoire utilisée et le délai de la boucle d’événements. Limitez les rendus concurrents et testez le débit au lieu de mesurer seulement une requête. Utilisez des threads worker ou des processus séparés si le travail bloquant affecte la réactivité de l’API. Gardez la configuration mutable du singleton hors du code exécuté pour chaque requête.
+
+## Benchmark de développement de la bibliothèque
+
+La branche d’amélioration de la bibliothèque comprend `npm run benchmark:text`, à exécuter après `npm run build:node`. Le benchmark compare l’aplatissement de tableaux de texte à l’algorithme précédent avec des entrées mixtes déterministes et vérifie l’équivalence des résultats. La boucle optimisée évite de recopier les préfixes à répétition. Son gain de vitesse concerne uniquement cet utilitaire ; il ne porte pas sur la durée totale de génération PDF.
+
+Les seuils de temps sont volontairement exclus de l’intégration continue, car les exécuteurs partagés produisent des mesures variables. Utilisez les tests de correction comme critères de validation et conservez les résultats du benchmark avec les détails de l’environnement pour la revue.
diff --git a/content/guides/performance.md b/content/guides/performance.md
new file mode 100644
index 00000000..e0338800
--- /dev/null
+++ b/content/guides/performance.md
@@ -0,0 +1,36 @@
++++
+title = "Performance and memory"
+description = "Measure pdfmake layout and output costs, reduce repeated resources, and control concurrency without changing document behavior."
+weight = 4
++++
+
+## Measure your workload
+
+Benchmark representative documents with the same Node version, fonts and input data. Record median and tail latency, peak memory, page count and output size. Separate cold startup/font loading from repeated renders. Compare table-heavy, long-text and image-heavy documents separately.
+
+```js
+const start = performance.now();
+const bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();
+console.log({ milliseconds: performance.now() - start, bytes: bytes.length });
+```
+
+`makeFreshDefinition()` is your own factory. Do not reuse a definition already mutated by layout. Verify text, page counts and representative rendered pages as well as speed.
+
+## Reduce avoidable work
+
+- Put repeated images in the `images` dictionary and reference them by key. Resize large source images before embedding them; display dimensions do not reduce the original payload.
+- Prefer fixed widths when your layout permits them. Content-driven `auto` widths require text measurement; benchmark before redesigning tables.
+- Register fonts once. In browser applications, ship only needed font families and variants.
+- Keep `fontLayoutCache` enabled unless a measured compatibility problem requires disabling it. See [render options](/docs/0.3/options/).
+- Avoid base64 when your API can return binary PDF bytes. Base64 represents each three bytes with four characters and also allocates a string.
+- Use `write()` or direct stream consumption to avoid the additional concatenated Buffer produced by `getBuffer()` when you only need a file or stream. Layout still occurs before output consumption.
+
+## Control concurrency
+
+More simultaneous PDF jobs can increase memory use and event-loop delay. Bound concurrent renders and load-test throughput rather than only measuring one request. Use worker threads or separate processes when blocking work affects API responsiveness. Keep mutable singleton configuration out of per-request code.
+
+## Library development benchmark
+
+The library improvement branch includes `npm run benchmark:text` after `npm run build:node`. It compares text-array flattening with the previous algorithm using deterministic mixed input and verifies equivalent results. The optimized loop avoids repeated prefix copying. Its speedup measures that helper only; it is not a claim about total PDF generation time.
+
+Timing thresholds are deliberately excluded from CI because shared runners are noisy. Use correctness tests as gates and retain benchmark results with environment details for review.
diff --git a/content/guides/performance.pt-br.md b/content/guides/performance.pt-br.md
new file mode 100644
index 00000000..adfc226c
--- /dev/null
+++ b/content/guides/performance.pt-br.md
@@ -0,0 +1,37 @@
++++
+title = "Desempenho e memória"
+description = "Meça os custos de layout e saída do pdfmake, reduza recursos repetidos e controle a concorrência sem alterar o comportamento do documento."
+weight = 4
+sourceDigest = "9aada83a6a91e02de05a173270245ef69b2e909bde55078052abdcaddacc0bf2"
++++
+
+## Meça sua carga de trabalho
+
+Faça benchmark de documentos representativos com a mesma versão do Node, as mesmas fontes e os mesmos dados de entrada. Registre a latência mediana e de cauda, o pico de memória, o número de páginas e o tamanho da saída. Separe a inicialização fria e o carregamento das fontes das renderizações repetidas. Compare documentos com muitas tabelas, textos longos e muitas imagens separadamente.
+
+```js
+const start = performance.now();
+const bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();
+console.log({ milliseconds: performance.now() - start, bytes: bytes.length });
+```
+
+`makeFreshDefinition()` é uma função criada por você. Não reutilize uma definição que já foi modificada pelo layout. Além da velocidade, verifique o texto, o número de páginas e páginas renderizadas representativas.
+
+## Reduza trabalho evitável
+
+- Coloque imagens repetidas no dicionário `images` e faça referência a elas pela chave. Redimensione imagens-fonte grandes antes de incorporá-las; as dimensões de exibição não reduzem o conteúdo original.
+- Prefira larguras fixas quando o layout permitir. Larguras `auto` calculadas pelo conteúdo exigem medição de texto; faça benchmark antes de redesenhar tabelas.
+- Registre fontes uma vez. Em aplicações de navegador, inclua somente as famílias e variantes necessárias.
+- Mantenha `fontLayoutCache` ativado, a menos que um problema de compatibilidade medido exija desativá-lo. Consulte [opções de renderização](/docs/0.3/pt-br/options/).
+- Evite base64 quando sua API puder retornar bytes binários do PDF. Base64 representa cada três bytes com quatro caracteres e também aloca uma string.
+- Use `write()` ou consuma o stream diretamente para evitar o Buffer concatenado adicional produzido por `getBuffer()` quando você só precisa de um arquivo ou stream. O layout ainda ocorre antes do consumo da saída.
+
+## Controle a concorrência
+
+Mais trabalhos de PDF simultâneos podem aumentar o uso de memória e o atraso do event loop. Limite as renderizações simultâneas e teste a carga e a vazão, em vez de medir apenas uma solicitação. Use worker threads ou processos separados quando o trabalho bloqueante afetar a capacidade de resposta da API. Não altere configurações mutáveis do singleton por solicitação.
+
+## Benchmark de desenvolvimento da biblioteca
+
+O branch de melhorias da biblioteca inclui `npm run benchmark:text` depois de `npm run build:node`. Ele compara a conversão de arrays de texto com o algoritmo anterior usando entradas mistas determinísticas e verifica resultados equivalentes. O loop otimizado evita cópias repetidas do prefixo. O ganho medido se aplica somente a esse helper; não é uma afirmação sobre o tempo total de geração do PDF.
+
+Limites de tempo foram deliberadamente excluídos da CI porque runners compartilhados têm resultados ruidosos. Use testes de correção como critérios e mantenha os resultados dos benchmarks junto com detalhes do ambiente para revisão.
diff --git a/content/guides/playground.de.md b/content/guides/playground.de.md
new file mode 100644
index 00000000..a8ffdd78
--- /dev/null
+++ b/content/guides/playground.de.md
@@ -0,0 +1,55 @@
++++
+title = "Playground-Anleitung"
+description = "Erkunde pdfmake-Beispiele mit Code-Editor, direkter PDF-Vorschau, Seitennavigation, lokalen Imports und herunterladbarem Quellcode."
+weight = 0
+sourceDigest = "396ad48200f73ea3dadbbbcc3eaaf41d819c39e44ee4dd12c2546b4608adf171"
++++
+
+## Durch Bearbeiten lernen
+
+Öffne den [Playground](/docs/0.3/de/playground/), wähle ein Beispiel und bearbeite die Definition im linken Bereich. Rechts siehst du eine echte, mit PDF.js gerenderte PDF. Wenn **Live-Vorschau** aktiviert ist, wird die PDF nach jeder Bearbeitung automatisch aktualisiert. Wähle **Ausführen** oder drücke **Strg/Command + Enter**, um sie sofort zu aktualisieren.
+
+Der CodeMirror-6-Editor bietet Syntaxhervorhebung, Zeilennummern, Klammerzuordnung, Einrückung, Undo/Redo-Schaltflächen, einen persistenten Rückgängig-Verlauf und Syntaxdiagnosen mit Zeile und Spalte. Mit **Zum Fehler springen** wird die fehlerhafte Quelltextstelle fokussiert. Der Editor bietet außerdem Vervollständigungen. Drücke **Strg + Leertaste**, um sie aufzurufen. Vorgeschlagene Feldnamen sind Hinweise; gültigen Kontext, Typ und Werte beschreibt die Dokumentreferenz.
+
+## Beispiele
+
+| Beispiel | Erkunden |
+| --- | --- |
+| [Erstes Dokument](/docs/0.3/de/playground/?example=welcome) | Text, Abstände und Schriftstile |
+| [Rechnung](/docs/0.3/de/playground/?example=invoice) | Tabelle, Summen und Fußzeile mit Seitenzahlen |
+| [Tabellen](/docs/0.3/de/playground/?example=tables) | Wiederholte Kopfzeilen auf mehreren Seiten |
+| [Textstile](/docs/0.3/de/playground/?example=styles) | Benannte Stile und Inline-Überschreibungen |
+| [Spalten](/docs/0.3/de/playground/?example=columns) | Nebeneinander angeordnete Blöcke und Stapel |
+| [Zellüberspannungen](/docs/0.3/de/playground/?example=spans) | Zeilen- und Spaltenüberspannungen mit Platzhaltern |
+| [Seiten](/docs/0.3/de/playground/?example=pages) | Seitenumbrüche, Kopf- und Fußzeilen |
+| [Vektoren](/docs/0.3/de/playground/?example=vectors) | Eingebettete SVGs und QR-Codes |
+| [Bilder](/docs/0.3/de/playground/?example=images) | Eingebettete PNG-Daten unter einem Namen wiederverwenden |
+| [Listen](/docs/0.3/de/playground/?example=lists) | Nummerierte Listen, Aufzählungen und Links |
+
+Ein `example`-URL-Parameter wählt ein bekanntes Beispiel aus; er akzeptiert kein JavaScript. Die Live-Vorschau aktualisiert auch wiederhergestellte Arbeitsbereiche, gespeicherte Dokumente und importierte Dateien. Schalte **Live-Vorschau** aus, bevor du Code importierst, den du zunächst prüfen möchtest.
+
+## Vorschau und Ausgabe
+
+Verwende die Pfeilschaltflächen, um die Seite zu wechseln, und das Zoommenü, um die Skalierung anzupassen. **Seitentext** zeigt den aus der aktuellen PDF-Seite extrahierten Text zur Prüfung und für unterstützende Technologien an. **PDF öffnen** öffnet die erzeugte Datei separat; **PDF herunterladen** speichert dieselben PDF-Bytes. Die Fußzeile zeigt Erstellungszeit und Ausgabegröße. Die Erstellungszeit umfasst nicht das Rendern der Vorschau mit PDF.js.
+
+Die Live-Vorschau wartet nach der letzten Änderung 650 ms und rendert anschließend in einem neuen Worker. Die vorherige PDF bleibt sichtbar, bis die nächste Seite außerhalb des Bildschirms fertig gerendert ist; danach wird die Canvas in einem Schritt ausgetauscht. Die ausgewählte PDF-Seite und Zoomstufe bleiben nach Möglichkeit erhalten. Downloads sind deaktiviert, wenn die sichtbare PDF nicht dem aktuellen Code entspricht. Bei Fehlern bleibt die letzte erfolgreiche Vorschau erhalten, statt durch ein leeres Feld ersetzt zu werden.
+
+## Arbeit behalten
+
+**Code exportieren** lädt die aktuelle Definition als JavaScript herunter. **.js importieren** liest eine lokale Datei ein. Dateien sind auf 500 KB begrenzt. Deaktiviere **Live-Vorschau**, bevor du Code importierst, den du vor dem Ausführen prüfen möchtest. Vor dem Zurücksetzen oder Wechseln des Beispiels wirst du gefragt, bevor Änderungen überschrieben werden.
+
+**Der aktuelle Arbeitsbereich wird lokal automatisch gespeichert** – einschließlich Definition, Editor-Auswahl, Undo-Verlauf, Beispiel, Seite und Zoomstufe. Beim Neuladen werden Editor, Undo-/Redo-Verlauf und die Einstellung der Live-Vorschau wiederhergestellt. Wenn die Live-Vorschau aktiviert ist, wird die wiederhergestellte PDF automatisch gerendert; Änderungen aktualisieren sie anschließend ohne **Ausführen**. Ist sie deaktiviert, bleibt das Rendering auch nach dem Neuladen manuell.
+
+Gib dem Dokument einen Namen und wähle **Dokument speichern**, um eine separate lokale Kopie anzulegen. Ein neuer Name erzeugt ein weiteres gespeichertes Dokument; unter dem aktuell ausgewählten Namen wird die Datei aktualisiert. Über das Menü gespeicherter Dokumente stellst du ein Dokument und seinen Verlauf wieder her. **Löschen** entfernt diese benannte Kopie, behält aber den aktuellen Editorinhalt bei. Bis zu 30 benannte Dokumente können gespeichert werden. Es gelten die Speichergrenzen des Browsers.
+
+**Entwurf lokal speichern** bleibt ein separates Schnellsnapshot mit **Wiederherstellen**- und **Löschen**-Steuerung. **Automatisches Speichern des Arbeitsbereichs löschen** entfernt die aktuelle automatische Speicherung und pausiert sie, bis du wieder Text eingibst. Benannte Dokumente und Schnellentwürfe sind getrennt. Wenn der Browser-Speicher deaktiviert oder voll ist, funktioniert der Editor weiterhin und der Codeexport bleibt verfügbar. Diese Anwendung lädt weder Quellcode noch PDFs hoch.
+
+## Grenzen des Renderings
+
+Jeder Renderdurchlauf startet einen neuen Browser-Worker. **Abbrechen** beendet ihn auch bei einer blockierten JavaScript-Schleife. Ein Zeitlimit von zehn Sekunden beendet unerwartet aufwendige Aufgaben. Vereinfache große Dokumente oder teste sie in einer kontrollierten Anwendung, wenn sie das Limit des Playgrounds überschreiten. Die PDF-API sperrt hier entfernte URL-Ressourcen; verwende eingebettete Bilder und die bereitgestellten Roboto-Schriften.
+
+Benutzerdefiniertes JavaScript ist vertrauenswürdiger Benutzer-Code, keine Sicherheitssandbox. Führe keinen Code aus unbekannter Quelle aus. Ein Worker schützt die Benutzeroberfläche vor Blockaden, isoliert aber keinen bösartigen Code. Hinweise für Produktions-APIs findest du unter [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/).
+
+## Eigenständiges Entwicklungswerkzeug starten
+
+Führe in einem erstellten Checkout der pdfmake-Bibliothek `npm run playground` aus. Damit wird dieselbe Benutzeroberfläche mit der Engine dieses Checkouts unter `http://127.0.0.1:1234/playground/` bereitgestellt. Für die separaten Werkzeuge ist Node.js >=22.13 erforderlich. Die Laufzeitanforderung der veröffentlichten Bibliothek bleibt Node.js >=20. Die Dokumentationswebsite kann mit `PDFMAKE_SOURCE` ebenfalls eine lokale Engine verwenden; siehe die README des Dokumentationsrepositorys.
diff --git a/content/guides/playground.es.md b/content/guides/playground.es.md
new file mode 100644
index 00000000..45030217
--- /dev/null
+++ b/content/guides/playground.es.md
@@ -0,0 +1,55 @@
++++
+sourceDigest = "396ad48200f73ea3dadbbbcc3eaaf41d819c39e44ee4dd12c2546b4608adf171"
+title = "Guía del entorno de pruebas"
+description = "Explora ejemplos de pdfmake con un editor de código, vista previa directa del PDF, navegación por páginas, importaciones locales y descarga del código fuente."
+weight = 0
++++
+
+## Aprende editando
+
+Abre el [entorno de pruebas](/docs/0.3/es/playground/), elige un ejemplo y edita la definición en el panel izquierdo. El panel derecho muestra un PDF real renderizado mediante PDF.js. Con **Live preview** activada, el PDF se actualiza automáticamente después de editar. Selecciona **Run** o pulsa **Ctrl/Command + Enter** para actualizarlo de inmediato.
+
+El editor CodeMirror 6 incluye resaltado de sintaxis, números de línea, coincidencia de llaves, sangría, botones Deshacer/Rehacer, historial de deshacer persistente y diagnósticos de sintaxis con línea y columna. **Go to error** enfoca la ubicación problemática en el código. También ofrece autocompletado. Usa **Ctrl + Space** para solicitar sugerencias. Los nombres de campos que aparecen son pistas; la referencia del documento define el contexto, el tipo y los valores válidos.
+
+## Ejemplos
+
+| Ejemplo | Explora |
+| --- | --- |
+| [Primer documento](/docs/0.3/es/playground/?example=welcome) | Texto, espaciado y estilos de fuente |
+| [Factura](/docs/0.3/es/playground/?example=invoice) | Una tabla, totales y pie con número de página |
+| [Tablas](/docs/0.3/es/playground/?example=tables) | Encabezados repetidos en varias páginas |
+| [Estilos de texto](/docs/0.3/es/playground/?example=styles) | Estilos con nombre y anulaciones en línea |
+| [Columnas](/docs/0.3/es/playground/?example=columns) | Bloques y pilas uno junto a otro |
+| [Celdas combinadas](/docs/0.3/es/playground/?example=spans) | Celdas que abarcan filas y columnas con marcadores de posición |
+| [Páginas](/docs/0.3/es/playground/?example=pages) | Saltos de página, encabezados y pies de página |
+| [Vectores](/docs/0.3/es/playground/?example=vectors) | SVG incrustados y códigos QR |
+| [Imágenes](/docs/0.3/es/playground/?example=images) | Datos PNG incrustados y reutilizados por nombre |
+| [Listas](/docs/0.3/es/playground/?example=lists) | Listas numeradas, viñetas y enlaces |
+
+El parámetro URL `example` selecciona un ejemplo conocido; no acepta JavaScript. La vista previa en directo también actualiza los espacios de trabajo restaurados, los documentos guardados y los archivos importados. Desactiva **Live preview** antes de importar código que quieras revisar primero.
+
+## Vista previa y salida
+
+Usa los botones de flecha para cambiar de página y el menú de zoom para cambiar la escala. **Page text** muestra el texto extraído de la página PDF actual para inspeccionarlo y para tecnologías de asistencia. **Open PDF** abre el archivo generado por separado; **Download PDF** guarda los mismos bytes PDF. El pie muestra el tiempo de generación y el tamaño de salida. El tiempo de generación no incluye el renderizado de la vista previa con PDF.js.
+
+La vista previa en directo espera 650 ms después de la última edición y luego renderiza en un trabajador nuevo. El PDF anterior permanece visible hasta que termina el renderizado de la página nueva fuera de pantalla; entonces el lienzo se sustituye en un solo paso. Cuando es posible, se conservan la página PDF seleccionada y el nivel de zoom. Las descargas se desactivan mientras el PDF visible no coincida con el código actual. Los errores conservan la última vista previa correcta en lugar de sustituirla por un panel en blanco.
+
+## Conservar el trabajo
+
+**Export code** descarga la definición actual como JavaScript. **Import .js** lee un archivo local; el límite es de 500 KB. Desactiva **Live preview** antes de importar código que quieras revisar antes de ejecutarlo. Al reiniciar o cambiar de ejemplo se pregunta antes de sustituir las ediciones.
+
+**El espacio de trabajo actual se guarda automáticamente en el almacenamiento local**, incluida la definición, la selección del editor, el historial de deshacer, el ejemplo y la configuración de página y zoom. Al recargar, se restaura el editor, su historial de Deshacer/Rehacer y la preferencia de Live preview. Si la vista previa en directo está activada, el PDF restaurado se vuelve a renderizar automáticamente y las siguientes ediciones se actualizan sin pulsar Run. Si está desactivada, el renderizado sigue siendo manual incluso después de recargar.
+
+Asigna un nombre al documento y selecciona **Save document** para conservarlo como documento local independiente. Si le asignas un nombre nuevo, se crea otra entrada; si lo guardas con el mismo nombre seleccionado, se actualiza esa entrada. El menú de documentos guardados restaura un documento y su historial. Eliminar quita esa copia con nombre y conserva el contenido actual del editor. Se pueden guardar hasta 30 documentos con nombre. El almacenamiento del navegador también tiene cuotas.
+
+**Save draft locally** sigue siendo una instantánea rápida independiente con controles Restaurar/Borrar. **Clear workspace autosave** elimina el guardado automático actual y lo pausa hasta que vuelvas a escribir. Los documentos con nombre y los borradores rápidos son independientes. Si el almacenamiento del navegador está desactivado o lleno, el editor sigue funcionando y se puede exportar el código. Esta aplicación no sube el código ni el PDF.
+
+## Límites del renderizado
+
+Cada renderizado inicia un trabajador nuevo del navegador. **Cancel** lo termina, incluso si hay un bucle JavaScript bloqueado. Un límite de diez segundos detiene el trabajo inesperadamente costoso. Simplifica los documentos grandes o pruébalos en una aplicación controlada si superan el límite del entorno de pruebas. Aquí, la API PDF deniega los recursos de URL remotas; usa imágenes incrustadas y las fuentes Roboto suministradas.
+
+El JavaScript personalizado es código de confianza del usuario, no una caja de arena de seguridad. No ejecutes código de origen desconocido. Un trabajador protege la interfaz de usuario frente a bloqueos, pero no aísla el código malicioso. Consulta [seguridad de recursos](/docs/0.3/es/guides/resource-security/) para obtener recomendaciones sobre API en producción.
+
+## Ejecutar la herramienta de desarrollo independiente
+
+Desde una copia compilada de la biblioteca pdfmake, ejecuta `npm run playground`. Esto sirve la misma interfaz con el motor de esa copia en `http://127.0.0.1:1234/playground/`. Sus herramientas independientes requieren Node >=22.13. El requisito de ejecución de la biblioteca publicada sigue siendo Node >=20. El sitio de documentación también puede probar un motor local mediante `PDFMAKE_SOURCE`; consulta el README del repositorio de documentación.
diff --git a/content/guides/playground.fr.md b/content/guides/playground.fr.md
new file mode 100644
index 00000000..a43d243c
--- /dev/null
+++ b/content/guides/playground.fr.md
@@ -0,0 +1,55 @@
++++
+title = "Guide du playground"
+description = "Explorez les exemples pdfmake avec un éditeur de code, un aperçu PDF direct, la navigation entre les pages et l’importation locale."
+weight = 0
+sourceDigest = "396ad48200f73ea3dadbbbcc3eaaf41d819c39e44ee4dd12c2546b4608adf171"
++++
+
+## Apprendre en modifiant le code
+
+Ouvrez le [playground](/docs/0.3/fr/playground/), choisissez un exemple et modifiez la définition dans le panneau de gauche. Le panneau de droite affiche un véritable PDF rendu avec PDF.js. Lorsque l’aperçu en direct est activé, le PDF se met automatiquement à jour après vos modifications. Sélectionnez **Run** ou appuyez sur **Ctrl/Commande + Entrée** pour lancer immédiatement le rendu.
+
+L’éditeur CodeMirror 6 propose la coloration syntaxique, les numéros de ligne, l’appariement des parenthèses, l’indentation, les boutons Undo/Redo, un historique d’annulation conservé et des diagnostics de syntaxe indiquant la ligne et la colonne. **Go to error** place le curseur sur l’emplacement fautif. L’éditeur propose aussi des complétions. Utilisez **Ctrl + Espace** pour les afficher. Les noms de champs suggérés sont des indications ; la référence du document définit leur contexte, leur type et leurs valeurs valides.
+
+## Exemples
+
+| Exemple | Découverte |
+| --- | --- |
+| [Premier document](/docs/0.3/fr/playground/?example=welcome) | Texte, espacements et styles de police |
+| [Facture](/docs/0.3/fr/playground/?example=invoice) | Tableau, totaux et pied de page avec numéro de page |
+| [Tableaux](/docs/0.3/fr/playground/?example=tables) | En-têtes répétés sur plusieurs pages |
+| [Styles de texte](/docs/0.3/fr/playground/?example=styles) | Styles nommés et remplacements en ligne |
+| [Colonnes](/docs/0.3/fr/playground/?example=columns) | Blocs côte à côte et piles |
+| [Fusions](/docs/0.3/fr/playground/?example=spans) | Fusions de lignes et colonnes avec cellules de remplacement |
+| [Pages](/docs/0.3/fr/playground/?example=pages) | Sauts de page, en-têtes et pieds de page |
+| [Vecteurs](/docs/0.3/fr/playground/?example=vectors) | SVG intégrés et codes QR |
+| [Images](/docs/0.3/fr/playground/?example=images) | Données PNG intégrées réutilisées par nom |
+| [Listes](/docs/0.3/fr/playground/?example=lists) | Éléments numérotés, puces et liens |
+
+Le paramètre d’URL `example` sélectionne un exemple connu ; il n’accepte pas de JavaScript. L’aperçu en direct met aussi à jour les espaces de travail restaurés, les documents enregistrés et les fichiers importés. Désactivez **Live preview** avant d’importer du code que vous voulez examiner au préalable.
+
+## Aperçu et sortie
+
+Utilisez les flèches pour changer de page et le menu de zoom pour modifier l’échelle. **Page text** expose le texte extrait de la page PDF actuelle pour inspection et pour les technologies d’assistance. **Open PDF** ouvre le fichier généré séparément ; **Download PDF** enregistre les mêmes octets PDF. Le pied de page indique la durée de génération et la taille de sortie. La durée n’inclut pas le rendu de l’aperçu par PDF.js.
+
+L’aperçu en direct attend 650 ms après la dernière modification, puis effectue le rendu dans un nouveau worker. L’ancien PDF reste visible jusqu’à ce que la page suivante ait fini son rendu hors écran ; le canevas est alors remplacé en une seule opération. La page PDF sélectionnée et le zoom sont conservés lorsque c’est possible. Le téléchargement est désactivé tant que le PDF visible ne correspond pas au code actuel. En cas d’erreur, le dernier aperçu réussi reste affiché au lieu d’être remplacé par un panneau vide.
+
+## Conserver votre travail
+
+**Export code** télécharge la définition actuelle au format JavaScript. **Import .js** lit un fichier local. Les fichiers sont limités à 500 Ko. Désactivez **Live preview** avant d’importer du code que vous souhaitez examiner avant son exécution. Une réinitialisation ou un changement d’exemple demande confirmation avant de remplacer vos modifications.
+
+**L’espace de travail actuel est enregistré automatiquement en local**, avec la définition, la sélection de l’éditeur, l’historique d’annulation, l’exemple, la page et le zoom. Après rechargement, l’éditeur, son historique Undo/Redo et la préférence d’aperçu en direct sont restaurés. Si l’aperçu est activé, le PDF restauré est généré automatiquement et les modifications suivantes le mettent à jour sans cliquer sur Run. S’il est désactivé, le rendu reste manuel, même après rechargement.
+
+Donnez un nom au document et choisissez **Save document** pour conserver une copie locale distincte. Un nouveau nom crée un autre document enregistré ; enregistrer sous le nom sélectionné le met à jour. Le menu des documents enregistrés restaure un document et son historique. Delete supprime cette copie nommée tout en conservant le contenu actuel de l’éditeur. Vous pouvez conserver jusqu’à 30 documents nommés. Les limites de stockage du navigateur s’appliquent toujours.
+
+**Save draft locally** reste un instantané rapide distinct avec les commandes Restore/Clear. **Clear workspace autosave** supprime l’enregistrement automatique actuel et le suspend jusqu’à la prochaine saisie. Les documents nommés et les brouillons rapides sont distincts. Si le stockage du navigateur est désactivé ou plein, l’éditeur continue de fonctionner et l’export du code reste disponible. Cette application ne téléverse ni le code source ni les PDF.
+
+## Limites du rendu
+
+Chaque rendu démarre un nouveau worker de navigateur. **Cancel** l’arrête, y compris s’il est bloqué dans une boucle JavaScript. Une limite de dix secondes interrompt les traitements anormalement coûteux. Simplifiez les documents volumineux ou testez-les dans une application contrôlée lorsqu’ils dépassent la limite du playground. Ici, l’API PDF refuse l’accès aux ressources par URL distante ; utilisez des images intégrées et les polices Roboto fournies.
+
+Le JavaScript personnalisé est du code utilisateur considéré comme fiable, et non une sandbox de sécurité. N’exécutez pas de code provenant d’une source inconnue. Un worker évite que l’interface ne se bloque, mais ne constitue pas une frontière d’isolation pour du code hostile. Consultez [Sécurité des ressources](/docs/0.3/fr/guides/resource-security/) pour les recommandations applicables aux API de production.
+
+## Lancer l’outil autonome de développement
+
+Depuis une copie de travail de la bibliothèque pdfmake déjà compilée, exécutez `npm run playground`. L’outil sert la même interface avec le moteur de cette copie à `http://127.0.0.1:1234/playground/`. Il requiert Node >=22.13 pour ses outils spécifiques. La version publiée de la bibliothèque continue d’exiger Node >=20 à l’exécution. Le site de documentation peut également prévisualiser un moteur local avec `PDFMAKE_SOURCE` ; consultez le README du dépôt de documentation.
diff --git a/content/guides/playground.md b/content/guides/playground.md
new file mode 100644
index 00000000..33085465
--- /dev/null
+++ b/content/guides/playground.md
@@ -0,0 +1,76 @@
++++
+title = "Playground guide"
+description = "Explore pdfmake examples with a code editor, direct PDF preview, page navigation, local imports and downloadable source."
+weight = 0
++++
+
+## Learn by editing
+
+Open the [playground](/docs/0.3/playground/), choose an example and edit the definition
+in the left panel. The right panel shows a real PDF rendered through PDF.js.
+With **Live preview** enabled, the PDF updates automatically after editing. Select **Run** or press **Ctrl/Command + Enter** for an immediate update.
+
+The CodeMirror 6 editor includes syntax highlighting, line numbers, bracket matching, indentation, Undo/Redo buttons, persistent undo history and syntax diagnostics with line and column. Go to error focuses the offending source location. It also provides completions. Use **Ctrl + Space** to request completions. Suggested field names
+are hints; the document reference defines the valid context, type and values.
+
+## Examples
+
+| Example | Explore |
+| --- | --- |
+| [First document](/docs/0.3/playground/?example=welcome) | Text, spacing and font styles |
+| [Invoice](/docs/0.3/playground/?example=invoice) | A table, totals and a page-number footer |
+| [Tables](/docs/0.3/playground/?example=tables) | Repeating headers across multiple pages |
+| [Text styles](/docs/0.3/playground/?example=styles) | Named styles and inline overrides |
+| [Columns](/docs/0.3/playground/?example=columns) | Side-by-side blocks and stacks |
+| [Spans](/docs/0.3/playground/?example=spans) | Row and column spans with placeholders |
+| [Pages](/docs/0.3/playground/?example=pages) | Page breaks, headers and footers |
+| [Vectors](/docs/0.3/playground/?example=vectors) | Embedded SVG and QR codes |
+| [Images](/docs/0.3/playground/?example=images) | Embedded PNG data reused by name |
+| [Lists](/docs/0.3/playground/?example=lists) | Numbered lists, bullets and links |
+
+An `example` URL parameter selects a known example; it does not accept JavaScript.
+Live preview also updates restored workspaces, saved documents and imported files.
+Turn **Live preview** off before importing code you want to inspect first.
+
+## Preview and output
+
+Use the arrow buttons to change pages and the zoom menu to change scale. **Page
+text** exposes text extracted from the current PDF page for inspection and assistive
+technology. **Open PDF** opens the generated file separately; **Download PDF** saves
+the same PDF bytes. The footer shows generation time and output size. Generation
+time excludes PDF.js preview rendering.
+
+Live preview waits 650 ms after the last edit, then renders in a fresh worker. The old PDF stays visible until the next page has finished rendering off screen; the canvas is then replaced in one step. The selected PDF page and zoom are retained where possible. Downloads are disabled while the visible PDF does not match the current code. Errors keep the last successful preview instead of replacing it with a blank panel.
+
+## Keep your work
+
+**Export code** downloads the current definition as JavaScript. **Import .js** reads
+a local file. Files are limited to 500 KB. Disable **Live preview** before importing
+code you want to review before running it. Resetting or changing examples asks before replacing edits.
+
+**The current workspace is autosaved locally**, including the definition, editor selection, undo history, example, page and zoom settings. Reloading restores the editor, its Undo/Redo history and the Live preview preference. If Live preview is enabled, the restored PDF renders automatically and subsequent edits update it without pressing Run. If disabled, rendering stays manual, including after a reload.
+
+Give the document a name and choose **Save document** to keep a separate local document. Choosing a new name creates another saved document; saving under the same selected name updates it. The saved-documents menu restores a document and its history. Delete removes that named copy while retaining the current editor contents. Up to 30 named documents can be kept. Browser storage quotas still apply.
+
+**Save draft locally** remains a separate quick snapshot with Restore/Clear controls. **Clear workspace autosave** removes the current autosave and pauses it until you type again. Named documents and quick drafts are separate. If browser storage is disabled or full, the editor still works and code export remains available. No source or PDF is uploaded by this application.
+
+## Rendering boundaries
+
+Each render starts a fresh browser worker. **Cancel** terminates it, including a
+blocked JavaScript loop. A ten-second limit stops unexpectedly expensive work.
+Simplify large documents or test them in a controlled application when they exceed
+the playground limit. The PDF API denies remote URL resources here; use embedded
+images and the supplied Roboto fonts.
+
+Custom JavaScript is trusted user code, not a security sandbox. Do not run code from
+an unknown source. A worker protects the UI from blocking but is not an isolation
+boundary for hostile code. See [resource security](/docs/0.3/guides/resource-security/)
+for production API guidance.
+
+## Run the standalone development tool
+
+From a built pdfmake library checkout, run `npm run playground`. This serves the
+same UI with that checkout's engine at `http://127.0.0.1:1234/playground/`. It needs
+Node >=22.13 for its separate tooling. The published library's runtime requirement
+remains Node >=20. The docs site can also preview a local engine using
+`PDFMAKE_SOURCE`; see the documentation repository README.
diff --git a/content/guides/playground.pt-br.md b/content/guides/playground.pt-br.md
new file mode 100644
index 00000000..492dcc38
--- /dev/null
+++ b/content/guides/playground.pt-br.md
@@ -0,0 +1,55 @@
++++
+title = "Guia do playground"
+description = "Explore exemplos do pdfmake com editor de código, prévia direta do PDF, navegação entre páginas, imports locais e código-fonte para baixar."
+weight = 0
+sourceDigest = "396ad48200f73ea3dadbbbcc3eaaf41d819c39e44ee4dd12c2546b4608adf171"
++++
+
+## Aprenda editando
+
+Abra o [playground · inglês](/docs/0.3/pt-br/playground/), escolha um exemplo e edite a definição no painel esquerdo. O painel direito mostra um PDF real renderizado pelo PDF.js. Com **Live preview** ativada, o PDF é atualizado automaticamente após a edição. Selecione **Run** ou pressione **Ctrl/Command + Enter** para atualizar imediatamente.
+
+O editor CodeMirror 6 inclui realce de sintaxe, números de linha, pareamento de colchetes, indentação, botões Undo/Redo, histórico persistente de desfazer e diagnósticos de sintaxe com linha e coluna. **Go to error** leva o foco ao local incorreto no código-fonte. O editor também oferece sugestões de preenchimento; use **Ctrl + Espaço** para solicitá-las. Os nomes de campos sugeridos são dicas: a referência do documento define o contexto, o tipo e os valores válidos.
+
+## Exemplos
+
+| Exemplo | Explore |
+| --- | --- |
+| [Primeiro documento](/docs/0.3/pt-br/playground/?example=welcome) | Texto, espaçamento e estilos de fonte |
+| [Fatura](/docs/0.3/pt-br/playground/?example=invoice) | Tabela, totais e rodapé com número de página |
+| [Tabelas](/docs/0.3/pt-br/playground/?example=tables) | Cabeçalhos repetidos em várias páginas |
+| [Estilos de texto](/docs/0.3/pt-br/playground/?example=styles) | Estilos nomeados e substituições em linha |
+| [Colunas](/docs/0.3/pt-br/playground/?example=columns) | Blocos lado a lado e pilhas |
+| [Mesclagens](/docs/0.3/pt-br/playground/?example=spans) | Mesclagens de linhas e colunas com placeholders |
+| [Páginas](/docs/0.3/pt-br/playground/?example=pages) | Quebras de página, cabeçalhos e rodapés |
+| [Vetores](/docs/0.3/pt-br/playground/?example=vectors) | SVG incorporado e códigos QR |
+| [Imagens](/docs/0.3/pt-br/playground/?example=images) | Dados PNG incorporados e reutilizados por nome |
+| [Listas](/docs/0.3/pt-br/playground/?example=lists) | Listas numeradas, marcadores e links |
+
+Um parâmetro `example` na URL seleciona um exemplo conhecido; ele não aceita JavaScript. A prévia ao vivo também atualiza espaços de trabalho restaurados, documentos salvos e arquivos importados. Desative **Live preview** antes de importar código que queira inspecionar primeiro.
+
+## Prévia e saída
+
+Use as setas para mudar de página e o menu de zoom para mudar a escala. **Page text** exibe o texto extraído da página atual do PDF para inspeção e tecnologias assistivas. **Open PDF** abre o arquivo gerado em outra janela; **Download PDF** salva os mesmos bytes do PDF. O rodapé mostra o tempo de geração e o tamanho da saída. O tempo de geração não inclui a renderização da prévia pelo PDF.js.
+
+A prévia ao vivo aguarda 650 ms depois da última edição e então renderiza em um worker novo. O PDF anterior permanece visível até que a página seguinte termine de ser renderizada fora da tela; o canvas é substituído em uma única etapa. Quando possível, a página selecionada e o zoom do PDF são preservados. Os downloads ficam desativados enquanto o PDF visível não corresponder ao código atual. Em caso de erro, a última prévia bem-sucedida continua visível em vez de ser substituída por um painel vazio.
+
+## Mantenha seu trabalho
+
+**Export code** baixa a definição atual como JavaScript. **Import .js** lê um arquivo local. O limite dos arquivos é 500 KB. Desative **Live preview** antes de importar código que queira revisar antes de executar. Ao redefinir ou trocar exemplos, o playground pede confirmação antes de substituir suas edições.
+
+**O espaço de trabalho atual é salvo automaticamente no navegador**, incluindo definição, seleção do editor, histórico de desfazer, exemplo, página e configurações de zoom. Ao recarregar, o editor, o histórico Undo/Redo e a preferência de prévia ao vivo são restaurados. Se a prévia estiver ativada, o PDF restaurado será renderizado automaticamente e as edições seguintes o atualizarão sem pressionar Run. Se estiver desativada, a renderização permanece manual, inclusive após recarregar a página.
+
+Dê um nome ao documento e escolha **Save document** para manter uma cópia local separada. Escolher um nome novo cria outro documento salvo; salvar com o nome selecionado atualiza esse documento. O menu de documentos salvos restaura o documento e seu histórico. A opção de excluir remove essa cópia nomeada e mantém o conteúdo atual do editor. É possível manter até 30 documentos nomeados. As cotas de armazenamento do navegador continuam valendo.
+
+**Save draft locally** continua sendo uma cópia rápida separada, com controles Restore/Clear. **Clear workspace autosave** remove o salvamento automático atual e o pausa até você digitar novamente. Documentos nomeados e rascunhos rápidos são separados. Se o armazenamento do navegador estiver desativado ou cheio, o editor continua funcionando e a exportação de código permanece disponível. Esta aplicação não envia o código-fonte nem o PDF.
+
+## Limites de renderização
+
+Cada renderização inicia um worker de navegador novo. **Cancel** encerra esse worker, inclusive se ele estiver preso em um loop JavaScript. Um limite de dez segundos interrompe trabalhos inesperadamente custosos. Simplifique documentos grandes ou teste-os em uma aplicação controlada se ultrapassarem o limite do playground. A API de PDF bloqueia recursos de URLs remotas neste ambiente; use imagens incorporadas e as fontes Roboto fornecidas.
+
+JavaScript personalizado é código confiável do usuário, não um sandbox de segurança. Não execute código de origem desconhecida. Um worker protege a interface contra bloqueios, mas não é uma barreira de isolamento contra código malicioso. Consulte [segurança de recursos](/docs/0.3/pt-br/guides/resource-security/) para recomendações sobre APIs de produção.
+
+## Execute a ferramenta de desenvolvimento independente
+
+Em um checkout compilado da biblioteca pdfmake, execute `npm run playground`. Ele serve a mesma interface com o motor desse checkout em `http://127.0.0.1:1234/playground/`. Essa ferramenta separada exige Node >=22.13. O requisito de execução da biblioteca publicada continua sendo Node >=20. O site de documentação também pode pré-visualizar um motor local por meio de `PDFMAKE_SOURCE`; consulte o README do repositório de documentação.
diff --git a/content/guides/resource-security.de.md b/content/guides/resource-security.de.md
new file mode 100644
index 00000000..65e44f1b
--- /dev/null
+++ b/content/guides/resource-security.de.md
@@ -0,0 +1,48 @@
++++
+title = "Ressourcensicherheit"
+description = "Schütze in Serveranwendungen mit pdfmake den Zugriff auf externe URLs, lokale Dateien und nicht vertrauenswürdige Dokumenteingaben."
+weight = 3
+sourceDigest = "6c29d58fcc33de62c3b85279453f4530abfd1801030ad057800f73e261b61a26"
++++
+
+## Behandle Definitionen wie Anwendungscode
+
+Eine Definition kann Callback-Funktionen für Kopf- und Fußzeilen, Tabellenlayouts und Seitenumbrüche enthalten. Werte niemals JavaScript aus, das ein nicht vertrauenswürdiger Aufrufer übermittelt. Nimm geprüfte Anwendungsdaten entgegen und erstelle die Definitionen selbst. Begrenze vor dem Rendern Eingabegröße, Verschachtelung, Tabellenabmessungen und Bildgröße.
+
+## Nicht benötigte Ressourcen sperren
+
+Wenn alle Ressourcen als In-Memory-Daten bereitgestellt werden, sperre Ressourcenpfade in Form von Zeichenfolgen:
+
+```js
+pdfmake.setUrlAccessPolicy(() => false);
+pdfmake.setLocalAccessPolicy(() => false);
+```
+
+Die aktuelle Implementierung leitet auch Standard-Schriftkennungen (zum Beispiel `Helvetica-Bold`) durch die lokale Richtlinie. Wenn du Standardschriften verwendest, erlaube die genau registrierten Kennungen; die [Node.js-Schnellstartanleitung](/docs/0.3/de/getting-started/server-side/) zeigt diese Einrichtung.
+
+URL-Richtlinien erfordern **0.3.6+**, lokale Richtlinien **0.3.8+**. Konfiguriere sie, bevor du Aufträge entgegennimmst. Eine nicht gesetzte Richtlinie erlaubt das Laden von Ressourcen; sie bedeutet nicht, dass alle Zugriffe gesperrt sind.
+
+## Synchrone Richtlinien verwenden
+
+Die Implementierung prüft, ob `callback(value) === true` gilt. Verwende in diesen Richtlinien keine `async`-Callbacks, DNS-Abfragen oder Promises. Lade freigegebene Ressourcen in deiner Anwendung vorab, wenn die Prüfung asynchron erfolgen muss, und übergib anschließend eingebettete Daten oder eine anwendungseigene Datei.
+
+```js
+pdfmake.setUrlAccessPolicy(value => {
+ const url = new URL(value);
+ return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;
+});
+```
+
+Dieses Beispiel mit Hostnamen bietet keinen vollständigen Schutz vor SSRF. DNS-Änderungen, Weiterleitungen, interne Adressbereiche und Netzwerkrechte der Bereitstellung sind ebenfalls relevant. Begrenze ausgehende Netzwerkzugriffe. In Node.js prüft der Resolver manuelle Weiterleitungsschritte. Browser können Weiterleitungen folgen, bevor die endgültige URL geprüft wird; Browserrichtlinien können nicht jeden Netzwerkschritt kontrollieren.
+
+## Lokale Dateien
+
+Erlaube genau aufgelöste, von deiner Anwendung verwaltete Pfade. Eine funktionierende Zulassungsliste zeigt die [Schriftkonfiguration](/docs/0.3/de/fonts/). Vermeide `startsWith('fonts/')`, da damit weder Pfadmanipulation noch Dateisystem-Aliase verhindert werden. Schütze freigegebene Dateien vor Austausch und berücksichtige symbolische Links. Lass Aufrufer keine beliebigen Serverpfade auswählen.
+
+## Auftragsumfang begrenzen
+
+Layout- und Schriftenverarbeitung können CPU und Speicher verbrauchen, bevor ein Ausgabestream verfügbar ist. Verwende begrenzte Warteschlangen und isolierte Worker, wenn du große oder nicht vertrauenswürdige Dokumente verarbeitest. Ein Promise-Timeout unterbricht das synchrone Layout nicht. Wenn du eine harte Abbruchmöglichkeit brauchst, setze Prozesslimits.
+
+## PDF-Verschlüsselung ist davon getrennt
+
+[Passwörter und PDF-Berechtigungen](/docs/0.3/de/document-definition-object/security/) betreffen das erzeugte Dokument. Sie sichern nicht das Netzwerk, Dateisystem oder die Callback-Ausführung deines Servers.
diff --git a/content/guides/resource-security.es.md b/content/guides/resource-security.es.md
new file mode 100644
index 00000000..e21a71cf
--- /dev/null
+++ b/content/guides/resource-security.es.md
@@ -0,0 +1,48 @@
++++
+sourceDigest = "6c29d58fcc33de62c3b85279453f4530abfd1801030ad057800f73e261b61a26"
+title = "Seguridad de recursos"
+description = "Controla las URL externas, los archivos locales y las entradas de documentos que no sean de confianza al usar pdfmake en aplicaciones de servidor."
+weight = 3
++++
+
+## Trata las definiciones como código de la aplicación
+
+Una definición puede contener funciones callback para encabezados, pies de página, distribuciones de tablas y saltos de página. Nunca ejecutes JavaScript enviado por un usuario que no sea de confianza. Acepta datos de aplicación validados y construye las definiciones tú mismo. Limita el tamaño de la entrada, el anidamiento, las dimensiones de las tablas y el tamaño de las imágenes antes del renderizado.
+
+## Deniega los recursos que no necesites
+
+Si se proporcionan todos los recursos como datos en memoria, deniega las rutas de recursos basadas en cadenas:
+
+```js
+pdfmake.setUrlAccessPolicy(() => false);
+pdfmake.setLocalAccessPolicy(() => false);
+```
+
+La implementación actual también comprueba los identificadores de fuentes estándar (por ejemplo, `Helvetica-Bold`) mediante la política local. Si usas fuentes estándar, permite los identificadores registrados exactos; el [inicio rápido de Node](/docs/0.3/es/getting-started/server-side/) muestra esta configuración.
+
+Las políticas de URL requieren la versión **0.3.6 o posterior** y las políticas locales, la **0.3.8 o posterior**. Configúralas antes de aceptar trabajos. Una política no configurada permite cargar recursos; no equivale a denegar todo.
+
+## Usa políticas síncronas
+
+La implementación comprueba si `callback(value) === true`. No uses funciones callback `async`, búsquedas DNS ni Promises en estas políticas. Si la validación requiere trabajo asíncrono, descarga antes los recursos aprobados en la aplicación y luego proporciona los datos incrustados o un archivo propiedad de la aplicación.
+
+```js
+pdfmake.setUrlAccessPolicy(value => {
+ const url = new URL(value);
+ return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;
+});
+```
+
+Este ejemplo de nombre de host no protege por completo contra SSRF. También importan los cambios de DNS, las redirecciones, los rangos de direcciones internos y los permisos de red del despliegue. Aplica controles al tráfico de salida. En Node.js, el resolutor comprueba manualmente los saltos de redirección. Los navegadores pueden seguir redirecciones antes de comprobar la política de la URL final; las políticas del navegador no pueden controlar todos los saltos de red.
+
+## Archivos locales
+
+Permite rutas resueltas exactas que pertenezcan a la aplicación. Consulta [configuración de fuentes](/docs/0.3/es/fonts/) para ver una lista de permitidos funcional. Evita `startsWith('fonts/')`, que no resuelve rutas de recorrido ni alias del sistema de archivos. Protege los archivos aprobados contra sustituciones y ten en cuenta los enlaces simbólicos. No permitas que quien llama elija rutas arbitrarias del servidor.
+
+## Limitar el trabajo
+
+La maquetación y el trabajo con fuentes pueden consumir CPU y memoria antes de que haya un flujo de salida disponible. Usa colas con límites y trabajadores aislados al servir documentos grandes o no confiables. Un tiempo límite de Promise por sí solo no interrumpe una maquetación síncrona. Si necesitas una cancelación estricta, añade límites a nivel de proceso.
+
+## El cifrado PDF es un tema aparte
+
+Las [contraseñas y permisos del PDF](/docs/0.3/es/document-definition-object/security/) afectan al documento generado. No protegen la red, el sistema de archivos ni la ejecución de callbacks del servidor.
diff --git a/content/guides/resource-security.fr.md b/content/guides/resource-security.fr.md
new file mode 100644
index 00000000..043e345d
--- /dev/null
+++ b/content/guides/resource-security.fr.md
@@ -0,0 +1,48 @@
++++
+title = "Sécurité des ressources"
+description = "Contrôlez les URL externes, les fichiers locaux et les définitions non fiables quand vous utilisez pdfmake dans des applications serveur."
+weight = 3
+sourceDigest = "6c29d58fcc33de62c3b85279453f4530abfd1801030ad057800f73e261b61a26"
++++
+
+## Traiter les définitions comme du code applicatif
+
+Une définition peut contenir des fonctions de rappel pour les en-têtes, les pieds de page, les mises en page de tableaux et les sauts de page. N’exécutez jamais le JavaScript fourni par un appelant non fiable. Acceptez des données d’application validées et construisez vous-même les définitions. Avant le rendu, limitez la taille des entrées, leur profondeur d’imbrication, les dimensions des tableaux et la taille des images.
+
+## Refuser les ressources inutiles
+
+Si toutes les ressources sont fournies sous forme de données en mémoire, refusez les chemins de ressources sous forme de chaînes :
+
+```js
+pdfmake.setUrlAccessPolicy(() => false);
+pdfmake.setLocalAccessPolicy(() => false);
+```
+
+L’implémentation actuelle transmet également les identifiants des polices standard (par exemple `Helvetica-Bold`) à la règle locale. Si vous utilisez les polices standard, autorisez leurs identifiants exacts enregistrés ; le [guide de démarrage Node](/docs/0.3/fr/getting-started/server-side/) montre cette configuration.
+
+Les règles d’accès URL nécessitent **0.3.6+** et les règles locales **0.3.8+**. Configurez-les avant d’accepter des tâches. Une règle non définie autorise le chargement de ressources ; elle ne signifie pas « tout refuser ».
+
+## Utiliser des règles synchrones
+
+L’implémentation vérifie `callback(value) === true`. N’utilisez pas de fonctions de rappel `async`, de requêtes DNS ou de Promises dans ces règles. Si la validation exige un traitement asynchrone, récupérez les ressources approuvées dans votre application, puis transmettez les données intégrées ou un fichier géré par l’application.
+
+```js
+pdfmake.setUrlAccessPolicy(value => {
+ const url = new URL(value);
+ return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;
+});
+```
+
+Cet exemple de nom d’hôte ne constitue pas une protection complète contre les attaques SSRF. Les changements DNS, les redirections, les plages d’adresses internes et les autorisations réseau du déploiement comptent également. Appliquez des contrôles réseau sortants. Sous Node.js, le résolveur vérifie chaque étape des redirections manuelles. Les navigateurs peuvent suivre des redirections avant de vérifier la règle sur l’URL finale ; les règles du navigateur ne peuvent pas contrôler chaque étape réseau.
+
+## Fichiers locaux
+
+Autorisez des chemins résolus exacts appartenant à l’application. Consultez la [configuration des polices](/docs/0.3/fr/fonts/) pour un exemple de liste d’autorisation fonctionnelle. Évitez `startsWith('fonts/')`, qui ne résout ni les traversées de répertoires ni les alias du système de fichiers. Protégez les fichiers autorisés contre le remplacement et tenez compte des liens symboliques. Ne laissez pas un appelant choisir des chemins arbitraires du serveur.
+
+## Limiter la charge
+
+La mise en page et le traitement des polices peuvent consommer processeur et mémoire avant qu’un flux de sortie soit disponible. Utilisez des files d’attente limitées et des workers isolés pour les documents volumineux ou non fiables. Un délai sur une Promise n’interrompt pas à lui seul la mise en page synchrone. Ajoutez des limites au niveau du processus si une annulation ferme est nécessaire.
+
+## Le chiffrement PDF est distinct
+
+Les [mots de passe et autorisations PDF](/docs/0.3/fr/document-definition-object/security/) s’appliquent au document produit. Ils ne sécurisent ni le réseau ni le système de fichiers de votre serveur, et n’encadrent pas l’exécution des fonctions de rappel.
diff --git a/content/guides/resource-security.md b/content/guides/resource-security.md
new file mode 100644
index 00000000..d6a62b0e
--- /dev/null
+++ b/content/guides/resource-security.md
@@ -0,0 +1,47 @@
++++
+title = "Resource security"
+description = "Control external URLs, local files and untrusted document inputs when using pdfmake in server applications."
+weight = 3
++++
+
+## Treat definitions as application code
+
+A definition can contain callback functions for headers, footers, table layouts and page breaks. Never evaluate JavaScript submitted by an untrusted caller. Accept validated application data and construct definitions yourself. Limit input size, nesting, table dimensions and image size before rendering.
+
+## Deny resources you do not need
+
+If all resources are supplied as in-memory data, deny string-based resource paths:
+
+```js
+pdfmake.setUrlAccessPolicy(() => false);
+pdfmake.setLocalAccessPolicy(() => false);
+```
+
+The current implementation also passes standard font identifiers (for example `Helvetica-Bold`) through the local policy. Allow the exact registered identifiers when using standard fonts; the [Node quickstart](/docs/0.3/getting-started/server-side/) shows this setup.
+
+URL policies require **0.3.6+** and local policies **0.3.8+**. Configure them before accepting work. An unset policy permits resource loading; it does not mean deny-all.
+
+## Use synchronous policies
+
+The implementation checks `callback(value) === true`. Do not use `async` callbacks, DNS lookups or promises inside these policies. Prefetch approved resources in your application if validation requires asynchronous work, then pass embedded data or an application-owned file.
+
+```js
+pdfmake.setUrlAccessPolicy(value => {
+ const url = new URL(value);
+ return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;
+});
+```
+
+This hostname example is not complete SSRF protection. DNS changes, redirects, internal address ranges and deployment network permissions also matter. Apply outbound network controls. On Node.js the resolver checks manual redirect hops. Browsers may follow redirects before the final URL policy check; browser policies cannot enforce control of every network hop.
+
+## Local files
+
+Allow exact resolved application-owned paths. See [font configuration](/docs/0.3/fonts/) for a working allowlist. Avoid `startsWith('fonts/')`, which does not resolve traversal or filesystem aliases. Protect approved files from replacement and account for symlinks. Do not let a caller select arbitrary server paths.
+
+## Bound the job
+
+Layout and font work can consume CPU and memory before an output stream is available. Use bounded queues and isolated workers when serving large or untrusted documents. A Promise timeout alone does not interrupt synchronous layout. Add process-level limits if you require hard cancellation.
+
+## PDF encryption is separate
+
+[Passwords and PDF permissions](/docs/0.3/document-definition-object/security/) affect the produced document. They do not secure your server's network, filesystem or callback execution.
diff --git a/content/guides/resource-security.pt-br.md b/content/guides/resource-security.pt-br.md
new file mode 100644
index 00000000..d1b446ea
--- /dev/null
+++ b/content/guides/resource-security.pt-br.md
@@ -0,0 +1,48 @@
++++
+title = "Segurança de recursos"
+description = "Controle URLs externas, arquivos locais e entradas de documento não confiáveis ao usar pdfmake em aplicações de servidor."
+weight = 3
+sourceDigest = "6c29d58fcc33de62c3b85279453f4530abfd1801030ad057800f73e261b61a26"
++++
+
+## Trate definições como código da aplicação
+
+Uma definição pode conter funções de callback para cabeçalhos, rodapés, layouts de tabela e quebras de página. Nunca execute JavaScript enviado por um chamador não confiável. Aceite dados da aplicação já validados e construa você mesmo as definições. Limite o tamanho da entrada, o aninhamento, as dimensões das tabelas e o tamanho das imagens antes de renderizar.
+
+## Bloqueie recursos desnecessários
+
+Se todos os recursos forem fornecidos como dados em memória, bloqueie caminhos de recursos em formato de string:
+
+```js
+pdfmake.setUrlAccessPolicy(() => false);
+pdfmake.setLocalAccessPolicy(() => false);
+```
+
+A implementação atual também passa identificadores de fontes padrão (por exemplo, `Helvetica-Bold`) pela política local. Ao usar fontes padrão, permita os identificadores exatos registrados; o [início rápido para Node](/docs/0.3/pt-br/getting-started/server-side/) mostra essa configuração.
+
+As políticas de URL exigem **0.3.6 ou superior** e as políticas locais, **0.3.8 ou superior**. Configure-as antes de aceitar trabalho. Uma política não definida permite o carregamento de recursos; isso não significa negar tudo.
+
+## Use políticas síncronas
+
+A implementação verifica se `callback(value) === true`. Não use callbacks `async`, consultas DNS ou Promises nessas políticas. Se a validação exigir trabalho assíncrono, busque previamente os recursos aprovados na aplicação e passe dados incorporados ou um arquivo controlado pela aplicação.
+
+```js
+pdfmake.setUrlAccessPolicy(value => {
+ const url = new URL(value);
+ return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;
+});
+```
+
+Este exemplo de nome de host não oferece proteção completa contra SSRF. Mudanças de DNS, redirecionamentos, faixas de endereços internos e permissões de rede do deployment também importam. Aplique controles de rede de saída. No Node.js, o resolvedor verifica os redirecionamentos manuais. Navegadores podem seguir redirecionamentos antes da verificação final da política de URL; políticas no navegador não conseguem controlar cada salto de rede.
+
+## Arquivos locais
+
+Permita caminhos resolvidos exatos que pertençam à aplicação. Consulte [configuração de fontes](/docs/0.3/pt-br/fonts/) para ver uma lista de permissões funcional. Evite `startsWith('fonts/')`, que não resolve travessia de diretórios nem aliases do sistema de arquivos. Proteja os arquivos aprovados contra substituição e considere links simbólicos. Não permita que um chamador escolha caminhos arbitrários do servidor.
+
+## Limite o trabalho
+
+O layout e o processamento de fontes podem consumir CPU e memória antes que um stream de saída esteja disponível. Use filas limitadas e workers isolados para documentos grandes ou não confiáveis. Um timeout de Promise, sozinho, não interrompe o layout síncrono. Se precisar de cancelamento rígido, adicione limites no nível do processo.
+
+## A criptografia do PDF é diferente
+
+[Senhas e permissões do PDF](/docs/0.3/pt-br/document-definition-object/security/) afetam o documento produzido. Elas não protegem a rede, o sistema de arquivos nem a execução de callbacks do servidor.
diff --git a/content/guides/troubleshooting.de.md b/content/guides/troubleshooting.de.md
new file mode 100644
index 00000000..10691481
--- /dev/null
+++ b/content/guides/troubleshooting.de.md
@@ -0,0 +1,31 @@
++++
+title = "Fehlerbehebung"
+description = "Untersuche häufige Fehler in pdfmake 0.3 mit Imports, Schriften, Tabellen, Promises, Browserfenstern und Ressourcen-Zugriffsrechten."
+weight = 5
+sourceDigest = "5159bc06095c71b8ab0b613c4df51b538e163232b5543aa4bb809f90b91021bb"
++++
+
+## Zuerst Version und Laufzeit prüfen
+
+Führe `npm ls pdfmake` aus und vergleiche deinen Import mit der passenden Schnellstartanleitung. Ein Browser-Bundle und der Node.js-Einstieg bieten unterschiedliche Ausgabemethoden. Beispiele für Version 0.1/0.2 mit `new PdfPrinter(...)` oder Callbacks beschreiben nicht die API von 0.3.
+
+| Symptom | Prüfen | Lösung |
+| --- | --- | --- |
+| Schriftfamilie oder Variante ist nicht definiert | Familienname, Zuordnung für fett/kursiv, Standardschrift | Alle verwendeten Varianten registrieren und die Familie in `defaultStyle` auswählen |
+| Datei nicht gefunden oder Zugriff verweigert | Tatsächlich aufgelöster Pfad der Schrift/des Bildes und Richtlinie | Vorhandene anwendungseigene Pfade und eine passende synchrone Richtlinie verwenden |
+| Glyphen fehlen oder werden falsch dargestellt | Glyphenabdeckung der ausgewählten Schrift | Schrift mit den benötigten Sprachzeichen einbetten; auch fett und kursiv prüfen |
+| Tabelle leer oder fehlerhaft | `body`, Zeilenlängen und Zellenüberspannung | Nichtleere, einheitliche Zeilen und Platzhalter für überspannte Zellen bereitstellen |
+| `download` ist in Node.js keine Funktion | Importierte Laufzeit | In Node.js `write` oder `getBuffer` verwenden |
+| Browser öffnet kein Fenster | Benutzeraktion und Popup-Blocker | Ein Fenster direkt beim Klick öffnen, bevor asynchron Daten geladen werden |
+| URL trotz Zulassungs-Callback abgelehnt | Rückgabetyp des Callbacks | Synchron den booleschen Wert `true` zurückgeben; `async` entfernen |
+| HTTP-Bildanfrage schlägt fehl | URL, Richtlinie, CORS, Status und Weiterleitungen | Zugriff in der Ziel-Laufzeit prüfen; Browser setzen CORS durch |
+| Datei unvollständig oder fehlt | Abgelehntes Promise und Schreibstreamfehler | Auf `write()` warten und Ablehnung behandeln, bevor der Erfolg gemeldet wird |
+| Ausgabe ändert sich nach einem Upgrade | Version, Schriften, Eingaben und Standardwerte | Mit festgelegter Version reproduzieren und extrahierten Text, Seitenzahlen und gerenderte Seiten vergleichen |
+
+## Definition vereinfachen
+
+Beginne mit einem einfachen Absatz und bekannten funktionierenden Schriften. Ergänze Stile, Tabellenzeilen und Ressourcen einzeln. Erzeuge für jeden Versuch eine neue Definition. Trenne Anfrage- und Ressourcenfehler von Layoutfehlern.
+
+## Einen hilfreichen Fehlerbericht erstellen
+
+Gib die genauen pdfmake- und Node.js-/Browser-Versionen, das Betriebssystem, eine minimale ausführbare Definition, die Schrifteinrichtung, erwartetes und tatsächliches Verhalten sowie den vollständigen relevanten Stack-Trace an. Entferne private Inhalte und Geheimnisse. Bei Seitenumbruchfehlern nenne die kleinste Eingabe, mit der sich das Problem noch reproduzieren lässt.
diff --git a/content/guides/troubleshooting.es.md b/content/guides/troubleshooting.es.md
new file mode 100644
index 00000000..34136113
--- /dev/null
+++ b/content/guides/troubleshooting.es.md
@@ -0,0 +1,31 @@
++++
+sourceDigest = "5159bc06095c71b8ab0b613c4df51b538e163232b5543aa4bb809f90b91021bb"
+title = "Solución de problemas"
+description = "Diagnostica errores frecuentes de pdfmake 0.3 relacionados con importaciones, fuentes, tablas, Promises, ventanas del navegador y acceso a recursos."
+weight = 5
++++
+
+## Empieza por la versión y el entorno de ejecución
+
+Ejecuta `npm ls pdfmake` y compara la importación con la guía de inicio rápido correspondiente. Un paquete para navegador y la entrada de Node exponen métodos de salida distintos. Los ejemplos de las versiones 0.1/0.2 que usan `new PdfPrinter(...)` o callbacks no describen la API 0.3.
+
+| Síntoma | Qué comprobar | Solución |
+| --- | --- | --- |
+| La familia o variante de fuente no está definida | Nombre de familia, asignación de negrita/cursiva y fuente predeterminada | Registra todas las variantes usadas y selecciona la familia en `defaultStyle` |
+| Archivo no encontrado o acceso denegado | Ruta resuelta real de la fuente/imagen y política | Usa rutas existentes propiedad de la aplicación y una política síncrona correspondiente |
+| Glifos ausentes o incorrectos | Cobertura de glifos de la fuente seleccionada | Incrusta una fuente que cubra el idioma; prueba también negrita y cursiva |
+| Tabla vacía o malformada | `body`, longitudes de filas y celdas combinadas | Proporciona filas no vacías y coherentes, y marcadores de posición para las celdas combinadas |
+| `download` no es una función en Node | Entorno de ejecución importado | Usa `write` o `getBuffer` desde la entrada de Node |
+| El navegador no abre una ventana | Gesto del usuario y bloqueador de ventanas emergentes | Abre la ventana directamente al hacer clic, antes de cargar datos de forma asíncrona |
+| Se deniega una URL pese al callback de permiso | Tipo de valor devuelto por el callback | Devuelve el valor booleano literal `true` de forma síncrona y quita `async` |
+| Falla la solicitud HTTP de una imagen | URL, política, CORS, estado y redirecciones | Comprueba el acceso en el entorno de ejecución de destino; los navegadores aplican CORS |
+| Archivo incompleto o ausente | Promise rechazada y errores de escritura | Espera a `write()` y gestiona su rechazo antes de informar que se completó |
+| La salida cambia tras una actualización | Versión, fuentes, entradas y valores predeterminados | Reproduce el problema con una versión fijada y compara el texto extraído, el número de páginas y las páginas renderizadas |
+
+## Reducir la definición
+
+Empieza con un párrafo sencillo y fuentes que sepas que funcionan. Añade los estilos, las filas de tabla y los recursos de uno en uno. Construye una definición nueva en cada intento. Mantén separados los errores de solicitudes y recursos de los errores de maquetación.
+
+## Informar de un error útil
+
+Incluye las versiones exactas de pdfmake y Node/navegador, el sistema operativo, una definición mínima que se pueda ejecutar, la configuración de fuentes, el comportamiento esperado y el real, y el seguimiento de pila relevante completo. Elimina el contenido privado y los secretos. Para errores de paginación, incluye la entrada más pequeña que todavía reproduce el salto de página.
diff --git a/content/guides/troubleshooting.fr.md b/content/guides/troubleshooting.fr.md
new file mode 100644
index 00000000..863f2c7c
--- /dev/null
+++ b/content/guides/troubleshooting.fr.md
@@ -0,0 +1,31 @@
++++
+title = "Dépannage"
+description = "Diagnostiquez les problèmes fréquents de pdfmake 0.3 liés aux imports, polices, tableaux, Promises, fenêtres du navigateur et accès aux ressources."
+weight = 5
+sourceDigest = "5159bc06095c71b8ab0b613c4df51b538e163232b5543aa4bb809f90b91021bb"
++++
+
+## Vérifier la version et l’environnement d’exécution
+
+Exécutez `npm ls pdfmake` et comparez votre import au guide de démarrage adapté. Un bundle de navigateur et le point d’entrée Node proposent des fonctions de sortie différentes. Les exemples 0.1/0.2 utilisant `new PdfPrinter(...)` ou des callbacks ne décrivent pas l’API 0.3.
+
+| Symptôme | Vérification | Correction |
+| --- | --- | --- |
+| Famille ou variante de police non définie | Nom de la famille, correspondance gras/italique, police par défaut | Enregistrez toutes les variantes utilisées et sélectionnez la famille dans `defaultStyle` |
+| Fichier introuvable ou accès refusé | Chemin réel de la police ou de l’image et règle d’accès | Utilisez des chemins existants gérés par l’application et une règle synchrone correspondante |
+| Glyphes manquants ou incorrects | Couverture de glyphes de la police sélectionnée | Incorporez une police couvrant la langue ; testez aussi le gras et l’italique |
+| Tableau vide ou mal formé | `body`, longueurs des lignes et cellules fusionnées | Fournissez des lignes non vides de longueur cohérente et des espaces réservés pour les cellules fusionnées |
+| `download` n’est pas une fonction dans Node | Environnement importé | Utilisez `write` ou `getBuffer` avec le point d’entrée Node |
+| Aucune fenêtre ne s’ouvre dans le navigateur | Geste utilisateur et bloqueur de fenêtres contextuelles | Ouvrez une fenêtre directement au clic, avant le chargement asynchrone des données |
+| URL refusée malgré une fonction d’autorisation | Type de valeur de retour | Renvoyez le booléen littéral `true` de manière synchrone ; supprimez `async` |
+| Échec de la requête HTTP d’une image | URL, règle, CORS, statut et redirections | Vérifiez l’accès dans l’environnement cible ; les navigateurs appliquent CORS |
+| Fichier incomplet ou manquant | Promise rejetée et erreurs d’écriture | Attendez `write()` et gérez son rejet avant d’annoncer la réussite |
+| La sortie change après une mise à niveau | Version, polices, entrées et valeurs par défaut | Reproduisez avec une version épinglée et comparez le texte extrait, le nombre de pages et les pages rendues |
+
+## Réduire la définition
+
+Commencez par un paragraphe simple et des polices connues comme fonctionnelles. Ajoutez les styles, les lignes de tableau et les ressources un par un. Créez une définition neuve à chaque tentative. Distinguez les erreurs de requête et de ressource des erreurs de mise en page.
+
+## Signaler un bogue utile
+
+Indiquez les versions exactes de pdfmake et de Node ou du navigateur, le système d’exploitation, une définition minimale exécutable, la configuration des polices, le comportement attendu et le comportement observé, ainsi que la trace complète pertinente. Supprimez le contenu privé et les secrets. Pour les défauts de pagination, fournissez le plus petit exemple qui reproduit encore le saut de page.
diff --git a/content/guides/troubleshooting.md b/content/guides/troubleshooting.md
new file mode 100644
index 00000000..f13a3b96
--- /dev/null
+++ b/content/guides/troubleshooting.md
@@ -0,0 +1,30 @@
++++
+title = "Troubleshooting"
+description = "Diagnose common pdfmake 0.3 failures involving imports, fonts, tables, promises, browser windows and resource access."
+weight = 5
++++
+
+## Start with version and runtime
+
+Run `npm ls pdfmake` and compare your import to the appropriate quickstart. A browser bundle and the Node entry expose different output helpers. Version 0.1/0.2 examples using `new PdfPrinter(...)` or callbacks do not describe the 0.3 API.
+
+| Symptom | Check | Fix |
+| --- | --- | --- |
+| Font family or variant is not defined | Family name, bold/italic mapping, default font | Register all used variants and select the family in `defaultStyle` |
+| File not found or access denied | Actual resolved font/image path and policy | Use existing application-owned paths and a matching synchronous policy |
+| Missing or incorrect glyphs | Selected font's glyph coverage | Embed a font covering the language; test bold and italic too |
+| Empty or malformed table | `body`, row lengths and spans | Supply nonempty consistent rows and placeholders for spanned cells |
+| `download` is not a function on Node | Imported runtime | Use `write` or `getBuffer` on the Node entry |
+| Browser opens no window | User gesture and popup blocker | Open a window directly on click before asynchronous data loading |
+| URL is denied despite an allow callback | Callback return type | Return literal boolean `true` synchronously; remove `async` |
+| HTTP image request fails | URL, policy, CORS, status and redirects | Check access in the target runtime; browsers enforce CORS |
+| File is incomplete or missing | Rejected Promise and writable errors | Await `write()` and handle its rejection before reporting success |
+| Output changes after an upgrade | Version, fonts, inputs and defaults | Reproduce with a pinned version and compare extracted text, page counts and rendered pages |
+
+## Reduce the definition
+
+Start with one plain paragraph and known-good fonts. Add your styles, table rows and resources one at a time. Construct a fresh definition per attempt. Keep request and resource errors separate from layout errors.
+
+## Report a useful bug
+
+Include the exact pdfmake and Node/browser versions, operating system, a minimal runnable definition, font setup, expected versus actual behavior and the full relevant stack trace. Remove private content and secrets. For pagination defects include the smallest input that still reproduces the page break.
diff --git a/content/guides/troubleshooting.pt-br.md b/content/guides/troubleshooting.pt-br.md
new file mode 100644
index 00000000..26d81286
--- /dev/null
+++ b/content/guides/troubleshooting.pt-br.md
@@ -0,0 +1,31 @@
++++
+title = "Solução de problemas"
+description = "Diagnostique falhas comuns do pdfmake 0.3 relacionadas a imports, fontes, tabelas, Promises, janelas do navegador e acesso a recursos."
+weight = 5
+sourceDigest = "5159bc06095c71b8ab0b613c4df51b538e163232b5543aa4bb809f90b91021bb"
++++
+
+## Comece pela versão e pelo ambiente
+
+Execute `npm ls pdfmake` e compare seu import com o início rápido adequado. Um bundle de navegador e a entrada do Node expõem funções de saída diferentes. Exemplos das versões 0.1/0.2 que usam `new PdfPrinter(...)` ou callbacks não descrevem a API 0.3.
+
+| Sintoma | Verifique | Correção |
+| --- | --- | --- |
+| Família ou variante de fonte não definida | Nome da família, mapeamento de negrito/itálico e fonte padrão | Registre todas as variantes usadas e selecione a família em `defaultStyle` |
+| Arquivo não encontrado ou acesso negado | Caminho realmente resolvido da fonte/imagem e política | Use caminhos existentes pertencentes à aplicação e uma política síncrona correspondente |
+| Glifos ausentes ou incorretos | Cobertura de glifos da fonte selecionada | Incorpore uma fonte que cubra o idioma; teste também negrito e itálico |
+| Tabela vazia ou malformada | `body`, comprimento das linhas e spans | Forneça linhas não vazias e consistentes, com células substitutas para células mescladas |
+| `download` não é função no Node | Ambiente importado | Use `write` ou `getBuffer` na entrada do Node |
+| Navegador não abre janela | Gesto do usuário e bloqueador de pop-ups | Abra a janela diretamente no clique, antes de carregar dados de forma assíncrona |
+| URL negada apesar do callback de permissão | Tipo de retorno do callback | Retorne o booleano literal `true` de forma síncrona; remova `async` |
+| Falha na solicitação HTTP da imagem | URL, política, CORS, status e redirecionamentos | Verifique o acesso no ambiente de destino; navegadores aplicam CORS |
+| Arquivo incompleto ou ausente | Promise rejeitada e erros de escrita | Aguarde `write()` e trate sua rejeição antes de informar sucesso |
+| Saída mudou após atualização | Versão, fontes, entradas e padrões | Reproduza com uma versão fixada e compare texto extraído, número de páginas e páginas renderizadas |
+
+## Reduza a definição
+
+Comece com um parágrafo simples e fontes conhecidas como válidas. Adicione estilos, linhas da tabela e recursos um de cada vez. Monte uma definição nova a cada tentativa. Mantenha separados os erros de solicitação e de recursos dos erros de layout.
+
+## Relate um bug útil
+
+Inclua as versões exatas do pdfmake e do Node/navegador, o sistema operacional, uma definição mínima executável, a configuração de fontes, o comportamento esperado e o observado, e o stack trace completo relevante. Remova conteúdo privado e segredos. Para falhas de paginação, inclua a menor entrada que ainda reproduz a quebra de página.
diff --git a/content/learn/_index.de.md b/content/learn/_index.de.md
new file mode 100644
index 00000000..2866784a
--- /dev/null
+++ b/content/learn/_index.de.md
@@ -0,0 +1,29 @@
++++
+title = "Hier anfangen"
+description = "Ein kurzer Lernpfad von der Laufzeitwahl bis zum Erstellen, Formatieren und zur Fehlerbehebung deiner ersten PDF."
+weight = 5
+sourceDigest = "a8635fe5b8817a5c2f610b634abb0689d9672e42eef5a1b0bc6d01f52ba73dbe"
++++
+
+## Mit einem funktionierenden Dokument beginnen
+
+Du musst nicht erst die gesamte Dokumentreferenz kennen. Folge diesen drei Schritten:
+
+
+
+## Welche Laufzeit brauche ich?
+
+| Auswahl | Wann | Ausgabe |
+| --- | --- | --- |
+| [Node.js](/docs/0.3/de/getting-started/server-side/) | Deine API oder ein Hintergrundauftrag erstellt die Datei | `write()` für Dateien; `getBuffer()` für HTTP-Antworten |
+| [Browser](/docs/0.3/de/getting-started/client-side/) | Benutzer erstellen das Dokument auf ihrem Gerät | `download()`, `open()`, `print()` oder `getBlob()` |
+
+Die Dokumentdefinition wird gemeinsam verwendet. Das Laden der Schriften und die Ausgabemethoden hängen von der Laufzeit ab. Diese Seiten beziehen sich auf **0.3.x**; ältere Beispiele mit `new PdfPrinter(...)` und Callback-Ausgabe gehören zu [0.1/0.2](/docs/0.3/de/migration-from-0.1/).
+
+## Durch sichtbare Ergebnisse lernen
+
+Die Beispiele dieses Lernpfads zeigen den exakten JavaScript-Code neben einer tatsächlich erzeugten PDF. Öffne sie im Playground und bearbeite sie. Der vollständige Quellcode ist außerdem im [Markdown-Korpus](/docs/0.3/de/llms-full.txt) enthalten, auch der Code, der sonst von interaktiven Beispielkomponenten erzeugt wird.
diff --git a/content/learn/_index.es.md b/content/learn/_index.es.md
new file mode 100644
index 00000000..d9f42b52
--- /dev/null
+++ b/content/learn/_index.es.md
@@ -0,0 +1,29 @@
++++
+sourceDigest = "a8635fe5b8817a5c2f610b634abb0689d9672e42eef5a1b0bc6d01f52ba73dbe"
+title = "Empieza aquí"
+description = "Sigue un breve recorrido desde la elección del entorno hasta la generación, los estilos y la solución de problemas de tu primer PDF."
+weight = 5
++++
+
+## Empieza con un documento funcional
+
+No hace falta que leas toda la referencia del documento desde el principio. Sigue estos tres pasos:
+
+
+
+## ¿Qué entorno de ejecución necesito?
+
+| Elige | Cuándo | Salida |
+| --- | --- | --- |
+| [Node.js](/docs/0.3/es/getting-started/server-side/) | Tu API o trabajo en segundo plano crea el archivo | `write()` para archivos; `getBuffer()` para respuestas HTTP |
+| [Navegador](/docs/0.3/es/getting-started/client-side/) | El usuario crea el documento en su dispositivo | `download()`, `open()`, `print()` o `getBlob()` |
+
+La definición del documento es compartida. La carga de fuentes y los métodos de salida dependen del entorno. Estas páginas corresponden a la versión **0.3.x**; los ejemplos antiguos que usan `new PdfPrinter(...)` y salida con callbacks pertenecen a [0.1/0.2](/docs/0.3/es/migration-from-0.1/).
+
+## Aprende viendo el resultado
+
+Los ejemplos de este recorrido muestran la definición exacta de JavaScript junto a un PDF generado real. Ábrelos en el entorno de pruebas para editarlos. Su código completo también aparece en el [corpus Markdown](/docs/0.3/es/llms-full.txt), incluido el código que generan los componentes de ejemplo interactivos.
diff --git a/content/learn/_index.fr.md b/content/learn/_index.fr.md
new file mode 100644
index 00000000..03159368
--- /dev/null
+++ b/content/learn/_index.fr.md
@@ -0,0 +1,29 @@
++++
+title = "Commencer ici"
+description = "Un parcours d’apprentissage concis, du choix de l’environnement à la génération, la mise en forme et le dépannage de votre premier PDF."
+weight = 5
+sourceDigest = "a8635fe5b8817a5c2f610b634abb0689d9672e42eef5a1b0bc6d01f52ba73dbe"
++++
+
+## Commencer par un document fonctionnel
+
+Vous n’avez pas besoin de connaître toute la référence du document dès le départ. Suivez ces trois étapes :
+
+
+
+## De quel environnement ai-je besoin ?
+
+| Choisir | Quand | Sortie |
+| --- | --- | --- |
+| [Node.js](/docs/0.3/fr/getting-started/server-side/) | Votre API ou tâche en arrière-plan crée le fichier | `write()` pour les fichiers ; `getBuffer()` pour les réponses HTTP |
+| [Navigateur](/docs/0.3/fr/getting-started/client-side/) | L’utilisateur crée le document sur son appareil | `download()`, `open()`, `print()` ou `getBlob()` |
+
+La définition de document est commune. Le chargement des polices et les méthodes de sortie dépendent de l’environnement d’exécution. Ces pages concernent **0.3.x** ; les anciens exemples utilisant `new PdfPrinter(...)` et des sorties par callback se rapportent à [0.1/0.2](/docs/0.3/fr/migration-from-0.1/).
+
+## Apprendre en observant le résultat
+
+Les exemples de ce parcours montrent la définition JavaScript exacte à côté d’un PDF réellement généré. Ouvrez-les dans le playground pour les modifier. Leur source complète figure également dans le [corpus Markdown](/docs/0.3/fr/llms-full.txt), y compris le code qui serait autrement généré par les composants d’exemples interactifs.
diff --git a/content/learn/_index.md b/content/learn/_index.md
new file mode 100644
index 00000000..03db7d41
--- /dev/null
+++ b/content/learn/_index.md
@@ -0,0 +1,33 @@
++++
+title = "Start here"
+description = "A short learning path from choosing a runtime to generating, styling and troubleshooting your first PDF."
+weight = 5
++++
+
+## Start with one working document
+
+You do not need to learn the whole document reference first. Follow these three steps:
+
+
+
+## Which runtime do I need?
+
+| Choose | When | Output |
+| --- | --- | --- |
+| [Node.js](/docs/0.3/getting-started/server-side/) | Your API or background job creates the file | `write()` for files; `getBuffer()` for HTTP responses |
+| [Browser](/docs/0.3/getting-started/client-side/) | The user creates the document on their device | `download()`, `open()`, `print()` or `getBlob()` |
+
+The document definition is shared. Font loading and output helpers depend on the runtime.
+These pages target **0.3.x**; older examples using `new PdfPrinter(...)` and callback
+output belong to [0.1/0.2](/docs/0.3/migration-from-0.1/).
+
+## Learn by seeing the result
+
+Examples in this learning path show the exact JavaScript definition beside a real
+generated PDF. Open them in the playground to edit them. Their complete source is
+also included in the [Markdown corpus](/docs/0.3/llms-full.txt), including the code
+otherwise generated by the interactive example components.
diff --git a/content/learn/_index.pt-br.md b/content/learn/_index.pt-br.md
new file mode 100644
index 00000000..41fe81f0
--- /dev/null
+++ b/content/learn/_index.pt-br.md
@@ -0,0 +1,29 @@
++++
+title = "Comece por aqui"
+description = "Um caminho curto de aprendizado: escolha um ambiente, gere e estilize seu primeiro PDF e resolva problemas."
+weight = 5
+sourceDigest = "a8635fe5b8817a5c2f610b634abb0689d9672e42eef5a1b0bc6d01f52ba73dbe"
++++
+
+## Comece com um documento funcional
+
+Você não precisa aprender toda a referência do documento primeiro. Siga estes três passos:
+
+
+
+## De qual ambiente preciso?
+
+| Escolha | Quando usar | Saída |
+| --- | --- | --- |
+| [Node.js](/docs/0.3/pt-br/getting-started/server-side/) | Sua API ou tarefa em segundo plano cria o arquivo | `write()` para arquivos; `getBuffer()` para respostas HTTP |
+| [Navegador](/docs/0.3/pt-br/getting-started/client-side/) | O usuário cria o documento no próprio dispositivo | `download()`, `open()`, `print()` ou `getBlob()` |
+
+A definição do documento é compartilhada. O carregamento de fontes e as funções de saída dependem do ambiente. Estas páginas são para **0.3.x**; exemplos antigos que usam `new PdfPrinter(...)` e saída por callbacks pertencem ao [0.1/0.2](/docs/0.3/pt-br/migration-from-0.1/).
+
+## Aprenda vendo o resultado
+
+Os exemplos deste caminho mostram a definição JavaScript exata ao lado de um PDF realmente gerado. Abra-os no playground para editá-los. O código-fonte completo também está incluído no [corpus Markdown](/docs/0.3/pt-br/llms-full.txt), inclusive o código normalmente gerado pelos componentes interativos de exemplo.
diff --git a/content/learn/document-model.de.md b/content/learn/document-model.de.md
new file mode 100644
index 00000000..693f9494
--- /dev/null
+++ b/content/learn/document-model.de.md
@@ -0,0 +1,53 @@
++++
+title = "Das Dokumentmodell"
+description = "Wähle zwischen Absätzen, Inline-Text, Stapeln, Spalten und Tabellen und erfahre, auf welcher Ebene die Konfiguration hingehört."
+weight = 2
+sourceDigest = "7e8645b7aacec49012239058169490a59be9441a27c94823fc6aa528cef81064"
++++
+
+## Mit dem Inhalt beginnen
+
+`content` beschreibt den Hauptinhalt des PDFs. Eine einfache Zeichenfolge ist ein Absatz. Ein `content`-Array ist eine vertikale Folge von Blöcken. Ein Objekt beschreibt einen Knoten mit zusätzlichen Eigenschaften. pdfmake berechnet die Positionen; normalerweise musst du keine Koordinaten angeben.
+
+```js
+const dd = {
+ content: [
+ 'One paragraph.',
+ { text: 'Another paragraph.', bold: true },
+ { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }
+ ]
+};
+```
+
+Das verschachtelte `text`-Array erzeugt **Inline-Segmente im selben Absatz**. Ein `content`-Array oder `stack` erzeugt **getrennte Blöcke**. Dieser Unterschied erklärt viele unerwartete Zeilenumbrüche bei den ersten Dokumentdefinitionen.
+
+## Container auswählen
+
+| Bedarf | Knoten | Häufiger Fehler |
+| --- | --- | --- |
+| Mehrere Absätze mit gemeinsamem Stil | `{ stack: [...] }` | Stil-Eigenschaften direkt einem Array zuweisen wollen |
+| Unabhängige Blöcke nebeneinander | `{ columns: [...] }` | Annehmen, dass Zeilen wie in einer Tabelle ausgerichtet werden |
+| Ausgerichtete Zeilen und Zellen | `{ table: { body: [...] } }` | Platzhalterzellen nach `colSpan` oder `rowSpan` auslassen |
+| Aufzählungs- oder nummerierte Elemente | `{ ul: [...] }` oder `{ ol: [...] }` | Eine Zeichenfolge einsetzen, obwohl ein Array mit Elementen erwartet wird |
+| Unterschiedliche Stile innerhalb einer Zeile | `{ text: [...] }` | Einen Stapel verwenden, der getrennte Blöcke erzeugt |
+
+{{< example id="columns" >}}
+
+## Einstellungen auf der passenden Ebene festlegen
+
+| Ebene | Beispiele | Zweck |
+| --- | --- | --- |
+| Anwendungskonfiguration | `addFonts`, `addTableLayouts`, Ressourcenrichtlinien | Wiederverwendbare Ressourcen vor dem Start von Aufträgen registrieren |
+| Dokumentdefinition | `content`, `styles`, `defaultStyle`, `pageMargins`, `footer` | Ein PDF beschreiben |
+| Einzelner Knoten | `text`, `fontSize`, `bold`, `margin`, `pageBreak` | Ein Inhaltselement beschreiben |
+| Zweites Argument von `createPdf` | `fontLayoutCache`, `bufferPages` | Engine-Optionen anpassen |
+
+Registriere gemeinsam genutzte Schriften und Richtlinien einmal in einem Node.js-Dienst. Erzeuge für jeden Auftrag eine neue Definition: Das Layout fügt Knoten Messwerte und Positionen hinzu und verändert sie damit. Ändere die Konfiguration des gemeinsam genutzten pdfmake-Singletons nicht während paralleler Anfragen.
+
+## Einheiten und Breiten verstehen
+
+Maße werden in Punkten angegeben. Ein Rand mit vier Werten hat die Reihenfolge `[links, oben, rechts, unten]`. Eine numerische Breite ist eine feste Breite in Punkten; `'auto'` richtet sich nach dem Inhalt und `'*'` teilt den verbleibenden Platz mit anderen Sternspalten. Verwende zunächst feste Breiten oder Sternbreiten und ergänze inhaltsabhängige Breiten nur dann, wenn sie ein konkretes Layoutproblem lösen.
+
+## In der Referenz weiterlesen
+
+[Stile](/docs/0.3/de/document-definition-object/styling/) · [Tabellen](/docs/0.3/de/document-definition-object/tables/) · [Bilder](/docs/0.3/de/document-definition-object/images/) · [Seitenlayout](/docs/0.3/de/document-definition-object/page/)
diff --git a/content/learn/document-model.es.md b/content/learn/document-model.es.md
new file mode 100644
index 00000000..e4ef7361
--- /dev/null
+++ b/content/learn/document-model.es.md
@@ -0,0 +1,53 @@
++++
+sourceDigest = "7e8645b7aacec49012239058169490a59be9441a27c94823fc6aa528cef81064"
+title = "El modelo de documento"
+description = "Elige entre párrafos, texto en línea, pilas, columnas y tablas, y descubre dónde corresponde cada configuración."
+weight = 2
++++
+
+## Empezar por el contenido
+
+`content` describe el cuerpo del PDF. Una cadena sencilla es un párrafo. Una matriz de contenido es una secuencia vertical de bloques. Un objeto describe un nodo con propiedades adicionales. pdfmake calcula las posiciones; por lo general, no hace falta especificar coordenadas.
+
+```js
+const dd = {
+ content: [
+ 'One paragraph.',
+ { text: 'Another paragraph.', bold: true },
+ { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }
+ ]
+};
+```
+
+La matriz `text` anidada crea **segmentos en línea dentro del mismo párrafo**. Una matriz `content` o un `stack` crea **bloques independientes**. Esta distinción explica muchos saltos de línea inesperados al empezar a crear definiciones.
+
+## Elegir un contenedor
+
+| Necesidad | Nodo | Error habitual |
+| --- | --- | --- |
+| Varios párrafos que comparten un estilo | `{ stack: [...] }` | Intentar asignar propiedades de estilo directamente a una matriz |
+| Bloques independientes uno junto a otro | `{ columns: [...] }` | Esperar que las filas queden alineadas como en una tabla |
+| Filas y celdas alineadas | `{ table: { body: [...] } }` | Omitir las celdas de marcador de posición tras `colSpan` o `rowSpan` |
+| Elementos con viñetas o numerados | `{ ul: [...] }` o `{ ol: [...] }` | Incrustar una cadena donde se espera una matriz de elementos |
+| Varios estilos dentro de una línea | `{ text: [...] }` | Usar una pila, que crea bloques independientes |
+
+{{< example id="columns" >}}
+
+## Colocar la configuración en el nivel correcto
+
+| Nivel | Ejemplos | Propósito |
+| --- | --- | --- |
+| Configuración de la aplicación | `addFonts`, `addTableLayouts`, políticas de recursos | Registra recursos reutilizables antes de iniciar los trabajos |
+| Definición del documento | `content`, `styles`, `defaultStyle`, `pageMargins`, `footer` | Describe un PDF |
+| Nodo individual | `text`, `fontSize`, `bold`, `margin`, `pageBreak` | Describe una parte del contenido |
+| Segundo argumento de `createPdf` | `fontLayoutCache`, `bufferPages` | Ajusta las opciones del motor |
+
+En un servicio Node, registra una vez las fuentes compartidas y las políticas. Crea una definición nueva para cada trabajo: la maquetación modifica los nodos con medidas y posiciones. Evita modificar la configuración del singleton compartido de pdfmake durante solicitudes simultáneas.
+
+## Comprender las unidades y los anchos
+
+Las dimensiones se expresan en puntos. Un margen de cuatro valores sigue el orden `[left, top, right, bottom]` (izquierda, arriba, derecha, abajo). Un ancho numérico es un ancho fijo en puntos; `'auto'` se ajusta al contenido y `'*'` comparte el espacio restante con las demás columnas de asterisco. Empieza con anchos fijos o con asteriscos e introduce el ajuste al contenido cuando resuelva una necesidad real de distribución.
+
+## Continuar con la referencia
+
+[Estilos](/docs/0.3/es/document-definition-object/styling/) · [Tablas](/docs/0.3/es/document-definition-object/tables/) · [Imágenes](/docs/0.3/es/document-definition-object/images/) · [Distribución de páginas](/docs/0.3/es/document-definition-object/page/)
diff --git a/content/learn/document-model.fr.md b/content/learn/document-model.fr.md
new file mode 100644
index 00000000..d8d31072
--- /dev/null
+++ b/content/learn/document-model.fr.md
@@ -0,0 +1,53 @@
++++
+title = "Le modèle de document"
+description = "Choisissez entre paragraphes, texte en ligne, piles, colonnes et tableaux, et comprenez où placer la configuration."
+weight = 2
+sourceDigest = "7e8645b7aacec49012239058169490a59be9441a27c94823fc6aa528cef81064"
++++
+
+## Partir du contenu
+
+`content` décrit le corps du PDF. Une chaîne simple est un paragraphe. Un tableau `content` est une séquence verticale de blocs. Un objet décrit un nœud avec des propriétés supplémentaires. pdfmake calcule les positions ; en général, vous n’avez pas à indiquer de coordonnées.
+
+```js
+const dd = {
+ content: [
+ 'One paragraph.',
+ { text: 'Another paragraph.', bold: true },
+ { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }
+ ]
+};
+```
+
+Le tableau `text` imbriqué crée des **segments en ligne dans le même paragraphe**. Un tableau `content` ou une `stack` crée des **blocs distincts**. Cette différence explique de nombreux retours à la ligne surprenants lorsque l’on commence à construire des définitions.
+
+## Choisir un conteneur
+
+| Besoin | Nœud | Erreur courante |
+| --- | --- | --- |
+| Plusieurs paragraphes partageant un style | `{ stack: [...] }` | Essayer d’affecter directement des propriétés de style à un tableau |
+| Blocs indépendants côte à côte | `{ columns: [...] }` | S’attendre à l’alignement des lignes d’un tableau |
+| Lignes et cellules alignées | `{ table: { body: [...] } }` | Omettre les cellules de remplacement après `colSpan` ou `rowSpan` |
+| Éléments à puces ou numérotés | `{ ul: [...] }` ou `{ ol: [...] }` | Fournir une chaîne là où un tableau d’éléments est attendu |
+| Styles mélangés sur une même ligne | `{ text: [...] }` | Utiliser une pile, qui crée des blocs distincts |
+
+{{< example id="columns" >}}
+
+## Placer les paramètres au bon niveau
+
+| Niveau | Exemples | Rôle |
+| --- | --- | --- |
+| Configuration de l’application | `addFonts`, `addTableLayouts`, règles d’accès aux ressources | Enregistrer des ressources réutilisables avant le démarrage des tâches |
+| Définition du document | `content`, `styles`, `defaultStyle`, `pageMargins`, `footer` | Décrire un PDF |
+| Nœud individuel | `text`, `fontSize`, `bold`, `margin`, `pageBreak` | Décrire un élément de contenu |
+| Deuxième argument de `createPdf` | `fontLayoutCache`, `bufferPages` | Régler les options du moteur |
+
+Dans un service Node, enregistrez une fois les polices et règles partagées. Construisez une définition neuve pour chaque tâche : la mise en page ajoute des mesures et positions aux nœuds. Évitez de modifier la configuration de l’instance pdfmake partagée pendant des requêtes concurrentes.
+
+## Comprendre unités et largeurs
+
+Les dimensions sont exprimées en points. Une marge à quatre valeurs suit l’ordre `[gauche, haut, droite, bas]`. Une valeur numérique de largeur est fixe et exprimée en points ; `'auto'` suit le contenu ; `'*'` partage l’espace restant avec les autres colonnes étoilées. Commencez par des largeurs fixes ou étoilées, puis utilisez le dimensionnement selon le contenu lorsqu’il répond à un besoin réel.
+
+## Poursuivre avec la référence
+
+[Styles](/docs/0.3/fr/document-definition-object/styling/) · [Tableaux](/docs/0.3/fr/document-definition-object/tables/) · [Images](/docs/0.3/fr/document-definition-object/images/) · [Mise en page](/docs/0.3/fr/document-definition-object/page/)
diff --git a/content/learn/document-model.md b/content/learn/document-model.md
new file mode 100644
index 00000000..9bdc5ef7
--- /dev/null
+++ b/content/learn/document-model.md
@@ -0,0 +1,62 @@
++++
+title = "The document model"
+description = "Choose between paragraphs, inline text, stacks, columns and tables, and understand where configuration belongs."
+weight = 2
++++
+
+## Start from content
+
+`content` describes the body of the PDF. A plain string is a paragraph. A content
+array is a vertical sequence of blocks. An object describes a node with additional
+properties. pdfmake calculates positions; you usually do not specify coordinates.
+
+```js
+const dd = {
+ content: [
+ 'One paragraph.',
+ { text: 'Another paragraph.', bold: true },
+ { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }
+ ]
+};
+```
+
+The nested `text` array creates **inline runs in the same paragraph**. A `content`
+array or `stack` creates **separate blocks**. This distinction explains many
+surprising line breaks when you first build definitions.
+
+## Choose a container
+
+| Need | Node | Common mistake |
+| --- | --- | --- |
+| Several paragraphs sharing a style | `{ stack: [...] }` | Trying to assign style properties directly to an array |
+| Independent blocks side by side | `{ columns: [...] }` | Expecting rows to line up as in a table |
+| Aligned rows and cells | `{ table: { body: [...] } }` | Omitting placeholder cells after `colSpan` or `rowSpan` |
+| Bullet or numbered items | `{ ul: [...] }` or `{ ol: [...] }` | Embedding a string where an item array is expected |
+| Mixed styles within one line | `{ text: [...] }` | Using a stack, which creates separate blocks |
+
+{{< example id="columns" >}}
+
+## Put settings at the right level
+
+| Level | Examples | Purpose |
+| --- | --- | --- |
+| Application configuration | `addFonts`, `addTableLayouts`, resource policies | Register reusable resources before jobs start |
+| Document definition | `content`, `styles`, `defaultStyle`, `pageMargins`, `footer` | Describe one PDF |
+| Individual node | `text`, `fontSize`, `bold`, `margin`, `pageBreak` | Describe one piece of content |
+| Second `createPdf` argument | `fontLayoutCache`, `bufferPages` | Adjust engine options |
+
+Register shared fonts and policies once in a Node service. Build a fresh definition
+for every job: layout mutates nodes with measurements and positions. Avoid modifying
+the shared pdfmake singleton's configuration during concurrent requests.
+
+## Learn the units and widths
+
+Dimensions use points. A four-value margin is `[left, top, right, bottom]`.
+A width number is a fixed point width; `'auto'` follows content; `'*'` shares
+remaining space with other star columns. Use fixed or star widths first, then
+introduce content-driven sizing when it solves a real layout need.
+
+## Continue with the reference
+
+[Styling](/docs/0.3/document-definition-object/styling/) · [Tables](/docs/0.3/document-definition-object/tables/)
+· [Images](/docs/0.3/document-definition-object/images/) · [Page layout](/docs/0.3/document-definition-object/page/)
diff --git a/content/learn/document-model.pt-br.md b/content/learn/document-model.pt-br.md
new file mode 100644
index 00000000..b1a9ef39
--- /dev/null
+++ b/content/learn/document-model.pt-br.md
@@ -0,0 +1,53 @@
++++
+title = "O modelo de documento"
+description = "Escolha entre parágrafos, texto em linha, pilhas, colunas e tabelas e entenda onde cada configuração deve ficar."
+weight = 2
+sourceDigest = "7e8645b7aacec49012239058169490a59be9441a27c94823fc6aa528cef81064"
++++
+
+## Comece pelo conteúdo
+
+`content` descreve o corpo do PDF. Uma string simples é um parágrafo. Um array `content` é uma sequência vertical de blocos. Um objeto descreve um nó com propriedades adicionais. O pdfmake calcula as posições; normalmente você não informa coordenadas.
+
+```js
+const dd = {
+ content: [
+ 'One paragraph.',
+ { text: 'Another paragraph.', bold: true },
+ { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }
+ ]
+};
+```
+
+O array `text` aninhado cria **trechos em linha dentro do mesmo parágrafo**. Um array `content` ou `stack` cria **blocos separados**. Essa diferença explica muitas quebras de linha inesperadas quando você começa a criar definições.
+
+## Escolha um contêiner
+
+| Necessidade | Nó | Erro comum |
+| --- | --- | --- |
+| Vários parágrafos que compartilham um estilo | `{ stack: [...] }` | Tentar atribuir propriedades de estilo diretamente a um array |
+| Blocos independentes lado a lado | `{ columns: [...] }` | Esperar que as linhas se alinhem como numa tabela |
+| Linhas e células alinhadas | `{ table: { body: [...] } }` | Omitir células substitutas depois de `colSpan` ou `rowSpan` |
+| Itens com marcadores ou numerados | `{ ul: [...] }` ou `{ ol: [...] }` | Inserir uma string onde se espera um array de itens |
+| Estilos mistos na mesma linha | `{ text: [...] }` | Usar uma pilha, que cria blocos separados |
+
+{{< example id="columns" >}}
+
+## Coloque as configurações no nível certo
+
+| Nível | Exemplos | Finalidade |
+| --- | --- | --- |
+| Configuração da aplicação | `addFonts`, `addTableLayouts`, políticas de recursos | Registrar recursos reutilizáveis antes de iniciar os trabalhos |
+| Definição do documento | `content`, `styles`, `defaultStyle`, `pageMargins`, `footer` | Descrever um PDF |
+| Nó individual | `text`, `fontSize`, `bold`, `margin`, `pageBreak` | Descrever uma parte do conteúdo |
+| Segundo argumento de `createPdf` | `fontLayoutCache`, `bufferPages` | Ajustar opções do motor |
+
+Registre fontes compartilhadas e políticas uma vez em um serviço Node. Crie uma definição nova para cada trabalho: o layout modifica os nós com medidas e posições. Evite alterar a configuração do singleton compartilhado do pdfmake enquanto houver solicitações simultâneas.
+
+## Entenda unidades e larguras
+
+As dimensões usam pontos. Uma margem com quatro valores segue `[esquerda, acima, direita, abaixo]`. Um número de largura representa uma largura fixa em pontos; `'auto'` acompanha o conteúdo; `'*'` compartilha o espaço restante com outras colunas com asterisco. Comece com larguras fixas ou com asterisco e depois introduza dimensionamento baseado no conteúdo quando ele resolver uma necessidade real de layout.
+
+## Continue pela referência
+
+[Estilos](/docs/0.3/pt-br/document-definition-object/styling/) · [Tabelas](/docs/0.3/pt-br/document-definition-object/tables/) · [Imagens](/docs/0.3/pt-br/document-definition-object/images/) · [Layout da página](/docs/0.3/pt-br/document-definition-object/page/)
diff --git a/content/learn/first-pdf.de.md b/content/learn/first-pdf.de.md
new file mode 100644
index 00000000..2ee36687
--- /dev/null
+++ b/content/learn/first-pdf.de.md
@@ -0,0 +1,49 @@
++++
+title = "Deine erste PDF"
+description = "Erstelle in fünf kleinen Schritten ein funktionierendes pdfmake-0.3-Dokument mit Quellcode und tatsächlich gerenderter PDF."
+weight = 1
+sourceDigest = "cc22460fa895f9043a3b91fedd495c215fe7096cedc48fdf33cf5800f1a7ea7c"
++++
+
+## 1. Die zwei Zutaten verstehen
+
+pdfmake benötigt eine **Engine mit Schriften** und eine **Dokumentdefinition**. Die Definition ist ein JavaScript-Objekt, das den zu druckenden Inhalt beschreibt. Sie ist kein HTML und erzeugt erst dann etwas, wenn du sie an `createPdf` übergibst und eine Ausgabe anforderst.
+
+Probiere zunächst das folgende Beispiel im Browser aus. Engine und Roboto-Schrift sind bereits eingerichtet. Richte anschließend in Schritt 3 deine Laufzeit ein.
+
+## 2. Eine vollständige Definition ansehen
+
+Das folgende Ergebnis wird exakt mit diesem Code erzeugt. Drei Einträge in `content` ergeben drei Blöcke untereinander. Text wird automatisch umgebrochen; Ränder und Schriftgrößen werden in PDF-Punkten gemessen (72 Punkte = 1 Zoll).
+
+{{< example id="welcome" >}}
+
+Ändere im Playground die Überschrift oder Schriftgröße. Bei aktivierter **Live-Vorschau** erscheint die neue PDF, wenn du mit dem Tippen pausierst. Änderungen lassen sich rückgängig machen; du kannst benannte Dokumente im Browser speichern oder eine JavaScript-Datei exportieren.
+
+## 3. Deine Anwendung einrichten
+
+Wähle **eine** Einrichtung. Kombiniere den Node.js-Einstieg nicht mit Browser-Ausgabemethoden.
+
+| Laufzeit | Einrichtung | Warum Schriften wichtig sind |
+| --- | --- | --- |
+| Node.js-API | [Vollständiger Node.js-Schnellstart](/docs/0.3/de/getting-started/server-side/) | Registriere echte Schriftdateien oder eine Standardschriftfamilie vor dem Rendern |
+| Browseranwendung | [Vollständiger Browser-Schnellstart](/docs/0.3/de/getting-started/client-side/) | Lade `pdfmake.min.js` und anschließend ein Schrift-VFS oder registriere es im Bundler |
+
+Das Beispiel verwendet `Roboto`, die Standardschrift im Browser. Wenn du die Definition mit der Helvetica-Einrichtung aus dem Node.js-Schnellstart verwendest, ergänze `defaultStyle: { font: 'Helvetica' }` oder registriere Roboto-Dateien. Unicode-Text benötigt außerdem eine Schrift, die die verwendeten Zeichen enthält; eine gültige Zeichenfolge liefert keine fehlenden Glyphen mit.
+
+## 4. Ausgabe anfordern und Fehler behandeln
+
+In einer eingerichteten Browseranwendung:
+
+```js
+try {
+ await pdfMake.createPdf(dd).download('first-document.pdf');
+} catch (error) {
+ document.querySelector('#status').textContent = error.message;
+}
+```
+
+Hier ist `dd` die oben gezeigte Definition und `#status` ein Element deiner Anwendung. Verwende in Node.js stattdessen `await pdfmake.createPdf(dd).write('first-document.pdf')`. `createPdf` gibt einen Ausgabe-Wrapper zurück; die Ausgabemethode liefert das Promise, auf das du warten musst. Ohne `await` oder `.catch(...)` erreicht ein Generierungsfehler möglicherweise nie deine Benutzeroberfläche.
+
+## 5. Jeweils ein Konzept ergänzen
+
+Behalte das erste funktionierende Dokument. Ergänze anschließend [benannte Stile](/docs/0.3/de/document-definition-object/styling/) und danach [Tabellen](/docs/0.3/de/document-definition-object/tables/), wenn du Zeilen brauchst. Verwende das [Dokumentmodell](/docs/0.3/de/learn/document-model/), um den passenden Knotentyp auszuwählen. Wenn ein Fehler auftritt, [ordne ihn zunächst einer Fehlerklasse zu](/docs/0.3/de/guides/errors/), bevor du gleichzeitig Schriften, Layout und Ressourcen änderst.
diff --git a/content/learn/first-pdf.es.md b/content/learn/first-pdf.es.md
new file mode 100644
index 00000000..afbb15bd
--- /dev/null
+++ b/content/learn/first-pdf.es.md
@@ -0,0 +1,49 @@
++++
+sourceDigest = "cc22460fa895f9043a3b91fedd495c215fe7096cedc48fdf33cf5800f1a7ea7c"
+title = "Tu primer PDF"
+description = "Crea un documento pdfmake 0.3 funcional en cinco pasos pequeños, con el código fuente y su PDF renderizado real."
+weight = 1
++++
+
+## 1. Comprender los dos ingredientes
+
+pdfmake necesita un **motor con fuentes** y una **definición del documento**. La definición es un objeto JavaScript que describe lo que se va a imprimir. No es HTML y no dibuja nada hasta que se pasa a `createPdf` y se solicita una salida.
+
+Para el primer intento, usa el ejemplo del navegador que aparece abajo. Ya tiene configurados el motor y la fuente Roboto. Después, usa la configuración del entorno de ejecución del paso 3.
+
+## 2. Ver una definición completa
+
+El resultado que aparece abajo se genera exactamente con este código. Las tres entradas de `content` se convierten en tres bloques verticales. El texto se ajusta automáticamente; los márgenes y los tamaños de fuente se miden en puntos PDF (72 puntos = 1 pulgada).
+
+{{< example id="welcome" >}}
+
+Cambia el encabezado o el tamaño de fuente en el entorno de pruebas. Con **Live preview** activada, el PDF nuevo aparece después de dejar de escribir. Puedes deshacer cambios, guardar documentos con nombre en el navegador o exportar un archivo JavaScript.
+
+## 3. Configurar tu propia aplicación
+
+Elige **una** configuración. No combines la entrada de Node con métodos de salida exclusivos del navegador.
+
+| Entorno | Configuración | Por qué importan las fuentes |
+| --- | --- | --- |
+| API de Node.js | [Inicio rápido completo con Node](/docs/0.3/es/getting-started/server-side/) | Registra archivos de fuentes reales o una familia estándar antes del renderizado |
+| Aplicación de navegador | [Inicio rápido completo en el navegador](/docs/0.3/es/getting-started/client-side/) | Carga `pdfmake.min.js` y luego un VFS de fuentes, o regístralo en el empaquetador |
+
+El ejemplo usa `Roboto`, la fuente predeterminada del navegador. Si lo usas con la configuración de Helvetica estándar de la guía de Node, añade `defaultStyle: { font: 'Helvetica' }` a la definición o registra los archivos Roboto. El texto Unicode también necesita una fuente que cubra los caracteres usados; una cadena válida no aporta los glifos que falten.
+
+## 4. Solicitar una salida y gestionar errores
+
+En una aplicación de navegador configurada:
+
+```js
+try {
+ await pdfMake.createPdf(dd).download('first-document.pdf');
+} catch (error) {
+ document.querySelector('#status').textContent = error.message;
+}
+```
+
+Aquí `dd` es la definición anterior y `#status` es un elemento de la aplicación. En Node.js, usa en su lugar `await pdfmake.createPdf(dd).write('first-document.pdf')`. `createPdf` devuelve un contenedor de salida; el método de salida devuelve la Promise que hay que esperar. Si no usas `await` ni `.catch(...)`, es posible que el error de generación nunca llegue a la interfaz.
+
+## 5. Añadir un concepto a la vez
+
+Conserva el primer documento funcional. A continuación, añade [estilos con nombre](/docs/0.3/es/document-definition-object/styling/) y después [tablas](/docs/0.3/es/document-definition-object/tables/) cuando necesites filas. Usa el [modelo de documento](/docs/0.3/es/learn/document-model/) para elegir el tipo de nodo. Si algo falla, [clasifica el error](/docs/0.3/es/guides/errors/) antes de cambiar de golpe las fuentes, la distribución y los recursos.
diff --git a/content/learn/first-pdf.fr.md b/content/learn/first-pdf.fr.md
new file mode 100644
index 00000000..918c94dc
--- /dev/null
+++ b/content/learn/first-pdf.fr.md
@@ -0,0 +1,49 @@
++++
+title = "Votre premier PDF"
+description = "Créez un document pdfmake 0.3 fonctionnel en cinq étapes simples, avec son code source et le PDF réellement généré."
+weight = 1
+sourceDigest = "cc22460fa895f9043a3b91fedd495c215fe7096cedc48fdf33cf5800f1a7ea7c"
++++
+
+## 1. Comprendre les deux éléments nécessaires
+
+pdfmake a besoin d’un **moteur avec des polices** et d’une **définition de document**. Cette définition est un objet JavaScript qui décrit ce qu’il faut imprimer. Ce n’est pas du HTML et elle ne dessine rien tant que vous ne la transmettez pas à `createPdf` et ne demandez pas une sortie.
+
+Pour votre premier essai, utilisez dans le navigateur l’exemple ci-dessous. Le moteur et la police Roboto y sont déjà configurés. Suivez ensuite à l’étape 3 les instructions de configuration de votre environnement.
+
+## 2. Examiner une définition complète
+
+Le résultat ci-dessous est généré exactement à partir de ce code. Les trois éléments `content` deviennent trois blocs verticaux. Le texte revient automatiquement à la ligne ; les marges et tailles de police sont mesurées en points PDF (72 points = 1 pouce).
+
+{{< example id="welcome" >}}
+
+Modifiez le titre ou la taille de police dans le playground. Si l’aperçu en direct est activé, le PDF apparaît après une pause de saisie. Vous pouvez annuler des modifications, enregistrer des documents nommés dans le navigateur ou exporter un fichier JavaScript.
+
+## 3. Configurer votre application
+
+Choisissez **une** configuration. Ne combinez pas l’entrée Node avec des méthodes de sortie réservées au navigateur.
+
+| Environnement | Configuration | Pourquoi les polices comptent |
+| --- | --- | --- |
+| API Node.js | [Démarrage rapide complet avec Node](/docs/0.3/fr/getting-started/server-side/) | Enregistrez des fichiers de police réels ou une famille standard avant le rendu |
+| Application navigateur | [Démarrage rapide complet dans le navigateur](/docs/0.3/fr/getting-started/client-side/) | Chargez `pdfmake.min.js`, puis un VFS de polices, ou enregistrez-le dans votre bundler |
+
+L’exemple utilise `Roboto`, la police par défaut du navigateur. Si vous l’utilisez avec la configuration Helvetica standard du guide Node, ajoutez `defaultStyle: { font: 'Helvetica' }` à la définition ou enregistrez les fichiers Roboto. Le texte Unicode exige également une police couvrant les caractères utilisés ; une chaîne valide ne fournit pas les glyphes manquants.
+
+## 4. Demander une sortie et gérer les erreurs
+
+Dans une application navigateur configurée :
+
+```js
+try {
+ await pdfMake.createPdf(dd).download('first-document.pdf');
+} catch (error) {
+ document.querySelector('#status').textContent = error.message;
+}
+```
+
+Ici, `dd` est la définition ci-dessus et `#status` est un élément de votre application. Dans Node.js, utilisez plutôt `await pdfmake.createPdf(dd).write('first-document.pdf')`. `createPdf` renvoie un objet de sortie ; la méthode de sortie renvoie la Promise à attendre. Sans `await` ou `.catch(...)`, un échec de génération peut ne jamais remonter jusqu’à votre interface.
+
+## 5. Ajouter les notions une à une
+
+Conservez le premier document fonctionnel. Ajoutez ensuite des [styles nommés](/docs/0.3/fr/document-definition-object/styling/), puis des [tableaux](/docs/0.3/fr/document-definition-object/tables/) lorsque vous avez besoin de lignes. Utilisez le [modèle de document](/docs/0.3/fr/learn/document-model/) pour choisir un type de nœud. En cas d’échec, [classez l’erreur](/docs/0.3/fr/guides/errors/) avant de modifier en même temps les polices, la mise en page et les ressources.
diff --git a/content/learn/first-pdf.md b/content/learn/first-pdf.md
new file mode 100644
index 00000000..f1bd5ff7
--- /dev/null
+++ b/content/learn/first-pdf.md
@@ -0,0 +1,65 @@
++++
+title = "Your first PDF"
+description = "Build one working pdfmake 0.3 document in five small steps, with the source and its actual rendered PDF."
+weight = 1
++++
+
+## 1. Understand the two ingredients
+
+pdfmake needs an **engine with fonts** and a **document definition**. The definition
+is a JavaScript object describing what to print. It is not HTML and does not draw
+anything until you pass it to `createPdf` and request an output.
+
+For your first attempt, use the example below in the browser. It already has the
+engine and Roboto font configured. Then use the runtime setup in step 3.
+
+## 2. Look at a complete definition
+
+The result below is generated from exactly this code. Three `content` entries
+become three vertical blocks. Text wraps automatically; margins and font sizes
+are measured in PDF points (72 points = 1 inch).
+
+{{< example id="welcome" >}}
+
+Change the heading or font size in the playground. With **Live preview** enabled,
+the next PDF appears after you pause typing. You can undo changes, save named
+documents in your browser, or export a JavaScript file.
+
+## 3. Configure your own application
+
+Choose **one** setup. Do not combine the Node entry with browser-only output methods.
+
+| Runtime | Setup | Why fonts matter |
+| --- | --- | --- |
+| Node.js API | [Complete Node quickstart](/docs/0.3/getting-started/server-side/) | Register real font files or a standard family before rendering |
+| Browser application | [Complete browser quickstart](/docs/0.3/getting-started/client-side/) | Load `pdfmake.min.js`, then a font VFS, or register it in your bundler |
+
+The example uses `Roboto`, the browser default. If you use it with the Node
+quickstart's standard Helvetica setup, add `defaultStyle: { font: 'Helvetica' }`
+to the definition or register Roboto files. Unicode text also needs a font covering
+the characters you use; a valid string alone does not supply missing glyphs.
+
+## 4. Request an output and handle errors
+
+In a configured browser application:
+
+```js
+try {
+ await pdfMake.createPdf(dd).download('first-document.pdf');
+} catch (error) {
+ document.querySelector('#status').textContent = error.message;
+}
+```
+
+Here `dd` is the definition above and `#status` is an element in your application.
+For Node.js, use `await pdfmake.createPdf(dd).write('first-document.pdf')` instead.
+`createPdf` returns an output wrapper; the output method returns the Promise to
+await. Without `await` or `.catch(...)`, a generation failure may never reach your UI.
+
+## 5. Add one concept at a time
+
+Keep the first working document. Add [named styles](/docs/0.3/document-definition-object/styling/)
+next, then [tables](/docs/0.3/document-definition-object/tables/) when you need rows.
+Use [the document model](/docs/0.3/learn/document-model/) to choose a node type.
+If something fails, [classify the error](/docs/0.3/guides/errors/) before changing fonts,
+layout and resources all at once.
diff --git a/content/learn/first-pdf.pt-br.md b/content/learn/first-pdf.pt-br.md
new file mode 100644
index 00000000..767f6ff2
--- /dev/null
+++ b/content/learn/first-pdf.pt-br.md
@@ -0,0 +1,49 @@
++++
+title = "Seu primeiro PDF"
+description = "Monte um documento funcional com pdfmake 0.3 em cinco passos curtos, com o código-fonte e o PDF realmente renderizado."
+weight = 1
+sourceDigest = "cc22460fa895f9043a3b91fedd495c215fe7096cedc48fdf33cf5800f1a7ea7c"
++++
+
+## 1. Entenda os dois elementos
+
+O pdfmake precisa de um **motor com fontes** e de uma **definição do documento**. A definição é um objeto JavaScript que descreve o que será impresso. Ela não é HTML e não desenha nada até ser passada a `createPdf` e uma saída ser solicitada.
+
+Na primeira tentativa, use no navegador o exemplo abaixo. O motor e a fonte Roboto já estão configurados. Depois, configure seu ambiente seguindo o passo 3.
+
+## 2. Examine uma definição completa
+
+O resultado abaixo é gerado exatamente a partir deste código. As três entradas de `content` viram três blocos verticais. O texto quebra linhas automaticamente; margens e tamanhos de fonte são medidos em pontos PDF (72 pontos = 1 polegada).
+
+{{< example id="welcome" >}}
+
+Altere o título ou o tamanho da fonte no playground. Com **Live preview** ativada, o PDF atualizado aparece quando você pausa a digitação. Você pode desfazer alterações, salvar documentos nomeados no navegador ou exportar um arquivo JavaScript.
+
+## 3. Configure sua aplicação
+
+Escolha **uma** configuração. Não combine a entrada do Node com métodos de saída exclusivos do navegador.
+
+| Ambiente | Configuração | Por que as fontes importam |
+| --- | --- | --- |
+| API Node.js | [Início rápido completo para Node](/docs/0.3/pt-br/getting-started/server-side/) | Registre arquivos de fontes reais ou uma família padrão antes de renderizar |
+| Aplicação no navegador | [Início rápido completo para navegador](/docs/0.3/pt-br/getting-started/client-side/) | Carregue `pdfmake.min.js` e depois um VFS de fontes, ou registre-o no bundler |
+
+O exemplo usa `Roboto`, a fonte padrão do navegador. Se você o usar com a configuração de Helvetica padrão do início rápido para Node, adicione `defaultStyle: { font: 'Helvetica' }` à definição ou registre os arquivos Roboto. Texto Unicode também precisa de uma fonte que cubra os caracteres usados; uma string válida, por si só, não fornece glifos ausentes.
+
+## 4. Solicite uma saída e trate erros
+
+Em uma aplicação de navegador configurada:
+
+```js
+try {
+ await pdfMake.createPdf(dd).download('first-document.pdf');
+} catch (error) {
+ document.querySelector('#status').textContent = error.message;
+}
+```
+
+Aqui, `dd` é a definição acima e `#status` é um elemento da aplicação. No Node.js, use `await pdfmake.createPdf(dd).write('first-document.pdf')`. `createPdf` retorna um invólucro de saída; o método de saída retorna a Promise que deve ser aguardada. Sem `await` ou `.catch(...)`, uma falha de geração talvez nunca chegue à interface.
+
+## 5. Adicione um conceito por vez
+
+Mantenha o primeiro documento funcional. Em seguida, adicione [estilos nomeados](/docs/0.3/pt-br/document-definition-object/styling/) e depois [tabelas](/docs/0.3/pt-br/document-definition-object/tables/) quando precisar de linhas. Use [o modelo do documento](/docs/0.3/pt-br/learn/document-model/) para escolher um tipo de nó. Se algo falhar, [classifique o erro](/docs/0.3/pt-br/guides/errors/) antes de alterar fontes, layout e recursos todos de uma vez.
diff --git a/content/migration-from-0.1/_index.de.md b/content/migration-from-0.1/_index.de.md
new file mode 100644
index 00000000..46156fd9
--- /dev/null
+++ b/content/migration-from-0.1/_index.de.md
@@ -0,0 +1,53 @@
++++
+title = "Migration von 0.1/0.2"
+description = "Migriere ältere pdfmake-Integrationen zur Singleton-API von 0.3, Promise-Ausgabemethoden, Schriftregistrierung und Seitenumbruch-Callbacks."
+weight = 40
+sourceDigest = "693d722f104238aae8b671cfceb90abdfddb531f13ae71ca10f39c9f018bb4bf"
++++
+
+## Geplant aktualisieren
+
+Fixiere die Version, die du prüfst. Bewahre repräsentative bestehende PDFs und die Eingaben und Schriften auf, mit denen sie erzeugt wurden. Vergleiche vor dem Upgrade in der Produktion den extrahierten Text, die Seitenzahl und gerenderte Seiten. Bytegenau identische Ausgaben sind oft ungeeignet, weil sich PDF-Metadaten und Kennungen unterscheiden können.
+
+## Node-Konstruktor-API ersetzen
+
+Ältere Node.js-Beispiele erstellen `PdfPrinter` und rufen `createPdfKitDocument` auf. Verwende in 0.3 das Singleton:
+
+```js
+const pdfmake = require('pdfmake');
+pdfmake.addFonts(fonts);
+await pdfmake.createPdf(docDefinition).write('document.pdf');
+```
+
+`fonts` muss eine gültige Zuordnung von Schriftfamilien sein, wie in der [Node.js-Schnellstartanleitung](/docs/0.3/de/getting-started/server-side/) und im [Schriftenleitfaden](/docs/0.3/de/fonts/) gezeigt. Konfiguriere Richtlinien und Layouts beim Start und vermeide Änderungen am gemeinsam genutzten Singleton pro Anfrage.
+
+## Auf Ausgabemethoden warten
+
+Ersetze callbackbasierte Browserausgabe durch Promises:
+
+```js
+const data = await pdfMake.createPdf(docDefinition).getBase64();
+```
+
+Behandle Ablehnungen der Ausgabemethoden. Verwende die [Node.js-Methoden](/docs/0.3/de/getting-started/server-side/methods/) oder [Browsermethoden](/docs/0.3/de/getting-started/client-side/methods/) für die jeweilige Zielumgebung.
+
+## Browser-Schriftdateien neu erzeugen
+
+Erzeuge benutzerdefinierte VFS-Dateien neu und passe die Registrierung auf `addVirtualFileSystem` an. Nimm nicht an, dass das Format einer älteren generierten Schriftdatei mit dem aktuellen Bundle übereinstimmt. Siehe [VFS-Schriften](/docs/0.3/de/fonts/custom-fonts-client-side/vfs/).
+
+## `pageBreakBefore` aktualisieren
+
+Version 0.1/0.2 übergab separate Knoten-Arrays. Version 0.3 übergibt einen Knotenkontainer:
+
+```js
+pageBreakBefore: function (currentNode, nodeContainer) {
+ return currentNode.headlineLevel === 1 &&
+ nodeContainer.getFollowingNodesOnPage().length === 0;
+}
+```
+
+Der Kontainer bietet außerdem `getNodesOnNextPage()` und `getPreviousNodesOnPage()`. Dieses Snippet ist eine Eigenschaft innerhalb einer Definition, kein eigenständiges JavaScript. Siehe [Seitenumbrüche](/docs/0.3/de/document-definition-object/page/).
+
+## Ressourcenzugriff konfigurieren
+
+Konfiguriere für **0.3.6+** eine synchrone URL-Zugriffsrichtlinie und für **0.3.8+** eine Richtlinie für lokale Dateien. Prüfe sowohl erlaubte als auch abgelehnte Ressourcen. Siehe [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/).
diff --git a/content/migration-from-0.1/_index.es.md b/content/migration-from-0.1/_index.es.md
new file mode 100644
index 00000000..87ad42e9
--- /dev/null
+++ b/content/migration-from-0.1/_index.es.md
@@ -0,0 +1,53 @@
++++
+sourceDigest = "693d722f104238aae8b671cfceb90abdfddb531f13ae71ca10f39c9f018bb4bf"
+title = "Migrar desde 0.1/0.2"
+description = "Migra integraciones antiguas de pdfmake a la API singleton 0.3, los métodos de salida basados en Promise, el registro de fuentes y los callbacks de salto de página."
+weight = 40
++++
+
+## Actualizar de forma deliberada
+
+Fija la versión que estés evaluando. Conserva algunos PDF representativos existentes y las entradas y fuentes usadas para generarlos. Antes de actualizar producción, compara el texto extraído, el número de páginas y las páginas renderizadas. La igualdad byte a byte suele ser inadecuada porque los metadatos y los identificadores del PDF pueden variar.
+
+## Sustituir la API constructora de Node
+
+Los ejemplos antiguos de Node crean una instancia de `PdfPrinter` y llaman a `createPdfKitDocument`. En 0.3, usa el singleton:
+
+```js
+const pdfmake = require('pdfmake');
+pdfmake.addFonts(fonts);
+await pdfmake.createPdf(docDefinition).write('document.pdf');
+```
+
+`fonts` debe ser un mapa de familias válido, como se muestra en el [inicio rápido de Node](/docs/0.3/es/getting-started/server-side/) y en la [guía de fuentes](/docs/0.3/es/fonts/). Configura las políticas y distribuciones durante el inicio, y evita cambiar por solicitud el estado compartido del singleton.
+
+## Esperar los métodos de salida
+
+Sustituye la salida del navegador basada en callbacks por Promises:
+
+```js
+const data = await pdfMake.createPdf(docDefinition).getBase64();
+```
+
+Gestiona los rechazos de los métodos de salida. Consulta los [métodos de Node](/docs/0.3/es/getting-started/server-side/methods/) o los [métodos del navegador](/docs/0.3/es/getting-started/client-side/methods/) según el entorno de ejecución de destino.
+
+## Volver a generar el almacenamiento de fuentes del navegador
+
+Vuelve a generar los archivos VFS personalizados y actualiza el registro para usar `addVirtualFileSystem`. No des por sentado que el formato de un archivo de fuentes generado antiguo coincida con el paquete actual. Consulta [fuentes VFS](/docs/0.3/es/fonts/custom-fonts-client-side/vfs/).
+
+## Actualizar pageBreakBefore
+
+Las versiones 0.1/0.2 pasaban matrices de nodos separadas. La versión 0.3 pasa un contenedor de nodos:
+
+```js
+pageBreakBefore: function (currentNode, nodeContainer) {
+ return currentNode.headlineLevel === 1 &&
+ nodeContainer.getFollowingNodesOnPage().length === 0;
+}
+```
+
+El contenedor también ofrece `getNodesOnNextPage()` y `getPreviousNodesOnPage()`. Este fragmento es una propiedad de una definición, no código JavaScript independiente. Consulta [saltos de página](/docs/0.3/es/document-definition-object/page/).
+
+## Configurar el acceso a recursos
+
+Para la versión **0.3.6 o posterior**, configura una política síncrona de acceso a URL; para la **0.3.8 o posterior**, configura una política de archivos locales. Prueba tanto los recursos permitidos como los rechazados. Consulta [seguridad de recursos](/docs/0.3/es/guides/resource-security/).
diff --git a/content/migration-from-0.1/_index.fr.md b/content/migration-from-0.1/_index.fr.md
new file mode 100644
index 00000000..c4264432
--- /dev/null
+++ b/content/migration-from-0.1/_index.fr.md
@@ -0,0 +1,53 @@
++++
+title = "Migration depuis 0.1/0.2"
+description = "Migrez les anciennes intégrations pdfmake vers l’API singleton 0.3, les sorties par Promise, l’enregistrement des polices et les callbacks de saut de page."
+weight = 40
+sourceDigest = "693d722f104238aae8b671cfceb90abdfddb531f13ae71ca10f39c9f018bb4bf"
++++
+
+## Mettre à niveau avec précaution
+
+Épinglez la version que vous évaluez. Conservez des PDF représentatifs et les entrées et polices qui les génèrent. Avant une mise à niveau en production, comparez le texte extrait, le nombre de pages et les pages rendues. Une égalité octet par octet est souvent inadaptée, car les métadonnées et identifiants PDF peuvent varier.
+
+## Remplacer l’API de constructeur Node
+
+Les anciens exemples Node instancient `PdfPrinter` et appellent `createPdfKitDocument`. Dans 0.3, utilisez le singleton :
+
+```js
+const pdfmake = require('pdfmake');
+pdfmake.addFonts(fonts);
+await pdfmake.createPdf(docDefinition).write('document.pdf');
+```
+
+`fonts` doit être une table de familles valide, comme dans le [démarrage Node](/docs/0.3/fr/getting-started/server-side/) et le [guide des polices](/docs/0.3/fr/fonts/). Configurez les règles d’accès et les mises en page au démarrage ; évitez de modifier l’état partagé du singleton à chaque requête.
+
+## Attendre les fonctions de sortie
+
+Remplacez les sorties navigateur basées sur des callbacks par des Promises :
+
+```js
+const data = await pdfMake.createPdf(docDefinition).getBase64();
+```
+
+Gérez les rejets des fonctions de sortie. Consultez les [méthodes Node](/docs/0.3/fr/getting-started/server-side/methods/) ou les [méthodes navigateur](/docs/0.3/fr/getting-started/client-side/methods/) selon l’environnement visé.
+
+## Régénérer le stockage des polices du navigateur
+
+Régénérez les fichiers VFS personnalisés et utilisez `addVirtualFileSystem` pour les enregistrer. Ne supposez pas qu’un ancien fichier de polices généré a la même structure que le bundle actuel. Consultez les [polices VFS](/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/).
+
+## Mettre à jour pageBreakBefore
+
+La version 0.1/0.2 transmettait des tableaux de nœuds distincts. La version 0.3 transmet un conteneur de nœuds :
+
+```js
+pageBreakBefore: function (currentNode, nodeContainer) {
+ return currentNode.headlineLevel === 1 &&
+ nodeContainer.getFollowingNodesOnPage().length === 0;
+}
+```
+
+Le conteneur propose aussi `getNodesOnNextPage()` et `getPreviousNodesOnPage()`. Cet extrait est une propriété d’une définition, pas du JavaScript autonome. Voir les [sauts de page](/docs/0.3/fr/document-definition-object/page/).
+
+## Configurer l’accès aux ressources
+
+À partir de **0.3.6**, configurez une règle d’accès URL synchrone ; à partir de **0.3.8**, configurez une règle pour les fichiers locaux. Testez les ressources autorisées et refusées. Voir la [sécurité des ressources](/docs/0.3/fr/guides/resource-security/).
diff --git a/content/migration-from-0.1/_index.md b/content/migration-from-0.1/_index.md
index e74f315a..7d4fa018 100644
--- a/content/migration-from-0.1/_index.md
+++ b/content/migration-from-0.1/_index.md
@@ -1,42 +1,52 @@
+++
title = "Migration from 0.1/0.2"
-description = ""
-weight = 9
-alwaysopen = true
+description = "Migrate older pdfmake integrations to the 0.3 singleton API, Promise output methods, font registration and page-break callbacks."
+weight = 40
+++
-#### Server-side: a different way of invoking the library
+## Upgrade deliberately
-[See documentation](/docs/0.3/getting-started/server-side/).
+Pin the version you are evaluating. Keep representative existing PDFs and the inputs/fonts used to generate them. Compare extracted text, page counts and rendered pages before upgrading production. Byte equality is often unsuitable because PDF metadata and identifiers can vary.
-#### Unified interfaces and all methods return promise
+## Replace the Node constructor API
-Client-side: replace callbacks with promises [see documentation](/docs/0.3/getting-started/client-side/methods/).
+Older Node examples construct `PdfPrinter` and call `createPdfKitDocument`. In 0.3 use the singleton:
-Server-side: introduce new methods as on the client [see documentation](/docs/0.3/getting-started/server-side/methods/).
+```js
+const pdfmake = require('pdfmake');
+pdfmake.addFonts(fonts);
+await pdfmake.createPdf(docDefinition).write('document.pdf');
+```
+`fonts` must be a valid family map, as shown in the [Node quickstart](/docs/0.3/getting-started/server-side/) and [fonts guide](/docs/0.3/fonts/). Configure policies and layouts during startup, and avoid per-request changes to shared singleton state.
-#### Changed including virtual font storage in client-side
+## Await output helpers
-Regenerate virtual file system (VFS) is required.
+Replace callback-based browser output with Promises:
+```js
+const data = await pdfMake.createPdf(docDefinition).getBase64();
+```
-#### Changed parameters of pageBreakBefore function
+Handle rejections from output methods. Use [Node methods](/docs/0.3/getting-started/server-side/methods/) or [browser methods](/docs/0.3/getting-started/client-side/methods/) for the runtime you target.
-Version 0.1 or 0.2:
-```js
- pageBreakBefore: function(currentNode, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage) {
+## Regenerate browser font storage
- }
-```
+Regenerate custom VFS files and update registration to `addVirtualFileSystem`. Do not assume the shape of an older generated font file matches the current bundle. See [VFS fonts](/docs/0.3/fonts/custom-fonts-client-side/vfs/).
+
+## Update pageBreakBefore
+
+Version 0.1/0.2 passed separate node arrays. Version 0.3 passes a node container:
-Version 0.3:
```js
- pageBreakBefore: function(currentNode, nodeContainer) {
- // nodeContainer.getFollowingNodesOnPage();
- // nodeContainer.getNodesOnNextPage();
- // nodeContainer.getPreviousNodesOnPage();
- }
+pageBreakBefore: function (currentNode, nodeContainer) {
+ return currentNode.headlineLevel === 1 &&
+ nodeContainer.getFollowingNodesOnPage().length === 0;
+}
```
-[See documentation](/docs/0.3/document-definition-object/page/#dynamically-control-page-breaks-for-instance-to-avoid-orphan-children).
+The container also offers `getNodesOnNextPage()` and `getPreviousNodesOnPage()`. This snippet is a property inside a definition, not standalone JavaScript. See [page breaks](/docs/0.3/document-definition-object/page/).
+
+## Configure resource access
+
+For **0.3.6+**, configure a synchronous URL access policy; for **0.3.8+**, configure a local file policy. Test both permitted and rejected resources. See [resource security](/docs/0.3/guides/resource-security/).
diff --git a/content/migration-from-0.1/_index.pt-br.md b/content/migration-from-0.1/_index.pt-br.md
new file mode 100644
index 00000000..c44586c5
--- /dev/null
+++ b/content/migration-from-0.1/_index.pt-br.md
@@ -0,0 +1,53 @@
++++
+title = "Migração do 0.1/0.2"
+description = "Migre integrações antigas do pdfmake para a API singleton 0.3, métodos de saída com Promise, registro de fontes e callbacks de quebra de página."
+weight = 40
+sourceDigest = "693d722f104238aae8b671cfceb90abdfddb531f13ae71ca10f39c9f018bb4bf"
++++
+
+## Faça a atualização com cuidado
+
+Fixe a versão que está avaliando. Mantenha PDFs existentes representativos e as entradas e fontes usadas para gerá-los. Compare texto extraído, número de páginas e páginas renderizadas antes de atualizar a produção. Igualdade byte a byte costuma ser inadequada, pois metadados e identificadores do PDF podem variar.
+
+## Substitua a API de construtor do Node
+
+Exemplos antigos para Node criam `PdfPrinter` e chamam `createPdfKitDocument`. Na versão 0.3, use o singleton:
+
+```js
+const pdfmake = require('pdfmake');
+pdfmake.addFonts(fonts);
+await pdfmake.createPdf(docDefinition).write('document.pdf');
+```
+
+`fonts` precisa ser um mapa válido de famílias, como mostrado no [início rápido para Node](/docs/0.3/pt-br/getting-started/server-side/) e no [guia de fontes](/docs/0.3/pt-br/fonts/). Configure políticas e layouts durante a inicialização e evite alterações por solicitação no estado compartilhado do singleton.
+
+## Aguarde as funções de saída
+
+Substitua a saída do navegador baseada em callbacks por Promises:
+
+```js
+const data = await pdfMake.createPdf(docDefinition).getBase64();
+```
+
+Trate as rejeições dos métodos de saída. Consulte [métodos do Node](/docs/0.3/pt-br/getting-started/server-side/methods/) ou [métodos do navegador](/docs/0.3/pt-br/getting-started/client-side/methods/) para o ambiente escolhido.
+
+## Gere novamente o armazenamento de fontes do navegador
+
+Gere novamente os arquivos VFS personalizados e atualize o registro para `addVirtualFileSystem`. Não presuma que o formato de um arquivo de fonte gerado por uma versão antiga seja igual ao do bundle atual. Consulte [fontes VFS](/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/).
+
+## Atualize `pageBreakBefore`
+
+As versões 0.1/0.2 passavam arrays de nós separados. A versão 0.3 passa um contêiner de nós:
+
+```js
+pageBreakBefore: function (currentNode, nodeContainer) {
+ return currentNode.headlineLevel === 1 &&
+ nodeContainer.getFollowingNodesOnPage().length === 0;
+}
+```
+
+O contêiner também oferece `getNodesOnNextPage()` e `getPreviousNodesOnPage()`. Este trecho é uma propriedade dentro de uma definição, não JavaScript independente. Consulte [quebras de página](/docs/0.3/pt-br/document-definition-object/page/).
+
+## Configure o acesso a recursos
+
+Para **0.3.6 ou superior**, configure uma política síncrona de acesso a URLs; para **0.3.8 ou superior**, configure uma política de arquivos locais. Teste recursos permitidos e negados. Consulte [segurança de recursos](/docs/0.3/pt-br/guides/resource-security/).
diff --git a/content/options/_index.de.md b/content/options/_index.de.md
new file mode 100644
index 00000000..53fb8574
--- /dev/null
+++ b/content/options/_index.de.md
@@ -0,0 +1,26 @@
++++
+title = "Rendering-Optionen"
+description = "Steuere den Font-Layout-Cache und die Seitenausgabe von PDFKit über das zweite Argument von createPdf."
+weight = 30
+sourceDigest = "fa3eacf7dfb3dc985a1eb6cf541fdccb9dae9648d423d3d758d78b70eabb4882"
++++
+
+## Optionen an `createPdf` übergeben
+
+```js
+const output = pdfmake.createPdf(docDefinition, {
+ fontLayoutCache: true,
+ bufferPages: false
+});
+```
+
+Das Optionsobjekt ist getrennt von der [Dokumentdefinition](/docs/0.3/de/document-definition-object/).
+
+| Option | Typ | Standard | Bedeutung |
+| --- | --- | --- | --- |
+| `fontLayoutCache` | boolean | `true` | Font-Layout-Cache von PDFKit aktivieren |
+| `bufferPages` | boolean | `false` | PDFKit-Seiten puffern, statt sie sofort auszugeben |
+
+Behalte die Standardwerte bei, sofern dein Anwendungsfall keine Änderung erfordert. Das Puffern von Seiten kann den Speicherverbrauch erhöhen. Es macht das Layout von pdfmake nicht verzögert oder inkrementell. Siehe [Leistung](/docs/0.3/de/guides/performance/) und die [Dokumentation zur Seitenausgabe von PDFKit](https://pdfkit.org/docs/getting_started.html).
+
+Schriften, benannte Tabellenlayouts und Ressourcenrichtlinien werden über die [öffentliche API](/docs/0.3/de/guides/api-reference/) konfiguriert. Papierformat, Ränder und Inhalt gehören in die Definition.
diff --git a/content/options/_index.es.md b/content/options/_index.es.md
new file mode 100644
index 00000000..3aa36d9e
--- /dev/null
+++ b/content/options/_index.es.md
@@ -0,0 +1,26 @@
++++
+sourceDigest = "fa3eacf7dfb3dc985a1eb6cf541fdccb9dae9648d423d3d758d78b70eabb4882"
+title = "Opciones de renderizado"
+description = "Configura la caché de maquetación de fuentes y el almacenamiento en búfer de páginas de PDFKit mediante el segundo argumento de createPdf."
+weight = 30
++++
+
+## Pasar opciones a createPdf
+
+```js
+const output = pdfmake.createPdf(docDefinition, {
+ fontLayoutCache: true,
+ bufferPages: false
+});
+```
+
+El objeto de opciones es independiente de la [definición del documento](/docs/0.3/es/document-definition-object/).
+
+| Opción | Tipo | Valor predeterminado | Significado |
+| --- | --- | --- | --- |
+| `fontLayoutCache` | boolean | `true` | Activa la caché de maquetación de fuentes de PDFKit |
+| `bufferPages` | boolean | `false` | Mantiene las páginas de PDFKit en el búfer en lugar de vaciarlo inmediatamente |
+
+Conserva los valores predeterminados salvo que tu caso de uso requiera un cambio. El almacenamiento de páginas en búfer puede aumentar el uso de memoria. No hace que la maquetación propia de pdfmake sea diferida ni incremental. Consulta [rendimiento](/docs/0.3/es/guides/performance/) y la [documentación de almacenamiento en búfer de páginas de PDFKit](https://pdfkit.org/docs/getting_started.html).
+
+Las fuentes, las distribuciones de tablas con nombre y las políticas de recursos se configuran en la [API pública](/docs/0.3/es/guides/api-reference/). El tamaño de papel, los márgenes y el contenido pertenecen a la definición.
diff --git a/content/options/_index.fr.md b/content/options/_index.fr.md
new file mode 100644
index 00000000..39cb2a6e
--- /dev/null
+++ b/content/options/_index.fr.md
@@ -0,0 +1,26 @@
++++
+title = "Options de rendu"
+description = "Configurez le cache de mise en page des polices et la mise en mémoire tampon des pages PDFKit via le second argument de createPdf."
+weight = 30
+sourceDigest = "fa3eacf7dfb3dc985a1eb6cf541fdccb9dae9648d423d3d758d78b70eabb4882"
++++
+
+## Transmettre des options à createPdf
+
+```js
+const output = pdfmake.createPdf(docDefinition, {
+ fontLayoutCache: true,
+ bufferPages: false
+});
+```
+
+L’objet d’options est distinct de la [définition du document](/docs/0.3/fr/document-definition-object/).
+
+| Option | Type | Valeur par défaut | Signification |
+| --- | --- | --- | --- |
+| `fontLayoutCache` | boolean | `true` | Active le cache de mise en page des polices de PDFKit |
+| `bufferPages` | boolean | `false` | Conserve les pages de PDFKit en mémoire tampon au lieu de les vider immédiatement |
+
+Conservez les valeurs par défaut sauf si votre cas d’usage exige un changement. La mise en mémoire tampon des pages peut augmenter l’utilisation de la mémoire. Elle ne rend pas la mise en page propre à pdfmake différée ou incrémentale. Consultez [les performances](/docs/0.3/fr/guides/performance/) et [la documentation de PDFKit sur la mise en mémoire tampon des pages](https://pdfkit.org/docs/getting_started.html).
+
+Les polices, les mises en page de tableaux nommées et les règles d’accès aux ressources se configurent via l’[API publique](/docs/0.3/fr/guides/api-reference/). Le format du papier, les marges et le contenu appartiennent à la définition.
diff --git a/content/options/_index.md b/content/options/_index.md
index ed3b14e7..bf1bc106 100644
--- a/content/options/_index.md
+++ b/content/options/_index.md
@@ -1,13 +1,25 @@
+++
-title = "Options"
-description = ""
+title = "Rendering options"
+description = "Configure font layout caching and PDFKit page buffering through the second createPdf argument."
weight = 30
-alwaysopen = true
+++
-Advanced options for creating document used in [client-side methods](/docs/0.3/getting-started/client-side/methods/) or [server-side method](/docs/0.3/getting-started/server-side/).
+## Pass options to createPdf
-Options:
+```js
+const output = pdfmake.createPdf(docDefinition, {
+ fontLayoutCache: true,
+ bufferPages: false
+});
+```
-- `fontLayoutCache` - option to disable font layout cache (_default_: `true` - cache enabled)
-- `bufferPages` - allows you to control when pages are flushed to the output file (see [pdfkit documentation](http://pdfkit.org/docs/getting_started.html)) (_default_: `false` - buffer disabled)
+The options object is separate from the [document definition](/docs/0.3/document-definition-object/).
+
+| Option | Type | Default | Meaning |
+| --- | --- | --- | --- |
+| `fontLayoutCache` | boolean | `true` | Enable PDFKit's font layout cache |
+| `bufferPages` | boolean | `false` | Keep PDFKit pages buffered rather than flushing them immediately |
+
+Keep defaults unless your use case requires a change. Page buffering can increase memory use. It does not make pdfmake's own layout lazy or incremental. See [performance](/docs/0.3/guides/performance/) and [PDFKit's page buffering documentation](https://pdfkit.org/docs/getting_started.html).
+
+Fonts, named table layouts and resource policies are configured on the [public API](/docs/0.3/guides/api-reference/). Paper size, margins and content belong in the definition.
diff --git a/content/options/_index.pt-br.md b/content/options/_index.pt-br.md
new file mode 100644
index 00000000..ad18dcff
--- /dev/null
+++ b/content/options/_index.pt-br.md
@@ -0,0 +1,26 @@
++++
+title = "Opções de renderização"
+description = "Configure o cache de layout de fontes e o armazenamento temporário de páginas do PDFKit pelo segundo argumento de createPdf."
+weight = 30
+sourceDigest = "fa3eacf7dfb3dc985a1eb6cf541fdccb9dae9648d423d3d758d78b70eabb4882"
++++
+
+## Passe opções para createPdf
+
+```js
+const output = pdfmake.createPdf(docDefinition, {
+ fontLayoutCache: true,
+ bufferPages: false
+});
+```
+
+O objeto de opções é separado da [definição do documento](/docs/0.3/pt-br/document-definition-object/).
+
+| Opção | Tipo | Padrão | Significado |
+| --- | --- | --- | --- |
+| `fontLayoutCache` | boolean | `true` | Ativa o cache de layout de fontes do PDFKit |
+| `bufferPages` | boolean | `false` | Mantém as páginas do PDFKit em buffer em vez de descarregá-las imediatamente |
+
+Mantenha os padrões, a menos que seu caso de uso exija uma alteração. O armazenamento de páginas em buffer pode aumentar o uso de memória. Ele não torna o layout do próprio pdfmake preguiçoso ou incremental. Consulte [desempenho](/docs/0.3/pt-br/guides/performance/) e a [documentação de armazenamento de páginas em buffer do PDFKit](https://pdfkit.org/docs/getting_started.html).
+
+Fontes, layouts de tabela nomeados e políticas de recursos são configurados na [API pública](/docs/0.3/pt-br/guides/api-reference/). Tamanho do papel, margens e conteúdo pertencem à definição.
diff --git a/content/playground/_index.de.md b/content/playground/_index.de.md
new file mode 100644
index 00000000..daa1a17d
--- /dev/null
+++ b/content/playground/_index.de.md
@@ -0,0 +1,9 @@
++++
+title = "Playground"
+description = "Bearbeite deine Dokumentdefinition und sieh dir das Ergebnis an. Dein Arbeitsbereich bleibt beim Navigieren erhalten."
+layout = "workspace"
+weight = 99
+sourceDigest = "ed2dd49083b941d64363a1d15bce73210d644f055b742e90c21f85226e5ee75f"
++++
+
+Probiere das Beispiel aus und lies anschließend weiter.
diff --git a/content/playground/_index.es.md b/content/playground/_index.es.md
new file mode 100644
index 00000000..ec45fe8b
--- /dev/null
+++ b/content/playground/_index.es.md
@@ -0,0 +1,9 @@
++++
+title = "Playground"
+description = "Edita la definición y mira el resultado. Tu espacio de trabajo se conserva mientras consultas la documentación."
+layout = "workspace"
+weight = 99
+sourceDigest = "ed2dd49083b941d64363a1d15bce73210d644f055b742e90c21f85226e5ee75f"
++++
+
+Prueba el ejemplo y después sigue leyendo.
diff --git a/content/playground/_index.fr.md b/content/playground/_index.fr.md
new file mode 100644
index 00000000..2715da32
--- /dev/null
+++ b/content/playground/_index.fr.md
@@ -0,0 +1,9 @@
++++
+title = "Playground"
+description = "Modifiez votre définition et observez le résultat. Votre espace de travail vous accompagne pendant la navigation."
+layout = "workspace"
+weight = 99
+sourceDigest = "ed2dd49083b941d64363a1d15bce73210d644f055b742e90c21f85226e5ee75f"
++++
+
+Essayez l’exemple, puis poursuivez votre lecture.
diff --git a/content/playground/_index.md b/content/playground/_index.md
new file mode 100644
index 00000000..f1215d1a
--- /dev/null
+++ b/content/playground/_index.md
@@ -0,0 +1,8 @@
++++
+title = "Playground"
+description = "Edit your definition and see the result. Your workspace stays with you as you browse."
+layout = "workspace"
+weight = 99
++++
+
+Try the example, then continue reading.
diff --git a/content/playground/_index.pt-br.md b/content/playground/_index.pt-br.md
new file mode 100644
index 00000000..4e74f524
--- /dev/null
+++ b/content/playground/_index.pt-br.md
@@ -0,0 +1,9 @@
++++
+title = "Playground"
+description = "Edite a definição e veja o resultado. Seu espaço de trabalho é preservado enquanto você consulta a documentação."
+layout = "workspace"
+weight = 99
+sourceDigest = "ed2dd49083b941d64363a1d15bce73210d644f055b742e90c21f85226e5ee75f"
++++
+
+Experimente o exemplo e continue a leitura.
diff --git a/data/codeExamples.json b/data/codeExamples.json
new file mode 100644
index 00000000..44faf5d9
--- /dev/null
+++ b/data/codeExamples.json
@@ -0,0 +1,548 @@
+{
+ "82ffe3703e65a1a8c1e467cff0e5d9e37135207f5e5cab0bfe1f1aa6582d0b88": {
+ "javascript": "var dd = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};",
+ "runnable": false,
+ "context": "context"
+ },
+ "5e637829c58ab393b27b90c24beb5e0266dcfd4f2065c7522e5c38b91c985134": {
+ "javascript": "var docDefinition = {\n background: 'simple text',\n\n content: ['Example document content']\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: 'simple text',\n\n content: ['Example document content']\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "b1f11b32c4d4f88f50e87f045bc38ede2af6b67af6c97273c5d9ea7096c8091b": {
+ "javascript": "var docDefinition = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "d66d27b55442dc2045fce27e876036355abbdd356d68a26a6308322ba5b9d140": {
+ "javascript": "var docDefinition = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "f6c1062a7a6cfc4ba45028bbd74976421d1f7e40ea27effefda62fc1680fa455": {
+ "javascript": "var docDefinition = {\n compress: false,\n content: ['An uncompressed example document.']\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n compress: false,\n content: ['An uncompressed example document.']\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "4d1f604459f0351d38c206542c47736caec3254aafcefb12794ca01438aacfc2": {
+ "javascript": "var docDefinition = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}",
+ "runnable": true,
+ "context": "definition"
+ },
+ "d7b78748281e6d03211d8b0751d577ef8616fbf0afe0ec0c9b040d722609d35c": {
+ "javascript": "var docDefinition = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}",
+ "runnable": true,
+ "context": "definition"
+ },
+ "42a8b01af5fbc3227aa3fcc13c0ad467b18d29b1fbaf414b213c99330f6c3a31": {
+ "javascript": "var docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "3b7793b2a03d8a7213ece66eaa17bf73432b143900768ca31ef8d40a17855c0e": {
+ "javascript": "var docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "cdf61883cb5767532311caf9c95a61760440e6a9fedbba6e9e1fb0a9b029e99b": {
+ "javascript": "var dd = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};",
+ "runnable": false,
+ "context": "context"
+ },
+ "f791798bde35625090550dc42202f9f3cdd9c8913868395603a5dda276f8f9be": {
+ "javascript": "var dd = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };",
+ "runnable": true,
+ "context": "definition"
+ },
+ "1079dfa7fef700c95ccfd0a950efdfaf41efa9f1808def0e4409a4b3e2377970": {
+ "javascript": "var dd = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "dee74be8b7706ee53774bf7c87b36eefc8b7e56aa1bce4ca1ebccd6b9300a3e6": {
+ "javascript": "var docDefinition = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "5678a2340bd9717148e9714982b71729ccb3288829046db435676d327dcbb19d": {
+ "javascript": "var dd = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };",
+ "runnable": true,
+ "context": "definition"
+ },
+ "fb69a7ded6ad5976cfce8f9b069997b27dafcfba0e298cf7368a775593e1be5d": {
+ "javascript": "var docDefinition = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "092a6c7e01c801db3711787a65372565369d126fa545a0e71ff8d24cfdc5f3e7": {
+ "javascript": "var docDefinition = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "cb1485c0ebf114c8e33e15cd4eb438c045ff13fec3779680728bc00b322b43c9": {
+ "javascript": "var dd = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "e2fe12fa547ef4329a81c84e400ea2fd13b9328dfd8e7978ba049eb09886783b": {
+ "javascript": "var dd = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}",
+ "runnable": true,
+ "context": "definition"
+ },
+ "71d6574976ff1b27ab97fa33701c9ea9c10395678d32e60e00a56af02e23bf87": {
+ "javascript": "var dd = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}",
+ "runnable": true,
+ "context": "definition"
+ },
+ "24aefa141f477a296790b8ad4ad27bcb5bbb2865b0dc9178a03856758b77130a": {
+ "javascript": "const currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};",
+ "typescript": "const currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};",
+ "runnable": false,
+ "context": "context"
+ },
+ "5b6cd3c487ad5696c04cee7268de6320847cafb8fc0fb3192473e6657e9423aa": {
+ "javascript": "var docDefinition = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "684c0f0de36040df985d11c35e9b3b0879175922ad732eaad351f1ffae15189f": {
+ "javascript": "var dd = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };",
+ "runnable": false,
+ "context": "context"
+ },
+ "e23578907fec3d9b6cbf68595e9ce8f18c18cb6203877cca2a9ee6afd087fb20": {
+ "javascript": "var dd = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };",
+ "runnable": false,
+ "context": "context"
+ },
+ "a8de99bca26c5a6c5636dfd3389c882bd262757a7dc04c66206af428b80cdd4d": {
+ "javascript": "var dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };",
+ "runnable": false,
+ "context": "context"
+ },
+ "19182f8e9488d3a35b4edc50c3209687c6656ef598c6fb161a955027962e8c12": {
+ "javascript": "var dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n}\n] };",
+ "typescript": "import type { ContentText } from \"pdfmake/interfaces\";\n\n// Cell properties are included in the bundled pdfmake declarations.\nconst cell = {\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n} satisfies ContentText;\n",
+ "runnable": false,
+ "context": "context"
+ },
+ "15fd951925d6b768aa6565436af58c99646a1f8bb3bdfefd892eab753f0a8996": {
+ "javascript": "var docDefinition = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "5aca4d05d162009cad8b23bd39b2892ab8d2909e7ea9ad226691ffe4dbb3caee": {
+ "javascript": "var docDefinition = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}",
+ "runnable": true,
+ "context": "definition"
+ },
+ "cc05ef48e096418423a7295e1e506cec7ada94b304b221129613bfab8d9f3238": {
+ "javascript": "var docDefinition = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}",
+ "runnable": true,
+ "context": "definition"
+ },
+ "9e5470a404f6c0454bb5cc422405ab56a8fd8cff43a11780ae8c5c083a9c2ca0": {
+ "javascript": "var docDefinition = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}",
+ "runnable": true,
+ "context": "definition"
+ },
+ "329a649813ef1eb45f36bac55244ccce3bfce2ae037235f085110b6b472f984e": {
+ "javascript": "var docDefinition = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "63ea014dd4c89a94259c0fc63ae706a91fe21d3cb87bcac5b2da3414fd1c62e8": {
+ "javascript": "var myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "a77cbabcc208b5c75fba82e576bc2cd4993f76cc95cb633260086f118a03594c": {
+ "javascript": "var docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "5df56f593cc4a87344476d49f0b4ab32b211c02b58baecc0684b22a56aa2c0bf": {
+ "javascript": "var docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "d467b3046db2fa1fb923efcb0717af600b5da602d62974421f576b1752bf0a11": {
+ "javascript": "var dd = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "10cf1014ee8d09bde76955f0ec9ef2127a1b778a4784e094673c194fd1330b1e": {
+ "javascript": "var dd = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "e05a94ca896ccee849edfe32e29d9ddec612b506fc2dca0e3eee05a17a9f42ef": {
+ "javascript": "var docDefinition = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "3396ac6c7cfebdfbe57fc96bac9edb9ebc1d688bbc08953b1b1ff86b4d3494eb": {
+ "javascript": "var dd = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "c3c9503a02fb341256a447c6a7518ae4decec1ff346611f22ce84047b1e5be08": {
+ "javascript": "var dd = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "9a532be8131f69b7dd77f1156bba6371ec08cef3a7888d99d71f63bc95e47b16": {
+ "javascript": "pdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};",
+ "typescript": "import pdfMake from \"pdfmake/build/pdfmake.js\";\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd: TDocumentDefinitions = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "be5417f2bbaa1a01fe650868088fcc07ad3adbdd212570839f1f30260d6bfaaa": {
+ "javascript": "var docDefinition = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "c33ac9a266c41583d29d732379eb4a28fbb1ec376d80ca28ba56f2f1fcbb26b8": {
+ "javascript": "var docDefinition = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "d93dea62042ddb3f4a88034c52129d84f9bc3fa8eb248665fcb8b65ad58c2b6d": {
+ "javascript": "var docDefinition = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "9e5888aeaebe8b1198794e8f9717f74ad7a2c420d9549bd4f5001bb8157cdcc0": {
+ "javascript": "var docDefinition = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "523b9f934974d5e5a2eed64083372490f5484492dca6f43cbbc7bdd3ec99e0ee": {
+ "javascript": "var docDefinition = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "ac397a615c01d1ff63f8ea5fb24cb4afc879768958e54535fcb906893976252a": {
+ "javascript": "var docDefinition = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "bba13bbacd4e99b4db0eb71d3b4d2a7fdb8083856fb5a29e3271684a479b03f9": {
+ "javascript": "const docDefinition = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst docDefinition: TDocumentDefinitions = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "60a8908955d732f8ed3e64c84ed01013e57d20532933414ab10f00ee2cac4cc7": {
+ "javascript": "var fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);",
+ "typescript": "var fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);",
+ "runnable": false,
+ "context": "context"
+ },
+ "cf4650b0dc220b0082968e348113d7d21464d05ae50b71482370026f561a3a8a": {
+ "javascript": "var docDefinition = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}",
+ "runnable": false,
+ "context": "context"
+ },
+ "f0b9b6f1b6f29d45b78c0d8ba85c3bc03887decf493e435898498376e4081747": {
+ "javascript": "import pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');",
+ "typescript": "import pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');",
+ "runnable": false,
+ "context": "context"
+ },
+ "51a664608123deb218a62377b9423ef3cc583d75c954cb67a37e221c071c568a": {
+ "javascript": "pdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});",
+ "typescript": "pdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});",
+ "runnable": false,
+ "context": "context"
+ },
+ "a414863cb463556a82149c8b098d7242254c34f149987eb09d6d14138762b1fa": {
+ "javascript": "pdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}",
+ "typescript": "pdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}",
+ "runnable": false,
+ "context": "context"
+ },
+ "47fe2eded452785f37c669be769cc2cba45b04eb388d43ba8cd5c9e978160418": {
+ "javascript": "var dd = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };",
+ "runnable": false,
+ "context": "context"
+ },
+ "31a708cf813b993a6820b84546a28cdff58b70b85b501d0924e94d9927b004a5": {
+ "javascript": "var fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});",
+ "runnable": false,
+ "context": "node"
+ },
+ "82bc87e59b7409dced1724012e2b33b1e5ee952a44f25c208883d115ca9b6eef": {
+ "javascript": "const path = require('node:path');\nconst pdfmake = require('pdfmake');\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);",
+ "typescript": "const path = require('node:path');\nimport pdfmake from \"pdfmake\";\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);",
+ "runnable": false,
+ "context": "node"
+ },
+ "d88061a950cae4dec9ddcfc795f036bfd25d56caf4643a5bc0d03c9c29c9db3c": {
+ "javascript": "const output = pdfMake.createPdf(docDefinition, options);",
+ "typescript": "const output = pdfMake.createPdf(docDefinition, options);",
+ "runnable": false,
+ "context": "context"
+ },
+ "f05ed8479fb62ce1b9acbc4041719fd6fb2f51262af297dfc21f97e41b17b845": {
+ "javascript": "try {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}",
+ "typescript": "try {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}",
+ "runnable": false,
+ "context": "context"
+ },
+ "84efb6bf5eaffdfe3898a5257cd09e1a71ce927993bb7afe344f4bdf8f229a23": {
+ "javascript": "async function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}",
+ "typescript": "async function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}",
+ "runnable": false,
+ "context": "context"
+ },
+ "193639626a2a162f619f25ce0a7b67b3551513ff5e9719e7c6dfb839eaf5c693": {
+ "javascript": "const blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.",
+ "typescript": "const blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.",
+ "runnable": false,
+ "context": "context"
+ },
+ "2bce46387958f9eec6ac9203f431b9e43953241e7e08cf49762652f9cfc80ab4": {
+ "javascript": "import pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');",
+ "typescript": "import pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');",
+ "runnable": false,
+ "context": "context"
+ },
+ "94fde17d99fd546866601b687f3a2faec3edbca2255d3a904acd1d52382f70f6": {
+ "javascript": "const output = pdfmake.createPdf(docDefinition, options);",
+ "typescript": "const output = pdfmake.createPdf(docDefinition, options);",
+ "runnable": false,
+ "context": "context"
+ },
+ "9af4c869c255c9a013f992f26c4c9bd62a688315bd82a6e6da4bac482be4c37f": {
+ "javascript": "try {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}",
+ "typescript": "try {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}",
+ "runnable": false,
+ "context": "context"
+ },
+ "8c2ae8ac083f8f932d5ee85ab06103e1dbed2f57f8592b927637ba06d2270911": {
+ "javascript": "const stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();",
+ "typescript": "const stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();",
+ "runnable": false,
+ "context": "context"
+ },
+ "2547d1eaf1a2521f64b26169c767c8db48e9635f11efa6e0be7da44ccbc0d64d": {
+ "javascript": "pdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});",
+ "typescript": "pdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});",
+ "runnable": false,
+ "context": "context"
+ },
+ "e444ec21e339d31dfa80c62f41c324cb39444004ec329e977e08cf4d634e89b0": {
+ "javascript": "pdfmake.setLocalAccessPolicy(() => false);",
+ "typescript": "pdfmake.setLocalAccessPolicy(() => false);",
+ "runnable": false,
+ "context": "context"
+ },
+ "2b4aafc77065baaf0f2fabf01eacc6db423e90a3470f7511abe0b13f39b2d36a": {
+ "javascript": "// docs-test: node-quickstart\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: node-quickstart\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });",
+ "runnable": false,
+ "context": "node"
+ },
+ "ab4578c4b6876dbdf46fab9a9c99712ea04971416af7e862ca20026e8806067e": {
+ "javascript": "const buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);",
+ "typescript": "const buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);",
+ "runnable": false,
+ "context": "context"
+ },
+ "44ac6eeafb66b80b16e9a5f32dcca89dee656a52e34427f93b1402bb9f053b52": {
+ "javascript": "import pdfmake from 'pdfmake';\nimport { strict as assert } from 'node:assert';\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');",
+ "typescript": "import pdfmake from 'pdfmake';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces.js';\nimport { strict as assert } from 'node:assert';\n\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');",
+ "runnable": false,
+ "context": "node"
+ },
+ "0c28d56de544cf82e41c30c1d634d8cc5d68eb1b5740e5bd328b19f364273557": {
+ "javascript": "import pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] };\nexport async function render() {\n return pdfmake.createPdf(definition).getBlob();\n}",
+ "typescript": "import pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces';\n\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;\nexport async function render(): Promise {\n return pdfmake.createPdf(definition).getBlob();\n}",
+ "runnable": false,
+ "context": "context"
+ },
+ "00f357feeb8208f907acb6055f2e94ee8e11a624d76686a37f7f0c8940961ede": {
+ "javascript": "async function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}",
+ "typescript": "async function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}",
+ "runnable": false,
+ "context": "context"
+ },
+ "1d57d197ba1871a087dc3afa6f938abe48a525d2e5836d308ccc8b782dd1c245": {
+ "javascript": "const input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}",
+ "typescript": "const input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}",
+ "runnable": false,
+ "context": "context"
+ },
+ "8605913664cfd1c9b6ec865faf0f51c1f30ce11ac09b004cf20a391f4accb89d": {
+ "javascript": "// docs-test: invoice\nconst pdfmake = require('pdfmake');\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = cents => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: invoice\nimport pdfmake from \"pdfmake\";\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = (cents: number) => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });",
+ "runnable": false,
+ "context": "node"
+ },
+ "073d868d99270494d20913dda11bf5bbf1f8acb40c357c1b8bbcfbf1634f7685": {
+ "javascript": "const start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });",
+ "typescript": "const start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });",
+ "runnable": false,
+ "context": "context"
+ },
+ "cbb4696daf880f96b3e679a85a6dadfda7e3eae17ae9cd8975e173f3657475e5": {
+ "javascript": "pdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);",
+ "typescript": "pdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);",
+ "runnable": false,
+ "context": "context"
+ },
+ "1148a28639eac2f55cfc8dcb16b379316167af3f8d9c34dce2086276ebf29c52": {
+ "javascript": "pdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});",
+ "typescript": "pdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});",
+ "runnable": false,
+ "context": "context"
+ },
+ "920d9bfa8dd94220e80b3bcca39eaa5b94c6483cefdf33a926069929cfbe6d03": {
+ "javascript": "const dd = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst dd: TDocumentDefinitions = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "2b1d6de8cd95687cf9655f815059db7c1069b94ada0f7632078ee06fc64dd4f0": {
+ "javascript": "try {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}",
+ "typescript": "try {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}",
+ "runnable": false,
+ "context": "context"
+ },
+ "22253bca23f02369ca1b1b6f9b004d00f04523840a0feebd67f238e1ba93c311": {
+ "javascript": "const pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');",
+ "typescript": "import pdfmake from \"pdfmake\";\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');",
+ "runnable": false,
+ "context": "node"
+ },
+ "d67bee127e0343377be811689c440f3a9838fd9bb5b855a5f4bd3e25466b5cf1": {
+ "javascript": "const data = await pdfMake.createPdf(docDefinition).getBase64();",
+ "typescript": "const data = await pdfMake.createPdf(docDefinition).getBase64();",
+ "runnable": false,
+ "context": "context"
+ },
+ "8007fc15f2463bb6cf8b4514c7b043412c00b7b0556fbcb3ecfb7048703d80fd": {
+ "javascript": "var dd = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "2821edb52bd40ffb269c340fb9e53894677ebf4b5d4b3d423d1bf0092ad16ad0": {
+ "javascript": "const output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});",
+ "typescript": "const output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});",
+ "runnable": false,
+ "context": "context"
+ },
+ "29b271eaa2d949d79e0437b990237d3600158643a5ad80cfdb6b4be764969cf9": {
+ "javascript": "const pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });",
+ "runnable": false,
+ "context": "node"
+ },
+ "eb5c5c18d7e378ff62cd0258ad1ccf8eda9b61c22320e838930ae8f33714e1ce": {
+ "javascript": "// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "27e777d8fd04ce3cd9bb79799bbee485e053e70ca5d12ba0927373e944582af2": {
+ "javascript": "var items = [\n ['Design services', 2, 125],\n ['Document review', 1, 75]\n];\nvar total = items.reduce((sum, row) => sum + row[1] * row[2], 0);\nvar dd = {\n info: { title: 'Invoice INV-001' },\n footer: (page, pages) => ({ text: 'Page ' + page + ' of ' + pages, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 24] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: ['*', 'auto', 'auto'],\n body: [['Service', 'Qty', 'EUR'], ...items.map(row => [row[0], row[1], row[2].toFixed(2)])]\n } },\n { text: 'Total: ' + total.toFixed(2) + ' EUR', bold: true, alignment: 'right', margin: [0, 20, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, color: '#08786b', margin: [0, 0, 0, 12] } }\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar items: Array<[string, number, number]> = [\n ['Design services', 2, 125],\n ['Document review', 1, 75]\n];\nvar total = items.reduce((sum, row) => sum + row[1] * row[2], 0);\nvar dd: TDocumentDefinitions = {\n info: { title: 'Invoice INV-001' },\n footer: (page, pages) => ({ text: 'Page ' + page + ' of ' + pages, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 24] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: ['*', 'auto', 'auto'],\n body: [['Service', 'Qty', 'EUR'], ...items.map(row => [row[0], row[1], row[2].toFixed(2)])]\n } },\n { text: 'Total: ' + total.toFixed(2) + ' EUR', bold: true, alignment: 'right', margin: [0, 20, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, color: '#08786b', margin: [0, 0, 0, 12] } }\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "722e331525dfd5ce42ba6d71544d163403853de1c19109a410b4a767ae5f25f4": {
+ "javascript": "var rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "5c18d9c08af7104376e0c4f4300b3303a424f8e323b558c7eaa78a0b2a90da02": {
+ "javascript": "var dd = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "a55311592ee20fccf53a9a8ca626127c2ae83cb23629e262a6dd7d4491729f1b": {
+ "javascript": "var dd = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "6e47a1c9af9cabcf4d77ca4ce4abc7cc3388e5071d4f71fe099d08fe9ead9efb": {
+ "javascript": "var dd = {\n content: [{ table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A shared heading', colSpan: 3, bold: true, fillColor: '#e4f2eb' }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n } }]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{ table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A shared heading', colSpan: 3, bold: true, fillColor: '#e4f2eb' }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n } }]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "c915ffb788f80c3719d0d58d7c0683fcddb36ecfb5e1481fff9edac24a561ba6": {
+ "javascript": "var dd = {\n pageSize: 'A4', pageMargins: [40, 60, 40, 60],\n header: { text: 'EXAMPLE REPORT', margin: [40, 20, 0, 0], color: '#536771', fontSize: 9 },\n footer: (page, pages) => ({ text: page + ' / ' + pages, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'Chapter one', fontSize: 26, bold: true },\n 'Start on the first page.',\n { text: 'Chapter two', pageBreak: 'before', fontSize: 26, bold: true },\n 'This block begins on a new page.'\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageSize: 'A4', pageMargins: [40, 60, 40, 60],\n header: { text: 'EXAMPLE REPORT', margin: [40, 20, 0, 0], color: '#536771', fontSize: 9 },\n footer: (page, pages) => ({ text: page + ' / ' + pages, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'Chapter one', fontSize: 26, bold: true },\n 'Start on the first page.',\n { text: 'Chapter two', pageBreak: 'before', fontSize: 26, bold: true },\n 'This block begins on a new page.'\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "c6317917178bc24ee6090f5433fb72f2270d9aee761018f291edef36417c551c": {
+ "javascript": "var dd = {\n content: [\n { text: 'Small vectors. Sharp output.', fontSize: 24, bold: true, margin: [0, 0, 0, 20] },\n { svg: '', width: 240 },\n { qr: 'https://pdfmake.github.io/docs/0.3/', fit: 110, margin: [0, 24, 0, 12] },\n 'The QR code encodes a URL; it does not fetch it.'\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Small vectors. Sharp output.', fontSize: 24, bold: true, margin: [0, 0, 0, 20] },\n { svg: '', width: 240 },\n { qr: 'https://pdfmake.github.io/docs/0.3/', fit: 110, margin: [0, 24, 0, 12] },\n 'The QR code encodes a URL; it does not fetch it.'\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "f4e5181d6e2db66602fd449304191efb56f3d495d3ad58566c751c4633165acf": {
+ "javascript": "var dd = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ },
+ "dbb223d3eb605a688b95387f3fb16d1b0544bf6bc83a643edf8598e58ae6d8fe": {
+ "javascript": "var dd = {\n content: [\n { text: 'A clear sequence', fontSize: 26, bold: true },\n { ol: ['Configure fonts', 'Build a fresh definition', 'Await the output'], margin: [0, 16, 0, 20] },\n { ul: ['No manual text positioning', { stack: ['Nested choices', { ul: ['Tables', 'Columns', 'Stacks'] }] }] },\n { text: 'Read the reference', link: 'https://pdfmake.github.io/docs/0.3/', color: '#08786b', margin: [0, 20, 0, 0] }\n ]\n};",
+ "typescript": "import type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'A clear sequence', fontSize: 26, bold: true },\n { ol: ['Configure fonts', 'Build a fresh definition', 'Await the output'], margin: [0, 16, 0, 20] },\n { ul: ['No manual text positioning', { stack: ['Nested choices', { ul: ['Tables', 'Columns', 'Stacks'] }] }] },\n { text: 'Read the reference', link: 'https://pdfmake.github.io/docs/0.3/', color: '#08786b', margin: [0, 20, 0, 0] }\n ]\n};",
+ "runnable": true,
+ "context": "definition"
+ }
+}
diff --git a/data/docs-all.json b/data/docs-all.json
new file mode 100644
index 00000000..aaa1c626
--- /dev/null
+++ b/data/docs-all.json
@@ -0,0 +1,4065 @@
+{
+ "version": "0.3",
+ "pages": [
+ {
+ "id": "de/index",
+ "language": "de",
+ "translationKey": "index",
+ "path": "/docs/0.3/de/",
+ "title": "Übersicht",
+ "description": "PDFs mit pdfmake 0.3 erstellen: verständliche Anleitungen, ausführbare Beispiele und Referenz für JavaScript.",
+ "version": "0.3",
+ "sourceDigest": "40e175e9dccd2d2df54cd76144b2e0ff1cce23630047f5fc7dc35aed51165b7b",
+ "source": "_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/",
+ "uri": "pdfmake://docs/0.3/de/index",
+ "markdown": "# Übersicht\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/\n\nErstelle eine PDF in drei Schritten: Laufzeit einrichten, Inhalt beschreiben und Ausgabe anfordern.\n\n## 1. Laufzeit auswählen\n\n\n\n\nVerwende Node.js 20 oder neuer. Installiere die folgende feste Version, speichere das vollständige Beispiel als `first-pdf.cjs` und starte `node first-pdf.cjs`.\n\n```sh\nnpm install pdfmake@0.3.12\n```\n\n**JavaScript**\n\n```js\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n[Node.js-Schnellstart](/docs/0.3/de/getting-started/server-side/)\n\n\n\n\nIm Browser brauchst du Engine und Schriften in dieser Reihenfolge. Der vollständige Schnellstart enthält einen Download-Button und Fehlerbehandlung.\n\n[Browser-Schnellstart](/docs/0.3/de/getting-started/client-side/)\n\n\n\n## 2. Die Definition verstehen\n\nDie Definition ist ein JavaScript-Objekt, kein HTML. `content` enthält Blöcke in Lesereihenfolge. Dieses Beispiel erzeugt genau die sichtbare PDF. Bearbeite es im Playground und kehre hierher zurück, ohne deinen Arbeitsbereich zu verlieren.\n\n\n\n### Runnable example: 01 · First document\n\n**JavaScript**\n\n```js\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/de/playground/?example=welcome)\n\n\n\n## 3. Mit dem passenden Baustein weitermachen\n\n- [Deine erste PDF](/docs/0.3/de/learn/first-pdf/)\n- [Das Dokumentmodell](/docs/0.3/de/learn/document-model/)\n- [Stile und Formatierung](/docs/0.3/de/document-definition-object/styling/)\n- [Tabellen](/docs/0.3/de/document-definition-object/tables/)\n- [Schriften und Zeichensätze](/docs/0.3/de/fonts/)\n- [Fehler erkennen und behandeln](/docs/0.3/de/guides/errors/)\n\nVerwende bei jeder Generierung eine neue Definition, weil das Layout das Objekt verändert. Ausgabemethoden liefern Promises: Warte mit `await` und behandle Fehler.\n"
+ },
+ {
+ "id": "es/index",
+ "language": "es",
+ "translationKey": "index",
+ "path": "/docs/0.3/es/",
+ "title": "Resumen",
+ "description": "Crea PDF con pdfmake 0.3: guías paso a paso, ejemplos ejecutables y referencia para aplicaciones JavaScript.",
+ "version": "0.3",
+ "sourceDigest": "40e175e9dccd2d2df54cd76144b2e0ff1cce23630047f5fc7dc35aed51165b7b",
+ "source": "_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/",
+ "uri": "pdfmake://docs/0.3/es/index",
+ "markdown": "# Resumen\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/\n\nCrea un PDF en tres pasos: configura el entorno, describe el contenido y solicita una salida.\n\n## 1. Elige el entorno\n\n\n\n\nUsa Node.js 20 o posterior. Instala la versión fija indicada, guarda el ejemplo completo como `first-pdf.cjs` y ejecuta `node first-pdf.cjs`.\n\n```sh\nnpm install pdfmake@0.3.12\n```\n\n**JavaScript**\n\n```js\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n[Inicio rápido con Node.js](/docs/0.3/es/getting-started/server-side/)\n\n\n\n\nEl navegador necesita el motor y después las fuentes. La guía completa incluye un botón de descarga y gestión de errores.\n\n[Inicio rápido en el navegador](/docs/0.3/es/getting-started/client-side/)\n\n\n\n## 2. Entiende la definición\n\nUna definición es un objeto JavaScript, no HTML. `content` enumera bloques en orden de lectura. Este ejemplo genera exactamente el PDF mostrado. Modifícalo en el playground y vuelve aquí sin perder tu espacio de trabajo.\n\n\n\n### Runnable example: 01 · First document\n\n**JavaScript**\n\n```js\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/es/playground/?example=welcome)\n\n\n\n## 3. Elige el siguiente elemento\n\n- [Tu primer PDF](/docs/0.3/es/learn/first-pdf/)\n- [El modelo de documento](/docs/0.3/es/learn/document-model/)\n- [Estilos y formato](/docs/0.3/es/document-definition-object/styling/)\n- [Tablas](/docs/0.3/es/document-definition-object/tables/)\n- [Fuentes y caracteres](/docs/0.3/es/fonts/)\n- [Reconocer y gestionar errores](/docs/0.3/es/guides/errors/)\n\nUsa una definición nueva para cada generación porque la composición modifica el objeto. Las salidas devuelven Promises: espéralas con `await` y gestiona errores.\n"
+ },
+ {
+ "id": "fr/index",
+ "language": "fr",
+ "translationKey": "index",
+ "path": "/docs/0.3/fr/",
+ "title": "Vue d’ensemble",
+ "description": "Créez des PDF avec pdfmake 0.3 : guides progressifs, exemples exécutables et référence pour JavaScript.",
+ "version": "0.3",
+ "sourceDigest": "40e175e9dccd2d2df54cd76144b2e0ff1cce23630047f5fc7dc35aed51165b7b",
+ "source": "_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/",
+ "uri": "pdfmake://docs/0.3/fr/index",
+ "markdown": "# Vue d’ensemble\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/\n\nCréez un PDF en trois étapes : configurez l’environnement, décrivez le contenu, puis demandez une sortie.\n\n## 1. Choisir votre environnement\n\n\n\n\nUtilisez Node.js 20 ou ultérieur. Installez la version fixe ci-dessous, enregistrez cet exemple complet dans `first-pdf.cjs`, puis lancez `node first-pdf.cjs`.\n\n```sh\nnpm install pdfmake@0.3.12\n```\n\n**JavaScript**\n\n```js\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n[Démarrage avec Node.js](/docs/0.3/fr/getting-started/server-side/)\n\n\n\n\nLe navigateur a besoin du moteur puis des polices. Le guide complet inclut un bouton de téléchargement et la gestion des erreurs.\n\n[Démarrage dans le navigateur](/docs/0.3/fr/getting-started/client-side/)\n\n\n\n## 2. Comprendre la définition\n\nUne définition est un objet JavaScript, pas du HTML. `content` énumère les blocs dans l’ordre de lecture. Cet exemple génère exactement le PDF affiché. Modifiez-le dans le playground, puis revenez ici sans perdre votre espace de travail.\n\n\n\n### Runnable example: 01 · First document\n\n**JavaScript**\n\n```js\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/fr/playground/?example=welcome)\n\n\n\n## 3. Choisir le prochain élément\n\n- [Votre premier PDF](/docs/0.3/fr/learn/first-pdf/)\n- [Le modèle de document](/docs/0.3/fr/learn/document-model/)\n- [Styles et mise en forme](/docs/0.3/fr/document-definition-object/styling/)\n- [Tableaux](/docs/0.3/fr/document-definition-object/tables/)\n- [Polices et caractères](/docs/0.3/fr/fonts/)\n- [Comprendre et gérer les erreurs](/docs/0.3/fr/guides/errors/)\n\nUtilisez une définition neuve à chaque génération, car la mise en page modifie l’objet. Les sorties renvoient des Promises : attendez-les avec `await` et gérez les erreurs.\n"
+ },
+ {
+ "id": "index",
+ "language": "en",
+ "translationKey": "index",
+ "path": "/docs/0.3/",
+ "title": "pdfmake documentation",
+ "description": "Generate PDFs with pdfmake 0.3 in Node.js and browsers. Start with tested examples and explore the document reference.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/",
+ "uri": "pdfmake://docs/0.3/index",
+ "markdown": "# pdfmake documentation\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/\n\nBuild a PDF in three steps: configure the runtime, describe the content, then request an output.\n\n## 1. Choose your runtime\n\n\n\n\nUse Node.js 20 or later. Install the pinned version below, save the complete example as `first-pdf.cjs`, then run `node first-pdf.cjs`.\n\n```sh\nnpm install pdfmake@0.3.12\n```\n\n**JavaScript**\n\n```js\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n[Node.js quickstart](/docs/0.3/getting-started/server-side/)\n\n\n\n\nThe browser needs the engine and fonts, loaded in that order. The complete quickstart includes a download button and error handling.\n\n[Browser quickstart](/docs/0.3/getting-started/client-side/)\n\n\n\n## 2. Understand the definition\n\nA definition is a JavaScript object, not HTML. `content` lists blocks in reading order. This example generates exactly the PDF shown. Open it in the playground to edit it, then return here without losing your workspace.\n\n\n\n### Runnable example: 01 · First document\n\n**JavaScript**\n\n```js\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/playground/?example=welcome)\n\n\n\n## 3. Continue with the right building block\n\n- [Your first PDF](/docs/0.3/learn/first-pdf/)\n- [The document model](/docs/0.3/learn/document-model/)\n- [Styling](/docs/0.3/document-definition-object/styling/)\n- [Tables](/docs/0.3/document-definition-object/tables/)\n- [Fonts and character coverage](/docs/0.3/fonts/)\n- [Errors and diagnostics](/docs/0.3/guides/errors/)\n\nUse a fresh definition for every generation; layout mutates the object. Output methods return Promises: await them and handle failures.\n"
+ },
+ {
+ "id": "pt-br/index",
+ "language": "pt-br",
+ "translationKey": "index",
+ "path": "/docs/0.3/pt-br/",
+ "title": "Visão geral",
+ "description": "Crie PDFs com pdfmake 0.3: guias passo a passo, exemplos executáveis e referência para aplicações JavaScript.",
+ "version": "0.3",
+ "sourceDigest": "40e175e9dccd2d2df54cd76144b2e0ff1cce23630047f5fc7dc35aed51165b7b",
+ "source": "_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/",
+ "uri": "pdfmake://docs/0.3/pt-br/index",
+ "markdown": "# Visão geral\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/\n\nCrie um PDF em três passos: configure o ambiente, descreva o conteúdo e solicite uma saída.\n\n## 1. Escolha o ambiente\n\n\n\n\nUse Node.js 20 ou superior. Instale a versão fixa abaixo, salve o exemplo completo como `first-pdf.cjs` e execute `node first-pdf.cjs`.\n\n```sh\nnpm install pdfmake@0.3.12\n```\n\n**JavaScript**\n\n```js\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n[Início rápido com Node.js](/docs/0.3/pt-br/getting-started/server-side/)\n\n\n\n\nO navegador precisa do motor e depois das fontes. O guia completo inclui um botão de download e tratamento de erros.\n\n[Início rápido no navegador](/docs/0.3/pt-br/getting-started/client-side/)\n\n\n\n## 2. Entenda a definição\n\nUma definição é um objeto JavaScript, não HTML. `content` lista os blocos na ordem de leitura. Este exemplo gera exatamente o PDF exibido. Edite-o no playground e volte aqui sem perder seu espaço de trabalho.\n\n\n\n### Runnable example: 01 · First document\n\n**JavaScript**\n\n```js\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/pt-br/playground/?example=welcome)\n\n\n\n## 3. Escolha o próximo elemento\n\n- [Seu primeiro PDF](/docs/0.3/pt-br/learn/first-pdf/)\n- [O modelo de documento](/docs/0.3/pt-br/learn/document-model/)\n- [Estilos e formatação](/docs/0.3/pt-br/document-definition-object/styling/)\n- [Tabelas](/docs/0.3/pt-br/document-definition-object/tables/)\n- [Fontes e caracteres](/docs/0.3/pt-br/fonts/)\n- [Reconhecer e tratar erros](/docs/0.3/pt-br/guides/errors/)\n\nCrie uma definição nova a cada geração, pois a composição modifica o objeto. As saídas retornam Promises: aguarde com `await` e trate falhas.\n"
+ },
+ {
+ "id": "de/document-definition-object",
+ "language": "de",
+ "translationKey": "document-definition-object",
+ "path": "/docs/0.3/de/document-definition-object/",
+ "title": "Referenz zur Dokumentdefinition",
+ "description": "Beschreibe PDF-Inhalt, Stile, Seiten und Metadaten mit dem deklarativen Dokumentdefinitionsobjekt von pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "4ba6505e4e79830c1a75f138d92099725eb693602811b878dcbb870190e10ec7",
+ "source": "document-definition-object/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object",
+ "markdown": "# Referenz zur Dokumentdefinition\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/\n\n## Aufbau einer Definition\n\n**JavaScript**\n\n```js\nconst docDefinition = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst docDefinition: TDocumentDefinitions = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};\n```\n\nÜbergib die Definition nach der Schriftkonfiguration an die `createPdf`-Methode deiner Laufzeit. Alle numerischen Maße werden in **Punkten** angegeben (72 Punkte pro Zoll). Die Reihenfolge der Seitenränder ist **links, oben, rechts, unten**. Ein `content`-Array bildet einen vertikalen Stapel. Erzeuge für jeden Renderdurchlauf ein neues Objekt; beim Layout werden interne Messwerte und Positionen hinzugefügt.\n\n## Inhaltsknoten\n\n| Knoten | Zweck | Referenz |\n| --- | --- | --- |\n| `{ text: '...' }` | Absatz oder Inline-Textsegmente | [Stile](/docs/0.3/de/document-definition-object/styling/) |\n| `{ stack: [...] }` | Blöcke gruppieren und einen gemeinsamen Stil anwenden | [Stapel](/docs/0.3/de/document-definition-object/stack/) |\n| `{ columns: [...] }` | Inhalte nebeneinander anordnen | [Spalten](/docs/0.3/de/document-definition-object/columns/) |\n| `{ table: { body: [...] } }` | Zeilen, Zellen und wiederholte Kopfzeilen | [Tabellen](/docs/0.3/de/document-definition-object/tables/) |\n| `{ ul: [...] }`, `{ ol: [...] }` | Aufzählungs- und nummerierte Listen | [Listen](/docs/0.3/de/document-definition-object/lists/) |\n| `{ image: 'key' }` | PNG oder JPEG | [Bilder](/docs/0.3/de/document-definition-object/images/) |\n| `{ svg: '' }` | SVG-Vektorgrafik | [SVGs](/docs/0.3/de/document-definition-object/svgs/) |\n| `{ qr: '...' }` | QR-Code | [QR-Code](/docs/0.3/de/document-definition-object/qr/) |\n\n## Dokumentweite Einstellungen\n\n- [Seitengröße, Ausrichtung und Umbrüche](/docs/0.3/de/document-definition-object/page/), [Ränder](/docs/0.3/de/document-definition-object/margins/) und [Abschnitte](/docs/0.3/de/document-definition-object/sections/).\n- [Kopf- und Fußzeilen](/docs/0.3/de/document-definition-object/headers-footers/), [Hintergründe](/docs/0.3/de/document-definition-object/background-layer/) und [Wasserzeichen](/docs/0.3/de/document-definition-object/watermark/).\n- [Metadaten](/docs/0.3/de/document-definition-object/document-medatadata/), [Links](/docs/0.3/de/document-definition-object/links/), [Inhaltsverzeichnis](/docs/0.3/de/document-definition-object/toc/) und [Gliederungen](/docs/0.3/de/document-definition-object/outlines/).\n- [Anhänge](/docs/0.3/de/document-definition-object/attachments/), [Verschlüsselung](/docs/0.3/de/document-definition-object/security/), [PDF/A](/docs/0.3/de/document-definition-object/pdfa/) und [Komprimierung](/docs/0.3/de/document-definition-object/compression/).\n\n## Definition und Rendering-Optionen\n\nInhalt und visuelle Einstellungen gehören in die Definition. `fontLayoutCache` und `bufferPages` gehören in das zweite Argument von `createPdf`. Schriften, Tabellenlayoutregistrierungen und Ressourcenrichtlinien werden über die pdfmake-API festgelegt. Siehe [API-Übersicht](/docs/0.3/de/guides/api-reference/).\n"
+ },
+ {
+ "id": "es/document-definition-object",
+ "language": "es",
+ "translationKey": "document-definition-object",
+ "path": "/docs/0.3/es/document-definition-object/",
+ "title": "Referencia de la definición del documento",
+ "description": "Describe el contenido PDF, los estilos, las páginas y los metadatos con el objeto declarativo de definición de documento de pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "4ba6505e4e79830c1a75f138d92099725eb693602811b878dcbb870190e10ec7",
+ "source": "document-definition-object/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object",
+ "markdown": "# Referencia de la definición del documento\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/\n\n## Estructura de una definición\n\n**JavaScript**\n\n```js\nconst docDefinition = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst docDefinition: TDocumentDefinitions = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};\n```\n\nPasa la definición al método `createPdf` del entorno de ejecución después de configurar las fuentes. Todas las dimensiones numéricas usan **puntos** (72 puntos por pulgada). Los márgenes siguen el orden **izquierda, arriba, derecha, abajo**. La matriz `content` forma una pila vertical. Crea un objeto nuevo para cada renderizado; el proceso de maquetación añade medidas y posiciones internas.\n\n## Nodos de contenido\n\n| Nodo | Propósito | Referencia |\n| --- | --- | --- |\n| `{ text: '...' }` | Párrafo o segmentos en línea | [Estilos](/docs/0.3/es/document-definition-object/styling/) |\n| `{ stack: [...] }` | Agrupa bloques y aplica un estilo compartido | [Pilas](/docs/0.3/es/document-definition-object/stack/) |\n| `{ columns: [...] }` | Contenido en paralelo | [Columnas](/docs/0.3/es/document-definition-object/columns/) |\n| `{ table: { body: [...] } }` | Filas, celdas y encabezados repetidos | [Tablas](/docs/0.3/es/document-definition-object/tables/) |\n| `{ ul: [...] }`, `{ ol: [...] }` | Listas con viñetas y numeradas | [Listas](/docs/0.3/es/document-definition-object/lists/) |\n| `{ image: 'key' }` | PNG o JPEG | [Imágenes](/docs/0.3/es/document-definition-object/images/) |\n| `{ svg: '' }` | Contenido vectorial SVG | [SVG](/docs/0.3/es/document-definition-object/svgs/) |\n| `{ qr: '...' }` | Código QR | [QR](/docs/0.3/es/document-definition-object/qr/) |\n\n## Configuración del documento\n\n- [Tamaño, orientación y saltos de página](/docs/0.3/es/document-definition-object/page/), [márgenes](/docs/0.3/es/document-definition-object/margins/) y [secciones](/docs/0.3/es/document-definition-object/sections/).\n- [Encabezados y pies de página](/docs/0.3/es/document-definition-object/headers-footers/), [fondos](/docs/0.3/es/document-definition-object/background-layer/) y [marcas de agua](/docs/0.3/es/document-definition-object/watermark/).\n- [Metadatos](/docs/0.3/es/document-definition-object/document-medatadata/), [enlaces](/docs/0.3/es/document-definition-object/links/), [índices](/docs/0.3/es/document-definition-object/toc/) y [esquemas](/docs/0.3/es/document-definition-object/outlines/).\n- [Archivos adjuntos](/docs/0.3/es/document-definition-object/attachments/), [cifrado](/docs/0.3/es/document-definition-object/security/), [PDF/A](/docs/0.3/es/document-definition-object/pdfa/) y [compresión](/docs/0.3/es/document-definition-object/compression/).\n\n## Definición y opciones de renderizado\n\nEl contenido y la configuración visual pertenecen a la definición. `fontLayoutCache` y `bufferPages` pertenecen al segundo argumento de `createPdf`. Las fuentes, los registros de distribuciones de tablas y las políticas de recursos se configuran en la API de pdfmake. Consulta la [referencia de la API](/docs/0.3/es/guides/api-reference/).\n"
+ },
+ {
+ "id": "fr/document-definition-object",
+ "language": "fr",
+ "translationKey": "document-definition-object",
+ "path": "/docs/0.3/fr/document-definition-object/",
+ "title": "Référence de la définition de document",
+ "description": "Décrivez le contenu, les styles, les pages et les métadonnées PDF avec l’objet déclaratif de définition de document pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "4ba6505e4e79830c1a75f138d92099725eb693602811b878dcbb870190e10ec7",
+ "source": "document-definition-object/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object",
+ "markdown": "# Référence de la définition de document\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/\n\n## Structure d’une définition\n\n**JavaScript**\n\n```js\nconst docDefinition = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst docDefinition: TDocumentDefinitions = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};\n```\n\nTransmettez la définition à la méthode `createPdf` de votre environnement après avoir configuré les polices. Toutes les dimensions numériques sont exprimées en **points** (72 points par pouce). Les marges suivent l’ordre **gauche, haut, droite, bas**. Le tableau `content` forme une pile verticale. Créez un nouvel objet pour chaque rendu : le processus de mise en page y ajoute des mesures internes et des positions.\n\n## Nœuds de contenu\n\n| Nœud | Rôle | Référence |\n| --- | --- | --- |\n| `{ text: '...' }` | Paragraphe ou séquences de texte en ligne | [Styles](/docs/0.3/fr/document-definition-object/styling/) |\n| `{ stack: [...] }` | Regroupe des blocs et leur applique un style commun | [Piles](/docs/0.3/fr/document-definition-object/stack/) |\n| `{ columns: [...] }` | Contenu côte à côte | [Colonnes](/docs/0.3/fr/document-definition-object/columns/) |\n| `{ table: { body: [...] } }` | Lignes, cellules et en-têtes répétés | [Tableaux](/docs/0.3/fr/document-definition-object/tables/) |\n| `{ ul: [...] }`, `{ ol: [...] }` | Listes à puces ou numérotées | [Listes](/docs/0.3/fr/document-definition-object/lists/) |\n| `{ image: 'key' }` | PNG ou JPEG | [Images](/docs/0.3/fr/document-definition-object/images/) |\n| `{ svg: '' }` | Contenu vectoriel SVG | [SVG](/docs/0.3/fr/document-definition-object/svgs/) |\n| `{ qr: '...' }` | Code QR | [QR](/docs/0.3/fr/document-definition-object/qr/) |\n\n## Paramètres du document\n\n- [Format, orientation et sauts de page](/docs/0.3/fr/document-definition-object/page/), [marges](/docs/0.3/fr/document-definition-object/margins/) et [sections](/docs/0.3/fr/document-definition-object/sections/).\n- [En-têtes et pieds de page](/docs/0.3/fr/document-definition-object/headers-footers/), [arrière-plans](/docs/0.3/fr/document-definition-object/background-layer/) et [filigranes](/docs/0.3/fr/document-definition-object/watermark/).\n- [Métadonnées](/docs/0.3/fr/document-definition-object/document-medatadata/), [liens](/docs/0.3/fr/document-definition-object/links/), [table des matières](/docs/0.3/fr/document-definition-object/toc/) et [plans](/docs/0.3/fr/document-definition-object/outlines/).\n- [Pièces jointes](/docs/0.3/fr/document-definition-object/attachments/), [chiffrement](/docs/0.3/fr/document-definition-object/security/), [PDF/A](/docs/0.3/fr/document-definition-object/pdfa/) et [compression](/docs/0.3/fr/document-definition-object/compression/).\n\n## Définition et options de rendu\n\nLe contenu et les paramètres visuels appartiennent à la définition. `fontLayoutCache` et `bufferPages` se placent dans le deuxième argument de `createPdf`. Les polices, les mises en page de tableau et les politiques de ressources se configurent sur l’API pdfmake. Consultez la [référence de l’API](/docs/0.3/fr/guides/api-reference/).\n"
+ },
+ {
+ "id": "document-definition-object",
+ "language": "en",
+ "translationKey": "document-definition-object",
+ "path": "/docs/0.3/document-definition-object/",
+ "title": "Document definition reference",
+ "description": "Describe PDF content, styles, pages and metadata with the declarative pdfmake 0.3 document definition object.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/",
+ "uri": "pdfmake://docs/0.3/document-definition-object",
+ "markdown": "# Document definition reference\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/\n\n## Shape of a definition\n\n**JavaScript**\n\n```js\nconst docDefinition = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst docDefinition: TDocumentDefinitions = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};\n```\n\nPass the definition to your runtime's `createPdf` method after configuring fonts. All numeric dimensions use **points** (72 points per inch). Margins use the order **left, top, right, bottom**. A content array is a vertical stack. Create a fresh object for each render; the layout process adds internal measurements and positions.\n\n## Content nodes\n\n| Node | Purpose | Reference |\n| --- | --- | --- |\n| `{ text: '...' }` | Paragraph or inline runs | [Styling](/docs/0.3/document-definition-object/styling/) |\n| `{ stack: [...] }` | Group blocks and apply a shared style | [Stacks](/docs/0.3/document-definition-object/stack/) |\n| `{ columns: [...] }` | Side-by-side content | [Columns](/docs/0.3/document-definition-object/columns/) |\n| `{ table: { body: [...] } }` | Rows, cells and repeating headers | [Tables](/docs/0.3/document-definition-object/tables/) |\n| `{ ul: [...] }`, `{ ol: [...] }` | Bullet and numbered lists | [Lists](/docs/0.3/document-definition-object/lists/) |\n| `{ image: 'key' }` | PNG or JPEG | [Images](/docs/0.3/document-definition-object/images/) |\n| `{ svg: '' }` | SVG vector content | [SVGs](/docs/0.3/document-definition-object/svgs/) |\n| `{ qr: '...' }` | QR code | [QR](/docs/0.3/document-definition-object/qr/) |\n\n## Document-level settings\n\n- [Page size, orientation and breaks](/docs/0.3/document-definition-object/page/), [margins](/docs/0.3/document-definition-object/margins/) and [sections](/docs/0.3/document-definition-object/sections/).\n- [Headers and footers](/docs/0.3/document-definition-object/headers-footers/), [backgrounds](/docs/0.3/document-definition-object/background-layer/) and [watermarks](/docs/0.3/document-definition-object/watermark/).\n- [Metadata](/docs/0.3/document-definition-object/document-medatadata/), [links](/docs/0.3/document-definition-object/links/), [table of contents](/docs/0.3/document-definition-object/toc/) and [outlines](/docs/0.3/document-definition-object/outlines/).\n- [Attachments](/docs/0.3/document-definition-object/attachments/), [encryption](/docs/0.3/document-definition-object/security/), [PDF/A](/docs/0.3/document-definition-object/pdfa/) and [compression](/docs/0.3/document-definition-object/compression/).\n\n## Definition versus rendering options\n\nContent and visual settings belong in the definition. `fontLayoutCache` and `bufferPages` belong in the second `createPdf` argument. Fonts, table layout registrations and resource policies belong on the pdfmake API. See [API reference](/docs/0.3/guides/api-reference/).\n"
+ },
+ {
+ "id": "pt-br/document-definition-object",
+ "language": "pt-br",
+ "translationKey": "document-definition-object",
+ "path": "/docs/0.3/pt-br/document-definition-object/",
+ "title": "Referência da definição do documento",
+ "description": "Descreva conteúdo PDF, estilos, páginas e metadados com o objeto declarativo de definição de documento do pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "4ba6505e4e79830c1a75f138d92099725eb693602811b878dcbb870190e10ec7",
+ "source": "document-definition-object/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object",
+ "markdown": "# Referência da definição do documento\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/\n\n## Estrutura de uma definição\n\n**JavaScript**\n\n```js\nconst docDefinition = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst docDefinition: TDocumentDefinitions = {\n pageSize: 'A4',\n pageOrientation: 'portrait',\n pageMargins: [40, 50, 40, 50],\n defaultStyle: { fontSize: 12 },\n styles: { heading: { fontSize: 20, bold: true } },\n info: { title: 'Example document', author: 'Example author' },\n content: [\n { text: 'Document heading', style: 'heading' },\n 'A plain string becomes a paragraph.',\n { ul: ['First item', 'Second item'] }\n ]\n};\n```\n\nDepois de configurar as fontes, passe a definição ao método `createPdf` do seu ambiente. Todas as dimensões numéricas usam **pontos** (72 pontos por polegada). As margens seguem a ordem **esquerda, superior, direita, inferior**. O array `content` forma uma pilha vertical. Crie um objeto novo para cada renderização; o processo de layout adiciona medidas e posições internas.\n\n## Nós de conteúdo\n\n| Nó | Finalidade | Referência |\n| --- | --- | --- |\n| `{ text: '...' }` | Parágrafo ou segmentos de texto em linha | [Estilos](/docs/0.3/pt-br/document-definition-object/styling/) |\n| `{ stack: [...] }` | Agrupar blocos e aplicar um estilo compartilhado | [Pilhas](/docs/0.3/pt-br/document-definition-object/stack/) |\n| `{ columns: [...] }` | Conteúdo lado a lado | [Colunas](/docs/0.3/pt-br/document-definition-object/columns/) |\n| `{ table: { body: [...] } }` | Linhas, células e cabeçalhos repetidos | [Tabelas](/docs/0.3/pt-br/document-definition-object/tables/) |\n| `{ ul: [...] }`, `{ ol: [...] }` | Listas com marcadores e numeradas | [Listas](/docs/0.3/pt-br/document-definition-object/lists/) |\n| `{ image: 'key' }` | PNG ou JPEG | [Imagens](/docs/0.3/pt-br/document-definition-object/images/) |\n| `{ svg: '' }` | Conteúdo vetorial SVG | [SVGs](/docs/0.3/pt-br/document-definition-object/svgs/) |\n| `{ qr: '...' }` | Código QR | [QR](/docs/0.3/pt-br/document-definition-object/qr/) |\n\n## Configurações do documento\n\n- [Tamanho, orientação e quebras de página](/docs/0.3/pt-br/document-definition-object/page/), [margens](/docs/0.3/pt-br/document-definition-object/margins/) e [seções](/docs/0.3/pt-br/document-definition-object/sections/).\n- [Cabeçalhos e rodapés](/docs/0.3/pt-br/document-definition-object/headers-footers/), [planos de fundo](/docs/0.3/pt-br/document-definition-object/background-layer/) e [marcas-d'água](/docs/0.3/pt-br/document-definition-object/watermark/).\n- [Metadados](/docs/0.3/pt-br/document-definition-object/document-medatadata/), [links](/docs/0.3/pt-br/document-definition-object/links/), [sumário](/docs/0.3/pt-br/document-definition-object/toc/) e [contornos](/docs/0.3/pt-br/document-definition-object/outlines/).\n- [Anexos](/docs/0.3/pt-br/document-definition-object/attachments/), [criptografia](/docs/0.3/pt-br/document-definition-object/security/), [PDF/A](/docs/0.3/pt-br/document-definition-object/pdfa/) e [compactação](/docs/0.3/pt-br/document-definition-object/compression/).\n\n## Definição e opções de renderização\n\nO conteúdo e as configurações visuais pertencem à definição. `fontLayoutCache` e `bufferPages` pertencem ao segundo argumento de `createPdf`. Fontes, registros de layout de tabela e políticas de recursos pertencem à API do pdfmake. Consulte a [referência da API](/docs/0.3/pt-br/guides/api-reference/).\n"
+ },
+ {
+ "id": "de/document-definition-object/attachments",
+ "language": "de",
+ "translationKey": "document-definition-object/attachments",
+ "path": "/docs/0.3/de/document-definition-object/attachments/",
+ "title": "Dateianhänge einbetten",
+ "description": "Füge mit pdfmake 0.3 Dateien als PDF-Anmerkungen oder eingebettete Dateianhänge ein.",
+ "version": "0.3",
+ "sourceDigest": "fa2ac7caf1087dd025de26934674d3e7f4d0c75f51fbfb900170400b914fb224",
+ "source": "document-definition-object/attachments.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/attachments/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/attachments",
+ "markdown": "# Dateianhänge einbetten\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/attachments/\n\npdfmake unterstützt sowohl Dateianhänge als Anmerkungen als auch eingebettete Dateien. Eingebettete Dateien werden dem Wörterbuch `files` hinzugefügt und erscheinen in den Anhangbereichen unterstützter PDF-Viewer.\n\nDateianhänge sind Anmerkungen, die auf eine Datei verweisen.\n\nJeder Anhang und jede eingebettete Datei muss mindestens `src` angeben. Es wird dringend empfohlen, über `name` einen Dateinamen anzugeben.\n\nDer `src` eines Anhangs kann als Data-URL angegeben werden (wie beim folgenden Anhang von http://www.clipartbest.com/clipart-dT7zx5rT9); lokale Dateien sind ebenfalls möglich.\n\n**JavaScript**\n\n```js\nvar dd = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};\n```\n"
+ },
+ {
+ "id": "es/document-definition-object/attachments",
+ "language": "es",
+ "translationKey": "document-definition-object/attachments",
+ "path": "/docs/0.3/es/document-definition-object/attachments/",
+ "title": "Incrustación de archivos adjuntos",
+ "description": "Configura la incrustación de archivos adjuntos en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "fa2ac7caf1087dd025de26934674d3e7f4d0c75f51fbfb900170400b914fb224",
+ "source": "document-definition-object/attachments.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/attachments/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/attachments",
+ "markdown": "# Incrustación de archivos adjuntos\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/attachments/\n\npdfmake permite adjuntar archivos como anotaciones y como archivos incrustados. Los archivos incrustados se añaden al diccionario `files` y aparecen en los paneles de archivos adjuntos de los visores PDF compatibles. Los adjuntos de archivo son anotaciones que enlazan a un archivo. Todo archivo adjunto o incrustado debe proporcionar al menos un `src`; se recomienda encarecidamente indicar el nombre mediante `name`. El `src` de cualquier adjunto puede estar en formato data URL (como el siguiente adjunto, tomado de http://www.clipartbest.com/clipart-dT7zx5rT9), aunque también se permiten archivos locales.\n\n**JavaScript**\n\n```js\nvar dd = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};\n```\n"
+ },
+ {
+ "id": "fr/document-definition-object/attachments",
+ "language": "fr",
+ "translationKey": "document-definition-object/attachments",
+ "path": "/docs/0.3/fr/document-definition-object/attachments/",
+ "title": "Intégration des pièces jointes",
+ "description": "Configurez les pièces jointes dans pdfmake 0.3 à l’aide d’exemples, d’options et de notes d’utilisation.",
+ "version": "0.3",
+ "sourceDigest": "fa2ac7caf1087dd025de26934674d3e7f4d0c75f51fbfb900170400b914fb224",
+ "source": "document-definition-object/attachments.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/attachments/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/attachments",
+ "markdown": "# Intégration des pièces jointes\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/attachments/\n\npdfmake permet de joindre des fichiers sous forme d’annotations ou de fichiers incorporés.\nLes fichiers incorporés sont ajoutés au dictionnaire « files » et apparaissent dans le panneau des pièces jointes des lecteurs PDF compatibles.\nLes pièces jointes sont des annotations qui renvoient vers un fichier.\nToute pièce jointe ou tout fichier incorporé doit fournir au minimum un « src » ; il est vivement recommandé d’indiquer un nom de fichier avec « name ».\nLe « src » d’une pièce jointe peut être fourni au format dataURL (comme la pièce jointe suivante, provenant de http://www.clipartbest.com/clipart-dT7zx5rT9), mais les fichiers locaux sont également autorisés.\n\n**JavaScript**\n\n```js\nvar dd = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};\n```\n\nsourceDigest = \"fa2ac7caf1087dd025de26934674d3e7f4d0c75f51fbfb900170400b914fb224\"\n"
+ },
+ {
+ "id": "document-definition-object/attachments",
+ "language": "en",
+ "translationKey": "document-definition-object/attachments",
+ "path": "/docs/0.3/document-definition-object/attachments/",
+ "title": "Attachments embedding",
+ "description": "Configure attachments embedding in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/attachments.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/attachments/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/attachments",
+ "markdown": "# Attachments embedding\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/attachments/\n\npdfmake supports attaching files as annotations as well as embedded files.\nEmbedded files are added in the \"files\" dictionary and will show up in supported pdf viewers in their respective attachment panels.\nFile attachments are annotations which link to a file.\nAny attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.\nThe \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.\n\n**JavaScript**\n\n```js\nvar dd = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};\n```\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/attachments",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/attachments",
+ "path": "/docs/0.3/pt-br/document-definition-object/attachments/",
+ "title": "Anexos incorporados",
+ "description": "Adicione arquivos como anotações ou arquivos incorporados em documentos PDF do pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "fa2ac7caf1087dd025de26934674d3e7f4d0c75f51fbfb900170400b914fb224",
+ "source": "document-definition-object/attachments.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/attachments/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/attachments",
+ "markdown": "# Anexos incorporados\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/attachments/\n\nO pdfmake oferece suporte a anexar arquivos como anotações e como arquivos incorporados. Arquivos incorporados são adicionados ao dicionário `files` e aparecem nos painéis de anexos dos visualizadores de PDF compatíveis. Anexos de arquivo são anotações que apontam para um arquivo.\n\nTodo anexo ou arquivo incorporado precisa fornecer pelo menos `src`; recomenda-se fortemente fornecer um nome de arquivo em `name`. O `src` pode estar no formato dataURL (como no anexo a seguir, obtido em http://www.clipartbest.com/clipart-dT7zx5rT9), mas arquivos locais também são permitidos.\n\n**JavaScript**\n\n```js\nvar dd = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t'Any attachment or embedded file must provide at least a \"src\", providing a filename through \"name\" is highly recommended.',\n\t\t'The \"src\" of any attachment can be provided in dataURL format (like the following attachment, taken from http://www.clipartbest.com/clipart-dT7zx5rT9), but local files are allowed as well.',\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'testImage.png'\n\t\t\t}\n\t\t},\n\t\t'You can also define an attachment in the \"attachments\" dictionary and reference it by name.',\n\t\t{\n\t\t\tattachment: 'sampleImage'\n\t\t},\n\t\t'And there are three different standard icons for attachments, \"GraphPush\", \"Paperclip\", and \"Push\" (the default value). Set them with the \"icon\" option.',\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'GraphPush'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Paperclip'\n\t\t},\n\t\t{\n\t\t\tattachment: 'sampleImage',\n\t\t\ticon: 'Push'\n\t\t},\n\t\t'For better customization, add an image and attach a file to it with linkToFile:',\n\t\t{\n\t\t\timage: 'fonts/sampleImage.jpg',\n\t\t\twidth: 150,\n\t\t\tlinkToFile: 'sampleImage'\n\t\t},\n\t\t\"You can add a description, which will show in your pdf viewer's attachments panel and as a tooltip when hovering over the attachment.\",\n\t\t{\n\t\t\tattachment: {\n\t\t\t\tsrc: 'data:image/png;base64,iVBOR....',\n\t\t\t\tname: 'withDescription.png',\n\t\t\t\tdescription: 'file description'\n\t\t\t}\n\t\t},\n\t\t'You can also define the \"src\" of an attachment or embedded file in the \"attachments\" and \"files\" dictionary via URL address.',\n\t],\n\tattachments: {\n\t\tsampleImage: {\n\t\t\tsrc: 'fonts/sampleImage.jpg',\n\t\t\tname: 'sampleImage.png'\n\t\t}\n\t},\n\tfiles: {\n\t\tREADME: {\n\t\t\tsrc: 'https://raw.githubusercontent.com/bpampuch/pdfmake/master/README.md',\n\t\t\tname: 'pdfmake README.md'\n\t\t}\n\t}\n};\n```\n"
+ },
+ {
+ "id": "de/document-definition-object/background-layer",
+ "language": "de",
+ "translationKey": "document-definition-object/background-layer",
+ "path": "/docs/0.3/de/document-definition-object/background-layer/",
+ "title": "Hintergrundebene",
+ "description": "Lege mit Beispielen, Optionen und Anwendungshinweisen die Hintergrundebene in pdfmake 0.3 fest.",
+ "version": "0.3",
+ "sourceDigest": "5c5dac8a66e0c2a715ca9e59b03966f51840300097a5d71e3ae1d62e553f883a",
+ "source": "document-definition-object/background-layer.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/background-layer/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/background-layer",
+ "markdown": "# Hintergrundebene\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/background-layer/\n\nDie Hintergrundebene wird auf jeder Seite eingefügt.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n background: 'simple text',\n\n content: ['Example document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: 'simple text',\n\n content: ['Example document content']\n};\n```\n\nSie kann auch jedes andere Objekt enthalten (Bilder, Tabellen usw.) oder dynamisch erzeugt werden:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};\n```\n"
+ },
+ {
+ "id": "es/document-definition-object/background-layer",
+ "language": "es",
+ "translationKey": "document-definition-object/background-layer",
+ "path": "/docs/0.3/es/document-definition-object/background-layer/",
+ "title": "Capa de fondo",
+ "description": "Configura la capa de fondo en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "5c5dac8a66e0c2a715ca9e59b03966f51840300097a5d71e3ae1d62e553f883a",
+ "source": "document-definition-object/background-layer.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/background-layer/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/background-layer",
+ "markdown": "# Capa de fondo\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/background-layer/\n\nLa capa de fondo se añade a todas las páginas.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n background: 'simple text',\n\n content: ['Example document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: 'simple text',\n\n content: ['Example document content']\n};\n```\n\nTambién puede contener cualquier otro objeto (imágenes, tablas, etc.) o generarse dinámicamente:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};\n```\n"
+ },
+ {
+ "id": "fr/document-definition-object/background-layer",
+ "language": "fr",
+ "translationKey": "document-definition-object/background-layer",
+ "path": "/docs/0.3/fr/document-definition-object/background-layer/",
+ "title": "Arrière-plan",
+ "description": "Ajoutez un arrière-plan à chaque page à l’aide d’un texte, d’un objet ou d’une fonction.",
+ "version": "0.3",
+ "sourceDigest": "5c5dac8a66e0c2a715ca9e59b03966f51840300097a5d71e3ae1d62e553f883a",
+ "source": "document-definition-object/background-layer.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/background-layer/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/background-layer",
+ "markdown": "# Arrière-plan\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/background-layer/\n\nL’arrière-plan est ajouté à chaque page.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n background: 'simple text',\n\n content: ['Example document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: 'simple text',\n\n content: ['Example document content']\n};\n```\n\nIl peut également contenir n’importe quel autre objet (images, tableaux, etc.) ou être généré dynamiquement :\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};\n```\n"
+ },
+ {
+ "id": "document-definition-object/background-layer",
+ "language": "en",
+ "translationKey": "document-definition-object/background-layer",
+ "path": "/docs/0.3/document-definition-object/background-layer/",
+ "title": "Background-layer",
+ "description": "Configure background-layer in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/background-layer.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/background-layer/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/background-layer",
+ "markdown": "# Background-layer\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/background-layer/\n\nThe background-layer will be added on every page.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n background: 'simple text',\n\n content: ['Example document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: 'simple text',\n\n content: ['Example document content']\n};\n```\n\nIt may contain any other object as well (images, tables, ...) or be dynamically generated:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};\n```\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/background-layer",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/background-layer",
+ "path": "/docs/0.3/pt-br/document-definition-object/background-layer/",
+ "title": "Plano de fundo",
+ "description": "Defina um plano de fundo estático ou dinâmico aplicado a todas as páginas do documento pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "5c5dac8a66e0c2a715ca9e59b03966f51840300097a5d71e3ae1d62e553f883a",
+ "source": "document-definition-object/background-layer.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/background-layer/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/background-layer",
+ "markdown": "# Plano de fundo\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/background-layer/\n\nO plano de fundo é adicionado a todas as páginas.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n background: 'simple text',\n\n content: ['Example document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: 'simple text',\n\n content: ['Example document content']\n};\n```\n\nEle também pode conter qualquer outro objeto, como imagens e tabelas, ou ser gerado dinamicamente:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n background: function(currentPage, pageSize) {\n return `page ${currentPage} with size ${pageSize.width} x ${pageSize.height}`\n },\n\n content: ['Example document content']\n};\n```\n"
+ },
+ {
+ "id": "de/document-definition-object/columns",
+ "language": "de",
+ "translationKey": "document-definition-object/columns",
+ "path": "/docs/0.3/de/document-definition-object/columns/",
+ "title": "Spalten",
+ "description": "Lege mit Beispielen, Optionen und Anwendungshinweisen Spalten in pdfmake 0.3 fest.",
+ "version": "0.3",
+ "sourceDigest": "c5cad4de1cdcd5bc45a17a7f4bc373478b5f7e877859ca80db4facadca0459da",
+ "source": "document-definition-object/columns.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/columns/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/columns",
+ "markdown": "# Spalten\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/columns/\n\nAbsätze werden standardmäßig als vertikaler Stapel von Elementen ausgegeben. Du kannst den verfügbaren Platz jedoch auch in Spalten aufteilen.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};\n```\n\nDer Inhalt einer Spalte ist nicht auf einfachen Text beschränkt. Er kann jedes gültige pdfmake-Element enthalten. Sieh dir dazu das Beispiel COLUMNS im [Playground](/docs/0.3/de/playground/) an.\n\n## Eigenschaften\n\n* `columnGap: number` legt den Abstand zwischen Spalten fest.\n* `snakingColumns: boolean` aktiviert Spalten im Zeitungsstil. Siehe [diesen Artikel](/docs/0.3/de/document-definition-object/snaking-columns/) _(Mindestversion: 0.3.5)_\n"
+ },
+ {
+ "id": "es/document-definition-object/columns",
+ "language": "es",
+ "translationKey": "document-definition-object/columns",
+ "path": "/docs/0.3/es/document-definition-object/columns/",
+ "title": "Columnas",
+ "description": "Configura columnas en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "c5cad4de1cdcd5bc45a17a7f4bc373478b5f7e877859ca80db4facadca0459da",
+ "source": "document-definition-object/columns.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/columns/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/columns",
+ "markdown": "# Columnas\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/columns/\n\nDe forma predeterminada, los párrafos se muestran como una pila vertical de elementos (uno debajo de otro). Sin embargo, es posible dividir el espacio disponible en columnas.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};\n```\n\nEl contenido de las columnas no se limita a texto sencillo: puede incluir cualquier elemento válido de pdfmake. Consulta el ejemplo COLUMNS en el [entorno de pruebas](/docs/0.3/es/playground/).\n\n## Propiedades\n\n* `columnGap: number`: especifica el espacio entre columnas\n* `snakingColumns: boolean`: columnas en flujo serpenteante (estilo periódico); consulta este [artículo](/docs/0.3/es/document-definition-object/snaking-columns/) _(versión mínima: 0.3.5)_\n"
+ },
+ {
+ "id": "fr/document-definition-object/columns",
+ "language": "fr",
+ "translationKey": "document-definition-object/columns",
+ "path": "/docs/0.3/fr/document-definition-object/columns/",
+ "title": "Colonnes",
+ "description": "Répartissez l’espace disponible en colonnes de largeurs automatiques, proportionnelles, fixes ou en pourcentage.",
+ "version": "0.3",
+ "sourceDigest": "c5cad4de1cdcd5bc45a17a7f4bc373478b5f7e877859ca80db4facadca0459da",
+ "source": "document-definition-object/columns.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/columns/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/columns",
+ "markdown": "# Colonnes\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/columns/\n\nPar défaut, les paragraphes sont rendus sous forme d’une pile verticale d’éléments, les uns sous les autres. Il est toutefois possible de répartir l’espace disponible en colonnes.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};\n```\n\nLe contenu des colonnes ne se limite pas à du texte simple. Il peut contenir n’importe quel élément pdfmake valide. Consultez l’exemple COLUMNS dans le [playground](/docs/0.3/fr/playground/).\n\n## Propriétés\n\n* `columnGap: number` définit l’espace entre les colonnes\n* `snakingColumns: boolean` active les colonnes en serpentin (style journal) ; consultez cet [article](/docs/0.3/fr/document-definition-object/snaking-columns/) _(version minimale : 0.3.5)_\n"
+ },
+ {
+ "id": "document-definition-object/columns",
+ "language": "en",
+ "translationKey": "document-definition-object/columns",
+ "path": "/docs/0.3/document-definition-object/columns/",
+ "title": "Columns",
+ "description": "Configure columns in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/columns.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/columns/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/columns",
+ "markdown": "# Columns\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/columns/\n\nBy default paragraphs are rendered as a vertical stack of elements (one below another). It is possible however to divide available space into columns.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};\n```\n\nColumn content is not limited to a simple text. It can actually contain any valid pdfmake element. Make sure to look at the COLUMNS example in [playground](/docs/0.3/playground/).\n\n\n## Properties\n\n* `columnGap: number` specify gap (space) between columns\n* `snakingColumns: boolean` snaking columns (newspaper-style columns) see this [article](/docs/0.3/document-definition-object/snaking-columns/) _(Minimal version: 0.3.5)_\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/columns",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/columns",
+ "path": "/docs/0.3/pt-br/document-definition-object/columns/",
+ "title": "Colunas",
+ "description": "Organize conteúdo em colunas de larguras automáticas, proporcionais ou fixas no pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "c5cad4de1cdcd5bc45a17a7f4bc373478b5f7e877859ca80db4facadca0459da",
+ "source": "document-definition-object/columns.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/columns/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/columns",
+ "markdown": "# Colunas\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/columns/\n\nPor padrão, os parágrafos são renderizados como uma pilha vertical de elementos, um abaixo do outro. Também é possível dividir o espaço disponível em colunas.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'This paragraph fills full width, as there are no columns. Next paragraph however consists of three columns',\n {\n columns: [\n {\n // auto-sized columns have their widths based on their content\n width: 'auto',\n text: 'First column'\n },\n {\n // star-sized columns fill the remaining space\n // if there's more than one star-column, available width is divided equally\n width: '*',\n text: 'Second column'\n },\n {\n // fixed width\n width: 100,\n text: 'Third column'\n },\n {\n // % width\n width: '20%',\n text: 'Fourth column'\n }\n ],\n // optional space between columns\n columnGap: 10\n },\n 'This paragraph goes below all columns and has full width'\n ]\n};\n```\n\nO conteúdo de uma coluna não se limita a texto simples. Pode conter qualquer elemento válido do pdfmake. Confira o exemplo COLUMNS no [playground](/docs/0.3/pt-br/playground/).\n\n## Propriedades\n\n* `columnGap: number` especifica o intervalo (espaço) entre as colunas\n* `snakingColumns: boolean` ativa colunas em fluxo contínuo (estilo jornal); consulte [este artigo](/docs/0.3/pt-br/document-definition-object/snaking-columns/) _(versão mínima: 0.3.5)_\n"
+ },
+ {
+ "id": "de/document-definition-object/compression",
+ "language": "de",
+ "translationKey": "document-definition-object/compression",
+ "path": "/docs/0.3/de/document-definition-object/compression/",
+ "title": "Komprimierung",
+ "description": "Steuere die Komprimierung von PDF-Datenströmen mit dem Dokumentfeld compress; standardmäßig ist sie aktiviert.",
+ "version": "0.3",
+ "sourceDigest": "92de3279ae232bb95314ce206d2d5914ca81723e46208aabd408dce25d90db55",
+ "source": "document-definition-object/compression.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/compression/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/compression",
+ "markdown": "# Komprimierung\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/compression/\n\n## Standardverhalten\n\nPDF-Datenströme werden standardmäßig komprimiert. So deaktivierst du die Komprimierung zur Überprüfung:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n compress: false,\n content: ['An uncompressed example document.']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n compress: false,\n content: ['An uncompressed example document.']\n};\n```\n\n`compress` ist ein boolesches Feld der Dokumentdefinition und gehört nicht zum Optionsobjekt von `createPdf`. Wenn du die Komprimierung deaktivierst, wird die Ausgabedatei in der Regel größer. Eingebettete Schriften oder Bilddaten werden dadurch nicht entfernt; auch der für das Layout benötigte Speicher wird nicht reduziert. Hinweise zur Messung findest du unter [Leistung](/docs/0.3/de/guides/performance/).\n"
+ },
+ {
+ "id": "es/document-definition-object/compression",
+ "language": "es",
+ "translationKey": "document-definition-object/compression",
+ "path": "/docs/0.3/es/document-definition-object/compression/",
+ "title": "Compresión",
+ "description": "Controla la compresión de los flujos PDF mediante el indicador compress del documento, activado de forma predeterminada.",
+ "version": "0.3",
+ "sourceDigest": "92de3279ae232bb95314ce206d2d5914ca81723e46208aabd408dce25d90db55",
+ "source": "document-definition-object/compression.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/compression/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/compression",
+ "markdown": "# Compresión\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/compression/\n\n## Comportamiento predeterminado\n\nLa compresión de los flujos PDF está activada de forma predeterminada. Para desactivarla durante una inspección:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n compress: false,\n content: ['An uncompressed example document.']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n compress: false,\n content: ['An uncompressed example document.']\n};\n```\n\n`compress` es un campo de la definición del documento, no del objeto de opciones de `createPdf`. Al desactivarlo, el tamaño de salida suele aumentar. No elimina la incrustación de fuentes ni los datos de imagen, y no sirve para reducir la memoria de maquetación. Consulta [rendimiento](/docs/0.3/es/guides/performance/) para obtener indicaciones sobre cómo medirlo.\n"
+ },
+ {
+ "id": "fr/document-definition-object/compression",
+ "language": "fr",
+ "translationKey": "document-definition-object/compression",
+ "path": "/docs/0.3/fr/document-definition-object/compression/",
+ "title": "Compression",
+ "description": "Contrôlez la compression des flux PDF avec le champ `compress` de la définition du document, activé par défaut.",
+ "version": "0.3",
+ "sourceDigest": "92de3279ae232bb95314ce206d2d5914ca81723e46208aabd408dce25d90db55",
+ "source": "document-definition-object/compression.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/compression/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/compression",
+ "markdown": "# Compression\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/compression/\n\n## Comportement par défaut\n\nLa compression des flux PDF est activée par défaut. Pour la désactiver lors d’une inspection :\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n compress: false,\n content: ['An uncompressed example document.']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n compress: false,\n content: ['An uncompressed example document.']\n};\n```\n\n`compress` est un booléen de la définition du document, pas de l’objet d’options de `createPdf`. La désactivation augmente généralement la taille du fichier. Elle ne supprime ni l’incorporation des polices ni les données d’image et ne réduit pas la mémoire utilisée pour la mise en page. Consultez [les performances](/docs/0.3/fr/guides/performance/) pour savoir comment mesurer les résultats.\n"
+ },
+ {
+ "id": "document-definition-object/compression",
+ "language": "en",
+ "translationKey": "document-definition-object/compression",
+ "path": "/docs/0.3/document-definition-object/compression/",
+ "title": "Compression",
+ "description": "Control PDF stream compression with the document-level compress flag; enabled by default.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/compression.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/compression/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/compression",
+ "markdown": "# Compression\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/compression/\n\n## Default behavior\n\nPDF stream compression is enabled by default. To disable it for inspection:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n compress: false,\n content: ['An uncompressed example document.']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n compress: false,\n content: ['An uncompressed example document.']\n};\n```\n\n`compress` is a boolean field on the document definition, not the `createPdf` options object. Disabling it generally increases output size. It does not remove font embedding or image data and is not a way to reduce layout memory. See [performance](/docs/0.3/guides/performance/) for measurement guidance.\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/compression",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/compression",
+ "path": "/docs/0.3/pt-br/document-definition-object/compression/",
+ "title": "Compactação",
+ "description": "Controle a compactação dos fluxos PDF com a propriedade compress da definição do documento; ela fica ativada por padrão.",
+ "version": "0.3",
+ "sourceDigest": "92de3279ae232bb95314ce206d2d5914ca81723e46208aabd408dce25d90db55",
+ "source": "document-definition-object/compression.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/compression/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/compression",
+ "markdown": "# Compactação\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/compression/\n\n## Comportamento padrão\n\nA compactação dos fluxos PDF fica ativada por padrão. Para desativá-la durante uma inspeção:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n compress: false,\n content: ['An uncompressed example document.']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n compress: false,\n content: ['An uncompressed example document.']\n};\n```\n\n`compress` é um campo booleano da definição do documento, não do objeto de opções de `createPdf`. Desativá-lo geralmente aumenta o tamanho da saída. Isso não remove a incorporação de fontes nem os dados de imagem e não reduz o uso de memória do layout. Consulte [desempenho](/docs/0.3/pt-br/guides/performance/) para orientações de medição.\n"
+ },
+ {
+ "id": "de/document-definition-object/document-medatadata",
+ "language": "de",
+ "translationKey": "document-definition-object/document-medatadata",
+ "path": "/docs/0.3/de/document-definition-object/document-medatadata/",
+ "title": "Dokumentmetadaten",
+ "description": "Lege PDF-Titel, Autor, Thema, Schlüsselwörter und benutzerdefinierte Metadatenfelder fest.",
+ "version": "0.3",
+ "sourceDigest": "7c039db6c37d93f4df69313d60659fa0479cb3f5b47dd4c5ee8b6bd7af11d7ef",
+ "source": "document-definition-object/document-medatadata.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/document-medatadata/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/document-medatadata",
+ "markdown": "# Dokumentmetadaten\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/document-medatadata/\n\nPDF-Dokumente können verschiedene Metadaten enthalten, beispielsweise Titel und Autor. Füge diese Angaben der Dokumentdefinition hinzu:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}\n```\n\nStandardfelder:\n\n* `title` – Titel des Dokuments\n* `author` – Name des Autors\n* `subject` – Thema des Dokuments\n* `keywords` – mit dem Dokument verknüpfte Schlüsselwörter\n* `creator` – Ersteller (Standard ist `'pdfmake'`)\n* `producer` – erzeugende Software (Standard ist `'pdfmake'`)\n* `creationDate` – Erstellungsdatum (wird automatisch von pdfmake hinzugefügt)\n* `modDate` – Datum der letzten Änderung\n* `trapped` – Kennzeichen, das angibt, ob das Dokument für den Druck durch Farbkorrekturen (Trapping) vorbereitet wurde\n\nBenutzerdefinierte Felder:\n\nDu kannst benutzerdefinierte Felder hinzufügen. Der Feldschlüssel darf keine Leerzeichen enthalten.\n\n## Dokumentsprache\n\nÜber die Eigenschaft `language` kannst du eine Sprache für das PDF-Dokument festlegen.\n\nBeispiel:\n**JavaScript**\n\n```js\nvar docDefinition = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}\n```\n"
+ },
+ {
+ "id": "es/document-definition-object/document-medatadata",
+ "language": "es",
+ "translationKey": "document-definition-object/document-medatadata",
+ "path": "/docs/0.3/es/document-definition-object/document-medatadata/",
+ "title": "Metadatos del documento",
+ "description": "Define el título, el autor, el asunto, las palabras clave y los campos de metadatos personalizados del PDF.",
+ "version": "0.3",
+ "sourceDigest": "7c039db6c37d93f4df69313d60659fa0479cb3f5b47dd4c5ee8b6bd7af11d7ef",
+ "source": "document-definition-object/document-medatadata.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/document-medatadata/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/document-medatadata",
+ "markdown": "# Metadatos del documento\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/document-medatadata/\n\nLos documentos PDF pueden tener diversos metadatos asociados, como el título o el autor. Puedes añadir esta información a la definición del documento.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}\n```\n\nPropiedades estándar:\n\n* `title`: título del documento\n* `author`: nombre del autor\n* `subject`: asunto del documento\n* `keywords`: palabras clave asociadas al documento\n* `creator`: creador del documento (el valor predeterminado es `'pdfmake'`)\n* `producer`: productor del documento (el valor predeterminado es `'pdfmake'`)\n* `creationDate`: fecha de creación del documento (pdfmake la añade automáticamente)\n* `modDate`: fecha de la última modificación del documento\n* `trapped`: el indicador `trapped` de un documento PDF especifica si se ha corregido para compensar pequeñas desalineaciones de color\n\nPropiedades personalizadas:\n\nPuedes añadir propiedades personalizadas. La clave de la propiedad no debe contener espacios.\n\n## Idioma del documento\n\nPuedes establecer el idioma personalizado de un documento PDF mediante la propiedad `language`.\n\nEjemplo:\n**JavaScript**\n\n```js\nvar docDefinition = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}\n```\n"
+ },
+ {
+ "id": "fr/document-definition-object/document-medatadata",
+ "language": "fr",
+ "translationKey": "document-definition-object/document-medatadata",
+ "path": "/docs/0.3/fr/document-definition-object/document-medatadata/",
+ "title": "Métadonnées du document",
+ "description": "Définissez le titre, l’auteur, le sujet, les mots-clés et les champs de métadonnées personnalisés du PDF.",
+ "version": "0.3",
+ "sourceDigest": "7c039db6c37d93f4df69313d60659fa0479cb3f5b47dd4c5ee8b6bd7af11d7ef",
+ "source": "document-definition-object/document-medatadata.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/document-medatadata/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/document-medatadata",
+ "markdown": "# Métadonnées du document\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/document-medatadata/\n\nLes documents PDF peuvent être associés à différentes métadonnées, comme leur titre ou leur auteur. Ajoutez ces informations dans la définition du document :\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}\n```\n\nPropriétés standard :\n\n* `title` - titre du document\n* `author` - nom de l’auteur\n* `subject` - sujet du document\n* `keywords` - mots-clés associés au document\n* `creator` - créateur du document (par défaut, 'pdfmake')\n* `producer` - producteur du document (par défaut, 'pdfmake')\n* `creationDate` - date de création du document (ajoutée automatiquement par pdfmake)\n* `modDate` - date de dernière modification du document\n* `trapped` - indicateur précisant si le document PDF a été « piégé », c’est-à-dire corrigé pour compenser de légers défauts de repérage des couleurs\n\nPropriétés personnalisées :\n\nVous pouvez ajouter des propriétés personnalisées. La clé d’une propriété ne doit pas contenir d’espaces.\n\n## Langue du document\n\nLa propriété `language` permet de définir une langue pour le document PDF.\n\nExemple :\n**JavaScript**\n\n```js\nvar docDefinition = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}\n```\n"
+ },
+ {
+ "id": "document-definition-object/document-medatadata",
+ "language": "en",
+ "translationKey": "document-definition-object/document-medatadata",
+ "path": "/docs/0.3/document-definition-object/document-medatadata/",
+ "title": "Document Metadata",
+ "description": "Set PDF title, author, subject, keywords and custom metadata fields.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/document-medatadata.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/document-medatadata/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/document-medatadata",
+ "markdown": "# Document Metadata\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/document-medatadata/\n\nPDF documents can have various metadata associated with them, such as the title, or author\nof the document. You can add that information by adding it to the document definition\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}\n```\n\nStandard properties:\n\n* `title` - the title of the document\n* `author` - the name of the author\n* `subject` - the subject of the document\n* `keywords` - keywords associated with the document\n* `creator` - the creator of the document (default is 'pdfmake')\n* `producer` - the producer of the document (default is 'pdfmake')\n* `creationDate` - the date the document was created (added automatically by pdfmake)\n* `modDate` - the date the document was last modified\n* `trapped` - the trapped flag in a PDF document indicates whether the document has been \"trapped\", i.e. corrected for slight color misregistrations\n\nCustom properties:\n\nYou can add custom properties. Key of property not contain spaces.\n\n## Document language\n\nPDF document can have custom language set via `language` property.\n\nExample:\n**JavaScript**\n\n```js\nvar docDefinition = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}\n```\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/document-medatadata",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/document-medatadata",
+ "path": "/docs/0.3/pt-br/document-definition-object/document-medatadata/",
+ "title": "Metadados do documento",
+ "description": "Defina título, autor, assunto, palavras-chave e campos de metadados personalizados do PDF.",
+ "version": "0.3",
+ "sourceDigest": "7c039db6c37d93f4df69313d60659fa0479cb3f5b47dd4c5ee8b6bd7af11d7ef",
+ "source": "document-definition-object/document-medatadata.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/document-medatadata/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/document-medatadata",
+ "markdown": "# Metadados do documento\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/document-medatadata/\n\nDocumentos PDF podem ter vários metadados associados, como título e autor. Adicione essas informações à definição do documento:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n info: {\n\ttitle: 'awesome Document',\n\tauthor: 'john doe',\n\tsubject: 'subject of document',\n\tkeywords: 'keywords for document',\n },\n content: 'This is an sample PDF printed with pdfMake'\n}\n```\n\nPropriedades padrão:\n\n* `title` - título do documento\n* `author` - nome do autor\n* `subject` - assunto do documento\n* `keywords` - palavras-chave associadas ao documento\n* `creator` - criador do documento (padrão: `'pdfmake'`)\n* `producer` - produtor do documento (padrão: `'pdfmake'`)\n* `creationDate` - data em que o documento foi criado (adicionada automaticamente pelo pdfmake)\n* `modDate` - data da última modificação do documento\n* `trapped` - sinalizador de trapping do PDF, que indica se o documento passou por trapping, isto é, correção de pequenas falhas de registro de cores\n\nPropriedades personalizadas:\n\nVocê pode adicionar propriedades personalizadas. A chave da propriedade não pode conter espaços.\n\n## Idioma do documento\n\nO idioma de um documento PDF pode ser definido com a propriedade `language`.\n\nExemplo:\n**JavaScript**\n\n```js\nvar docDefinition = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n language: 'cs-CZ',\n content: 'Jednoduchý PDF dokument vytvoření pomocí pdfmake'\n}\n```\n"
+ },
+ {
+ "id": "de/document-definition-object/headers-footers",
+ "language": "de",
+ "translationKey": "document-definition-object/headers-footers",
+ "path": "/docs/0.3/de/document-definition-object/headers-footers/",
+ "title": "Kopf- und Fußzeilen",
+ "description": "Füge statische oder dynamische Seitenkopf- und Fußzeilen mit Seitenzahlen und Gesamtseitenzahl hinzu und reserviere Platz in den Seitenrändern.",
+ "version": "0.3",
+ "sourceDigest": "a47e47aa446dfbb4a3b97ade1254c9b6edbe8abfc9b34ac2cd7d2cfaac111b14",
+ "source": "document-definition-object/headers-footers.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/headers-footers/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/headers-footers",
+ "markdown": "# Kopf- und Fußzeilen\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/headers-footers/\n\n## Statische Kopfzeile hinzufügen\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};\n```\n\nKopf- und Fußzeilen werden auf den Seiten wiederholt. Reserviere in den oberen und unteren Rändern genügend Platz für ihren Inhalt; die Ränder des Hauptinhalts werden nicht automatisch vergrößert. Zurückgegebener Inhalt verwendet normale pdfmake-Knoten.\n\n## Seitenzahlen hinzufügen\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};\n```\n\nCallbacks erhalten die aktuelle Seitennummer (beginnend bei 1), die Gesamtseitenzahl und die Seitengröße. Gib bei jedem Aufruf einen neuen Knoten zurück. Sorge für deterministische Callbacks und vermeide Änderungen an gemeinsam genutzten Anwendungsdaten.\n"
+ },
+ {
+ "id": "es/document-definition-object/headers-footers",
+ "language": "es",
+ "translationKey": "document-definition-object/headers-footers",
+ "path": "/docs/0.3/es/document-definition-object/headers-footers/",
+ "title": "Encabezados y pies de página",
+ "description": "Añade encabezados y pies de página estáticos o dinámicos, con números de página, recuentos totales y espacio reservado en los márgenes.",
+ "version": "0.3",
+ "sourceDigest": "a47e47aa446dfbb4a3b97ade1254c9b6edbe8abfc9b34ac2cd7d2cfaac111b14",
+ "source": "document-definition-object/headers-footers.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/headers-footers/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/headers-footers",
+ "markdown": "# Encabezados y pies de página\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/headers-footers/\n\n## Añadir un encabezado estático\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};\n```\n\nLos encabezados y pies de página se repiten en todas las páginas. Reserva suficiente margen superior e inferior para su contenido; no amplían automáticamente los márgenes del cuerpo. El contenido devuelto usa nodos normales de pdfmake.\n\n## Añadir números de página\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};\n```\n\nLas funciones de retorno reciben el número de la página actual (a partir de 1), el número total de páginas y el tamaño de página. Devuelve un nodo nuevo en cada llamada. Mantén las funciones deterministas y evita modificar datos compartidos de la aplicación.\n"
+ },
+ {
+ "id": "fr/document-definition-object/headers-footers",
+ "language": "fr",
+ "translationKey": "document-definition-object/headers-footers",
+ "path": "/docs/0.3/fr/document-definition-object/headers-footers/",
+ "title": "En-têtes et pieds de page",
+ "description": "Ajoutez des en-têtes et pieds de page statiques ou dynamiques avec les numéros de page, le nombre total de pages et les marges réservées.",
+ "version": "0.3",
+ "sourceDigest": "a47e47aa446dfbb4a3b97ade1254c9b6edbe8abfc9b34ac2cd7d2cfaac111b14",
+ "source": "document-definition-object/headers-footers.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/headers-footers/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/headers-footers",
+ "markdown": "# En-têtes et pieds de page\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/headers-footers/\n\n## Ajouter un en-tête statique\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};\n```\n\nLes en-têtes et pieds de page sont répétés sur toutes les pages. Réservez une marge supérieure et inférieure suffisante pour leur contenu : ils n’agrandissent pas automatiquement les marges du corps. Le contenu renvoyé utilise les nœuds pdfmake habituels.\n\n## Ajouter les numéros de page\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};\n```\n\nLes fonctions de rappel reçoivent le numéro de la page courante (à partir de 1), le nombre total de pages et le format de page. Renvoyez un nouveau nœud à chaque appel. Gardez ces fonctions déterministes et évitez de modifier des données partagées de l’application.\n"
+ },
+ {
+ "id": "document-definition-object/headers-footers",
+ "language": "en",
+ "translationKey": "document-definition-object/headers-footers",
+ "path": "/docs/0.3/document-definition-object/headers-footers/",
+ "title": "Headers and footers",
+ "description": "Add static or dynamic page headers and footers, with page numbers, total page counts and room reserved in page margins.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/headers-footers.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/headers-footers/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/headers-footers",
+ "markdown": "# Headers and footers\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/headers-footers/\n\n## Add a static header\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};\n```\n\nHeaders and footers repeat on pages. Reserve enough top and bottom margin for their contents; they do not automatically enlarge the body margins. Returned content uses normal pdfmake nodes.\n\n## Add page numbers\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};\n```\n\nCallbacks receive the current page number (starting at 1), total page count and page size. Return a fresh node for each invocation. Keep callbacks deterministic and avoid modifying shared application data.\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/headers-footers",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/headers-footers",
+ "path": "/docs/0.3/pt-br/document-definition-object/headers-footers/",
+ "title": "Cabeçalhos e rodapés",
+ "description": "Adicione cabeçalhos e rodapés de página estáticos ou dinâmicos, com números, total de páginas e espaço reservado nas margens.",
+ "version": "0.3",
+ "sourceDigest": "a47e47aa446dfbb4a3b97ade1254c9b6edbe8abfc9b34ac2cd7d2cfaac111b14",
+ "source": "document-definition-object/headers-footers.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/headers-footers/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/headers-footers",
+ "markdown": "# Cabeçalhos e rodapés\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/headers-footers/\n\n## Adicione um cabeçalho estático\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: { text: 'Example report', margin: [40, 20, 40, 0] },\n footer: { text: 'Example Studio', alignment: 'center', fontSize: 9 },\n content: ['Document content']\n};\n```\n\nOs cabeçalhos e rodapés se repetem nas páginas. Reserve margem superior e inferior suficiente para o conteúdo; eles não aumentam automaticamente as margens do corpo. O conteúdo retornado usa os nós normais do pdfmake.\n\n## Adicione números de página\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n pageMargins: [40, 65, 40, 55],\n header: function (currentPage, pageCount, pageSize) {\n return {\n text: 'Report · ' + pageSize.width + ' pt wide',\n alignment: currentPage % 2 ? 'left' : 'right',\n margin: [40, 20, 40, 0],\n fontSize: 9\n };\n },\n footer: function (currentPage, pageCount) {\n return { text: currentPage + ' of ' + pageCount, alignment: 'center', fontSize: 9 };\n },\n content: ['First page', { text: 'Second page', pageBreak: 'before' }]\n};\n```\n\nOs callbacks recebem o número da página atual (começando em 1), a contagem total de páginas e o tamanho da página. Retorne um nó novo a cada chamada. Mantenha os callbacks determinísticos e evite alterar dados compartilhados da aplicação.\n"
+ },
+ {
+ "id": "de/document-definition-object/images",
+ "language": "de",
+ "translationKey": "document-definition-object/images",
+ "path": "/docs/0.3/de/document-definition-object/images/",
+ "title": "Bilder",
+ "description": "Bette PNG- und JPEG-Bilder über Data-URLs, benannte Ressourcen, Dateien oder freigegebene externe URLs ein.",
+ "version": "0.3",
+ "sourceDigest": "e0419b93231e1257dc4fafa17f5b9f74c214b95807240b77511d32bfe7c0da6d",
+ "source": "document-definition-object/images.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/images/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/images",
+ "markdown": "# Bilder\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/images/\n\n## Eingebettete PNG- oder JPEG-Daten wiederverwenden\n\nEin Bildknoten hat die Form `{ image: 'key' }`; der Schlüssel verweist auf einen Eintrag im Wörterbuch `images`. Verwende denselben Schlüssel, wenn ein Bild mehrfach vorkommt. Unterstützt werden PNG und JPEG. Für SVG-Inhalte verwende einen [SVG-Knoten](/docs/0.3/de/document-definition-object/svgs/).\n\n\n\n### Runnable example: 09 · Embedded images\n\n**JavaScript**\n\n```js\nvar dd = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/de/playground/?example=images)\n\n\n\n## Skalierung festlegen\n\n| Felder des Bildknotens | Ergebnis |\n| --- | --- |\n| Keine Angabe von width, height oder fit | Natürliche Abmessungen des Bildes verwenden |\n| `width: 150` | Proportional auf diese Breite skalieren |\n| `height: 100` | Proportional auf diese Höhe skalieren; seit 0.3.2 |\n| `width: 150, height: 100` | Diese Abmessungen erzwingen; das Bild kann dadurch gestreckt werden |\n| `fit: [150, 100]` | In ein Rechteck einpassen und Seitenverhältnis beibehalten |\n| `cover: { width: 150, height: 100, align: 'right', valign: 'bottom' }` | Rechteck mit Bild füllen, zuschneiden und ausrichten |\n\nDie angezeigten Abmessungen verkleinern nicht die ursprünglichen Bilddaten. Skaliere übergroße Quelldateien vor dem Einbetten, wenn Ausgabegröße und Speicherverbrauch wichtig sind.\n\n## Quelle für deine Laufzeit auswählen\n\n| Quelle | Einrichtung |\n| --- | --- |\n| Data-URL | Vollständige PNG-/JPEG-Base64-Data-URL in `images` oder direkt im Knoten angeben |\n| Lokale Datei | Nur Node.js oder eine Datei, die bereits im Browser-VFS liegt |\n| HTTP(S)-URL | Benannten Eintrag in `images` verwenden und über die Ressourcenrichtlinie freigeben |\n| URL mit Headern | `{ url, headers }` im benannten Eintrag unter `images` verwenden |\n\n**JavaScript**\n\n```js\nvar dd = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};\n```\n\nDieses Snippet zeigt die Formen der Quellen, ist aber kein eigenständiges Beispiel zum Herunterladen. Stelle eine vorhandene, von deiner Anwendung verwaltete Datei und eine gültige, freigegebene URL bereit. Im Browser muss die lokale Datei im VFS vorhanden sein; Browser-URLs benötigen außerdem CORS-Unterstützung. Füge keine privaten Zugangsdaten in clientseitige Definitionen ein. Das oben gezeigte eingebettete Beispiel benötigt keine Netzwerkressource.\n\n## Fehlende Bilder untersuchen\n\nEin leerer oder ungültiger Bildwert führt zu einem Fehler. Prüfe den Wörterbuchschlüssel, das vollständige Data-URL-Präfix und die Datenbytes, das Vorhandensein der Datei, die URL-Antwort und die Zugriffsrichtlinie. `setUrlAccessPolicy` umgeht CORS nicht. Eine lokale Dateirichtlinie muss den tatsächlich aufgelösten Dateipfad erlauben. Siehe [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/) und [Fehlerbehebung](/docs/0.3/de/guides/troubleshooting/).\n"
+ },
+ {
+ "id": "es/document-definition-object/images",
+ "language": "es",
+ "translationKey": "document-definition-object/images",
+ "path": "/docs/0.3/es/document-definition-object/images/",
+ "title": "Imágenes",
+ "description": "Incrusta imágenes PNG y JPEG desde data URLs, recursos con nombre, archivos o URL externas aprobadas.",
+ "version": "0.3",
+ "sourceDigest": "e0419b93231e1257dc4fafa17f5b9f74c214b95807240b77511d32bfe7c0da6d",
+ "source": "document-definition-object/images.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/images/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/images",
+ "markdown": "# Imágenes\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/images/\n\n## Reutilizar datos PNG o JPEG incrustados\n\nUn nodo de imagen es `{ image: 'key' }`, donde la clave se resuelve mediante el diccionario `images` del documento. Reutiliza una clave si la misma imagen aparece más de una vez. Se admiten PNG y JPEG; para contenido SVG, usa un [nodo SVG](/docs/0.3/es/document-definition-object/svgs/).\n\n\n\n### Runnable example: 09 · Embedded images\n\n**JavaScript**\n\n```js\nvar dd = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/es/playground/?example=images)\n\n\n\n## Elegir el comportamiento del tamaño\n\n| Campos del nodo de imagen | Resultado |\n| --- | --- |\n| Sin width, height ni fit | Usa las dimensiones naturales de la imagen |\n| `width: 150` | Escala proporcionalmente a ese ancho |\n| `height: 100` | Escala proporcionalmente a esa altura; desde 0.3.2 |\n| `width: 150, height: 100` | Fuerza esas dimensiones y puede estirar la imagen |\n| `fit: [150, 100]` | Ajusta dentro de un rectángulo y conserva la relación de aspecto |\n| `cover: { width: 150, height: 100, align: 'right', valign: 'bottom' }` | Rellena un rectángulo recortando y alineando la imagen |\n\nLas dimensiones de visualización no reducen el tamaño de los datos de la imagen original. Si importan el tamaño de salida y la memoria, cambia el tamaño de las imágenes de origen demasiado grandes antes de incrustarlas.\n\n## Seleccionar un origen para el entorno de ejecución\n\n| Origen | Configuración |\n| --- | --- |\n| Data URL | Coloca una data URL Base64 completa de PNG/JPEG en `images` o directamente en un nodo |\n| Archivo local | Solo en Node.js o si el archivo ya está presente en un VFS del navegador |\n| URL HTTP(S) | Usa una entrada con nombre en `images` y autorízala mediante la política de recursos |\n| URL con encabezados | Usa `{ url, headers }` en la entrada con nombre de `images` |\n\n**JavaScript**\n\n```js\nvar dd = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};\n```\n\nEste fragmento describe formatos de origen, no una descarga ejecutable completa. Proporciona un archivo existente que sea propiedad de la aplicación y una URL real aprobada. En un navegador, el nombre del archivo local debe existir en el VFS; además, las URL del navegador requieren compatibilidad con CORS. No incluyas credenciales privadas en definiciones del lado del cliente. El ejemplo incrustado anterior es autónomo y no necesita recursos de red.\n\n## Diagnosticar imágenes que faltan\n\nUn valor de imagen vacío o no válido es un error. Comprueba la clave del diccionario, el prefijo y los bytes de la data URL completa, la existencia del archivo, la respuesta de la URL y la política de acceso. Configurar `setUrlAccessPolicy` no evita CORS. Una política de archivos locales debe permitir la ruta real resuelta. Consulta [seguridad de recursos](/docs/0.3/es/guides/resource-security/) y [solución de problemas](/docs/0.3/es/guides/troubleshooting/).\n"
+ },
+ {
+ "id": "fr/document-definition-object/images",
+ "language": "fr",
+ "translationKey": "document-definition-object/images",
+ "path": "/docs/0.3/fr/document-definition-object/images/",
+ "title": "Images",
+ "description": "Intégrez des images PNG et JPEG depuis des URL de données, des ressources nommées, des fichiers ou des URL externes autorisées.",
+ "version": "0.3",
+ "sourceDigest": "e0419b93231e1257dc4fafa17f5b9f74c214b95807240b77511d32bfe7c0da6d",
+ "source": "document-definition-object/images.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/images/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/images",
+ "markdown": "# Images\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/images/\n\n## Réutiliser des données PNG ou JPEG intégrées\n\nUn nœud d’image s’écrit `{ image: 'key' }` : la clé correspond à une entrée du dictionnaire `images` du document. Réutilisez une même clé lorsqu’une image apparaît plusieurs fois. Les formats PNG et JPEG sont pris en charge ; pour du SVG, utilisez un [nœud SVG](/docs/0.3/fr/document-definition-object/svgs/).\n\n\n\n### Runnable example: 09 · Embedded images\n\n**JavaScript**\n\n```js\nvar dd = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/fr/playground/?example=images)\n\n\n\n## Choisir le comportement de dimensionnement\n\n| Champs du nœud d’image | Résultat |\n| --- | --- |\n| Aucun `width`, `height` ni `fit` | Utilise les dimensions naturelles de l’image |\n| `width: 150` | Met l’image à l’échelle proportionnellement à cette largeur |\n| `height: 100` | Met l’image à l’échelle proportionnellement à cette hauteur ; depuis la version 0.3.2 |\n| `width: 150, height: 100` | Impose ces dimensions, ce qui peut étirer l’image |\n| `fit: [150, 100]` | Ajuste l’image dans un rectangle en préservant son rapport hauteur/largeur |\n| `cover: { width: 150, height: 100, align: 'right', valign: 'bottom' }` | Remplit un rectangle en recadrant et en alignant l’image |\n\nLes dimensions d’affichage ne réduisent pas la charge utile de l’image originale. Redimensionnez les images sources trop grandes avant de les intégrer lorsque la taille de sortie et la mémoire sont importantes.\n\n## Choisir une source adaptée à l’environnement d’exécution\n\n| Source | Configuration |\n| --- | --- |\n| URL de données | Placez une URL complète de données PNG/JPEG en base64 dans `images` ou directement sur un nœud |\n| Fichier local | Node.js uniquement, ou fichier déjà présent dans un VFS de navigateur |\n| URL HTTP(S) | Utilisez une entrée nommée dans `images` et autorisez-la via la politique de ressources |\n| URL avec en-têtes | Utilisez `{ url, headers }` dans l’entrée nommée de `images` |\n\n**JavaScript**\n\n```js\nvar dd = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};\n```\n\nCet extrait décrit les formes des sources ; il ne constitue pas un exemple autonome de téléchargement. Fournissez un fichier existant appartenant à l’application et une URL réelle autorisée. Dans un navigateur, le nom de fichier local doit exister dans le VFS ; les URL utilisées dans le navigateur nécessitent également la prise en charge de CORS. Ne placez pas d’identifiants privés dans les définitions côté client. L’exemple intégré ci-dessus est autonome et ne nécessite aucune ressource réseau.\n\n## Diagnostiquer les images manquantes\n\nUne valeur d’image vide ou invalide provoque une erreur. Vérifiez la clé du dictionnaire, le préfixe complet de l’URL de données et ses octets, l’existence du fichier, la réponse URL et la politique d’accès. La configuration de `setUrlAccessPolicy` ne contourne pas CORS. Une politique de fichiers locaux doit autoriser le chemin de fichier effectivement résolu. Consultez la [sécurité des ressources](/docs/0.3/fr/guides/resource-security/) et le [guide de dépannage](/docs/0.3/fr/guides/troubleshooting/).\n"
+ },
+ {
+ "id": "document-definition-object/images",
+ "language": "en",
+ "translationKey": "document-definition-object/images",
+ "path": "/docs/0.3/document-definition-object/images/",
+ "title": "Images",
+ "description": "Embed PNG and JPEG images from data URLs, named resources, files or approved external URLs.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/images.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/images/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/images",
+ "markdown": "# Images\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/images/\n\n## Reuse embedded PNG or JPEG data\n\nAn image node is `{ image: 'key' }`, where the key resolves through the document's\n`images` dictionary. Reuse a key when the same image appears more than once.\nPNG and JPEG are supported; use an [SVG node](/docs/0.3/document-definition-object/svgs/)\nfor SVG content.\n\n\n\n### Runnable example: 09 · Embedded images\n\n**JavaScript**\n\n```js\nvar dd = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/playground/?example=images)\n\n\n\n## Choose sizing behavior\n\n| Fields on the image node | Result |\n| --- | --- |\n| No width, height or fit | Use the image's natural dimensions |\n| `width: 150` | Scale proportionally to that width |\n| `height: 100` | Scale proportionally to that height; since 0.3.2 |\n| `width: 150, height: 100` | Force those dimensions, which can stretch the image |\n| `fit: [150, 100]` | Fit inside a rectangle while preserving aspect ratio |\n| `cover: { width: 150, height: 100, align: 'right', valign: 'bottom' }` | Fill a rectangle with cropping and alignment |\n\nDisplay dimensions do not reduce the original image payload. Resize oversized\nsource images before embedding them when output size and memory matter.\n\n## Select a source for your runtime\n\n| Source | Setup |\n| --- | --- |\n| Data URL | Put a complete PNG/JPEG base64 data URL in `images` or directly on a node |\n| Local file | Node.js only, or a file already present in a browser VFS |\n| HTTP(S) URL | Use a named `images` entry and allow it through the resource policy |\n| URL with headers | Use `{ url, headers }` in the named `images` entry |\n\n**JavaScript**\n\n```js\nvar dd = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};\n```\n\nThis snippet describes source shapes, not a self-contained runnable download.\nSupply an existing application-owned file and a real approved URL. In a browser,\nthe local filename must exist in the VFS; browser URLs also require CORS support.\nDo not place private credentials in client-side definitions. The embedded example\nabove is self-contained and needs no network resource.\n\n## Diagnose missing images\n\nAn empty or invalid image value is an error. Check the dictionary key, full data\nURL prefix and bytes, file existence, URL response and access policy. Configuring\n`setUrlAccessPolicy` does not bypass CORS. A local file policy must allow the actual\nresolved file path. See [resource security](/docs/0.3/guides/resource-security/)\nand [troubleshooting](/docs/0.3/guides/troubleshooting/).\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/images",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/images",
+ "path": "/docs/0.3/pt-br/document-definition-object/images/",
+ "title": "Imagens",
+ "description": "Incorpore imagens PNG e JPEG usando URLs de dados, recursos nomeados, arquivos ou URLs externas aprovadas.",
+ "version": "0.3",
+ "sourceDigest": "e0419b93231e1257dc4fafa17f5b9f74c214b95807240b77511d32bfe7c0da6d",
+ "source": "document-definition-object/images.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/images/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/images",
+ "markdown": "# Imagens\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/images/\n\n## Reutilize dados PNG ou JPEG incorporados\n\nUm nó de imagem é `{ image: 'key' }`, em que a chave é resolvida pelo dicionário `images` do documento. Reutilize uma chave quando a mesma imagem aparecer mais de uma vez. Há suporte a PNG e JPEG; use um [nó SVG](/docs/0.3/pt-br/document-definition-object/svgs/) para conteúdo SVG.\n\n\n\n### Runnable example: 09 · Embedded images\n\n**JavaScript**\n\n```js\nvar dd = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/pt-br/playground/?example=images)\n\n\n\n## Escolha o comportamento de dimensionamento\n\n| Campos no nó de imagem | Resultado |\n| --- | --- |\n| Sem `width`, `height` ou `fit` | Usa as dimensões naturais da imagem |\n| `width: 150` | Redimensiona proporcionalmente para essa largura |\n| `height: 100` | Redimensiona proporcionalmente para essa altura; disponível desde 0.3.2 |\n| `width: 150, height: 100` | Força essas dimensões, o que pode esticar a imagem |\n| `fit: [150, 100]` | Ajusta dentro de um retângulo preservando a proporção |\n| `cover: { width: 150, height: 100, align: 'right', valign: 'bottom' }` | Preenche um retângulo com recorte e alinhamento |\n\nAs dimensões de exibição não reduzem os dados da imagem original. Redimensione imagens de origem grandes antes de incorporá-las quando o tamanho da saída e o uso de memória forem importantes.\n\n## Selecione uma origem para seu runtime\n\n| Origem | Configuração |\n| --- | --- |\n| URL de dados | Coloque uma URL de dados completa em base64 PNG/JPEG em `images` ou diretamente em um nó |\n| Arquivo local | Somente Node.js, ou arquivo já presente em um VFS do navegador |\n| URL HTTP(S) | Use uma entrada nomeada `images` e permita-a pela política de recursos |\n| URL com cabeçalhos | Use `{ url, headers }` na entrada nomeada `images` |\n\n**JavaScript**\n\n```js\nvar dd = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n images: {\n logo: '/application-owned/assets/logo.png',\n remote: {\n url: 'https://assets.example.com/photo.jpg',\n headers: { 'X-Example-Header': 'value' }\n }\n },\n content: [\n { image: 'logo', width: 120 },\n { image: 'remote', fit: [200, 150] }\n ]\n};\n```\n\nEste trecho descreve formatos de origem e não é um exemplo de download executável e autossuficiente. Forneça um arquivo existente pertencente à aplicação e uma URL real aprovada. No navegador, o nome do arquivo local precisa existir no VFS; URLs do navegador também precisam de suporte a CORS. Não coloque credenciais privadas em definições do lado do cliente. O exemplo incorporado acima é autossuficiente e não precisa de recursos de rede.\n\n## Diagnostique imagens ausentes\n\nUm valor de imagem vazio ou inválido causa um erro. Verifique a chave do dicionário, o prefixo completo e os bytes da URL de dados, a existência do arquivo, a resposta da URL e a política de acesso. Configurar `setUrlAccessPolicy` não ignora o CORS. Uma política de arquivo local precisa permitir o caminho real resolvido. Consulte [segurança de recursos](/docs/0.3/pt-br/guides/resource-security/) e [solução de problemas](/docs/0.3/pt-br/guides/troubleshooting/).\n"
+ },
+ {
+ "id": "de/document-definition-object/links",
+ "language": "de",
+ "translationKey": "document-definition-object/links",
+ "path": "/docs/0.3/de/document-definition-object/links/",
+ "title": "Links",
+ "description": "Lege mit Beispielen, Optionen und Anwendungshinweisen Links in pdfmake 0.3 fest.",
+ "version": "0.3",
+ "sourceDigest": "83e3e95f41aa0ba93449638032a7b8be6d0b6aafa82d1d8384d5364990825ad3",
+ "source": "document-definition-object/links.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/links/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/links",
+ "markdown": "# Links\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/links/\n\nFür externe oder interne Links verwendest du die folgende Syntax:\n**JavaScript**\n\n```js\nvar dd = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };\n```\nOder du verlinkst eine lokale Datei auf dem Computer:\n**JavaScript**\n\n```js\nvar dd = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};\n```\n\n## Eigenschaften\n\n- `link` (`string`) – URL zu einer externen Website\n- `linkToPage` (`number`) – Link zu einer Seitennummer\n- `linkToDestination` (`string`) – Link zu einem Dokumentziel\n"
+ },
+ {
+ "id": "es/document-definition-object/links",
+ "language": "es",
+ "translationKey": "document-definition-object/links",
+ "path": "/docs/0.3/es/document-definition-object/links/",
+ "title": "Enlaces",
+ "description": "Configura enlaces en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "83e3e95f41aa0ba93449638032a7b8be6d0b6aafa82d1d8384d5364990825ad3",
+ "source": "document-definition-object/links.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/links/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/links",
+ "markdown": "# Enlaces\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/links/\n\nPara añadir enlaces externos o internos, usa esta sintaxis:\n**JavaScript**\n\n```js\nvar dd = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };\n```\nTambién puedes enlazar a un archivo del equipo local:\n**JavaScript**\n\n```js\nvar dd = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};\n```\n\n## Propiedades\n\n- `link` (`string`): URL a un sitio externo\n- `linkToPage` (`number`): enlace a un número de página\n- `linkToDestination` (`string`): enlace a un destino del documento\n"
+ },
+ {
+ "id": "fr/document-definition-object/links",
+ "language": "fr",
+ "translationKey": "document-definition-object/links",
+ "path": "/docs/0.3/fr/document-definition-object/links/",
+ "title": "Liens",
+ "description": "Ajoutez des liens vers des pages externes, des pages du document, des destinations ou des fichiers locaux.",
+ "version": "0.3",
+ "sourceDigest": "83e3e95f41aa0ba93449638032a7b8be6d0b6aafa82d1d8384d5364990825ad3",
+ "source": "document-definition-object/links.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/links/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/links",
+ "markdown": "# Liens\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/links/\n\nPour ajouter des liens externes ou internes, utilisez la syntaxe suivante :\n**JavaScript**\n\n```js\nvar dd = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };\n```\nVous pouvez aussi créer un lien vers un fichier de l’ordinateur local :\n**JavaScript**\n\n```js\nvar dd = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};\n```\n\n## Propriétés\n\n- `link` (`string`) - URL d’un site externe\n- `linkToPage` (`number`) - lien vers un numéro de page\n- `linkToDestination` (`string`) - lien vers une destination du document\n"
+ },
+ {
+ "id": "document-definition-object/links",
+ "language": "en",
+ "translationKey": "document-definition-object/links",
+ "path": "/docs/0.3/document-definition-object/links/",
+ "title": "Links",
+ "description": "Configure links in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/links.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/links/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/links",
+ "markdown": "# Links\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/links/\n\nTo add external or internal links, use the following syntax:\n**JavaScript**\n\n```js\nvar dd = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };\n```\nOr link to local computer file:\n**JavaScript**\n\n```js\nvar dd = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};\n```\n\n## Properties\n\n- `link` (`string`) - URL to external site\n- `linkToPage` (`number`) - link to page number\n- `linkToDestination` (`string`) - link to document destination\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/links",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/links",
+ "path": "/docs/0.3/pt-br/document-definition-object/links/",
+ "title": "Links",
+ "description": "Adicione links externos, internos e para arquivos locais nos documentos pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "83e3e95f41aa0ba93449638032a7b8be6d0b6aafa82d1d8384d5364990825ad3",
+ "source": "document-definition-object/links.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/links/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/links",
+ "markdown": "# Links\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/links/\n\nPara adicionar links externos ou internos, use a sintaxe a seguir:\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'google', link: 'http://google.com' },\n{ text: 'Go to page 2', linkToPage: 2 },\n{ text: 'Go to Header', linkToDestination: 'header' },\n{ text: 'Header content', id: 'header' },\n] };\n```\n\nOu crie um link para um arquivo no computador local:\n\n**JavaScript**\n\n```js\nvar dd = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n\tcontent: [\n\t\t{\n\t\t text: 'link',\n\t\t link: 'file:///c:/testFile.txt'\n\t\t}\n\t]\n};\n```\n\n## Propriedades\n\n- `link` (`string`) - URL de um site externo\n- `linkToPage` (`number`) - link para um número de página\n- `linkToDestination` (`string`) - link para um destino no documento\n"
+ },
+ {
+ "id": "de/document-definition-object/lists",
+ "language": "de",
+ "translationKey": "document-definition-object/lists",
+ "path": "/docs/0.3/de/document-definition-object/lists/",
+ "title": "Listen",
+ "description": "Erstelle nummerierte und Aufzählungslisten in pdfmake 0.3 und passe Farben und Aufzählungszeichen an.",
+ "version": "0.3",
+ "sourceDigest": "5a9a9e5b03459677b99b2dbeeb26d15d6298dfb3e0c88a8c5e2b43ed48383e8f",
+ "source": "document-definition-object/lists.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/lists/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/lists",
+ "markdown": "# Listen\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/lists/\n\npdfmake unterstützt sowohl nummerierte Listen als auch Aufzählungslisten:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};\n```\n"
+ },
+ {
+ "id": "es/document-definition-object/lists",
+ "language": "es",
+ "translationKey": "document-definition-object/lists",
+ "path": "/docs/0.3/es/document-definition-object/lists/",
+ "title": "Listas",
+ "description": "Configura listas en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "5a9a9e5b03459677b99b2dbeeb26d15d6298dfb3e0c88a8c5e2b43ed48383e8f",
+ "source": "document-definition-object/lists.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/lists/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/lists",
+ "markdown": "# Listas\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/lists/\n\npdfmake admite listas numeradas y con viñetas:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};\n```\n"
+ },
+ {
+ "id": "fr/document-definition-object/lists",
+ "language": "fr",
+ "translationKey": "document-definition-object/lists",
+ "path": "/docs/0.3/fr/document-definition-object/lists/",
+ "title": "Listes",
+ "description": "Créez des listes à puces ou numérotées et personnalisez la couleur du texte et des marqueurs.",
+ "version": "0.3",
+ "sourceDigest": "5a9a9e5b03459677b99b2dbeeb26d15d6298dfb3e0c88a8c5e2b43ed48383e8f",
+ "source": "document-definition-object/lists.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/lists/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/lists",
+ "markdown": "# Listes\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/lists/\n\npdfmake prend en charge les listes numérotées et à puces :\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};\n```\n"
+ },
+ {
+ "id": "document-definition-object/lists",
+ "language": "en",
+ "translationKey": "document-definition-object/lists",
+ "path": "/docs/0.3/document-definition-object/lists/",
+ "title": "Lists",
+ "description": "Configure lists in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/lists.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/lists/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/lists",
+ "markdown": "# Lists\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/lists/\n\npdfmake supports both numbered and bulleted lists:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};\n```\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/lists",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/lists",
+ "path": "/docs/0.3/pt-br/document-definition-object/lists/",
+ "title": "Listas",
+ "description": "Crie listas numeradas e com marcadores no pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "5a9a9e5b03459677b99b2dbeeb26d15d6298dfb3e0c88a8c5e2b43ed48383e8f",
+ "source": "document-definition-object/lists.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/lists/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/lists",
+ "markdown": "# Listas\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/lists/\n\nO pdfmake oferece suporte a listas numeradas e com marcadores:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'Bulleted list example:',\n {\n // to treat a paragraph as a bulleted list, set an array of items under the ul key\n ul: [\n 'Item 1',\n 'Item 2',\n 'Item 3',\n { text: 'Item 4', bold: true },\n ]\n },\n\n 'Numbered list example:',\n {\n // for numbered lists set the ol key\n ol: [\n 'Item 1',\n 'Item 2',\n 'Item 3'\n ]\n },\n\n 'Colored unordered list:',\n {\n color: 'blue',\n ul: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n\n 'Colored unordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ul: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n\n 'Colored ordered list',\n {\n color: 'blue',\n ol: [\n 'item 1',\n 'item 2',\n 'item 3'\n ]\n },\n 'Colored ordered list with own marker color:',\n {\n color: 'blue',\n markerColor: 'red',\n ol: [\n 'item 1',\n 'item 2',\n { text: 'item 3 with custom marker color', markerColor: 'lime' } // Minimal pdfmake version: 0.3.2\n ]\n },\n ]\n};\n```\n"
+ },
+ {
+ "id": "de/document-definition-object/margins",
+ "language": "de",
+ "translationKey": "document-definition-object/margins",
+ "path": "/docs/0.3/de/document-definition-object/margins/",
+ "title": "Abstände",
+ "description": "Lege mit Beispielen, Optionen und Anwendungshinweisen Abstände in pdfmake 0.3 fest.",
+ "version": "0.3",
+ "sourceDigest": "f331bdfb9263dd2a8867f8ed754a7e6eedb9072c8a27a47f57313fb56c0159cb",
+ "source": "document-definition-object/margins.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/margins/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/margins",
+ "markdown": "# Abstände\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/margins/\n\nJedes Element in pdfMake kann einen Abstand haben:\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };\n```\n"
+ },
+ {
+ "id": "es/document-definition-object/margins",
+ "language": "es",
+ "translationKey": "document-definition-object/margins",
+ "path": "/docs/0.3/es/document-definition-object/margins/",
+ "title": "Márgenes",
+ "description": "Configura los márgenes en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "f331bdfb9263dd2a8867f8ed754a7e6eedb9072c8a27a47f57313fb56c0159cb",
+ "source": "document-definition-object/margins.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/margins/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/margins",
+ "markdown": "# Márgenes\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/margins/\n\nCualquier elemento de pdfMake puede tener un margen:\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };\n```\n"
+ },
+ {
+ "id": "fr/document-definition-object/margins",
+ "language": "fr",
+ "translationKey": "document-definition-object/margins",
+ "path": "/docs/0.3/fr/document-definition-object/margins/",
+ "title": "Marges",
+ "description": "Configurez les marges des éléments dans pdfmake 0.3 avec les quatre côtés, les valeurs horizontale et verticale ou une valeur unique.",
+ "version": "0.3",
+ "sourceDigest": "f331bdfb9263dd2a8867f8ed754a7e6eedb9072c8a27a47f57313fb56c0159cb",
+ "source": "document-definition-object/margins.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/margins/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/margins",
+ "markdown": "# Marges\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/margins/\n\nChaque élément de pdfmake peut avoir une marge :\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };\n```\n"
+ },
+ {
+ "id": "document-definition-object/margins",
+ "language": "en",
+ "translationKey": "document-definition-object/margins",
+ "path": "/docs/0.3/document-definition-object/margins/",
+ "title": "Margins",
+ "description": "Configure margins in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/margins.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/margins/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/margins",
+ "markdown": "# Margins\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/margins/\n\nAny element in pdfMake can have a margin:\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };\n```\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/margins",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/margins",
+ "path": "/docs/0.3/pt-br/document-definition-object/margins/",
+ "title": "Margens",
+ "description": "Configure margens de elementos em documentos pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f331bdfb9263dd2a8867f8ed754a7e6eedb9072c8a27a47f57313fb56c0159cb",
+ "source": "document-definition-object/margins.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/margins/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/margins",
+ "markdown": "# Margens\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/margins/\n\nQualquer elemento do pdfmake pode ter uma margem:\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n// margin: [left, top, right, bottom]\n{ text: 'sample', margin: [ 5, 2, 10, 20 ] },\n\n// margin: [horizontal, vertical]\n{ text: 'another text', margin: [5, 2] },\n\n// margin: equalLeftTopRightBottom\n{ text: 'last one', margin: 5 },\n\n// single-side margins\n{ text: 'sample', marginLeft: 5, marginTop: 2, marginRight: 10, marginBottom: 2 },\n] };\n```\n"
+ },
+ {
+ "id": "de/document-definition-object/outlines",
+ "language": "de",
+ "translationKey": "document-definition-object/outlines",
+ "path": "/docs/0.3/de/document-definition-object/outlines/",
+ "title": "Gliederungen und Lesezeichen",
+ "description": "Erstelle hierarchische PDF-Lesezeichen mit pdfmake 0.3 und steuere ihre Beschriftung, Elternknoten und den geöffneten Zustand.",
+ "version": "0.3",
+ "sourceDigest": "c3e4279bfaad7589de23fa588bc515727f35f2255fa8effd7da1ce56b06a7cb2",
+ "source": "document-definition-object/outlines.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/outlines/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/outlines",
+ "markdown": "# Gliederungen und Lesezeichen\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/outlines/\n\n> **Note:** Mindestversion: **0.3.5**\n\n\nPDF-Gliederungen (auch Lesezeichen genannt) sind eine hierarchische Navigationsstruktur im PDF-Dokument. Damit können Benutzer direkt zu bestimmten Seiten springen. Sie funktionieren wie ein interaktives Inhaltsverzeichnis und werden normalerweise im Navigationsbereich des PDF-Viewers angezeigt.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};\n```\n\n## Eigenschaften\n\n- `outline: boolean` – auf `true` setzen, um den Knoten in die Lesezeichen aufzunehmen\n- `outlineText: string` (optional) – benutzerdefinierter Lesezeichentext; andernfalls wird der Text des Knotens verwendet\n- `outlineExpanded: boolean` (optional) – auf `true` setzen, damit das Lesezeichen geöffnet angezeigt wird\n- `outlineParentId: string` (optional) – `id` des übergeordneten Lesezeichens\n"
+ },
+ {
+ "id": "es/document-definition-object/outlines",
+ "language": "es",
+ "translationKey": "document-definition-object/outlines",
+ "path": "/docs/0.3/es/document-definition-object/outlines/",
+ "title": "Esquemas / marcadores",
+ "description": "Configura esquemas y marcadores en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "c3e4279bfaad7589de23fa588bc515727f35f2255fa8effd7da1ce56b06a7cb2",
+ "source": "document-definition-object/outlines.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/outlines/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/outlines",
+ "markdown": "# Esquemas / marcadores\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/outlines/\n\n> **Note:** Versión mínima: **0.3.5**\n\n\nLos esquemas PDF (también llamados marcadores) son una estructura de navegación jerárquica incrustada en un documento PDF que permite saltar rápidamente a páginas concretas. Funcionan como un índice interactivo y suelen aparecer en el panel de navegación del visor PDF.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};\n```\n\n## Propiedades\n\n- `outline: boolean`: establece `true` para añadir el elemento a los marcadores\n- `outlineText: string` (opcional): establece el texto personalizado del marcador; si no, se usa el texto del nodo\n- `outlineExpanded: boolean` (opcional): establece `true` para que el marcador aparezca expandido/abierto\n- `outlineParentId: string` (opcional): `id` del marcador principal\n"
+ },
+ {
+ "id": "fr/document-definition-object/outlines",
+ "language": "fr",
+ "translationKey": "document-definition-object/outlines",
+ "path": "/docs/0.3/fr/document-definition-object/outlines/",
+ "title": "Plans du document et signets",
+ "description": "Ajoutez au PDF des signets hiérarchiques pour accéder rapidement aux pages et sections.",
+ "version": "0.3",
+ "sourceDigest": "c3e4279bfaad7589de23fa588bc515727f35f2255fa8effd7da1ce56b06a7cb2",
+ "source": "document-definition-object/outlines.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/outlines/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/outlines",
+ "markdown": "# Plans du document et signets\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/outlines/\n\n> **Note:** Version minimale : **0.3.5**\n\n\nLes plans de document PDF (également appelés signets) sont une structure de navigation hiérarchique intégrée au PDF, qui permet d’accéder rapidement à des pages précises. Ils fonctionnent comme une table des matières interactive, généralement affichée dans le panneau de navigation du lecteur PDF.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};\n```\n\n## Propriétés\n\n- `outline: boolean` - indiquez `true` pour ajouter un signet\n- `outlineText: string` (facultatif) - texte personnalisé du signet ; sinon, le texte du nœud est utilisé\n- `outlineExpanded: boolean` (facultatif) - indiquez `true` pour que le signet soit développé à l’ouverture\n- `outlineParentId: string` (facultatif) - `id` du signet parent\n"
+ },
+ {
+ "id": "document-definition-object/outlines",
+ "language": "en",
+ "translationKey": "document-definition-object/outlines",
+ "path": "/docs/0.3/document-definition-object/outlines/",
+ "title": "Outlines / Bookmarks",
+ "description": "Configure outlines / bookmarks in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/outlines.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/outlines/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/outlines",
+ "markdown": "# Outlines / Bookmarks\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/outlines/\n\n> **Note:** Minimal version: **0.3.5**\n\n\nPDF Outlines (also called Bookmarks) are a hierarchical navigation structure embedded in a PDF document that allows users to quickly jump to specific pages. They function as an interactive table of contents, typically displayed in the PDF viewer’s navigation panel.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};\n```\n\n## Properties\n\n- `outline: boolean` - set to `true` for add to bookmarks\n- `outlineText: string` (optional) - set custom bookmark text, otherwise text from node\n- `outlineExpanded: boolean` (optional) - set to `true` for expanded/opened bookmark\n- `outlineParentId: string` (optional) - parent bookmark `id`\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/outlines",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/outlines",
+ "path": "/docs/0.3/pt-br/document-definition-object/outlines/",
+ "title": "Contornos e marcadores",
+ "description": "Crie uma estrutura hierárquica de navegação com contornos e marcadores no PDF usando pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "c3e4279bfaad7589de23fa588bc515727f35f2255fa8effd7da1ce56b06a7cb2",
+ "source": "document-definition-object/outlines.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/outlines/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/outlines",
+ "markdown": "# Contornos e marcadores\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/outlines/\n\n> **Note:** Versão mínima: **0.3.5**\n\n\nContornos PDF (também chamados de marcadores) são uma estrutura hierárquica de navegação incorporada em um documento PDF que permite aos usuários ir rapidamente a páginas específicas. Funcionam como um sumário interativo e costumam aparecer no painel de navegação do visualizador de PDF.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n text: 'First header in bookmarks',\n outline: true,\n },\n {\n text: 'Second header with custom bookmark',\n outline: true,\n outlineText: 'Custom bookmark text',\n },\n {\n text: 'Structured bookmarks',\n id: 'structured-bookmarks',\n outline: true,\n outlineExpanded: true\n },\n {\n text: 'First subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Second subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks'\n },\n {\n text: 'Third subheader',\n outline: true,\n outlineParentId: 'structured-bookmarks',\n id: 'third-subheader'\n }\n ]\n};\n```\n\n## Propriedades\n\n- `outline: boolean` - defina como `true` para adicionar aos marcadores\n- `outlineText: string` (opcional) - texto personalizado do marcador; caso contrário, usa o texto do nó\n- `outlineExpanded: boolean` (opcional) - defina como `true` para deixar o marcador expandido/aberto\n- `outlineParentId: string` (opcional) - `id` do marcador pai\n"
+ },
+ {
+ "id": "de/document-definition-object/page",
+ "language": "de",
+ "translationKey": "document-definition-object/page",
+ "path": "/docs/0.3/de/document-definition-object/page/",
+ "title": "Seitengröße, Ausrichtung und Ränder",
+ "description": "Lege Seitengröße, Ausrichtung und Ränder fest und steuere automatische oder explizite Seitenumbrüche.",
+ "version": "0.3",
+ "sourceDigest": "433a428f2dbdb4d2db7e93f3a845e24637a4e34c5631c1d97f53c9f666b00de9",
+ "source": "document-definition-object/page.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/page/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/page",
+ "markdown": "# Seitengröße, Ausrichtung und Ränder\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/page/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};\n```\n\nWenn du `pageSize` als Zeichenfolge festlegst, kannst du einen der folgenden Werte verwenden:\n\n* `'4A0'`, `'2A0'`, `'A0'`, `'A1'`, `'A2'`, `'A3'`, `'A4'`, `'A5'`, `'A6'`, `'A7'`, `'A8'`, `'A9'`, `'A10'`,\n* `'B0'`, `'B1'`, `'B2'`, `'B3'`, `'B4'`, `'B5'`, `'B6'`, `'B7'`, `'B8'`, `'B9'`, `'B10'`,\n* `'C0'`, `'C1'`, `'C2'`, `'C3'`, `'C4'`, `'C5'`, `'C6'`, `'C7'`, `'C8'`, `'C9'`, `'C10'`,\n* `'RA0'`, `'RA1'`, `'RA2'`, `'RA3'`, `'RA4'`,\n* `'SRA0'`, `'SRA1'`, `'SRA2'`, `'SRA3'`, `'SRA4'`,\n* `'EXECUTIVE'`, `'FOLIO'`, `'LEGAL'`, `'LETTER'`, `'TABLOID'`\n\nUm die Seitenausrichtung innerhalb eines Dokuments zu ändern, füge einen Seitenumbruch mit der neuen Ausrichtung ein.\n\n**JavaScript**\n\n```js\nvar dd = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};\n```\n\nAutomatische Seitenhöhe:\n\n**JavaScript**\n\n```js\nvar dd = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}\n```\n\n## Seitenumbrüche dynamisch steuern, zum Beispiel um verwaiste Unterelemente zu vermeiden\n\nDu kannst eine Funktion `pageBreakBefore` angeben, die entscheidet, ob vor einem Knoten ein Seitenumbruch eingefügt werden soll. Für die Regel „keine verwaiste Unterüberschrift“ kannst du folgende Definition verwenden:\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}\n```\n\nWenn `pageBreakBefore` `true` zurückgibt, wird vor dem `currentNode` ein Seitenumbruch eingefügt. Dem aktuellen Knoten sind folgende Informationen zugeordnet:\n\n**JavaScript**\n\n```js\nconst currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};\n```\n\n**TypeScript**\n\n```ts\nconst currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};\n```\n"
+ },
+ {
+ "id": "es/document-definition-object/page",
+ "language": "es",
+ "translationKey": "document-definition-object/page",
+ "path": "/docs/0.3/es/document-definition-object/page/",
+ "title": "Dimensiones, orientación y márgenes de página",
+ "description": "Establece el tamaño, la orientación y los márgenes de página, y controla los saltos de página automáticos o explícitos.",
+ "version": "0.3",
+ "sourceDigest": "433a428f2dbdb4d2db7e93f3a845e24637a4e34c5631c1d97f53c9f666b00de9",
+ "source": "document-definition-object/page.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/page/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/page",
+ "markdown": "# Dimensiones, orientación y márgenes de página\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/page/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};\n```\n\nSi asignas una cadena a `pageSize`, puedes usar uno de estos valores:\n\n* `'4A0'`, `'2A0'`, `'A0'`, `'A1'`, `'A2'`, `'A3'`, `'A4'`, `'A5'`, `'A6'`, `'A7'`, `'A8'`, `'A9'`, `'A10'`,\n* `'B0'`, `'B1'`, `'B2'`, `'B3'`, `'B4'`, `'B5'`, `'B6'`, `'B7'`, `'B8'`, `'B9'`, `'B10'`,\n* `'C0'`, `'C1'`, `'C2'`, `'C3'`, `'C4'`, `'C5'`, `'C6'`, `'C7'`, `'C8'`, `'C9'`, `'C10'`,\n* `'RA0'`, `'RA1'`, `'RA2'`, `'RA3'`, `'RA4'`,\n* `'SRA0'`, `'SRA1'`, `'SRA2'`, `'SRA3'`, `'SRA4'`,\n* `'EXECUTIVE'`, `'FOLIO'`, `'LEGAL'`, `'LETTER'`, `'TABLOID'`\n\nPara cambiar la orientación dentro de un documento, añade un salto de página con la nueva orientación.\n\n**JavaScript**\n\n```js\nvar dd = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};\n```\n\nAltura de página automática:\n\n**JavaScript**\n\n```js\nvar dd = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}\n```\n\n## Controlar dinámicamente los saltos de página, por ejemplo, para evitar hijos huérfanos\n\nSe puede especificar una función `pageBreakBefore` para decidir si se debe insertar un salto de página antes de un nodo. Para implementar una regla que evite dejar encabezados sin contenido debajo, usa una definición como esta:\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}\n```\n\nSi `pageBreakBefore` devuelve `true`, se inserta un salto de página antes de `currentNode`. El nodo actual tiene adjunta la información siguiente:\n\n**JavaScript**\n\n```js\nconst currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};\n```\n\n**TypeScript**\n\n```ts\nconst currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};\n```\n"
+ },
+ {
+ "id": "fr/document-definition-object/page",
+ "language": "fr",
+ "translationKey": "document-definition-object/page",
+ "path": "/docs/0.3/fr/document-definition-object/page/",
+ "title": "Dimensions, orientation et marges des pages",
+ "description": "Définissez le format, l’orientation et les marges des pages, et contrôlez les sauts de page automatiques ou explicites.",
+ "version": "0.3",
+ "sourceDigest": "433a428f2dbdb4d2db7e93f3a845e24637a4e34c5631c1d97f53c9f666b00de9",
+ "source": "document-definition-object/page.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/page/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/page",
+ "markdown": "# Dimensions, orientation et marges des pages\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/page/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};\n```\n\nSi vous définissez `pageSize` sous forme de chaîne, vous pouvez utiliser l’une des valeurs suivantes :\n\n* `'4A0'`, `'2A0'`, `'A0'`, `'A1'`, `'A2'`, `'A3'`, `'A4'`, `'A5'`, `'A6'`, `'A7'`, `'A8'`, `'A9'`, `'A10'`,\n* `'B0'`, `'B1'`, `'B2'`, `'B3'`, `'B4'`, `'B5'`, `'B6'`, `'B7'`, `'B8'`, `'B9'`, `'B10'`,\n* `'C0'`, `'C1'`, `'C2'`, `'C3'`, `'C4'`, `'C5'`, `'C6'`, `'C7'`, `'C8'`, `'C9'`, `'C10'`,\n* `'RA0'`, `'RA1'`, `'RA2'`, `'RA3'`, `'RA4'`,\n* `'SRA0'`, `'SRA1'`, `'SRA2'`, `'SRA3'`, `'SRA4'`,\n* `'EXECUTIVE'`, `'FOLIO'`, `'LEGAL'`, `'LETTER'`, `'TABLOID'`\n\nPour changer l’orientation au sein d’un document, insérez un saut de page avec la nouvelle orientation.\n\n**JavaScript**\n\n```js\nvar dd = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};\n```\n\nHauteur de page automatique :\n\n**JavaScript**\n\n```js\nvar dd = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}\n```\n\n## Contrôler dynamiquement les sauts de page, par exemple pour éviter les titres orphelins\n\nVous pouvez spécifier une fonction `pageBreakBefore` qui détermine si un saut de page doit être inséré avant un nœud. Pour appliquer une règle « pas de titre orphelin », utilisez une définition comme celle-ci :\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}\n```\n\nSi `pageBreakBefore` renvoie `true`, un saut de page est ajouté avant `currentNode`. Les informations suivantes sont attachées au nœud courant :\n\n**JavaScript**\n\n```js\nconst currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};\n```\n\n**TypeScript**\n\n```ts\nconst currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};\n```\n"
+ },
+ {
+ "id": "document-definition-object/page",
+ "language": "en",
+ "translationKey": "document-definition-object/page",
+ "path": "/docs/0.3/document-definition-object/page/",
+ "title": "Page dimensions, orientation and margins",
+ "description": "Set page size, orientation and margins, and control automatic or explicit page breaks.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/page.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/page/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/page",
+ "markdown": "# Page dimensions, orientation and margins\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/page/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};\n```\n\nIf you set `pageSize` to a string, you can use one of the following values:\n\n* `'4A0'`, `'2A0'`, `'A0'`, `'A1'`, `'A2'`, `'A3'`, `'A4'`, `'A5'`, `'A6'`, `'A7'`, `'A8'`, `'A9'`, `'A10'`,\n* `'B0'`, `'B1'`, `'B2'`, `'B3'`, `'B4'`, `'B5'`, `'B6'`, `'B7'`, `'B8'`, `'B9'`, `'B10'`,\n* `'C0'`, `'C1'`, `'C2'`, `'C3'`, `'C4'`, `'C5'`, `'C6'`, `'C7'`, `'C8'`, `'C9'`, `'C10'`,\n* `'RA0'`, `'RA1'`, `'RA2'`, `'RA3'`, `'RA4'`,\n* `'SRA0'`, `'SRA1'`, `'SRA2'`, `'SRA3'`, `'SRA4'`,\n* `'EXECUTIVE'`, `'FOLIO'`, `'LEGAL'`, `'LETTER'`, `'TABLOID'`\n\nTo change page orientation within a document, add a page break with the new page orientation.\n\n**JavaScript**\n\n```js\nvar dd = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};\n```\n\nAutomatic page height:\n\n**JavaScript**\n\n```js\nvar dd = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}\n```\n\n\n## Dynamically control page breaks, for instance to avoid orphan children\n\nA `pageBreakBefore` function can be specified, which can determine if a page break should be inserted before a node. To implement a 'no orphan child' rule, use a definition like this:\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}\n```\n\nIf `pageBreakBefore` returns true, a page break will be added before the `currentNode`. Current node has the following information attached:\n\n**JavaScript**\n\n```js\nconst currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};\n```\n\n**TypeScript**\n\n```ts\nconst currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};\n```\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/page",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/page",
+ "path": "/docs/0.3/pt-br/document-definition-object/page/",
+ "title": "Dimensões, orientação e margens da página",
+ "description": "Defina tamanho, orientação e margens da página e controle quebras de página automáticas ou explícitas.",
+ "version": "0.3",
+ "sourceDigest": "433a428f2dbdb4d2db7e93f3a845e24637a4e34c5631c1d97f53c9f666b00de9",
+ "source": "document-definition-object/page.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/page/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/page",
+ "markdown": "# Dimensões, orientação e margens da página\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/page/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n // a string or { width: number, height: number }\n pageSize: 'A5',\n\n // by default we use portrait, you can change it to landscape if you wish\n pageOrientation: 'landscape',\n\n // [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins\n pageMargins: [ 40, 60, 40, 60 ],\n content: ['Page size, orientation and margins.']\n};\n```\n\nSe você definir `pageSize` como uma string, pode usar um dos valores a seguir:\n\n* `'4A0'`, `'2A0'`, `'A0'`, `'A1'`, `'A2'`, `'A3'`, `'A4'`, `'A5'`, `'A6'`, `'A7'`, `'A8'`, `'A9'`, `'A10'`,\n* `'B0'`, `'B1'`, `'B2'`, `'B3'`, `'B4'`, `'B5'`, `'B6'`, `'B7'`, `'B8'`, `'B9'`, `'B10'`,\n* `'C0'`, `'C1'`, `'C2'`, `'C3'`, `'C4'`, `'C5'`, `'C6'`, `'C7'`, `'C8'`, `'C9'`, `'C10'`,\n* `'RA0'`, `'RA1'`, `'RA2'`, `'RA3'`, `'RA4'`,\n* `'SRA0'`, `'SRA1'`, `'SRA2'`, `'SRA3'`, `'SRA4'`,\n* `'EXECUTIVE'`, `'FOLIO'`, `'LEGAL'`, `'LETTER'`, `'TABLOID'`\n\nPara mudar a orientação da página durante o documento, adicione uma quebra de página com a nova orientação.\n\n**JavaScript**\n\n```js\nvar dd = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageOrientation: 'portrait',\n content: [\n {text: 'Text on Portrait'},\n {text: 'Text on Landscape', pageOrientation: 'landscape', pageBreak: 'before'},\n {text: 'Text on Landscape 2', pageOrientation: 'portrait', pageBreak: 'after'},\n {text: 'Text on Portrait 2'},\n ]\n};\n```\n\nAltura automática da página:\n\n**JavaScript**\n\n```js\nvar dd = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n pageSize: {\n width: 595.28,\n height: 'auto'\n },\n content: [\n // ...\n ]\n}\n```\n\n## Controle dinamicamente as quebras de página, por exemplo, para evitar títulos órfãos\n\nÉ possível especificar uma função `pageBreakBefore` para determinar se uma quebra de página deve ser inserida antes de um nó. Para implementar uma regra que evite um título órfão, use uma definição como esta:\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n {text: '1 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '2 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n {text: '3 Headline', headlineLevel: 1},\n 'Some long text of variable length ...',\n ],\n pageBreakBefore: function(currentNode, nodeContainer) {\n // nodeContainer.getFollowingNodesOnPage();\n // nodeContainer.getNodesOnNextPage();\n // nodeContainer.getPreviousNodesOnPage();\n\n return currentNode.headlineLevel === 1 && nodeContainer.getFollowingNodesOnPage().length === 0;\n }\n}\n```\n\nSe `pageBreakBefore` retornar `true`, será adicionada uma quebra de página antes de `currentNode`. O nó atual tem as informações a seguir:\n\n**JavaScript**\n\n```js\nconst currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};\n```\n\n**TypeScript**\n\n```ts\nconst currentNode = {\n id: '',\n headlineLevel: '',\n text: '',\n ul: '',\n ol: '',\n table: '',\n image: '',\n qr: '',\n canvas: '',\n columns: '',\n style: '',\n pageOrientation: '',\n pageNumbers: [2, 3], // The pages this element is visible on (e.g. multi-line text could be on more than one page)\n pages: 6, // the total number of pages of this document\n stack: false, // if this is an element which encapsulates multiple sub-objects\n startPosition: {\n pageNumber: 2, // the page this node starts on\n pageOrientation: 'landscape', // the orientation of this page\n left: 60, // the left position\n right: 60, // the right position\n verticalRatio: 0.2, // the ratio of space used vertically in this document (excluding margins)\n horizontalRatio: 0.0 // the ratio of space used horizontally in this document (excluding margins)\n }\n};\n```\n"
+ },
+ {
+ "id": "de/document-definition-object/patterns",
+ "language": "de",
+ "translationKey": "document-definition-object/patterns",
+ "path": "/docs/0.3/de/document-definition-object/patterns/",
+ "title": "Muster",
+ "description": "Definiere und verwende Kachelmuster für Text, Vektoren und Tabellenzellen in pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "85d5a2f40ac8d6ba0cd8c74c4dd5d7261674b55739b2309aa929c3410047b331",
+ "source": "document-definition-object/patterns.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/patterns/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/patterns",
+ "markdown": "# Muster\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/patterns/\n\nMuster lassen sich als Wörterbuch vordefinierter Muster in der Dokumentdefinition angeben.\n\nUnterstützt werden nur Kachelmuster.\n\n## Musterdefinition\n\nJedes Muster wird mit folgenden Eigenschaften definiert:\n\n- `boundingBox` – Begrenzungsrahmen zum Beschneiden der Musterzelle\n- `xStep` – horizontaler Abstand zwischen Zellen\n- `yStep` – vertikaler Abstand zwischen Zellen\n- `pattern` – PDF-Datenstrom mit den Operationen zum Zeichnen der Grafiken und des Textes in der Zelle\n\nWeitere Informationen zu den Eigenschaften und Mustern im Allgemeinen findest du in der [PDF-Referenz](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf), insbesondere in Abschnitt 4.6 und 4.6.2 zu Kachelmustern.\n\n## Beispiel einer Musterdefinition\n\nEin einfaches Muster mit Streifen im 45°-Winkel:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};\n```\n\nDie Ausgabe ist im Vektorbeispiel zu sehen.\n\n## Verwendung in Vektoren, Tabellen und Text\n\nDie folgenden Eigenschaften stehen zur Verfügung.\n\nFür Text:\n\n- `background` – als Texthintergrund setzen (siehe Beispiel `styling_properties`)\n\nFür Vektoren:\n\n- `color` – als Füllung eines Vektors setzen (siehe das Rechteck im Vektorbeispiel)\n\nFür Tabellenzellen:\n\n- `fillColor` – Füllfarbe der Zelle (Hintergrund)\n- `overlayPattern` – Muster über den Zellinhalt legen\n- `overlayOpacity` – Deckkraft der Überlagerung\n\nJede dieser Eigenschaften wird als Tupel `[string, string]` angegeben. Das erste Element ist der Schlüssel im Musterwörterbuch, das zweite die Farbe, mit der das Muster gezeichnet wird.\n\n## Beispiele\n\nText:\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };\n```\n\nVektor:\n\n**JavaScript**\n\n```js\nvar dd = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };\n```\n\nTabelle (wie in Tabellenzellen verwendet):\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };\n```\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n}\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { ContentText } from \"pdfmake/interfaces\";\n\n// Cell properties are included in the bundled pdfmake declarations.\nconst cell = {\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n} satisfies ContentText;\n\n```\n"
+ },
+ {
+ "id": "es/document-definition-object/patterns",
+ "language": "es",
+ "translationKey": "document-definition-object/patterns",
+ "path": "/docs/0.3/es/document-definition-object/patterns/",
+ "title": "Patrones",
+ "description": "Configura patrones en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "85d5a2f40ac8d6ba0cd8c74c4dd5d7261674b55739b2309aa929c3410047b331",
+ "source": "document-definition-object/patterns.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/patterns/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/patterns",
+ "markdown": "# Patrones\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/patterns/\n\nLos patrones se pueden definir como un diccionario de patrones predefinidos en la definición del documento.\n\nSolo se admiten patrones de mosaico.\n\n## Definición de patrones\n\nCada patrón se define mediante:\n\n- `boundingBox`: caja delimitadora que recorta la celda del patrón\n- `xStep`: espaciado horizontal entre celdas\n- `yStep`: espaciado vertical entre celdas\n- `pattern`: flujo PDF de operaciones que dibujan los gráficos o el texto de la celda\n\nPara obtener más información sobre cada propiedad y los patrones en general, consulta la [referencia PDF](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf), en especial las secciones 4.6 y 4.6.2 sobre patrones de mosaico.\n\n## Ejemplo de definición de patrón\n\nPatrón básico que crea rayas a 45°:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};\n```\n\nEl resultado se puede ver en el ejemplo vectorial.\n\n## Uso en vectores, tablas y texto\n\nEstán disponibles las propiedades siguientes.\n\nPara texto:\n\n- `background`: se establece como fondo del texto (consulta el ejemplo styling_properties)\n\nPara vectores:\n\n- `color`: se establece como relleno de un vector (consulta el rectángulo del ejemplo vectorial)\n\nPara celdas de tabla:\n\n- `fillColor`: color de relleno de fondo de la celda\n- `overlayPattern`: patrón superpuesto sobre el contenido de la celda\n- `overlayOpacity`: opacidad de la superposición\n\nCada una de estas propiedades se define como una tupla `[string, string]`. El primer elemento es la clave del diccionario de patrones y el segundo es el color con el que se pinta el patrón.\n\n## Ejemplos\n\nTexto:\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };\n```\n\nVector:\n\n**JavaScript**\n\n```js\nvar dd = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };\n```\n\nTabla (en celdas):\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };\n```\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n}\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { ContentText } from \"pdfmake/interfaces\";\n\n// Cell properties are included in the bundled pdfmake declarations.\nconst cell = {\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n} satisfies ContentText;\n\n```\n"
+ },
+ {
+ "id": "fr/document-definition-object/patterns",
+ "language": "fr",
+ "translationKey": "document-definition-object/patterns",
+ "path": "/docs/0.3/fr/document-definition-object/patterns/",
+ "title": "Motifs",
+ "description": "Définissez des motifs répétitifs et utilisez-les comme arrière-plan du texte, remplissage vectoriel ou superposition de cellules de tableau.",
+ "version": "0.3",
+ "sourceDigest": "85d5a2f40ac8d6ba0cd8c74c4dd5d7261674b55739b2309aa929c3410047b331",
+ "source": "document-definition-object/patterns.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/patterns/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/patterns",
+ "markdown": "# Motifs\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/patterns/\n\nLes motifs peuvent être définis sous forme de dictionnaire de motifs prédéfinis dans la définition du document.\n\nSeuls les motifs de pavage sont pris en charge.\n\n## Définition d’un motif\n\nChaque motif est défini à l’aide des propriétés suivantes :\n\n- `boundingBox` - boîte de délimitation servant à découper la cellule du motif\n- `xStep` - espacement horizontal entre les cellules\n- `yStep` - espacement vertical entre les cellules\n- `pattern` - flux d’opérations PDF qui dessinent les éléments graphiques et le texte de la cellule\n\nPour en savoir plus sur chaque propriété et les motifs en général, consultez la [référence PDF](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf), en particulier les sections 4.6 et 4.6.2 sur les motifs de pavage.\n\n## Exemple de définition d’un motif\n\nMotif de base produisant des rayures à 45° :\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};\n```\n\nLe résultat est visible dans l’exemple vectoriel.\n\n## Utilisation dans les vecteurs, tableaux et textes\n\nLes propriétés suivantes sont disponibles.\n\nPour le texte :\n\n- `background` - définit l’arrière-plan du texte (voir l’exemple `styling_properties`)\n\nPour les vecteurs :\n\n- `color` - définit la couleur de remplissage d’un vecteur (voir le rectangle dans l’exemple vectoriel)\n\nPour les cellules de tableau :\n\n- `fillColor` - couleur de remplissage de la cellule (arrière-plan)\n- `overlayPattern` - motif superposé à la cellule, dessiné par-dessus le contenu\n- `overlayOpacity` - opacité de la superposition\n\nChacune de ces propriétés est définie par un tuple `[string, string]`. Le premier élément est la clé du motif dans le dictionnaire et le second est la couleur utilisée pour dessiner le motif.\n\n## Exemples\n\nTexte :\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };\n```\n\nVecteur :\n\n**JavaScript**\n\n```js\nvar dd = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };\n```\n\nTableau (dans les cellules) :\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };\n```\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n}\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { ContentText } from \"pdfmake/interfaces\";\n\n// Cell properties are included in the bundled pdfmake declarations.\nconst cell = {\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n} satisfies ContentText;\n\n```\n"
+ },
+ {
+ "id": "document-definition-object/patterns",
+ "language": "en",
+ "translationKey": "document-definition-object/patterns",
+ "path": "/docs/0.3/document-definition-object/patterns/",
+ "title": "Patterns",
+ "description": "Configure patterns in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/patterns.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/patterns/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/patterns",
+ "markdown": "# Patterns\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/patterns/\n\nPatterns can be defined as a dictionary of predefined patterns in the document definition.\n\nOnly tiling patterns are supported.\n\n## Pattern definition\n\nEach pattern is defined using:\n\n- `boundingBox` - bounding box used to clip the pattern cell\n- `xStep` - horizontal spacing between cells\n- `yStep` - vertical spacing between cells\n- `pattern` - a PDF stream of operations that render the graphics/text of the cell\n\nFor more information on each property and patterns in general see the [PDF reference](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf), section 4.6 and 4.6.2 specifically on tiling patterns.\n\n## Pattern definition example\n\nBasic pattern that produces a 45° stripe pattern:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};\n```\n\nThe output can be seen in the vector example.\n\n## Usage in vectors, tables and text\n\nThe following properties are available.\n\nFor text:\n\n- `background` - set as background for text (see styling_properties example)\n\nFor vectors:\n\n- `color` - set as fill for a vector (see the rectangle in vector example)\n\nFor table cells:\n\n- `fillColor` - cell (background) fill color\n- `overlayPattern` - overlay for a cell, painted over the contents\n- `overlayOpacity` - the opacity of the overlay\n\nEach of the above properties is defined as a tuple `[string, string]`. The first element is the key in the patterns dictionary and the second is the color to use to paint the pattern.\n\n## Examples\n\nText:\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };\n```\n\nVector:\n\n**JavaScript**\n\n```js\nvar dd = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };\n```\n\nTable (as used in table cells):\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };\n```\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n}\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { ContentText } from \"pdfmake/interfaces\";\n\n// Cell properties are included in the bundled pdfmake declarations.\nconst cell = {\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n} satisfies ContentText;\n\n```\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/patterns",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/patterns",
+ "path": "/docs/0.3/pt-br/document-definition-object/patterns/",
+ "title": "Padrões",
+ "description": "Defina padrões repetidos para texto, formas vetoriais e preenchimentos de células no pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "85d5a2f40ac8d6ba0cd8c74c4dd5d7261674b55739b2309aa929c3410047b331",
+ "source": "document-definition-object/patterns.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/patterns/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/patterns",
+ "markdown": "# Padrões\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/patterns/\n\nOs padrões podem ser definidos como um dicionário de padrões predefinidos na definição do documento.\n\nHá suporte somente a padrões de ladrilhamento.\n\n## Definição de padrão\n\nCada padrão é definido com:\n\n- `boundingBox` - caixa delimitadora usada para recortar a célula do padrão\n- `xStep` - espaçamento horizontal entre as células\n- `yStep` - espaçamento vertical entre as células\n- `pattern` - fluxo PDF de operações que renderizam os gráficos/texto da célula\n\nPara obter mais informações sobre cada propriedade e padrões em geral, consulte a [referência do PDF](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf), especialmente as seções 4.6 e 4.6.2 sobre padrões de ladrilhamento.\n\n## Exemplo de definição de padrão\n\nPadrão básico que produz listras a 45°:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\"...\"],\n patterns: {\n stripe45d: {\n boundingBox: [1, 1, 4, 4],\n xStep: 3,\n yStep: 3,\n pattern: \"1 w 0 1 m 4 5 l s 2 0 m 5 3 l s\",\n },\n },\n};\n```\n\nO resultado pode ser visto no exemplo vetorial.\n\n## Uso em vetores, tabelas e texto\n\nAs propriedades a seguir estão disponíveis.\n\nPara texto:\n\n- `background` - define o fundo do texto (consulte o exemplo styling_properties)\n\nPara vetores:\n\n- `color` - define o preenchimento de um vetor (consulte o retângulo no exemplo vetorial)\n\nPara células de tabela:\n\n- `fillColor` - cor de preenchimento da célula (fundo)\n- `overlayPattern` - sobreposição da célula, desenhada sobre o conteúdo\n- `overlayOpacity` - opacidade da sobreposição\n\nCada uma das propriedades acima é definida como uma tupla `[string, string]`. O primeiro elemento é a chave no dicionário `patterns`; o segundo é a cor usada para desenhar o padrão.\n\n## Exemplos\n\nTexto:\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{ text: 'Insert lorem. And ipsum', background: ['stripe45d', 'gray'] }\n] };\n```\n\nVetor:\n\n**JavaScript**\n\n```js\nvar dd = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{ canvas: [\n{\n type: 'rect',\n x: 10, y: 250, w: 50, h: 30,\n color: ['stripe45d', 'blue'],\n}\n] }] };\n```\n\nTabela (usado em células da tabela):\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.85,\n fillColor: ['stripe45d', 'blue']\n}\n] };\n```\n\n**JavaScript**\n\n```js\nvar dd = { content: [\n{\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n}\n] };\n```\n\n**TypeScript**\n\n```ts\nimport type { ContentText } from \"pdfmake/interfaces\";\n\n// Cell properties are included in the bundled pdfmake declarations.\nconst cell = {\n text: 'Sample value',\n fillOpacity: 0.15,\n fillColor: 'blue',\n overlayPattern: ['stripe45d', 'gray'],\n overlayOpacity: 0.15\n} satisfies ContentText;\n\n```\n"
+ },
+ {
+ "id": "de/document-definition-object/pdfa",
+ "language": "de",
+ "translationKey": "document-definition-object/pdfa",
+ "path": "/docs/0.3/de/document-definition-object/pdfa/",
+ "title": "PDF/A",
+ "description": "Lege mit Beispielen, Optionen und Anwendungshinweisen PDF/A in pdfmake 0.3 fest.",
+ "version": "0.3",
+ "sourceDigest": "3a4aac84f9ac2fad0a48e377a819ab231184afd5b8138332817198c5125b12c5",
+ "source": "document-definition-object/pdfa.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/pdfa/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/pdfa",
+ "markdown": "# PDF/A\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/pdfa/\n\nPDF/A ist ein spezielles Format zur Archivierung und langfristigen Aufbewahrung elektronischer Dokumente.\n\nErforderlich ist PDF-Version 1.4 oder höher.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};\n```\n\nUnterstützte PDF-Versionen (Eigenschaft `version`):\n- `1.3` – PDF-Version 1.3 (Standard), **für PDF/A nicht unterstützt**\n- `1.4` – PDF-Version 1.4\n- `1.5` – PDF-Version 1.5\n- `1.6` – PDF-Version 1.6\n- `1.7` – PDF-Version 1.7\n- `1.7ext3` – PDF-Version 1.7 ExtensionLevel 3\n\nKonformitätsstufe des Dokuments (Eigenschaft `subset`):\n- `PDF/A-1` (Kurzform für PDF/A-1b)\n- `PDF/A-1a`\n- `PDF/A-1b`\n- `PDF/A-2` (Kurzform für PDF/A-2b)\n- `PDF/A-2a`\n- `PDF/A-2b`\n- `PDF/A-3` (Kurzform für PDF/A-3b)\n- `PDF/A-3a`\n- `PDF/A-3b`\n- `PDF/UA`\n\nDokument als getaggtes PDF kennzeichnen (Eigenschaft `tagged`):\n- `true` – aktivieren\n- `false` – deaktivieren\n\nDokumenttitel in der Titelleiste des Fensters anzeigen (Eigenschaft `displayTitle`):\n- `true` – aktivieren\n- `false` – deaktivieren\n"
+ },
+ {
+ "id": "es/document-definition-object/pdfa",
+ "language": "es",
+ "translationKey": "document-definition-object/pdfa",
+ "path": "/docs/0.3/es/document-definition-object/pdfa/",
+ "title": "PDF/A",
+ "description": "Configura PDF/A en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "3a4aac84f9ac2fad0a48e377a819ab231184afd5b8138332817198c5125b12c5",
+ "source": "document-definition-object/pdfa.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/pdfa/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/pdfa",
+ "markdown": "# PDF/A\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/pdfa/\n\nPDF/A está especializado en el archivado y la conservación a largo plazo de documentos electrónicos.\n\nSe requiere la versión 1.4 de PDF o posterior.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};\n```\n\nVersiones PDF compatibles (propiedad `version`):\n- `1.3`: PDF 1.3 (predeterminada), **no compatible con PDF/A**\n- `1.4`: PDF 1.4\n- `1.5`: PDF 1.5\n- `1.6`: PDF 1.6\n- `1.7`: PDF 1.7\n- `1.7ext3`: PDF 1.7 ExtensionLevel 3\n\nSubconjunto del documento (propiedad `subset`):\n- `PDF/A-1` (atajo de PDF/A-1b)\n- `PDF/A-1a`\n- `PDF/A-1b`\n- `PDF/A-2` (atajo de PDF/A-2b)\n- `PDF/A-2a`\n- `PDF/A-2b`\n- `PDF/A-3` (atajo de PDF/A-3b)\n- `PDF/A-3a`\n- `PDF/A-3b`\n- `PDF/UA`\n\nMarcar el documento como PDF etiquetado (propiedad `tagged`):\n- `true`: activar\n- `false`: desactivar\n\nMostrar el título del documento en el título de la ventana (propiedad `displayTitle`):\n- `true`: activar\n- `false`: desactivar\n"
+ },
+ {
+ "id": "fr/document-definition-object/pdfa",
+ "language": "fr",
+ "translationKey": "document-definition-object/pdfa",
+ "path": "/docs/0.3/fr/document-definition-object/pdfa/",
+ "title": "PDF/A",
+ "description": "Créez des documents PDF/A pour l’archivage et la conservation électronique à long terme.",
+ "version": "0.3",
+ "sourceDigest": "3a4aac84f9ac2fad0a48e377a819ab231184afd5b8138332817198c5125b12c5",
+ "source": "document-definition-object/pdfa.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/pdfa/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/pdfa",
+ "markdown": "# PDF/A\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/pdfa/\n\nPDF/A est un format spécialisé dans l’archivage et la conservation à long terme des documents électroniques.\n\nLa version PDF 1.4 ou ultérieure est requise.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};\n```\n\nVersions PDF prises en charge (propriété `version`) :\n- `1.3` - version PDF 1.3 (par défaut), **PDF/A non pris en charge**\n- `1.4` - version PDF 1.4\n- `1.5` - version PDF 1.5\n- `1.6` - version PDF 1.6\n- `1.7` - version PDF 1.7\n- `1.7ext3` - version PDF 1.7 ExtensionLevel 3\n\nSous-ensemble du document (propriété `subset`) :\n- `PDF/A-1` (raccourci pour PDF/A-1b)\n- `PDF/A-1a`\n- `PDF/A-1b`\n- `PDF/A-2` (raccourci pour PDF/A-2b)\n- `PDF/A-2a`\n- `PDF/A-2b`\n- `PDF/A-3` (raccourci pour PDF/A-3b)\n- `PDF/A-3a`\n- `PDF/A-3b`\n- `PDF/UA`\n\nMarquer le document comme PDF balisé (propriété `tagged`) :\n- `true` - activer\n- `false` - désactiver\n\nAfficher le titre du document dans la barre de titre de la fenêtre (propriété `displayTitle`) :\n- `true` - activer\n- `false` - désactiver\n"
+ },
+ {
+ "id": "document-definition-object/pdfa",
+ "language": "en",
+ "translationKey": "document-definition-object/pdfa",
+ "path": "/docs/0.3/document-definition-object/pdfa/",
+ "title": "PDF/A",
+ "description": "Configure pdf/a in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/pdfa.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/pdfa/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/pdfa",
+ "markdown": "# PDF/A\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/pdfa/\n\nPDF/A is specialized for use in the archiving and long-term preservation of electronic documents.\n\nPDF version 1.4 or above is required.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};\n```\n\nSupported PDF versions (property `version`):\n- `1.3` - PDF version 1.3 (default) **not supported PDF/A**\n- `1.4` - PDF version 1.4\n- `1.5` - PDF version 1.5\n- `1.6` - PDF version 1.6\n- `1.7` - PDF version 1.7\n- `1.7ext3` - PDF version 1.7 ExtensionLevel 3\n\nSubset of document (property `subset`):\n- `PDF/A-1` (shortcut for PDF/A-1b)\n- `PDF/A-1a`\n- `PDF/A-1b`\n- `PDF/A-2` (shortcut for PDF/A-2b)\n- `PDF/A-2a`\n- `PDF/A-2b`\n- `PDF/A-3` (shortcut for PDF/A-3b)\n- `PDF/A-3a`\n- `PDF/A-3b`\n- `PDF/UA`\n\nMark document as Tagged PDF (property `tagged`)\n- `true` - enable\n- `false` - disable\n\nDisplay of document title in window title (property `displayTitle`)\n- `true` - enable\n- `false` - disable\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/pdfa",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/pdfa",
+ "path": "/docs/0.3/pt-br/document-definition-object/pdfa/",
+ "title": "PDF/A",
+ "description": "Configure a saída em PDF/A no pdfmake 0.3 e escolha a versão e o subconjunto do padrão de arquivamento.",
+ "version": "0.3",
+ "sourceDigest": "3a4aac84f9ac2fad0a48e377a819ab231184afd5b8138332817198c5125b12c5",
+ "source": "document-definition-object/pdfa.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/pdfa/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/pdfa",
+ "markdown": "# PDF/A\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/pdfa/\n\nPDF/A é um formato especializado para arquivamento e preservação de longo prazo de documentos eletrônicos.\n\nÉ necessária a versão 1.4 ou superior do PDF.\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n version: '1.5',\n subset: 'PDF/A-3a',\n tagged: true,\n displayTitle: true,\n info: {\n title: 'Awesome PDF document from pdfmake'\n },\n content: [\n 'PDF/A document for archive'\n ]\n};\n```\n\nVersões de PDF compatíveis (propriedade `version`):\n- `1.3` - versão PDF 1.3 (padrão), **não compatível com PDF/A**\n- `1.4` - versão PDF 1.4\n- `1.5` - versão PDF 1.5\n- `1.6` - versão PDF 1.6\n- `1.7` - versão PDF 1.7\n- `1.7ext3` - extensão nível 3 da versão PDF 1.7\n\nSubconjunto do documento (propriedade `subset`):\n- `PDF/A-1` (atalho para PDF/A-1b)\n- `PDF/A-1a`\n- `PDF/A-1b`\n- `PDF/A-2` (atalho para PDF/A-2b)\n- `PDF/A-2a`\n- `PDF/A-2b`\n- `PDF/A-3` (atalho para PDF/A-3b)\n- `PDF/A-3a`\n- `PDF/A-3b`\n- `PDF/UA`\n\nMarque o documento como PDF marcado (propriedade `tagged`):\n- `true` - ativado\n- `false` - desativado\n\nExibição do título do documento na barra de título da janela (propriedade `displayTitle`):\n- `true` - ativada\n- `false` - desativada\n"
+ },
+ {
+ "id": "de/document-definition-object/qr",
+ "language": "de",
+ "translationKey": "document-definition-object/qr",
+ "path": "/docs/0.3/de/document-definition-object/qr/",
+ "title": "QR-Code",
+ "description": "Erzeuge QR-Codes in pdfmake 0.3 und passe Farbe, Größe, Version, Fehlerkorrektur, Kodierung und Maskenmuster an.",
+ "version": "0.3",
+ "sourceDigest": "1faae2f9f0ec8989f3aac23e9c10b8b8c91998d2830d52b4558b2ff3f8beafe9",
+ "source": "document-definition-object/qr.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/qr/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/qr",
+ "markdown": "# QR-Code\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/qr/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}\n```\n\nEigenschaften:\n\n* `qr`: `string` – Text im QR-Code\n* `foreground`: `string` (optional, Standard schwarz) – Vordergrundfarbe\n* `background`: `string` (optional, Standard weiß) – Hintergrundfarbe\n* `fit`: `integer` (optional) – Größe des ausgegebenen QR-Bildes anpassen\n* `version`: `integer` (optional) – QR-Version von 1 bis 40 (Details siehe [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Storage))\n* `eccLevel`: `string` (optional, Standard L) – Fehlerkorrekturstufe (Details siehe [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Error_correction)); mögliche Werte:\n * _L_ – Stufe L (niedrig), ungefähr 7 % der Codewörter können wiederhergestellt werden\n * _M_ – Stufe M (mittel), ungefähr 15 % der Codewörter können wiederhergestellt werden\n * _Q_ – Stufe Q (Quartil), ungefähr 25 % der Codewörter können wiederhergestellt werden\n * _H_ – Stufe H (hoch), ungefähr 30 % der Codewörter können wiederhergestellt werden\n* `mode`: `string` (optional) – Kodierungsmodus; mögliche Werte: _numeric_, _alphanumeric_, _octet_ (Details siehe [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Storage))\n* `mask`: `integer` (optional) – Maskenmuster von 0 bis 7 (Details siehe [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Encoding))\n"
+ },
+ {
+ "id": "es/document-definition-object/qr",
+ "language": "es",
+ "translationKey": "document-definition-object/qr",
+ "path": "/docs/0.3/es/document-definition-object/qr/",
+ "title": "Código QR",
+ "description": "Configura códigos QR en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "1faae2f9f0ec8989f3aac23e9c10b8b8c91998d2830d52b4558b2ff3f8beafe9",
+ "source": "document-definition-object/qr.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/qr/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/qr",
+ "markdown": "# Código QR\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/qr/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}\n```\n\nPropiedades:\n\n* `qr`: `string`, texto del código QR\n* `foreground`: `string` (opcional, valor predeterminado: negro), color del primer plano\n* `background`: `string` (opcional, valor predeterminado: blanco), color del fondo\n* `fit`: `integer` (opcional), tamaño al que ajustar la imagen QR de salida\n* `version`: `integer` (opcional), versión del código QR entre 1 y 40 (para más detalles, consulta [Wikipedia](https://en.wikipedia.org/wiki/QR_code#Storage))\n* `eccLevel`: `string` (opcional, valor predeterminado: L), capacidad de corrección de errores (para más detalles, consulta [Wikipedia](https://en.wikipedia.org/wiki/QR_code#Error_correction)); valores posibles:\n * _L_: nivel L (bajo), se puede recuperar aproximadamente el 7 % de las palabras de código\n * _M_: nivel M (medio), se puede recuperar aproximadamente el 15 % de las palabras de código\n * _Q_: nivel Q (cuartil), se puede recuperar aproximadamente el 25 % de las palabras de código\n * _H_: nivel H (alto), se puede recuperar aproximadamente el 30 % de las palabras de código\n* `mode`: `string` (opcional), modo de codificación; valores posibles: _numeric_, _alphanumeric_, _octet_ (para más detalles, consulta [Wikipedia](https://en.wikipedia.org/wiki/QR_code#Storage))\n* `mask`: `integer` (opcional), patrón de máscara, intervalo de 0 a 7 (para más detalles, consulta [Wikipedia](https://en.wikipedia.org/wiki/QR_code#Encoding))\n"
+ },
+ {
+ "id": "fr/document-definition-object/qr",
+ "language": "fr",
+ "translationKey": "document-definition-object/qr",
+ "path": "/docs/0.3/fr/document-definition-object/qr/",
+ "title": "Code QR",
+ "description": "Ajoutez des codes QR et configurez leur couleur, leur taille, leur version, la correction d’erreurs et le mode d’encodage.",
+ "version": "0.3",
+ "sourceDigest": "1faae2f9f0ec8989f3aac23e9c10b8b8c91998d2830d52b4558b2ff3f8beafe9",
+ "source": "document-definition-object/qr.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/qr/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/qr",
+ "markdown": "# Code QR\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/qr/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}\n```\n\nPropriétés :\n\n* `qr` : `string` - texte du code QR\n* `foreground` : `string` (facultatif, noir par défaut) - couleur de premier plan\n* `background` : `string` (facultatif, blanc par défaut) - couleur d’arrière-plan\n* `fit` : `integer` (facultatif) - ajuste la taille de l’image QR générée\n* `version` : `integer` (facultatif) - version QR, de 1 à 40 (voir [Wikipédia](https://en.wikipedia.org/wiki/QR_code#Storage))\n* `eccLevel` : `string` (facultatif, L par défaut) - capacité de correction d’erreurs (voir [Wikipédia](https://en.wikipedia.org/wiki/QR_code#Error_correction)), valeurs possibles :\n * _L_ - niveau L (faible), environ 7 % des mots de code peuvent être restaurés\n * _M_ - niveau M (moyen), environ 15 % des mots de code peuvent être restaurés\n * _Q_ - niveau Q (quartile), environ 25 % des mots de code peuvent être restaurés\n * _H_ - niveau H (élevé), environ 30 % des mots de code peuvent être restaurés\n* `mode` : `string` (facultatif) - mode d’encodage ; valeurs possibles : _numeric_, _alphanumeric_, _octet_ (voir [Wikipédia](https://en.wikipedia.org/wiki/QR_code#Storage))\n* `mask` : `integer` (facultatif) - motif de masque, de 0 à 7 (voir [Wikipédia](https://en.wikipedia.org/wiki/QR_code#Encoding))\n"
+ },
+ {
+ "id": "document-definition-object/qr",
+ "language": "en",
+ "translationKey": "document-definition-object/qr",
+ "path": "/docs/0.3/document-definition-object/qr/",
+ "title": "QR code",
+ "description": "Configure qr code in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/qr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/qr/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/qr",
+ "markdown": "# QR code\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/qr/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}\n```\n\nProperties:\n\n* `qr`: `string` - text in QR code\n* `foreground`: `string` (optional, default black) - foreground color\n* `background`: `string` (optional, default white) - background color\n* `fit`: `integer` (optional) - fit the output QR image\n* `version`: `integer` (optional) - QR version range from 1 to 40 (for details see [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Storage)\n* `eccLevel`: `string` (optional, default L) - error correction capability (for details see [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Error_correction)), possible values:\n * _L_ - Level L (Low), approx 7% of codewords can be restored\n * _M_ - Level M (Medium), approx 15% of codewords can be restored\n * _Q_ - Level Q (Quartile), approx 25% of codewords can be restored\n * _H_ - Level H (High), approx 30% of codewords can be restored\n* `mode`: `string` (optional) - encoding mode, possible values: _numeric_, _alphanumeric, octet_ (for details see [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Storage))\n* `mask`: `integer` (optional) - mask pattern, range from 0 to 7 (for details see [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Encoding))\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/qr",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/qr",
+ "path": "/docs/0.3/pt-br/document-definition-object/qr/",
+ "title": "Código QR",
+ "description": "Gere códigos QR com texto, cores, tamanho, versão e nível de correção de erros no pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "1faae2f9f0ec8989f3aac23e9c10b8b8c91998d2830d52b4558b2ff3f8beafe9",
+ "source": "document-definition-object/qr.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/qr/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/qr",
+ "markdown": "# Código QR\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/qr/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n // basic usage\n { qr: 'text in QR' },\n\n // colored QR\n { qr: 'text in QR', foreground: 'red', background: 'yellow' },\n\n // resized QR\n { qr: 'text in QR', fit: 500 },\n ]\n}\n```\n\nPropriedades:\n\n* `qr`: `string` - texto no código QR\n* `foreground`: `string` (opcional, padrão preto) - cor do primeiro plano\n* `background`: `string` (opcional, padrão branco) - cor do fundo\n* `fit`: `integer` (opcional) - ajusta o tamanho da imagem QR de saída\n* `version`: `integer` (opcional) - versão QR de 1 a 40 (detalhes em [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Storage))\n* `eccLevel`: `string` (opcional, padrão L) - capacidade de correção de erros (detalhes em [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Error_correction)); valores possíveis:\n * _L_ - nível L (baixo), aproximadamente 7% das palavras de código podem ser restauradas\n * _M_ - nível M (médio), aproximadamente 15% das palavras de código podem ser restauradas\n * _Q_ - nível Q (quartil), aproximadamente 25% das palavras de código podem ser restauradas\n * _H_ - nível H (alto), aproximadamente 30% das palavras de código podem ser restauradas\n* `mode`: `string` (opcional) - modo de codificação; valores possíveis: _numeric_, _alphanumeric_, _octet_ (detalhes em [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Storage))\n* `mask`: `integer` (opcional) - padrão de máscara, de 0 a 7 (detalhes em [wikipedia.org](https://en.wikipedia.org/wiki/QR_code#Encoding))\n"
+ },
+ {
+ "id": "de/document-definition-object/sections",
+ "language": "de",
+ "translationKey": "document-definition-object/sections",
+ "path": "/docs/0.3/de/document-definition-object/sections/",
+ "title": "Dokumentabschnitte",
+ "description": "Lege für einzelne Dokumentabschnitte in pdfmake 0.3 Seiteneinstellungen, Kopf- und Fußzeilen, Wasserzeichen sowie Hintergründe fest.",
+ "version": "0.3",
+ "sourceDigest": "6dc77fa5678a9e679efdf6b4bff537f029525cefa55e1030486444fce88c0ea8",
+ "source": "document-definition-object/sections.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/sections/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/sections",
+ "markdown": "# Dokumentabschnitte\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/sections/\n\nMit Dokumentabschnitten kannst du ein Dokument in mehrere Teile mit jeweils eigenen Seiteneinstellungen aufteilen.\n\nJeder Abschnitt kann Folgendes festlegen:\n- eigene Seitengröße und Ausrichtung\n- eigene Seitenränder\n- eigene Kopf- und Fußzeile\n- eigenes Wasserzeichen\n- eigenen Hintergrund\n\nEine Definition mit allen Eigenschaften:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\nIm nächsten Abschnitt können Eigenschaften vom vorherigen Abschnitt übernommen werden:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\nEin vollständiges Beispiel findest du unter [examples/section.js](https://github.com/bpampuch/pdfmake/blob/master/examples/sections.js).\n"
+ },
+ {
+ "id": "es/document-definition-object/sections",
+ "language": "es",
+ "translationKey": "document-definition-object/sections",
+ "path": "/docs/0.3/es/document-definition-object/sections/",
+ "title": "Secciones del documento",
+ "description": "Configura secciones de documentos en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "6dc77fa5678a9e679efdf6b4bff537f029525cefa55e1030486444fce88c0ea8",
+ "source": "document-definition-object/sections.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/sections/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/sections",
+ "markdown": "# Secciones del documento\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/sections/\n\nLas secciones del documento permiten dividirlo en varias partes, cada una con su propia configuración de página.\n\nCada sección admite:\n- tamaño y orientación de página personalizados\n- márgenes de página personalizados\n- encabezado y pie de página personalizados\n- marca de agua personalizada\n- fondo personalizado\n\nDefinición con todas las propiedades:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\nEn la sección siguiente, las propiedades se pueden heredar de la sección anterior:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\nHay un ejemplo completo en [examples/section.js](https://github.com/bpampuch/pdfmake/blob/master/examples/sections.js).\n"
+ },
+ {
+ "id": "fr/document-definition-object/sections",
+ "language": "fr",
+ "translationKey": "document-definition-object/sections",
+ "path": "/docs/0.3/fr/document-definition-object/sections/",
+ "title": "Sections du document",
+ "description": "Divisez un document en sections dotées de paramètres de page, d’en-têtes, de pieds de page, de filigranes et d’arrière-plans distincts.",
+ "version": "0.3",
+ "sourceDigest": "6dc77fa5678a9e679efdf6b4bff537f029525cefa55e1030486444fce88c0ea8",
+ "source": "document-definition-object/sections.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/sections/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/sections",
+ "markdown": "# Sections du document\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/sections/\n\nLes sections de document permettent de diviser un document en plusieurs parties, chacune avec ses propres paramètres de page.\n\nChaque section prend en charge :\n- un format et une orientation de page personnalisés\n- des marges de page personnalisées\n- un en-tête et un pied de page personnalisés\n- un filigrane personnalisé\n- un arrière-plan personnalisé\n\nDéfinition incluant toutes les propriétés :\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\nDans la section suivante, les propriétés peuvent être héritées de la section précédente :\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\nUn [exemple complet](https://github.com/bpampuch/pdfmake/blob/master/examples/sections.js) est disponible.\n"
+ },
+ {
+ "id": "document-definition-object/sections",
+ "language": "en",
+ "translationKey": "document-definition-object/sections",
+ "path": "/docs/0.3/document-definition-object/sections/",
+ "title": "Document sections",
+ "description": "Configure document sections in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/sections.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/sections/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/sections",
+ "markdown": "# Document sections\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/sections/\n\nDocument sections allow you to divide a document into multiple parts, each with its own page settings.\n\nEach section support:\n- custom page size and orientation\n- custom page margin\n- custom header/footer\n- custom watermark\n- custom background\n\nDefinition including all properties:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\nIn the next section, properties can be inherited from the previous section:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\nFull example is available in [examples/section.js](https://github.com/bpampuch/pdfmake/blob/master/examples/sections.js).\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/sections",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/sections",
+ "path": "/docs/0.3/pt-br/document-definition-object/sections/",
+ "title": "Seções do documento",
+ "description": "Divida o documento em seções com configurações próprias de página, cabeçalho, rodapé e fundo.",
+ "version": "0.3",
+ "sourceDigest": "6dc77fa5678a9e679efdf6b4bff537f029525cefa55e1030486444fce88c0ea8",
+ "source": "document-definition-object/sections.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/sections/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/sections",
+ "markdown": "# Seções do documento\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/sections/\n\nAs seções do documento permitem dividi-lo em várias partes, cada uma com suas próprias configurações de página.\n\nCada seção oferece suporte a:\n- tamanho e orientação de página personalizados\n- margens de página personalizadas\n- cabeçalho e rodapé personalizados\n- marca-d'água personalizada\n- plano de fundo personalizado\n\nDefinição com todas as propriedades:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n footer: function (currentPage, pageCount) {\n return currentPage.toString() + ' of ' + pageCount;\n },\n background: function () {\n return {text: 'background', alignment: 'right'};\n },\n watermark: 'watermark',\n pageSize: 'A4',\n pageOrientation: 'landscape',\n pageMargins: 5,\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\nNa seção seguinte, as propriedades podem ser herdadas da seção anterior:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n header: 'inherit',\n footer: 'inherit',\n background: 'inherit',\n watermark: 'inherit',\n pageSize: 'inherit',\n pageOrientation: 'inherit',\n pageMargins: 'inherit',\n section: [\n 'Text in section.'\n ]\n }\n ]\n}\n```\n\nO exemplo completo está disponível em [examples/section.js](https://github.com/bpampuch/pdfmake/blob/master/examples/sections.js).\n"
+ },
+ {
+ "id": "de/document-definition-object/security",
+ "language": "de",
+ "translationKey": "document-definition-object/security",
+ "path": "/docs/0.3/de/document-definition-object/security/",
+ "title": "Verschlüsselung und Zugriffsrechte",
+ "description": "Lege PDF-Passwörter, Verschlüsselungsversionen und Dokumentberechtigungen fest; diese sind von Ressourcen-Zugriffsrichtlinien getrennt.",
+ "version": "0.3",
+ "sourceDigest": "6736e08d8db59cae0ce17becb97f86de18201817a5135ee1385a2a15cc1608f5",
+ "source": "document-definition-object/security.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/security/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/security",
+ "markdown": "# Verschlüsselung und Zugriffsrechte\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/security/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};\n```\n\nPDF-Dokumente können verschlüsselt und beim Öffnen durch ein Passwort geschützt werden. Außerdem können Berechtigungen für die Aktionen festgelegt werden, die Benutzer mit dem PDF ausführen dürfen.\n\nUm die Verschlüsselung zu aktivieren, setze das Benutzerpasswort (Zeichenfolge) in `userPassword`. Wenn ein Benutzerpasswort angegeben ist, wird die PDF-Datei verschlüsselt und Benutzer werden beim Öffnen aufgefordert, das Passwort zum Entschlüsseln einzugeben.\n\nUm Zugriffsrechte für die PDF-Datei festzulegen, musst du ein Eigentümerpasswort (Zeichenfolge) in `ownerPassword` und ein Objekt `permissions` mit Berechtigungen angeben. Standardmäßig sind alle Vorgänge gesperrt. Du musst die gewünschten Vorgänge ausdrücklich erlauben.\n\nFolgende Einstellungen sind im Objekt `permissions` möglich:\n\n- `printing` – ob Drucken erlaubt ist. Mit `\"lowResolution\"` wird Drucken in niedriger Auflösung erlaubt, mit `\"highResolution\"` Drucken in hoher Auflösung.\n- `modifying` – ob Änderungen erlaubt sind. Setze den Wert auf `true`, um Änderungen am Dokumentinhalt zu erlauben.\n- `copying` – ob Text oder Grafiken kopiert werden dürfen. Setze den Wert auf `true`, um das Kopieren zu erlauben.\n- `annotating` – ob Anmerkungen und das Ausfüllen von Formularen erlaubt sind. Setze den Wert auf `true`, um beides zuzulassen.\n- `fillingForms` – ob Formulare ausgefüllt und signiert werden dürfen. Setze den Wert auf `true`, um das Ausfüllen und Signieren von Formularfeldern zu erlauben.\n- `contentAccessibility` – ob Text für Barrierefreiheit kopiert werden darf. Setze den Wert auf `true`, um dieses Kopieren zu erlauben.\n- `documentAssembly` – ob das Dokument zusammengestellt werden darf. Setze den Wert auf `true`, um das Zusammenstellen zu erlauben.\n\nDu kannst das Benutzerpasswort, das Eigentümerpasswort oder beide angeben. Das Verhalten hängt von den angegebenen Passwörtern ab:\n\n- Wenn nur ein Benutzerpasswort angegeben ist, können Benutzer mit diesem Passwort die Datei entschlüsseln und haben vollen Zugriff auf das Dokument.\n- Wenn nur ein Eigentümerpasswort angegeben ist, können Benutzer das Dokument ohne Passwort entschlüsseln und öffnen, haben aber nur Zugriff auf ausdrücklich erlaubte Vorgänge. Benutzer mit Eigentümerpasswort haben vollen Zugriff auf das Dokument.\n- Wenn beide Passwörter angegeben sind, können Benutzer mit dem Benutzerpasswort die Datei entschlüsseln, haben aber entsprechend den Berechtigungseinstellungen nur eingeschränkten Zugriff. Benutzer mit Eigentümerpasswort haben vollen Zugriff auf das Dokument.\n\nBeachte, dass die PDF-Datei selbst Zugriffsrechte nicht durchsetzen kann. Sobald die Datei entschlüsselt ist, haben PDF-Viewer Zugriff auf den gesamten Dateiinhalt. Es liegt an den Viewer-Anwendungen, die Berechtigungseinstellungen zu beachten.\n\nUm das Verschlüsselungsverfahren auszuwählen, musst du über `version` die PDF-Version angeben. Es wird das bestmögliche Verschlüsselungsverfahren für diese PDF-Version verwendet.\n\n\n> **Note:** Die PDF-Version wird nur für das Verschlüsselungsverfahren verwendet; alle anderen PDF-Elemente haben Version 1.3.\n\n\nVerfügbare Versionen:\n\n- `1.3` – PDF-Version 1.3 (Standard), 40-Bit-RC4\n- `1.4` – PDF-Version 1.4, 128-Bit-RC4\n- `1.5` – PDF-Version 1.5, 128-Bit-RC4\n- `1.6` – PDF-Version 1.6, 128-Bit-AES\n- `1.7` – PDF-Version 1.7, 128-Bit-AES\n- `1.7ext3` – PDF-Version 1.7 ExtensionLevel 3, 256-Bit-AES\n\nBei PDF-Version 1.7 ExtensionLevel 3 wird das Passwort auf 127 Bytes seiner UTF-8-Darstellung gekürzt. In älteren Versionen wird es auf 32 Bytes gekürzt; erlaubt sind dort nur Latin-1-Zeichen.\n"
+ },
+ {
+ "id": "es/document-definition-object/security",
+ "language": "es",
+ "translationKey": "document-definition-object/security",
+ "path": "/docs/0.3/es/document-definition-object/security/",
+ "title": "Cifrado y permisos de acceso",
+ "description": "Configura contraseñas PDF, versiones de cifrado y permisos del documento; son conceptos distintos de las políticas de acceso a recursos.",
+ "version": "0.3",
+ "sourceDigest": "6736e08d8db59cae0ce17becb97f86de18201817a5135ee1385a2a15cc1608f5",
+ "source": "document-definition-object/security.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/security/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/security",
+ "markdown": "# Cifrado y permisos de acceso\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/security/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};\n```\n\nLos documentos PDF se pueden cifrar para exigir una contraseña al abrirlos y/o para establecer qué pueden hacer los usuarios con el archivo.\n\nPara activar el cifrado, asigna una contraseña de usuario (un valor de tipo string) a `userPassword`. El archivo PDF se cifra cuando se proporciona una contraseña de usuario, y se pedirá a los usuarios que la introduzcan para descifrarlo al abrirlo.\n\nPara establecer permisos de acceso al archivo, debes proporcionar una contraseña de propietario en `ownerPassword` (un valor de tipo string) y un objeto `permissions` con los permisos. De forma predeterminada, todas las operaciones están prohibidas. Debes permitir explícitamente las operaciones que correspondan.\n\nEl objeto `permissions` admite estas opciones:\n\n- `printing`: indica si se permite imprimir. Especifica `\"lowResolution\"` para permitir una impresión de calidad reducida, o `\"highResolution\"` para permitir una impresión de alta resolución.\n- `modifying`: indica si se permite modificar el archivo. Especifica `true` para permitir modificar el contenido del documento.\n- `copying`: indica si se permite copiar texto o gráficos. Especifica `true` para permitir la copia.\n- `annotating`: indica si se permiten las anotaciones y el relleno de formularios. Especifica `true` para permitir ambas operaciones.\n- `fillingForms`: indica si se permite rellenar y firmar formularios. Especifica `true` para permitir completar campos y firmar.\n- `contentAccessibility`: indica si se permite copiar texto para la accesibilidad. Especifica `true` para permitir esa copia.\n- `documentAssembly`: indica si se permite ensamblar el documento. Especifica `true` para permitirlo.\n\nPuedes especificar una contraseña de usuario, una de propietario o ambas. El comportamiento depende de las contraseñas que proporciones:\n\n- Si solo se proporciona una contraseña de usuario, quienes la tengan podrán descifrar el archivo y acceder al documento sin restricciones.\n- Si solo se proporciona una contraseña de propietario, los usuarios podrán descifrar y abrir el documento sin introducir una contraseña, pero su acceso se limitará a las operaciones permitidas explícitamente. Quienes tengan la contraseña de propietario tendrán acceso completo al documento.\n- Si se proporcionan ambas contraseñas, quienes tengan la contraseña de usuario podrán descifrar el archivo, pero solo tendrán el acceso limitado establecido por los permisos. Quienes tengan la contraseña de propietario tendrán acceso completo.\n\nTen en cuenta que el propio archivo PDF no puede hacer cumplir los permisos. Una vez descifrado, las aplicaciones de visualización de PDF tienen acceso completo al contenido del archivo; corresponde a esas aplicaciones respetar la configuración de permisos.\n\nPara elegir el método de cifrado, especifica la versión PDF mediante `version`. Se utiliza el mejor método de cifrado disponible para esa versión.\n\n\n> **Note:** La versión PDF solo se usa para el método de cifrado; todos los demás elementos del PDF usan la versión 1.3.\n\n\nVersiones disponibles:\n\n- `1.3`: PDF 1.3 (predeterminada), se usa RC4 de 40 bits\n- `1.4`: PDF 1.4, se usa RC4 de 128 bits\n- `1.5`: PDF 1.5, se usa RC4 de 128 bits\n- `1.6`: PDF 1.6, se usa AES de 128 bits\n- `1.7`: PDF 1.7, se usa AES de 128 bits\n- `1.7ext3`: PDF 1.7 ExtensionLevel 3, se usa AES de 256 bits\n\nCon la versión PDF 1.7 ExtensionLevel 3, la contraseña se trunca a 127 bytes de su representación UTF-8. En versiones anteriores, se trunca a 32 bytes y solo se permiten caracteres Latin-1.\n"
+ },
+ {
+ "id": "fr/document-definition-object/security",
+ "language": "fr",
+ "translationKey": "document-definition-object/security",
+ "path": "/docs/0.3/fr/document-definition-object/security/",
+ "title": "Chiffrement et autorisations d’accès",
+ "description": "Configurez les mots de passe PDF, les versions de chiffrement et les autorisations du document, distinctes des politiques d’accès aux ressources.",
+ "version": "0.3",
+ "sourceDigest": "6736e08d8db59cae0ce17becb97f86de18201817a5135ee1385a2a15cc1608f5",
+ "source": "document-definition-object/security.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/security/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/security",
+ "markdown": "# Chiffrement et autorisations d’accès\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/security/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};\n```\n\nLes documents PDF peuvent être chiffrés et exiger un mot de passe à l’ouverture ; ils peuvent aussi définir les opérations autorisées aux utilisateurs.\n\nPour activer le chiffrement, définissez un mot de passe utilisateur dans `userPassword` (valeur de type chaîne). Le fichier PDF est chiffré dès qu’un mot de passe utilisateur est fourni, et les utilisateurs sont invités à saisir ce mot de passe pour le déchiffrer à l’ouverture.\n\nPour définir les autorisations d’accès au fichier PDF, fournissez un mot de passe propriétaire dans `ownerPassword` (valeur de type chaîne) et un objet `permissions` contenant les autorisations. Par défaut, toutes les opérations sont interdites. Vous devez autoriser explicitement les opérations voulues.\n\nLes paramètres suivants sont pris en charge dans l’objet `permissions` :\n\n- `printing` : indique si l’impression est autorisée. La valeur `\"lowResolution\"` autorise une impression de qualité réduite ; `\"highResolution\"` autorise une impression haute résolution.\n- `modifying` : indique si la modification du fichier est autorisée. Définissez `true` pour autoriser la modification du contenu du document.\n- `copying` : indique si la copie de texte ou de graphiques est autorisée. Définissez `true` pour autoriser la copie.\n- `annotating` : indique si l’annotation et le remplissage de formulaires sont autorisés. Définissez `true` pour les autoriser.\n- `fillingForms` : indique si le remplissage et la signature de formulaires sont autorisés. Définissez `true` pour autoriser le remplissage des champs et la signature.\n- `contentAccessibility` : indique si la copie de texte à des fins d’accessibilité est autorisée. Définissez `true` pour l’autoriser.\n- `documentAssembly` : indique si l’assemblage du document est autorisé. Définissez `true` pour l’autoriser.\n\nVous pouvez fournir le mot de passe utilisateur, le mot de passe propriétaire ou les deux. Le comportement dépend des mots de passe fournis :\n\n- Avec uniquement le mot de passe utilisateur, les utilisateurs qui le connaissent peuvent déchiffrer le fichier et disposent d’un accès complet au document.\n- Avec uniquement le mot de passe propriétaire, les utilisateurs peuvent déchiffrer et ouvrir le document sans mot de passe, mais leur accès est limité aux opérations explicitement autorisées. Les utilisateurs qui connaissent le mot de passe propriétaire disposent d’un accès complet.\n- Avec les deux mots de passe, les utilisateurs qui connaissent le mot de passe utilisateur peuvent déchiffrer le fichier, mais leur accès est limité conformément aux autorisations. Ceux qui connaissent le mot de passe propriétaire disposent d’un accès complet.\n\nNotez que le fichier PDF ne peut pas faire respecter lui-même les autorisations. Une fois le fichier déchiffré, les applications de lecture PDF ont pleinement accès à son contenu ; il appartient à ces applications de respecter les autorisations définies.\n\nPour choisir la méthode de chiffrement, spécifiez la version PDF avec `version`. La meilleure méthode de chiffrement compatible avec cette version est utilisée.\n\n\n> **Note:** La version PDF ne sert qu’à déterminer la méthode de chiffrement ; tous les autres éléments du PDF sont en version 1.3.\n\n\nVersions disponibles :\n\n- `1.3` : PDF version 1.3 (par défaut), chiffrement RC4 40 bits\n- `1.4` : PDF version 1.4, chiffrement RC4 128 bits\n- `1.5` : PDF version 1.5, chiffrement RC4 128 bits\n- `1.6` : PDF version 1.6, chiffrement AES 128 bits\n- `1.7` : PDF version 1.7, chiffrement AES 128 bits\n- `1.7ext3` : PDF version 1.7 ExtensionLevel 3, chiffrement AES 256 bits\n\nAvec la version PDF 1.7 ExtensionLevel 3, le mot de passe est tronqué à 127 octets de sa représentation UTF-8. Dans les versions antérieures, il est tronqué à 32 octets et seuls les caractères Latin-1 sont autorisés.\n"
+ },
+ {
+ "id": "document-definition-object/security",
+ "language": "en",
+ "translationKey": "document-definition-object/security",
+ "path": "/docs/0.3/document-definition-object/security/",
+ "title": "Encryption and access privileges",
+ "description": "Configure PDF passwords, encryption versions and document permissions; distinct from resource access policies.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/security.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/security/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/security",
+ "markdown": "# Encryption and access privileges\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/security/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};\n```\n\nPDF document allow you to encrypt the PDF file and require a password when opening the file,\nand/or set permissions of what users can do with the PDF file.\n\nTo enable encryption set user password in `userPassword` (string value). The PDF file will\nbe encrypted when a user password is provided, and users will be prompted to enter the password\nto decrypt the file when opening it.\n\nTo set access privileges for the PDF file, you need to provide an owner password in `ownerPassword` (string value)\nand object `permissions` with permissions. By default, all operations are disallowed.\nYou need to explicitly allow certain operations.\n\nFollowing settings are allowed in `permissions` object:\n\n- `printing` - whether printing is allowed. Specify `\"lowResolution\"` to allow degraded printing, or `\"highResolution\"` to allow printing with high resolution\n- `modifying` - whether modifying the file is allowed. Specify `true` to allow modifying document content\n- `copying` - whether copying text or graphics is allowed. Specify `true` to allow copying\n- `annotating` - whether annotating, form filling is allowed. Specify `true` to allow annotating and form filling\n- `fillingForms` - whether form filling and signing is allowed. Specify `true` to allow filling in form fields and signing\n- `contentAccessibility` - whether copying text for accessibility is allowed. Specify `true` to allow copying for accessibility\n- `documentAssembly` - whether assembling document is allowed. Specify `true` to allow document assembly\n\nYou can specify either user password, owner password or both passwords.\nBehavior differs according to passwords you provides:\n\n- When only user password is provided,\n users with user password are able to decrypt the file and have full access to the document.\n- When only owner password is provided,\n users are able to decrypt and open the document without providing any password,\n but the access is limited to those operations explicitly permitted.\n Users with owner password have full access to the document.\n- When both passwords are provided,\n users with user password are able to decrypt the file\n but only have limited access to the file according to permission settings.\n Users with owner password have full access to the document.\n\nNote that PDF file itself cannot enforce access privileges.\nWhen file is decrypted, PDF viewer applications have full access to the file content,\nand it is up to viewer applications to respect permission settings.\n\nTo choose encryption method, you need to specify PDF version by `version`.\nThe best possible encryption method for PDF version is used.\n\n\n> **Note:** PDF version is used only for encryption method, all other PDF elements are in version 1.3.\n\n\nAvailable versions:\n\n- `1.3` - PDF version 1.3 (default), 40-bit RC4 is used\n- `1.4` - PDF version 1.4, 128-bit RC4 is used\n- `1.5` - PDF version 1.5, 128-bit RC4 is used\n- `1.6` - PDF version 1.6, 128-bit AES is used\n- `1.7` - PDF version 1.7, 128-bit AES is used\n- `1.7ext3` - PDF version 1.7 ExtensionLevel 3, 256-bit AES is used\n\nWhen using PDF version 1.7 ExtensionLevel 3, password is truncated to 127 bytes of its UTF-8 representation.\nIn older versions, password is truncated to 32 bytes, and only Latin-1 characters are allowed.\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/security",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/security",
+ "path": "/docs/0.3/pt-br/document-definition-object/security/",
+ "title": "Criptografia e permissões de acesso",
+ "description": "Configure senhas, versões de criptografia e permissões do documento PDF; isso é distinto das políticas de acesso a recursos.",
+ "version": "0.3",
+ "sourceDigest": "6736e08d8db59cae0ce17becb97f86de18201817a5135ee1385a2a15cc1608f5",
+ "source": "document-definition-object/security.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/security/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/security",
+ "markdown": "# Criptografia e permissões de acesso\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/security/\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n userPassword: '123',\n ownerPassword: '123456',\n permissions: {\n printing: 'highResolution', //'lowResolution'\n modifying: false,\n copying: false,\n annotating: true,\n fillingForms: true,\n contentAccessibility: true,\n documentAssembly: true\n },\n content: [\n '...'\n ]\n};\n```\n\nDocumentos PDF podem ser criptografados para exigir uma senha ao serem abertos e/ou definir as ações que os usuários podem realizar no arquivo.\n\nPara ativar a criptografia, defina a senha de usuário em `userPassword` (valor string). O arquivo PDF será criptografado quando uma senha de usuário for fornecida, e os usuários precisarão informá-la para descriptografar o arquivo ao abri-lo.\n\nPara definir privilégios de acesso ao PDF, forneça uma senha de proprietário em `ownerPassword` (valor string) e um objeto `permissions` com as permissões. Por padrão, todas as operações são proibidas. É preciso permitir explicitamente as operações desejadas.\n\nAs configurações a seguir podem ser usadas no objeto `permissions`:\n\n- `printing` - se a impressão é permitida. Especifique `\"lowResolution\"` para permitir impressão de baixa qualidade ou `\"highResolution\"` para permitir impressão em alta resolução\n- `modifying` - se é permitido modificar o arquivo. Especifique `true` para permitir a modificação do conteúdo do documento\n- `copying` - se é permitido copiar texto ou gráficos. Especifique `true` para permitir cópias\n- `annotating` - se é permitido adicionar anotações e preencher formulários. Especifique `true` para permitir essas ações\n- `fillingForms` - se é permitido preencher formulários e assinar. Especifique `true` para permitir o preenchimento de campos e assinaturas\n- `contentAccessibility` - se é permitido copiar texto para acessibilidade. Especifique `true` para permitir essa cópia\n- `documentAssembly` - se é permitido montar o documento. Especifique `true` para permitir a montagem\n\nVocê pode especificar a senha de usuário, a senha de proprietário ou ambas. O comportamento depende das senhas fornecidas:\n\n- Quando somente a senha de usuário é fornecida, usuários com essa senha podem descriptografar o arquivo e têm acesso completo ao documento.\n- Quando somente a senha de proprietário é fornecida, os usuários podem descriptografar e abrir o documento sem fornecer senha, mas o acesso fica limitado às operações explicitamente permitidas. Usuários com a senha de proprietário têm acesso completo ao documento.\n- Quando ambas as senhas são fornecidas, usuários com a senha de usuário podem descriptografar o arquivo, mas têm acesso limitado de acordo com as permissões. Usuários com a senha de proprietário têm acesso completo ao documento.\n\nObserve que o próprio arquivo PDF não consegue impor privilégios de acesso. Depois que o arquivo é descriptografado, os aplicativos visualizadores de PDF têm acesso completo ao conteúdo, e cabe a eles respeitar as configurações de permissão.\n\nPara escolher o método de criptografia, especifique a versão do PDF usando `version`. Será utilizado o melhor método de criptografia disponível para essa versão.\n\n\n> **Note:** A versão do PDF é usada somente para escolher o método de criptografia; todos os outros elementos do PDF permanecem na versão 1.3.\n\n\nVersões disponíveis:\n\n- `1.3` - versão PDF 1.3 (padrão), usa RC4 de 40 bits\n- `1.4` - versão PDF 1.4, usa RC4 de 128 bits\n- `1.5` - versão PDF 1.5, usa RC4 de 128 bits\n- `1.6` - versão PDF 1.6, usa AES de 128 bits\n- `1.7` - versão PDF 1.7, usa AES de 128 bits\n- `1.7ext3` - versão PDF 1.7 ExtensionLevel 3, usa AES de 256 bits\n\nAo usar a versão PDF 1.7 ExtensionLevel 3, a senha é truncada em 127 bytes de sua representação UTF-8. Nas versões anteriores, ela é truncada em 32 bytes e somente caracteres Latin-1 são permitidos.\n"
+ },
+ {
+ "id": "de/document-definition-object/snaking-columns",
+ "language": "de",
+ "translationKey": "document-definition-object/snaking-columns",
+ "path": "/docs/0.3/de/document-definition-object/snaking-columns/",
+ "title": "Schlangenförmige Spalten",
+ "description": "Ordne Inhalte im Zeitungsstil fortlaufend über mehrere Spalten an und beachte die Einschränkungen der Verschachtelung.",
+ "version": "0.3",
+ "sourceDigest": "d3e6aecd99823a11767f72c7ac5e205d78dcb0fcc84bdd4fe9694a3ab50ff869",
+ "source": "document-definition-object/snaking-columns.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/snaking-columns/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/snaking-columns",
+ "markdown": "# Schlangenförmige Spalten\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/snaking-columns/\n\n> **Note:** Mindestversion: **0.3.5**\n\n\nSchlangenförmige Spalten (Spalten im Zeitungsstil) sind ein Layoutmodus, bei dem der Inhalt zunächst vertikal durch die erste Spalte und anschließend am oberen Rand der nächsten Spalte weiterfließt. Der Inhalt bewegt sich bei Bedarf abwechselnd durch die Spalten. Anders als bei Spalten, die für jede neue Zeile wieder oben beginnen, läuft die Reihenfolge fortlaufend durch alle verfügbaren Spalten.\n\nWenn `snakingColumns: true` aktiviert ist, sollte nur die **erste Spalte** Inhalt enthalten. Die folgenden Spalten dienen als leere Platzhalter für den überlaufenden Inhalt.\n\n**JavaScript**\n\n```js\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};\n```\n\nEine schlangenförmige Spalte direkt in eine weitere schlangenförmige Spalte einzubetten (rekursives Schlangenlayout) wird nicht unterstützt.\n\n**Empfehlungen:**\n- Vermeide tiefe Verschachtelungen schlangenförmiger Spalten.\n- Normale Spalten (ohne Schlangenlayout) können sicher in schlangenförmige Spalten verschachtelt werden.\n- Schlangenförmige Spalten können sicher in normalen Spalten verschachtelt werden.\n"
+ },
+ {
+ "id": "es/document-definition-object/snaking-columns",
+ "language": "es",
+ "translationKey": "document-definition-object/snaking-columns",
+ "path": "/docs/0.3/es/document-definition-object/snaking-columns/",
+ "title": "Columnas en flujo serpenteante",
+ "description": "Configura columnas en flujo serpenteante en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "d3e6aecd99823a11767f72c7ac5e205d78dcb0fcc84bdd4fe9694a3ab50ff869",
+ "source": "document-definition-object/snaking-columns.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/snaking-columns/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/snaking-columns",
+ "markdown": "# Columnas en flujo serpenteante\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/snaking-columns/\n\n> **Note:** Versión mínima: **0.3.5**\n\n\nLas columnas en flujo serpenteante (o columnas de estilo periódico) son un modo de disposición en que el contenido fluye verticalmente por la primera columna y continúa en la parte superior de la columna siguiente, alternando la dirección cuando hace falta. En vez de volver siempre al principio de cada fila de columnas, la disposición serpentea de forma continua por las columnas disponibles, en orden de lectura.\n\nCuando `snakingColumns: true` está activado, solo la **primera columna** debe contener contenido. Las columnas siguientes actúan como espacios vacíos para el desbordamiento.\n\n**JavaScript**\n\n```js\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};\n```\n\nNo se admite anidar directamente una «columna serpenteante» dentro de otra (una disposición serpenteante recursiva).\n\n**Recomendación:**\n- Evita anidar profundamente columnas serpenteantes dentro de otras columnas serpenteantes.\n- Las columnas estándar (no serpenteantes) se pueden anidar dentro de columnas serpenteantes.\n- Las columnas serpenteantes se pueden anidar dentro de columnas estándar.\n"
+ },
+ {
+ "id": "fr/document-definition-object/snaking-columns",
+ "language": "fr",
+ "translationKey": "document-definition-object/snaking-columns",
+ "path": "/docs/0.3/fr/document-definition-object/snaking-columns/",
+ "title": "Colonnes en serpentin",
+ "description": "Faites circuler le contenu verticalement d’une colonne à l’autre dans une mise en page en colonnes.",
+ "version": "0.3",
+ "sourceDigest": "d3e6aecd99823a11767f72c7ac5e205d78dcb0fcc84bdd4fe9694a3ab50ff869",
+ "source": "document-definition-object/snaking-columns.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/snaking-columns/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/snaking-columns",
+ "markdown": "# Colonnes en serpentin\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/snaking-columns/\n\n> **Note:** Version minimale : **0.3.5**\n\n\nLes colonnes en serpentin (ou colonnes de style journal) sont un mode de mise en page où le contenu descend dans la première colonne, puis continue en haut de la colonne suivante, en alternant si nécessaire. Au lieu de recommencer en haut à chaque nouvelle rangée de colonnes, le contenu suit les colonnes disponibles dans un ordre de lecture continu.\n\nLorsque `snakingColumns: true` est activé, seul le contenu de la **première colonne** doit être renseigné. Les colonnes suivantes servent de cibles de débordement vides.\n\n**JavaScript**\n\n```js\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};\n```\n\nL’imbrication directe d’une colonne en serpentin dans une autre colonne en serpentin (mise en page récursive en serpentin) n’est pas prise en charge.\n\n**Recommandations :**\n- Évitez d’imbriquer profondément des colonnes en serpentin les unes dans les autres.\n- Les colonnes standard (sans serpentin) peuvent être imbriquées sans risque dans des colonnes en serpentin.\n- Les colonnes en serpentin peuvent être imbriquées sans risque dans des colonnes standard.\n"
+ },
+ {
+ "id": "document-definition-object/snaking-columns",
+ "language": "en",
+ "translationKey": "document-definition-object/snaking-columns",
+ "path": "/docs/0.3/document-definition-object/snaking-columns/",
+ "title": "Snaking columns",
+ "description": "Configure snaking columns in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/snaking-columns.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/snaking-columns/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/snaking-columns",
+ "markdown": "# Snaking columns\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/snaking-columns/\n\n> **Note:** Minimal version: **0.3.5**\n\n\nSnaking columns (or newspaper-style columns) are a column layout mode where content flows vertically through the first column, then continues at the top of the next column, alternating direction as needed. Instead of always restarting at the top for each new row of columns, the layout \"snakes\" through the available columns in a continuous reading order.\n\nWhen `snakingColumns: true` is enabled, only the **first column** should contain content. Subsequent columns serve as empty placeholders for overflow.\n\n**JavaScript**\n\n```js\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};\n```\n\nNesting a \"snaking column\" directly inside another \"snaking column\" (a recursive snaking layout) is not supported.\n\n**Recommendation**:\n- Avoid deep nesting of snaking columns within other snaking columns.\n- Standard columns (non-snaking) _can_ be safely nested inside snaking columns.\n- Snaking columns _can_ be safely nested inside standard columns.\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/snaking-columns",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/snaking-columns",
+ "path": "/docs/0.3/pt-br/document-definition-object/snaking-columns/",
+ "title": "Colunas em fluxo contínuo",
+ "description": "Faça o conteúdo fluir entre colunas em estilo de jornal com colunas em fluxo contínuo no pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "d3e6aecd99823a11767f72c7ac5e205d78dcb0fcc84bdd4fe9694a3ab50ff869",
+ "source": "document-definition-object/snaking-columns.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/snaking-columns/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/snaking-columns",
+ "markdown": "# Colunas em fluxo contínuo\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/snaking-columns/\n\n> **Note:** Versão mínima: **0.3.5**\n\n\nColunas em fluxo contínuo (ou colunas em estilo de jornal) são um modo de layout em que o conteúdo flui verticalmente pela primeira coluna e continua no topo da próxima, alternando a direção conforme necessário. Em vez de sempre reiniciar no topo de cada nova linha de colunas, o layout percorre as colunas disponíveis em uma ordem de leitura contínua.\n\nQuando `snakingColumns: true` está ativado, somente a **primeira coluna** deve conter conteúdo. As colunas seguintes servem como espaços vazios para o conteúdo excedente.\n\n**JavaScript**\n\n```js\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar myLongContent = 'A paragraph flowing through snaking columns. '.repeat(120);\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n columns: [\n {text: myLongContent, width: '*'}, // Content goes here\n {text: '', width: '*'}, // Empty overflow target\n {text: '', width: '*'} // Empty overflow target\n ],\n snakingColumns: true\n }\n ]\n};\n```\n\nNão há suporte para aninhar diretamente uma “coluna em fluxo contínuo” dentro de outra (layout recursivo de colunas em fluxo contínuo).\n\n**Recomendação**:\n- Evite aninhamento profundo de colunas em fluxo contínuo dentro de outras colunas do mesmo tipo.\n- Colunas padrão (sem fluxo contínuo) podem ser aninhadas com segurança dentro de colunas em fluxo contínuo.\n- Colunas em fluxo contínuo podem ser aninhadas com segurança dentro de colunas padrão.\n"
+ },
+ {
+ "id": "de/document-definition-object/stack",
+ "language": "de",
+ "translationKey": "document-definition-object/stack",
+ "path": "/docs/0.3/de/document-definition-object/stack/",
+ "title": "Absatzstapel",
+ "description": "Ordne Absätze mit der Stack-Struktur in pdfmake 0.3 untereinander an und formatiere verschachtelte Inhalte.",
+ "version": "0.3",
+ "sourceDigest": "04c569677571b5807400b3610efeeabd2981f70fae31c778b9a5337c0abe6c26",
+ "source": "document-definition-object/stack.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/stack/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/stack",
+ "markdown": "# Absatzstapel\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/stack/\n\nAn den Beispielen hast du wahrscheinlich schon erkannt: Wenn du `content` auf ein Array setzt, wird das Dokument als Stapel von Absätzen dargestellt.\n\nDiese Struktur kannst du häufig in einem verschachtelten Element wiederverwenden, wie im folgenden Beispiel:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};\n```\n\nEin Array hat den Nachteil, dass du ihm keine Formatierungseigenschaften hinzufügen kannst (zum Beispiel, um `fontSize` zu ändern).\n\nDie gute Nachricht: In pdfMake ist ein Array nur eine Kurzform für `{ stack: [] }`. Wenn du den ganzen Stapel anders formatieren möchtest, kannst du die ausführliche Definition verwenden:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};\n```\n"
+ },
+ {
+ "id": "es/document-definition-object/stack",
+ "language": "es",
+ "translationKey": "document-definition-object/stack",
+ "path": "/docs/0.3/es/document-definition-object/stack/",
+ "title": "Pila de párrafos",
+ "description": "Configura una pila de párrafos en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "04c569677571b5807400b3610efeeabd2981f70fae31c778b9a5337c0abe6c26",
+ "source": "document-definition-object/stack.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/stack/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/stack",
+ "markdown": "# Pila de párrafos\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/stack/\n\nComo quizá ya hayas deducido de los ejemplos, si asignas una matriz a la clave `content`, el documento se convierte en una pila de párrafos.\n\nCon frecuencia reutilizarás esta estructura dentro de un elemento anidado, como en este ejemplo:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};\n```\n\nEl problema de una matriz es que no puedes añadirle propiedades de estilo (por ejemplo, para cambiar `fontSize`).\n\nLa buena noticia es que, en pdfMake, una matriz es un atajo para `{ stack: [] }`. Por tanto, si quieres cambiar el estilo de toda la pila, puedes usar la definición ampliada:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};\n```\n"
+ },
+ {
+ "id": "fr/document-definition-object/stack",
+ "language": "fr",
+ "translationKey": "document-definition-object/stack",
+ "path": "/docs/0.3/fr/document-definition-object/stack/",
+ "title": "Pile de paragraphes",
+ "description": "Utilisez des tableaux ou la propriété `stack` pour empiler des paragraphes et appliquer un style à l’ensemble.",
+ "version": "0.3",
+ "sourceDigest": "04c569677571b5807400b3610efeeabd2981f70fae31c778b9a5337c0abe6c26",
+ "source": "document-definition-object/stack.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/stack/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/stack",
+ "markdown": "# Pile de paragraphes\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/stack/\n\nVous avez pu constater dans les exemples que si vous définissez la clé `content` comme un tableau, le document devient une pile de paragraphes.\n\nVous réutiliserez souvent cette structure dans un élément imbriqué, comme dans l’exemple suivant :\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};\n```\n\nAvec un tableau, vous ne pouvez pas ajouter de propriétés de style (pour modifier `fontSize`, par exemple).\n\nHeureusement, un tableau est simplement un raccourci pdfMake pour `{ stack: [] }`. Pour appliquer un nouveau style à toute la pile, utilisez la définition développée :\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};\n```\n"
+ },
+ {
+ "id": "document-definition-object/stack",
+ "language": "en",
+ "translationKey": "document-definition-object/stack",
+ "path": "/docs/0.3/document-definition-object/stack/",
+ "title": "Stack of paragraphs",
+ "description": "Configure stack of paragraphs in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/stack.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/stack/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/stack",
+ "markdown": "# Stack of paragraphs\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/stack/\n\nYou could have figured out by now (from the examples), that if you set the ```content``` key to an array, the document becomes a stack of paragraphs.\n\nYou'll quite often reuse this structure in a nested element, like in the following example:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};\n```\n\nThe problem with an array is that you cannot add styling properties to it (to change fontSize for example).\n\nThe good news is - array is just a shortcut in pdfMake for { stack: [] }, so if you want to restyle the whole stack, you can do it using the expanded definition:\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};\n```\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/stack",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/stack",
+ "path": "/docs/0.3/pt-br/document-definition-object/stack/",
+ "title": "Pilha de parágrafos",
+ "description": "Agrupe parágrafos e elementos em uma pilha vertical no pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "04c569677571b5807400b3610efeeabd2981f70fae31c778b9a5337c0abe6c26",
+ "source": "document-definition-object/stack.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/stack/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/stack",
+ "markdown": "# Pilha de parágrafos\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/stack/\n\nComo você já deve ter percebido pelos exemplos, quando a chave `content` recebe um array, o documento se torna uma pilha de parágrafos.\n\nÉ comum reutilizar essa estrutura em um elemento aninhado, como no exemplo a seguir:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ]\n ]\n }\n ]\n};\n```\n\nO problema de um array é que não é possível adicionar propriedades de estilo diretamente a ele (por exemplo, para alterar `fontSize`).\n\nA boa notícia é que o array é apenas um atalho do pdfmake para `{ stack: [] }`. Portanto, para reaplicar estilo à pilha inteira, use a definição expandida:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n 'paragraph 1',\n 'paragraph 2',\n {\n columns: [\n 'first column is a simple text',\n {\n stack: [\n // second column consists of paragraphs\n 'paragraph A',\n 'paragraph B',\n 'these paragraphs will be rendered one below another inside the column'\n ],\n fontSize: 15\n }\n ]\n }\n ]\n};\n```\n"
+ },
+ {
+ "id": "de/document-definition-object/styling",
+ "language": "de",
+ "translationKey": "document-definition-object/styling",
+ "path": "/docs/0.3/de/document-definition-object/styling/",
+ "title": "Stile und Formatierung",
+ "description": "Formatiere Text mit benannten Stilen, Schriftvarianten, Ausrichtung, Farben und Vererbung in pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "9369a9e17f5173482ecd79123f5aee3a2489a7678b916cec9f9003263fe860ae",
+ "source": "document-definition-object/styling.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/styling/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/styling",
+ "markdown": "# Stile und Formatierung\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/styling/\n\n## Blöcke oder Inline-Text formatieren\n\nEine Zeichenfolge ist ein einfacher Absatz. Verwende einen Textknoten, um Eigenschaften hinzuzufügen. Mit einem `text`-Array kannst du Textsegmente **innerhalb desselben Absatzes** unterschiedlich formatieren; ein `content`-Array oder ein Stapel erzeugt getrennte Blöcke.\n\n\n\n### Runnable example: 04 · Text & named styles\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/de/playground/?example=styles)\n\n\n\n## Benannte Stile wiederverwenden\n\n**JavaScript**\n\n```js\nvar dd = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};\n```\n\n`style` verweist auf Einträge in `styles`. Wenn mehrere Stile in einem Array dieselbe Eigenschaft definieren, hat der spätere Stil Vorrang. Explizite Eigenschaften des Knotens haben Vorrang vor seinen benannten Stilen. `defaultStyle` stellt dokumentweite Standardwerte bereit. Stile von Containern können an ihre Kindelemente vererbt werden; explizite Eigenschaften des Kindelements überschreiben sie.\n\nBenannte Stile unterstützen `extends` seit **0.3.3**. Die Eigenschaft akzeptiert einen übergeordneten Namen oder ein Array mit Namen. Die eigenen Eigenschaften eines Stils haben Vorrang vor den übergeordneten; wenn mehrere übergeordnete Stile dieselbe Eigenschaft festlegen, hat der spätere Vorrang. Halte die Vererbung kurz und frei von Zyklen, damit das Ergebnis übersichtlich bleibt.\n\n## Häufige Texteigenschaften\n\n| Eigenschaft | Typ / Werte | Bedeutung |\n| --- | --- | --- |\n| `font` | Registrierter Familienname | Muss mit deiner Schriftzuordnung übereinstimmen |\n| `fontSize` | Zahl, Punkte | Textgröße |\n| `bold`, `italics` | Boolean, Standard `false` | Wählt die entsprechende Schriftvariante aus |\n| `alignment` | `'left'`, `'center'`, `'right'`, `'justify'` | Absatzausrichtung |\n| `lineHeight` | Zahl, Standard 1 | Zeilenhöhenmultiplikator |\n| `color`, `background` | Farbname oder Hex-Zeichenfolge | Textfarbe und Texthintergrund |\n| `characterSpacing` | Zahl, Punkte | Zusätzlicher Abstand zwischen Zeichen |\n| `wordBreak` | `'normal'` (Standard), `'break-all'` | Verhalten beim Zeilenumbruch |\n| `fontFeatures` | Array mit Zeichenfolgen | Schriftartspezifische typografische Merkmale |\n| `style` | Zeichenfolge oder Array mit Zeichenfolgen | Anzuwendende benannte Stile |\n| `markerColor` | Farbe | Farbe des Aufzählungszeichens |\n\nUnterstützt werden benannte Farben und Hexwerte wie `'#08786b'`. Schriftmerkmale hängen von der ausgewählten Schriftart ab. Für `bold` oder `italics` muss die jeweilige Variante registriert sein; das Setzen einer Eigenschaft ersetzt keine fehlende Schriftdatei.\n\n## Auszeichnungen\n\n| Eigenschaft | Typ / Werte |\n| --- | --- |\n| `decoration` | `'underline'`, `'lineThrough'`, `'overline'` oder ein Array |\n| `decorationStyle` | `'solid'`, `'dashed'`, `'dotted'`, `'double'`, `'wavy'` |\n| `decorationColor` | Farbe |\n| `decorationThickness` | Numerische Breite; seit 0.3.3 |\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};\n```\n\n## Stile sind kein CSS\n\nVerwende die dokumentierten Feldnamen von pdfmake. Es gibt weder CSS-Kaskade noch DOM-Selektor oder Browser-Boxmodell. Ränder werden in Punkten angegeben und folgen der Reihenfolge `[links, oben, rechts, unten]`. Um mehrere Blöcke gemeinsam zu formatieren, verwende einen [Stapel](/docs/0.3/de/document-definition-object/stack/). Informationen zur Registrierung von Schriftvarianten und Zeichenabdeckung findest du unter [Schriften](/docs/0.3/de/fonts/).\n"
+ },
+ {
+ "id": "es/document-definition-object/styling",
+ "language": "es",
+ "translationKey": "document-definition-object/styling",
+ "path": "/docs/0.3/es/document-definition-object/styling/",
+ "title": "Estilos",
+ "description": "Aplica estilos al texto con estilos con nombre, variantes de fuente, alineación, colores y herencia en pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "9369a9e17f5173482ecd79123f5aee3a2489a7678b916cec9f9003263fe860ae",
+ "source": "document-definition-object/styling.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/styling/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/styling",
+ "markdown": "# Estilos\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/styling/\n\n## Aplicar estilo a un bloque o segmento en línea\n\nUna cadena es un párrafo sencillo. Usa un nodo de texto para añadir propiedades. Usa una matriz `text` para dar estilos distintos a segmentos dentro del **mismo párrafo**; una matriz de contenido o una pila crea bloques separados.\n\n\n\n### Runnable example: 04 · Text & named styles\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/es/playground/?example=styles)\n\n\n\n## Reutilizar estilos con nombre\n\n**JavaScript**\n\n```js\nvar dd = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};\n```\n\n`style` hace referencia a las entradas de `styles`. Cuando varias entradas de una matriz definen la misma propiedad, prevalece la última. Las propiedades explícitas del nodo prevalecen sobre sus estilos con nombre. `defaultStyle` proporciona los valores predeterminados del documento. Los estilos de los contenedores se pueden heredar por sus hijos; las propiedades explícitas de los hijos los sobrescriben.\n\nLa propiedad `extends` para estilos con nombre está disponible desde la versión **0.3.3**. Acepta el nombre de un estilo principal o una matriz de nombres. Las propiedades del propio estilo prevalecen sobre las de sus estilos principales; si hay varios estilos principales, las entradas posteriores tienen prioridad cuando más de uno proporciona la misma propiedad. Mantén la herencia breve y sin ciclos para facilitar su comprensión.\n\n## Propiedades de texto habituales\n\n| Propiedad | Tipo / valores | Significado |\n| --- | --- | --- |\n| `font` | Nombre de familia registrada | Debe coincidir con el mapa de fuentes |\n| `fontSize` | Número, puntos | Tamaño del texto |\n| `bold`, `italics` | Boolean, predeterminado false | Selecciona la variante correspondiente de la fuente |\n| `alignment` | `'left'`, `'center'`, `'right'`, `'justify'` | Alineación del párrafo |\n| `lineHeight` | Número, predeterminado 1 | Multiplicador de la altura de línea |\n| `color`, `background` | Nombre de color o cadena hexadecimal | Color del texto y su fondo |\n| `characterSpacing` | Número, puntos | Espaciado adicional entre caracteres |\n| `wordBreak` | `'normal'` (predeterminado), `'break-all'` | Comportamiento de ajuste de línea |\n| `fontFeatures` | Matriz de cadenas | Funciones tipográficas específicas de la fuente |\n| `style` | Cadena o matriz de cadenas | Estilos con nombre que se aplicarán |\n| `markerColor` | Color | Color de la viñeta |\n\nSe admiten nombres de colores y valores hexadecimales como `'#08786b'`. Las funciones de fuente dependen de la fuente seleccionada. Activar `bold` o `italics` requiere que se haya registrado esa variante; establecer el indicador no proporciona un archivo de fuente que falte.\n\n## Decoraciones\n\n| Propiedad | Tipo / valores |\n| --- | --- |\n| `decoration` | `'underline'`, `'lineThrough'`, `'overline'` o una matriz |\n| `decorationStyle` | `'solid'`, `'dashed'`, `'dotted'`, `'double'`, `'wavy'` |\n| `decorationColor` | Color |\n| `decorationThickness` | Ancho numérico; desde 0.3.3 |\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};\n```\n\n## Los estilos no son CSS\n\nUsa los nombres de campo documentados por pdfmake. No hay cascada CSS, selector DOM ni modelo de caja del navegador. Los márgenes usan valores en puntos y el orden `[izquierda, arriba, derecha, abajo]`. Para aplicar estilo a varios bloques juntos, usa una [pila](/docs/0.3/es/document-definition-object/stack/). Consulta [fuentes](/docs/0.3/es/fonts/) para el registro de variantes y la cobertura de caracteres.\n"
+ },
+ {
+ "id": "fr/document-definition-object/styling",
+ "language": "fr",
+ "translationKey": "document-definition-object/styling",
+ "path": "/docs/0.3/fr/document-definition-object/styling/",
+ "title": "Styles et mise en forme",
+ "description": "Mettez en forme le texte avec des styles nommés, des variantes de police, l’alignement, les couleurs et l’héritage dans pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "9369a9e17f5173482ecd79123f5aee3a2489a7678b916cec9f9003263fe860ae",
+ "source": "document-definition-object/styling.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/styling/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/styling",
+ "markdown": "# Styles et mise en forme\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/styling/\n\n## Mettre en forme un bloc ou un segment en ligne\n\nUne chaîne est un paragraphe simple. Utilisez un nœud de texte pour lui ajouter des propriétés. Un tableau `text` permet de définir des segments de styles différents au sein du **même paragraphe** ; un tableau `content` ou une pile crée des blocs distincts.\n\n\n\n### Runnable example: 04 · Text & named styles\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/fr/playground/?example=styles)\n\n\n\n## Réutiliser des styles nommés\n\n**JavaScript**\n\n```js\nvar dd = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};\n```\n\n`style` fait référence aux entrées de `styles`. Lorsqu’elles définissent la même propriété, les styles placés plus tard dans un tableau sont prioritaires. Les propriétés explicites du nœud priment sur ses styles nommés. `defaultStyle` fournit les valeurs par défaut du document. Les styles des conteneurs peuvent être hérités par leurs enfants ; les propriétés explicites d’un enfant les remplacent.\n\nL’héritage des styles nommés avec `extends` est disponible depuis **0.3.3**. Il accepte le nom d’un parent ou un tableau de noms. Les propriétés propres au style priment sur celles de ses parents ; si plusieurs parents définissent la même propriété, celles du parent placé plus tard sont prioritaires. Gardez une hiérarchie courte et sans cycle pour qu’elle reste facile à comprendre.\n\n## Propriétés de texte courantes\n\n| Propriété | Type / valeurs | Signification |\n| --- | --- | --- |\n| `font` | Nom de famille enregistrée | Doit correspondre à votre configuration de polices |\n| `fontSize` | Nombre, en points | Taille du texte |\n| `bold`, `italics` | Booléen, `false` par défaut | Sélectionne la variante de police correspondante |\n| `alignment` | `'left'`, `'center'`, `'right'`, `'justify'` | Alignement du paragraphe |\n| `lineHeight` | Nombre, 1 par défaut | Multiplicateur de hauteur de ligne |\n| `color`, `background` | Nom de couleur ou chaîne hexadécimale | Couleur du texte et arrière-plan du texte |\n| `characterSpacing` | Nombre, en points | Espacement supplémentaire entre les caractères |\n| `wordBreak` | `'normal'` (par défaut), `'break-all'` | Comportement du retour à la ligne |\n| `fontFeatures` | Tableau de chaînes | Fonctionnalités typographiques propres à la police |\n| `style` | Chaîne ou tableau de chaînes | Styles nommés à appliquer |\n| `markerColor` | Couleur | Couleur de la puce |\n\nLes noms de couleurs et les valeurs hexadécimales comme `'#08786b'` sont pris en charge. Les fonctionnalités typographiques dépendent de la police sélectionnée. Pour utiliser `bold` ou `italics`, la variante correspondante doit être enregistrée ; activer l’option ne fournit pas le fichier de police manquant.\n\n## Décorations\n\n| Propriété | Type / valeurs |\n| --- | --- |\n| `decoration` | `'underline'`, `'lineThrough'`, `'overline'` ou un tableau |\n| `decorationStyle` | `'solid'`, `'dashed'`, `'dotted'`, `'double'`, `'wavy'` |\n| `decorationColor` | Couleur |\n| `decorationThickness` | Épaisseur numérique ; depuis 0.3.3 |\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};\n```\n\n## Les styles ne sont pas du CSS\n\nUtilisez les noms de champs documentés par pdfmake. Il n’existe ni cascade CSS, ni sélecteur DOM, ni modèle de boîte du navigateur. Les marges sont exprimées en points et suivent l’ordre `[gauche, haut, droite, bas]`. Pour mettre en forme plusieurs blocs ensemble, utilisez une [pile](/docs/0.3/fr/document-definition-object/stack/). Consultez [Polices](/docs/0.3/fr/fonts/) pour l’enregistrement des variantes et la couverture des caractères.\n"
+ },
+ {
+ "id": "document-definition-object/styling",
+ "language": "en",
+ "translationKey": "document-definition-object/styling",
+ "path": "/docs/0.3/document-definition-object/styling/",
+ "title": "Styling",
+ "description": "Style text with named styles, font variants, alignment, colors and inheritance in pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/styling.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/styling/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/styling",
+ "markdown": "# Styling\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/styling/\n\n## Style a block or an inline run\n\nA string is a plain paragraph. Use a text node to add properties. Use a `text`\narray for differently styled runs within the **same paragraph**; a content array\nor stack creates separate blocks.\n\n\n\n### Runnable example: 04 · Text & named styles\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/playground/?example=styles)\n\n\n\n## Reuse named styles\n\n**JavaScript**\n\n```js\nvar dd = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};\n```\n\n`style` refers to entries in `styles`. Later styles in an array take precedence\nwhen they define the same property. Explicit node properties take precedence over\nits named styles. `defaultStyle` supplies document defaults. Styles on containers\ncan be inherited by their children; explicit child properties override them.\n\nNamed-style `extends` is available since **0.3.3**. It accepts one parent name or\nan array. A style's own properties win over its parents; later parent entries\ntake precedence when several parents supply the same property. Keep inheritance\nshort and acyclic so the result is easy to understand.\n\n## Common text properties\n\n| Property | Type / values | Meaning |\n| --- | --- | --- |\n| `font` | Registered family name | Must match your font map |\n| `fontSize` | Number, points | Text size |\n| `bold`, `italics` | Boolean, default false | Select the corresponding font variant |\n| `alignment` | `'left'`, `'center'`, `'right'`, `'justify'` | Paragraph alignment |\n| `lineHeight` | Number, default 1 | Line-height multiplier |\n| `color`, `background` | Color name or hex string | Text color and text background |\n| `characterSpacing` | Number, points | Additional spacing between characters |\n| `wordBreak` | `'normal'` (default), `'break-all'` | Wrapping behavior |\n| `fontFeatures` | String array | Font-specific typographic features |\n| `style` | String or string array | Named styles to apply |\n| `markerColor` | Color | Bullet marker color |\n\nNamed colors and hex values such as `'#08786b'` are supported. Font features\ndepend on the selected font. Selecting `bold` or `italics` requires the variant\nto be registered; setting a flag does not supply a missing font file.\n\n## Decorations\n\n| Property | Type / values |\n| --- | --- |\n| `decoration` | `'underline'`, `'lineThrough'`, `'overline'`, or an array |\n| `decorationStyle` | `'solid'`, `'dashed'`, `'dotted'`, `'double'`, `'wavy'` |\n| `decorationColor` | Color |\n| `decorationThickness` | Numeric width; since 0.3.3 |\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};\n```\n\n## Styles are not CSS\n\nUse pdfmake's documented field names. There is no CSS cascade, DOM selector or\nbrowser box model. Margins use point values and `[left, top, right, bottom]` order.\nTo style several blocks together, use a [stack](/docs/0.3/document-definition-object/stack/).\nSee [fonts](/docs/0.3/fonts/) for variant registration and character coverage.\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/styling",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/styling",
+ "path": "/docs/0.3/pt-br/document-definition-object/styling/",
+ "title": "Estilos",
+ "description": "Formate texto com estilos nomeados, variantes de fonte, alinhamento, cores e herança no pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "9369a9e17f5173482ecd79123f5aee3a2489a7678b916cec9f9003263fe860ae",
+ "source": "document-definition-object/styling.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/styling/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/styling",
+ "markdown": "# Estilos\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/styling/\n\n## Aplique estilo a um bloco ou segmento em linha\n\nUma string é um parágrafo simples. Use um nó de texto para adicionar propriedades. Use um array `text` para segmentos com estilos diferentes dentro do **mesmo parágrafo**; um array `content` ou uma pilha cria blocos separados.\n\n\n\n### Runnable example: 04 · Text & named styles\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/pt-br/playground/?example=styles)\n\n\n\n## Reutilize estilos nomeados\n\n**JavaScript**\n\n```js\nvar dd = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n defaultStyle: { fontSize: 11, lineHeight: 1.2 },\n styles: {\n heading: { fontSize: 24, bold: true },\n muted: { color: '#536771' },\n subheading: { extends: 'heading', fontSize: 16 }\n },\n content: [\n { text: 'A heading', style: 'heading' },\n { text: 'A muted heading', style: ['heading', 'muted'] },\n { text: 'An explicit override', style: 'heading', fontSize: 18 },\n { text: 'A subheading', style: 'subheading' }\n ]\n};\n```\n\n`style` aponta para entradas em `styles`. Quando um array contém estilos que definem a mesma propriedade, os estilos posteriores têm precedência. As propriedades explícitas do nó têm precedência sobre seus estilos nomeados. `defaultStyle` fornece os valores padrão do documento. Estilos em contêineres podem ser herdados pelos filhos; propriedades explícitas nos filhos os sobrescrevem.\n\nEstilos nomeados com `extends` estão disponíveis desde a versão **0.3.3**. A propriedade aceita o nome de um único estilo pai ou um array. As propriedades do próprio estilo prevalecem sobre as dos pais; quando vários pais fornecem a mesma propriedade, os itens posteriores do array de pais prevalecem. Mantenha a herança curta e sem ciclos para facilitar a compreensão do resultado.\n\n## Propriedades de texto comuns\n\n| Propriedade | Tipo / valores | Significado |\n| --- | --- | --- |\n| `font` | Nome da família registrada | Deve corresponder ao mapa de fontes |\n| `fontSize` | Número, em pontos | Tamanho do texto |\n| `bold`, `italics` | Booleano, padrão `false` | Seleciona a variante de fonte correspondente |\n| `alignment` | `'left'`, `'center'`, `'right'`, `'justify'` | Alinhamento do parágrafo |\n| `lineHeight` | Número, padrão `1` | Multiplicador da altura da linha |\n| `color`, `background` | Nome de cor ou string hexadecimal | Cor do texto e fundo do texto |\n| `characterSpacing` | Número, em pontos | Espaçamento adicional entre caracteres |\n| `wordBreak` | `'normal'` (padrão), `'break-all'` | Comportamento da quebra de linha |\n| `fontFeatures` | Array de strings | Recursos tipográficos específicos da fonte |\n| `style` | String ou array de strings | Estilos nomeados a aplicar |\n| `markerColor` | Cor | Cor do marcador da lista |\n\nSão aceitos nomes de cores e valores hexadecimais, como `'#08786b'`. Os recursos de fonte dependem da fonte selecionada. Usar `bold` ou `italics` requer que a variante correspondente esteja registrada; definir a flag não fornece um arquivo de fonte ausente.\n\n## Decorações\n\n| Propriedade | Tipo / valores |\n| --- | --- |\n| `decoration` | `'underline'`, `'lineThrough'`, `'overline'` ou um array |\n| `decorationStyle` | `'solid'`, `'dashed'`, `'dotted'`, `'double'`, `'wavy'` |\n| `decorationColor` | Cor |\n| `decorationThickness` | Largura numérica; disponível desde 0.3.3 |\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{ text: 'A marked passage', decoration: 'underline', decorationStyle: 'wavy', decorationColor: '#08786b' }]\n};\n```\n\n## Estilos não são CSS\n\nUse os nomes de campos documentados pelo pdfmake. Não há cascata CSS, seletor DOM ou modelo de caixas do navegador. As margens usam valores em pontos e a ordem `[esquerda, superior, direita, inferior]`. Para estilizar vários blocos em conjunto, use uma [pilha](/docs/0.3/pt-br/document-definition-object/stack/). Consulte [fontes](/docs/0.3/pt-br/fonts/) para registrar variantes e verificar a cobertura de caracteres.\n"
+ },
+ {
+ "id": "de/document-definition-object/svgs",
+ "language": "de",
+ "translationKey": "document-definition-object/svgs",
+ "path": "/docs/0.3/de/document-definition-object/svgs/",
+ "title": "SVGs",
+ "description": "Binde SVG-Inhalte in pdfmake 0.3 als Text oder SVGElement ein und skaliere sie proportional oder passend in ein Rechteck.",
+ "version": "0.3",
+ "sourceDigest": "1370a9ae1ce49896f1ce3301d0947639f4e5fd7225b9babd15b140e19eed060a",
+ "source": "document-definition-object/svgs.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/svgs/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/svgs",
+ "markdown": "# SVGs\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/svgs/\n\nSVGs ähneln [Bildern](/docs/0.3/de/document-definition-object/images/), derzeit können sie jedoch weder über eine Datei eingebunden noch aus einem Wörterbuch wiederverwendet werden.\n\n\n> **Note:** Der SVG-Knoten erwartet einen gültigen SVG-Wert. Ist der Wert ungültig oder leer, wird ein Fehler ausgelöst.\n\n\nFür die Umwandlung von SVG in ein PDF-Dokument wird die Bibliothek [SVG-to-PDFKit](https://github.com/alafr/SVG-to-PDFKit) verwendet.\n\nDer Wert des Knotens `svg` kann eine Zeichenfolge oder ein `SVGElement`-Objekt sein (letzteres ist nur im Browser verfügbar).\n\n\n> **Note:** `SVGElement`-Objekte werden ab Version **0.3.1** unterstützt.\n\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};\n```\n"
+ },
+ {
+ "id": "es/document-definition-object/svgs",
+ "language": "es",
+ "translationKey": "document-definition-object/svgs",
+ "path": "/docs/0.3/es/document-definition-object/svgs/",
+ "title": "SVG",
+ "description": "Configura SVG en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "1370a9ae1ce49896f1ce3301d0947639f4e5fd7225b9babd15b140e19eed060a",
+ "source": "document-definition-object/svgs.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/svgs/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/svgs",
+ "markdown": "# SVG\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/svgs/\n\nLos SVG se parecen mucho a las [imágenes](/docs/0.3/es/document-definition-object/images/), salvo que actualmente no se pueden referenciar por archivo ni reutilizar desde un diccionario.\n\n\n> **Note:** El nodo SVG requiere un valor SVG válido. Si el valor no es válido o está vacío, se produce un error.\n\n\nPara transformar SVG en un documento PDF se usa la biblioteca [SVG-to-PDFKit](https://github.com/alafr/SVG-to-PDFKit).\n\nEl valor del nodo `svg` puede ser una cadena o un objeto `SVGElement` (disponible solo en el navegador).\n\n\n> **Note:** La compatibilidad con objetos `SVGElement` requiere la versión **0.3.1** o posterior.\n\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};\n```\n"
+ },
+ {
+ "id": "fr/document-definition-object/svgs",
+ "language": "fr",
+ "translationKey": "document-definition-object/svgs",
+ "path": "/docs/0.3/fr/document-definition-object/svgs/",
+ "title": "SVG",
+ "description": "Configurez les SVG dans pdfmake 0.3 avec des exemples, des options et des notes d’utilisation.",
+ "version": "0.3",
+ "sourceDigest": "1370a9ae1ce49896f1ce3301d0947639f4e5fd7225b9babd15b140e19eed060a",
+ "source": "document-definition-object/svgs.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/svgs/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/svgs",
+ "markdown": "# SVG\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/svgs/\n\nLes SVG ressemblent beaucoup aux [images](/docs/0.3/fr/document-definition-object/images/), mais il n’est actuellement pas possible de les référencer par fichier ni de les réutiliser depuis un dictionnaire.\n\n\n> **Note:** Le nœud SVG exige une valeur SVG valide. Une valeur invalide ou vide provoque une erreur.\n\n\nLa bibliothèque [SVG-to-PDFKit](https://github.com/alafr/SVG-to-PDFKit) est utilisée pour convertir les SVG en documents PDF.\n\nLa valeur du nœud `svg` peut être une chaîne ou un objet `SVGElement` (disponible uniquement dans le navigateur).\n\n\n> **Note:** La prise en charge de l’objet `SVGElement` nécessite la version **0.3.1** ou ultérieure.\n\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};\n```\n"
+ },
+ {
+ "id": "document-definition-object/svgs",
+ "language": "en",
+ "translationKey": "document-definition-object/svgs",
+ "path": "/docs/0.3/document-definition-object/svgs/",
+ "title": "SVGs",
+ "description": "Configure svgs in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/svgs.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/svgs/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/svgs",
+ "markdown": "# SVGs\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/svgs/\n\nSVGs are much like [images](/docs/0.3/document-definition-object/images/) except it is not currently possible to refer to SVGs by file or re-use from a dictionary.\n\n\n> **Note:** The SVG node expects a valid SVG value. If the value is invalid or empty, an error is thrown.\n\n\nLibrary [SVG-to-PDFKit](https://github.com/alafr/SVG-to-PDFKit) is used to transformation from SVG to PDF document.\n\nNode `svg` value can be string or `SVGElement` object (is available only in browser).\n\n\n> **Note:** Support of `SVGElement` object required version **0.3.1** or later\n\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};\n```\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/svgs",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/svgs",
+ "path": "/docs/0.3/pt-br/document-definition-object/svgs/",
+ "title": "SVGs",
+ "description": "Adicione conteúdo vetorial SVG aos documentos pdfmake 0.3 e controle suas dimensões e escala.",
+ "version": "0.3",
+ "sourceDigest": "1370a9ae1ce49896f1ce3301d0947639f4e5fd7225b9babd15b140e19eed060a",
+ "source": "document-definition-object/svgs.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/svgs/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/svgs",
+ "markdown": "# SVGs\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/svgs/\n\nSVGs são muito parecidos com [imagens](/docs/0.3/pt-br/document-definition-object/images/), mas atualmente não é possível referenciar SVGs por arquivo nem reutilizá-los a partir de um dicionário.\n\n\n> **Note:** O nó SVG espera um valor SVG válido. Se o valor estiver vazio ou for inválido, será lançado um erro.\n\n\nA biblioteca [SVG-to-PDFKit](https://github.com/alafr/SVG-to-PDFKit) é usada para transformar SVG em um documento PDF.\n\nO valor do nó `svg` pode ser uma string ou um objeto `SVGElement` (disponível somente no navegador).\n\n\n> **Note:** O suporte ao objeto `SVGElement` requer a versão **0.3.1** ou posterior\n\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n {\n // If no width/height/fit is used, then dimensions from the svg element is used.\n svg: ''\n },\n {\n // if you specify width, svg will scale proportionally\n svg: '',\n width: 150\n },\n {\n // if you specify height, svg will scale proportionally\n // Minimal pdfmake version: 0.3.2\n svg: '',\n height: 100\n },\n {\n // if you specify both width and height - svg will be stretched\n svg: '',\n width: 600,\n height: 400\n },\n {\n // you can also fit the svg inside a rectangle\n svg: '',\n fit: [150, 100]\n },\n {\n // if no width/height is specified in SVG element, you must set width and height for node\n svg: '',\n width: 300,\n height: 200\n },\n ]\n};\n```\n"
+ },
+ {
+ "id": "de/document-definition-object/tables",
+ "language": "de",
+ "translationKey": "document-definition-object/tables",
+ "path": "/docs/0.3/de/document-definition-object/tables/",
+ "title": "Tabellen",
+ "description": "Erstelle Tabellen mit einheitlichen Zeilen, wiederholten Kopfzeilen, benutzerdefinierten Rahmen, Breiten und verbundenen Zellen.",
+ "version": "0.3",
+ "sourceDigest": "48bc3047dc6a23638e82fe81a22c544d203aad3bebf645cdee21772c669cefae",
+ "source": "document-definition-object/tables.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/tables/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/tables",
+ "markdown": "# Tabellen\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/tables/\n\n## Mit Zeilen und wiederholter Kopfzeile beginnen\n\nVerwende eine Tabelle, wenn Zellen verschiedener Zeilen ausgerichtet werden sollen. `body` ist ein Array mit Zeilen-Arrays. Jede Zeile muss dieselbe Anzahl von Zellen enthalten; Zellen können Text oder andere pdfmake-Knoten enthalten. `headerRows: 1` wiederholt die erste Zeile, wenn die Tabelle auf einer neuen Seite fortgesetzt wird.\n\n\n\n### Runnable example: 03 · Tables & repeating headers\n\n**JavaScript**\n\n```js\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/de/playground/?example=tables)\n\n\n\n## Breiten auswählen\n\n| Breite | Bedeutung | Geeignet, wenn |\n| --- | --- | --- |\n| Eine Zahl, zum Beispiel `80` | Feste Punkte | Codes, Mengen oder eine Spalte mit vorhersehbaren Beschriftungen |\n| `'*'` | Verbleibende Breite teilen | Eine Beschreibung den verfügbaren Platz ausfüllen soll |\n| `'auto'` | Inhalt messen | Kurze Beschriftungen nur die benötigte Breite belegen sollen |\n| Prozentangabe als Zeichenfolge | Prozentuale Breite | Ein proportionales Layout erforderlich ist; gemischte Breiten sorgfältig prüfen |\n\nRahmen, Innenabstände, Seitenränder und andere Spalten belegen ebenfalls Platz. Beginne mit festen Breiten und Sternbreiten und verwende `auto`, wenn eine inhaltsabhängige Größe beabsichtigt ist. Vermeide große feste Breiten, die den Inhaltsbereich überschreiten.\n\n## Tabellen- und Zellfelder\n\n| Feld | Ebene | Typ / Zweck |\n| --- | --- | --- |\n| `body` | `table` | Nichtleere Zeilen-Arrays |\n| `widths` | `table` | Breitenangaben, eine pro Spalte |\n| `headerRows` | `table` | Anzahl der ersten Zeilen, die als Kopfzeile wiederholt werden |\n| `dontBreakRows` | `table` | Verhindert, dass eine einzelne Zeile auf mehrere Seiten aufgeteilt wird |\n| `keepWithHeaderRows` | `table` | Anzahl der folgenden Zeilen, die zusammen mit der Kopfzeile gehalten werden |\n| `layout` | Knoten neben `table` | Name eines integrierten Layouts, registrierter eigener Name oder Layoutobjekt |\n| `colSpan`, `rowSpan` | Zelle | Positive Anzahl der überspannten Spalten/Zeilen; Platzhalter sind weiterhin erforderlich |\n| `verticalAlignment` | Zelle | `'top'` (Standard), `'middle'` oder `'bottom'` |\n| `border` | Zelle | Vier boolesche Werte: links, oben, rechts, unten |\n| `borderColor` | Zelle | Vier Farben in derselben Reihenfolge |\n| `fillColor` | Zelle | Hintergrundfarbe oder unterstütztes Mustertupel |\n| `fillOpacity` | Zelle | Numerische Deckkraft des Hintergrunds |\n| `overlayPattern`, `overlayOpacity` | Zelle | Mustertupel und numerische Deckkraft, die über den Inhalt gelegt werden |\n\nEine Zeile zusammenzuhalten sorgt nicht dafür, dass eine übergroße Zeile auf eine Seite passt. Prüfe lange Beschreibungen und verschachtelten Inhalt mit deiner tatsächlichen Seitengröße und deinen Schriften.\n\n## Zellen verbinden, ohne die Zeilenlänge zu ändern\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};\n```\n\nDie leeren Objekte belegen die von einer Zelle überspannten Plätze. Ohne sie ist eine Zeile nicht einheitlich. Verwende `undefined` nicht als Platzhalter. Das [Playground-Beispiel zu Zellüberspannungen](/docs/0.3/de/playground/?example=spans) zeigt diese Definition.\n\n## Integriertes Layout verwenden\n\nDie Layouts `noBorders`, `headerLineOnly` und `lightHorizontalLines` stehen unter ihrem Namen zur Verfügung. Setze `layout` neben `table`, nicht innerhalb davon:\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};\n```\n\n## Eigenes Layout registrieren\n\nRegistriere Layouts, bevor du das Dokument erstellst. Verwende in Node.js dein konfiguriertes `pdfmake`-Singleton und im Browser `pdfMake`.\n\n**JavaScript**\n\n```js\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from \"pdfmake/build/pdfmake.js\";\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd: TDocumentDefinitions = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};\n```\n\nDas Snippet setzt voraus, dass Browser-Engine und Schriften geladen sind. Eine Layoutvariable zu definieren, registriert sie noch nicht. Verwende möglichst deterministische Callbacks und ändere gemeinsam genutzte Konfiguration nicht während paralleler Node.js-Aufträge.\n\n## Fehlerhafte Tabellen diagnostizieren\n\nPrüfe `body`, bevor du Rahmen oder Breiten änderst: Es muss Zeilen-Arrays mit einheitlicher Länge enthalten. Prüfe anschließend die Platzhalter für überspannte Zellen. Im lokalen Verbesserungszweig nennen Diagnosen den fehlerhaften Definitionspfad und die erwartete Zellanzahl. Siehe [Fehler und Diagnose](/docs/0.3/de/guides/errors/).\n"
+ },
+ {
+ "id": "es/document-definition-object/tables",
+ "language": "es",
+ "translationKey": "document-definition-object/tables",
+ "path": "/docs/0.3/es/document-definition-object/tables/",
+ "title": "Tablas",
+ "description": "Crea tablas coherentes con filas, encabezados repetidos, bordes personalizados, anchos y celdas combinadas.",
+ "version": "0.3",
+ "sourceDigest": "48bc3047dc6a23638e82fe81a22c544d203aad3bebf645cdee21772c669cefae",
+ "source": "document-definition-object/tables.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/tables/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/tables",
+ "markdown": "# Tablas\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/tables/\n\n## Empezar con filas y un encabezado repetido\n\nUsa una tabla cuando haya que alinear celdas de distintas filas. `body` es una matriz de matrices que representan filas. Todas las filas deben tener el mismo número de celdas; las celdas pueden contener texto u otros nodos de pdfmake. `headerRows: 1` repite la primera fila cuando la tabla continúa en otra página.\n\n\n\n### Runnable example: 03 · Tables & repeating headers\n\n**JavaScript**\n\n```js\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/es/playground/?example=tables)\n\n\n\n## Elegir los anchos\n\n| Ancho | Significado | Útil cuando |\n| --- | --- | --- |\n| Un número, por ejemplo `80` | Puntos fijos | Códigos, cantidades o una columna de etiquetas predecible |\n| `'*'` | Comparte el ancho restante | Una descripción debe ocupar el espacio disponible |\n| `'auto'` | Mide el contenido | Las etiquetas cortas deben usar solo el ancho que necesitan |\n| Una cadena de porcentaje | Ancho basado en porcentajes | Se necesita una distribución proporcional; prueba con cuidado los anchos mixtos |\n\nLos bordes, el relleno, los márgenes de página y las demás columnas también consumen espacio. Empieza con anchos fijos y con `*`; luego usa `auto` cuando quieras deliberadamente un ajuste según el contenido. Evita añadir anchos fijos grandes que superen el área de contenido.\n\n## Campos de tabla y celda\n\n| Campo | Dónde | Tipo / propósito |\n| --- | --- | --- |\n| `body` | `table` | Matrices de filas no vacías |\n| `widths` | `table` | Descriptores de ancho, uno por columna |\n| `headerRows` | `table` | Número de filas iniciales que se repiten como encabezados |\n| `dontBreakRows` | `table` | Evita dividir una fila individual entre páginas |\n| `keepWithHeaderRows` | `table` | Número de filas siguientes que se mantienen junto al encabezado |\n| `layout` | Nodo, junto a `table` | Nombre de una distribución integrada, nombre personalizado registrado u objeto de distribución |\n| `colSpan`, `rowSpan` | Celda | Número positivo de columnas/filas que se abarcan; también se requieren celdas de marcador |\n| `verticalAlignment` | Celda | `'top'` (predeterminado), `'middle'` o `'bottom'` |\n| `border` | Celda | Cuatro booleanos: izquierda, arriba, derecha, abajo |\n| `borderColor` | Celda | Cuatro colores en el mismo orden |\n| `fillColor` | Celda | Color de fondo o tupla de patrón compatible |\n| `fillOpacity` | Celda | Opacidad numérica del fondo |\n| `overlayPattern`, `overlayOpacity` | Celda | Tupla de patrón y opacidad numérica que se pinta sobre el contenido |\n\nMantener una fila unida no permite que una fila demasiado grande quepa en una página. Prueba las descripciones largas y el contenido anidado con el tamaño de página y las fuentes reales.\n\n## Combinar celdas sin cambiar la longitud de las filas\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};\n```\n\nLos objetos vacíos ocupan las celdas abarcadas por `span`. Si los omites, la fila tendrá una longitud incoherente. No uses `undefined` como marcador de posición. El [ejemplo de celdas combinadas del entorno de pruebas](/docs/0.3/es/playground/?example=spans) muestra esta definición.\n\n## Usar una distribución integrada\n\n`noBorders`, `headerLineOnly` y `lightHorizontalLines` están disponibles por nombre. Coloca `layout` junto a `table`, no dentro:\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};\n```\n\n## Registrar una distribución personalizada\n\nRegistra las distribuciones antes de crear el documento. En Node, usa el singleton de `pdfmake` configurado; en el navegador, usa `pdfMake`.\n\n**JavaScript**\n\n```js\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from \"pdfmake/build/pdfmake.js\";\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd: TDocumentDefinitions = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};\n```\n\nEl fragmento supone que el motor del navegador y las fuentes ya están cargados. Definir una variable de distribución no la registra. Prefiere callbacks deterministas y evita mutar la configuración compartida durante trabajos simultáneos de Node.\n\n## Diagnosticar tablas malformadas\n\nComprueba `body` antes de cambiar los bordes o los anchos: debe contener matrices de filas con longitudes coherentes. Luego comprueba los marcadores de posición de las celdas combinadas. En la rama de mejoras local, los diagnósticos identifican la ruta de la definición problemática y el número de celdas esperado. Consulta [errores y diagnósticos](/docs/0.3/es/guides/errors/).\n"
+ },
+ {
+ "id": "fr/document-definition-object/tables",
+ "language": "fr",
+ "translationKey": "document-definition-object/tables",
+ "path": "/docs/0.3/fr/document-definition-object/tables/",
+ "title": "Tableaux",
+ "description": "Créez des tableaux avec des lignes cohérentes, des en-têtes répétés, des bordures personnalisées, des largeurs et des cellules fusionnées.",
+ "version": "0.3",
+ "sourceDigest": "48bc3047dc6a23638e82fe81a22c544d203aad3bebf645cdee21772c669cefae",
+ "source": "document-definition-object/tables.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/tables/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/tables",
+ "markdown": "# Tableaux\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/tables/\n\n## Commencer par des lignes et un en-tête répété\n\nUtilisez un tableau lorsque les cellules de différentes lignes doivent s’aligner. `body` est un tableau de lignes, elles-mêmes représentées par des tableaux. Chaque ligne doit contenir le même nombre de cellules ; une cellule peut contenir du texte ou d’autres nœuds pdfmake. `headerRows: 1` répète la première ligne si le tableau se poursuit sur une autre page.\n\n\n\n### Runnable example: 03 · Tables & repeating headers\n\n**JavaScript**\n\n```js\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/fr/playground/?example=tables)\n\n\n\n## Choisir les largeurs\n\n| Largeur | Signification | Utile lorsque |\n| --- | --- | --- |\n| Un nombre, par exemple `80` | Largeur fixe en points | Pour des codes, des quantités ou une colonne d’intitulés de largeur prévisible |\n| `'*'` | Partage la largeur restante | Pour qu’une description occupe l’espace disponible |\n| `'auto'` | Mesure le contenu | Pour que des intitulés courts n’occupent que la largeur nécessaire |\n| Une chaîne en pourcentage | Largeur proportionnelle | Pour une mise en page proportionnelle ; testez soigneusement les largeurs mixtes |\n\nLes bordures, le remplissage, les marges de page et les autres colonnes consomment aussi de l’espace. Commencez par des largeurs fixes et étoilées, puis utilisez `auto` lorsque le dimensionnement selon le contenu est voulu. Évitez les grandes largeurs fixes qui dépassent la zone de contenu.\n\n## Propriétés des tableaux et des cellules\n\n| Propriété | Emplacement | Type / rôle |\n| --- | --- | --- |\n| `body` | `table` | Tableaux non vides représentant les lignes |\n| `widths` | `table` | Descripteurs de largeur, un par colonne |\n| `headerRows` | `table` | Nombre de lignes initiales répétées comme en-têtes |\n| `dontBreakRows` | `table` | Empêche une ligne individuelle de se couper entre deux pages |\n| `keepWithHeaderRows` | `table` | Nombre de lignes suivantes à garder avec l’en-tête |\n| `layout` | Nœud, à côté de `table` | Nom de disposition intégrée, nom personnalisé enregistré ou objet de disposition |\n| `colSpan`, `rowSpan` | Cellule | Nombre positif de colonnes ou lignes couvertes ; les cellules de remplacement restent nécessaires |\n| `verticalAlignment` | Cellule | `'top'` (par défaut), `'middle'` ou `'bottom'` |\n| `border` | Cellule | Quatre booléens : gauche, haut, droite, bas |\n| `borderColor` | Cellule | Quatre couleurs dans le même ordre |\n| `fillColor` | Cellule | Couleur d’arrière-plan ou tuple de motif pris en charge |\n| `fillOpacity` | Cellule | Opacité numérique de l’arrière-plan |\n| `overlayPattern`, `overlayOpacity` | Cellule | Tuple de motif et opacité numérique appliqués par-dessus le contenu |\n\nGarder une ligne entière ne permet pas de faire tenir une ligne trop grande sur une page. Testez les descriptions longues et les contenus imbriqués avec le format de page et les polices réellement utilisés.\n\n## Fusionner des cellules sans modifier la longueur des lignes\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};\n```\n\nLes objets vides occupent les cellules couvertes par une fusion. Les omettre rend la ligne incohérente. N’utilisez pas `undefined` comme valeur de remplacement. L’[exemple de fusion dans le playground](/docs/0.3/fr/playground/?example=spans) présente cette définition.\n\n## Utiliser une disposition intégrée\n\nLes dispositions `noBorders`, `headerLineOnly` et `lightHorizontalLines` sont disponibles par leur nom. Placez `layout` à côté de `table`, et non à l’intérieur :\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};\n```\n\n## Enregistrer une disposition personnalisée\n\nEnregistrez les dispositions avant de créer le document. Dans Node, utilisez votre instance `pdfmake` configurée ; dans le navigateur, utilisez `pdfMake`.\n\n**JavaScript**\n\n```js\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from \"pdfmake/build/pdfmake.js\";\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd: TDocumentDefinitions = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};\n```\n\nCet extrait suppose que le moteur du navigateur et les polices sont chargés. Déclarer une variable de disposition ne suffit pas à l’enregistrer. Préférez des fonctions de rappel déterministes ; évitez de modifier une configuration partagée pendant des tâches Node concurrentes.\n\n## Diagnostiquer les tableaux mal formés\n\nVérifiez `body` avant de modifier les bordures ou les largeurs : il doit contenir des tableaux de lignes dont les longueurs concordent. Vérifiez ensuite les cellules de remplacement des fusions. Dans la branche locale d’amélioration, les diagnostics indiquent le chemin de définition fautif et le nombre de cellules attendu. Consultez [Erreurs et diagnostics](/docs/0.3/fr/guides/errors/).\n"
+ },
+ {
+ "id": "document-definition-object/tables",
+ "language": "en",
+ "translationKey": "document-definition-object/tables",
+ "path": "/docs/0.3/document-definition-object/tables/",
+ "title": "Tables",
+ "description": "Build tables with consistent rows, repeating headers, custom borders, widths and merged cells.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/tables.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/tables/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/tables",
+ "markdown": "# Tables\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/tables/\n\n## Start with rows and a repeating header\n\nUse a table when cells in different rows need to align. `body` is an array of row\narrays. Each row must have the same number of cells; cells can contain text or\nother pdfmake nodes. `headerRows: 1` repeats the first row when the table continues\nonto another page.\n\n\n\n### Runnable example: 03 · Tables & repeating headers\n\n**JavaScript**\n\n```js\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/playground/?example=tables)\n\n\n\n## Choose widths\n\n| Width | Meaning | Useful when |\n| --- | --- | --- |\n| A number, for example `80` | Fixed points | Codes, counts or a predictable label column |\n| `'*'` | Share the remaining width | A description should fill the available space |\n| `'auto'` | Measure the content | Short labels should use only the width they need |\n| A percentage string | Percentage-based width | A proportional layout is required; test mixed widths carefully |\n\nBorders, padding, page margins and other columns consume space too. Start with\nfixed and star widths, then use `auto` where content-based sizing is intentional.\nAvoid adding large fixed widths that exceed the content area.\n\n## Table and cell fields\n\n| Field | Where | Type / purpose |\n| --- | --- | --- |\n| `body` | `table` | Nonempty row arrays |\n| `widths` | `table` | Width descriptors, one per column |\n| `headerRows` | `table` | Number of leading rows repeated as headers |\n| `dontBreakRows` | `table` | Keep an individual row from splitting across pages |\n| `keepWithHeaderRows` | `table` | Number of following rows to keep with the header |\n| `layout` | Node, beside `table` | Built-in layout name, registered custom name, or layout object |\n| `colSpan`, `rowSpan` | Cell | Positive number of columns/rows covered; placeholders are still required |\n| `verticalAlignment` | Cell | `'top'` (default), `'middle'` or `'bottom'` |\n| `border` | Cell | Four booleans: left, top, right, bottom |\n| `borderColor` | Cell | Four colors in the same order |\n| `fillColor` | Cell | Background color or a supported pattern tuple |\n| `fillOpacity` | Cell | Numeric background opacity |\n| `overlayPattern`, `overlayOpacity` | Cell | Pattern tuple and numeric opacity painted over the contents |\n\nKeeping a row together cannot make an oversized row fit on a page. Test long\ndescriptions and nested content with your actual page size and fonts.\n\n## Merge cells without changing the row length\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};\n```\n\nThe empty objects occupy the cells covered by a span. Leaving them out produces\nan inconsistent row. Do not use `undefined` as a placeholder. The\n[spans playground example](/docs/0.3/playground/?example=spans) shows this definition.\n\n## Use a built-in layout\n\n`noBorders`, `headerLineOnly` and `lightHorizontalLines` are available by name.\nPut `layout` beside `table`, not inside it:\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};\n```\n\n## Register a custom layout\n\nRegister layouts before creating the document. In Node use your configured\n`pdfmake` singleton; in the browser use `pdfMake`.\n\n**JavaScript**\n\n```js\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from \"pdfmake/build/pdfmake.js\";\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd: TDocumentDefinitions = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};\n```\n\nThe snippet assumes the browser engine and fonts are loaded. Defining a layout\nvariable alone does not register it. Prefer deterministic callbacks; avoid\nmutating shared configuration during concurrent Node jobs.\n\n## Diagnose malformed tables\n\nCheck `body` before changing borders or widths: it must contain row arrays with\nconsistent lengths. Check span placeholders next. In the local improvement branch,\ndiagnostics identify the offending definition path and expected number of cells.\nSee [errors and diagnostics](/docs/0.3/guides/errors/).\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/tables",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/tables",
+ "path": "/docs/0.3/pt-br/document-definition-object/tables/",
+ "title": "Tabelas",
+ "description": "Crie tabelas com linhas consistentes, cabeçalhos repetidos, bordas personalizadas, larguras e células mescladas.",
+ "version": "0.3",
+ "sourceDigest": "48bc3047dc6a23638e82fe81a22c544d203aad3bebf645cdee21772c669cefae",
+ "source": "document-definition-object/tables.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/tables/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/tables",
+ "markdown": "# Tabelas\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/tables/\n\n## Comece com linhas e um cabeçalho repetido\n\nUse uma tabela quando as células de linhas diferentes precisam ficar alinhadas. `body` é um array de arrays de linhas. Cada linha precisa ter o mesmo número de células; as células podem conter texto ou outros nós do pdfmake. `headerRows: 1` repete a primeira linha quando a tabela continua em outra página.\n\n\n\n### Runnable example: 03 · Tables & repeating headers\n\n**JavaScript**\n\n```js\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/pt-br/playground/?example=tables)\n\n\n\n## Escolha as larguras\n\n| Largura | Significado | Útil quando |\n| --- | --- | --- |\n| Um número, por exemplo `80` | Pontos fixos | Códigos, quantidades ou uma coluna de rótulos previsível |\n| `'*'` | Compartilha a largura restante | Uma descrição deve ocupar o espaço disponível |\n| `'auto'` | Mede o conteúdo | Rótulos curtos devem usar apenas a largura necessária |\n| Uma string percentual | Largura baseada em porcentagem | É necessário um layout proporcional; teste cuidadosamente larguras combinadas |\n\nBordas, preenchimento interno, margens da página e outras colunas também consomem espaço. Comece com larguras fixas e com asterisco; use `auto` quando o dimensionamento pelo conteúdo for intencional. Evite adicionar larguras fixas grandes que ultrapassem a área de conteúdo.\n\n## Campos da tabela e das células\n\n| Campo | Onde | Tipo / finalidade |\n| --- | --- | --- |\n| `body` | `table` | Arrays de linhas não vazios |\n| `widths` | `table` | Descritores de largura, um por coluna |\n| `headerRows` | `table` | Número de linhas iniciais repetidas como cabeçalhos |\n| `dontBreakRows` | `table` | Impede que uma linha individual seja dividida entre páginas |\n| `keepWithHeaderRows` | `table` | Número de linhas seguintes que devem permanecer junto ao cabeçalho |\n| `layout` | Nó, ao lado de `table` | Nome de layout integrado, nome registrado ou objeto de layout |\n| `colSpan`, `rowSpan` | Célula | Número positivo de colunas/linhas ocupadas; ainda são necessários marcadores de posição |\n| `verticalAlignment` | Célula | `'top'` (padrão), `'middle'` ou `'bottom'` |\n| `border` | Célula | Quatro booleanos: esquerda, superior, direita, inferior |\n| `borderColor` | Célula | Quatro cores na mesma ordem |\n| `fillColor` | Célula | Cor de fundo ou tupla de padrão compatível |\n| `fillOpacity` | Célula | Opacidade numérica do fundo |\n| `overlayPattern`, `overlayOpacity` | Célula | Tupla de padrão e opacidade numérica desenhados sobre o conteúdo |\n\nManter uma linha inteira junta não faz uma linha alta demais caber na página. Teste descrições longas e conteúdo aninhado com o tamanho de página e as fontes que você realmente usa.\n\n## Mescle células sem alterar o tamanho da linha\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A heading across three columns', colSpan: 3, bold: true }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n }\n }]\n};\n```\n\nOs objetos vazios ocupam as células cobertas por um intervalo mesclado. Omiti-los produz uma linha inconsistente. Não use `undefined` como marcador de posição. O [exemplo de intervalos mesclados no playground](/docs/0.3/pt-br/playground/?example=spans) mostra essa definição.\n\n## Use um layout integrado\n\n`noBorders`, `headerLineOnly` e `lightHorizontalLines` podem ser usados pelo nome. Coloque `layout` ao lado de `table`, e não dentro dele:\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [{\n layout: 'lightHorizontalLines',\n table: { headerRows: 1, widths: ['*', 'auto'], body: [['Item', 'Qty'], ['Notebook', 3]] }\n }]\n};\n```\n\n## Registre um layout personalizado\n\nRegistre os layouts antes de criar o documento. No Node, use a instância configurada de `pdfmake`; no navegador, use `pdfMake`.\n\n**JavaScript**\n\n```js\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from \"pdfmake/build/pdfmake.js\";\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\npdfMake.addTableLayouts({\n compact: {\n hLineWidth: function (index, node) {\n return index === node.table.headerRows ? 1 : 0;\n },\n vLineWidth: function () { return 0; },\n hLineColor: function () { return '#b7cfc4'; },\n paddingLeft: function () { return 6; },\n paddingRight: function () { return 6; }\n }\n});\n\nvar dd: TDocumentDefinitions = {\n content: [{ layout: 'compact', table: { headerRows: 1, body: [['Item', 'Qty'], ['Notebook', 3]] } }]\n};\n```\n\nO trecho pressupõe que o mecanismo do navegador e as fontes foram carregados. Apenas definir uma variável de layout não a registra. Prefira callbacks determinísticos; evite alterar configuração compartilhada durante tarefas simultâneas do Node.\n\n## Diagnostique tabelas malformadas\n\nVerifique `body` antes de alterar bordas ou larguras: ele deve conter arrays de linhas com comprimentos consistentes. Em seguida, confira os marcadores de posição dos intervalos mesclados. No branch local de melhorias, os diagnósticos identificam o caminho da definição com problema e o número esperado de células. Consulte [erros e diagnósticos](/docs/0.3/pt-br/guides/errors/).\n"
+ },
+ {
+ "id": "de/document-definition-object/toc",
+ "language": "de",
+ "translationKey": "document-definition-object/toc",
+ "path": "/docs/0.3/de/document-definition-object/toc/",
+ "title": "Inhaltsverzeichnis",
+ "description": "Erzeuge ein oder mehrere Inhaltsverzeichnisse aus markierten Elementen, mit Sortierung, Stilen und optionalen PDF-Lesezeichen.",
+ "version": "0.3",
+ "sourceDigest": "54b38f6844726a1c78499e217c2cf64d2cebd568ef974973ac6c9a7ee39cac11",
+ "source": "document-definition-object/toc.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/toc/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/toc",
+ "markdown": "# Inhaltsverzeichnis\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/toc/\n\n## Überschriften zur Aufnahme markieren\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};\n```\n\nDer `toc`-Knoten fügt das erzeugte Verzeichnis ein; `tocItem` markiert Textknoten, die darin aufgeführt werden sollen. Die Seitenzahlen werden während des Layouts berechnet.\n\n## Mehrere Inhaltsverzeichnisse\n\nJedes Inhaltsverzeichnis ist ein eigener Inhaltsknoten. Mit IDs legst du fest, in welchen Listen die einzelnen Einträge erscheinen:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};\n```\n\nFüge nicht zwei `toc`-Schlüssel in dasselbe Objekt ein; JavaScript behält nur den letzten Wert.\n\n## Optionen des Inhaltsverzeichnisses\n\n| Feld | Typ | Bedeutung |\n| --- | --- | --- |\n| `id` | string | Kennung für ein benanntes Inhaltsverzeichnis |\n| `title` | string oder Textknoten | Optionaler Titel |\n| `textStyle`, `numberStyle` | Stilobjekt | Formatierung des Eintragstextes und der Seitenzahl |\n| `textMargin` | Abstand | Abstand des Eintrags |\n| `hideEmpty` | boolean | Leeres Inhaltsverzeichnis ausblenden; Standard `false`, seit 0.3.3 |\n| `sortBy` | `'page'` oder `'title'` | Sortierreihenfolge; Standard `page`, seit 0.3.3 |\n| `sortLocale` | string | Gebietsschema für die Sortierung; standardmäßig das Laufzeitgebietsschema, seit 0.3.3 |\n| `outlines` | boolean | Einträge in PDF-Lesezeichen aufnehmen; seit 0.3.5 |\n\nBei einem markierten Textknoten akzeptiert `tocItem` den Wert `true`, eine ToC-ID oder ein Array mit IDs. Mit `textStyle`, `numberStyle` und `textMargin` des Textknotens kannst du den Eintrag formatieren. Steuere Lesezeichen über [Gliederungen](/docs/0.3/de/document-definition-object/outlines/).\n"
+ },
+ {
+ "id": "es/document-definition-object/toc",
+ "language": "es",
+ "translationKey": "document-definition-object/toc",
+ "path": "/docs/0.3/es/document-definition-object/toc/",
+ "title": "Índice",
+ "description": "Genera uno o varios índices a partir de nodos marcados, con ordenación, estilos y esquemas PDF opcionales.",
+ "version": "0.3",
+ "sourceDigest": "54b38f6844726a1c78499e217c2cf64d2cebd568ef974973ac6c9a7ee39cac11",
+ "source": "document-definition-object/toc.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/toc/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/toc",
+ "markdown": "# Índice\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/toc/\n\n## Marcar encabezados para incluirlos\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};\n```\n\nEl nodo `toc` inserta la lista generada; `tocItem` marca los nodos de texto que se incluirán. Los números de página se calculan durante la maquetación.\n\n## Varios índices\n\nCada índice es un nodo de contenido independiente. Usa identificadores para elegir en qué lista aparece cada elemento:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};\n```\n\nNo pongas dos claves `toc` en el mismo objeto: JavaScript conserva únicamente el último valor.\n\n## Opciones de ToC\n\n| Campo | Tipo | Significado |\n| --- | --- | --- |\n| `id` | string | Identificador de un índice con nombre |\n| `title` | string o nodo de texto | Título opcional |\n| `textStyle`, `numberStyle` | objeto de estilo | Estilos del texto de la entrada y del número de página |\n| `textMargin` | margen | Espaciado de las entradas |\n| `hideEmpty` | boolean | Oculta un índice vacío; predeterminado: false, desde 0.3.3 |\n| `sortBy` | `'page'` o `'title'` | Orden; predeterminado: página, desde 0.3.3 |\n| `sortLocale` | string | Idioma para ordenar; de forma predeterminada, el idioma de ejecución, desde 0.3.3 |\n| `outlines` | boolean | Incluye las entradas en los marcadores del PDF; desde 0.3.5 |\n\nEn un nodo de texto marcado, `tocItem` acepta `true`, un identificador de índice o una matriz de identificadores. Las propiedades `textStyle`, `numberStyle` y `textMargin` del nodo de texto permiten personalizar su entrada. Consulta [esquemas](/docs/0.3/es/document-definition-object/outlines/) para controlar los marcadores.\n"
+ },
+ {
+ "id": "fr/document-definition-object/toc",
+ "language": "fr",
+ "translationKey": "document-definition-object/toc",
+ "path": "/docs/0.3/fr/document-definition-object/toc/",
+ "title": "Table des matières",
+ "description": "Générez une ou plusieurs tables des matières depuis des nœuds marqués, avec tri, styles et signets PDF facultatifs.",
+ "version": "0.3",
+ "sourceDigest": "54b38f6844726a1c78499e217c2cf64d2cebd568ef974973ac6c9a7ee39cac11",
+ "source": "document-definition-object/toc.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/toc/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/toc",
+ "markdown": "# Table des matières\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/toc/\n\n## Marquer les titres à inclure\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};\n```\n\nLe nœud `toc` insère la liste générée ; `tocItem` marque les nœuds texte à inclure. Les numéros de page sont calculés pendant la mise en page.\n\n## Plusieurs tables des matières\n\nChaque ToC est un nœud de contenu distinct. Utilisez des identifiants pour sélectionner la liste à laquelle chaque élément appartient :\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};\n```\n\nNe placez pas deux clés `toc` dans le même objet : JavaScript ne conserve que la dernière valeur.\n\n## Options de la table des matières\n\n| Champ | Type | Signification |\n| --- | --- | --- |\n| `id` | string | Identifiant de la ToC nommée |\n| `title` | string ou nœud texte | Titre facultatif |\n| `textStyle`, `numberStyle` | objet de style | Style du texte et des numéros de page des entrées |\n| `textMargin` | marge | Espacement des entrées |\n| `hideEmpty` | boolean | Masque une ToC vide ; false par défaut, depuis 0.3.3 |\n| `sortBy` | `'page'` ou `'title'` | Ordre ; page par défaut, depuis 0.3.3 |\n| `sortLocale` | string | Paramètre régional de tri ; celui de l’environnement par défaut, depuis 0.3.3 |\n| `outlines` | boolean | Inclut les entrées dans les signets PDF ; depuis 0.3.5 |\n\nSur un nœud texte marqué, `tocItem` accepte `true`, un identifiant ou un tableau d’identifiants. Les propriétés `textStyle`, `numberStyle` et `textMargin` du nœud peuvent personnaliser son entrée. Consultez les [plans de document](/docs/0.3/fr/document-definition-object/outlines/) pour les options de signets.\n"
+ },
+ {
+ "id": "document-definition-object/toc",
+ "language": "en",
+ "translationKey": "document-definition-object/toc",
+ "path": "/docs/0.3/document-definition-object/toc/",
+ "title": "Table of contents",
+ "description": "Generate one or more tables of contents from marked nodes, with sorting, styles and optional PDF outlines.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/toc.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/toc/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/toc",
+ "markdown": "# Table of contents\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/toc/\n\n## Mark headings for inclusion\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};\n```\n\nThe `toc` node inserts the generated list; `tocItem` marks text nodes for inclusion. Page numbers are calculated during layout.\n\n## Multiple tables of contents\n\nEach ToC is a separate content node. Use IDs to choose which list receives each item:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};\n```\n\nDo not put two `toc` keys on the same object; JavaScript retains only the last value.\n\n## ToC options\n\n| Field | Type | Meaning |\n| --- | --- | --- |\n| `id` | string | Identifier for a named ToC |\n| `title` | string or text node | Optional title |\n| `textStyle`, `numberStyle` | style object | Entry text and page-number styling |\n| `textMargin` | margin | Entry spacing |\n| `hideEmpty` | boolean | Hide an empty ToC; default false, since 0.3.3 |\n| `sortBy` | `'page'` or `'title'` | Ordering; default page, since 0.3.3 |\n| `sortLocale` | string | Locale for sorting; runtime locale by default, since 0.3.3 |\n| `outlines` | boolean | Include entries in PDF bookmarks; since 0.3.5 |\n\nOn a marked text node, `tocItem` accepts `true`, one ToC ID or an array of IDs. Text-node `textStyle`, `numberStyle` and `textMargin` can customize its entry. See [outlines](/docs/0.3/document-definition-object/outlines/) for bookmark controls.\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/toc",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/toc",
+ "path": "/docs/0.3/pt-br/document-definition-object/toc/",
+ "title": "Sumário",
+ "description": "Gere um ou mais sumários a partir de nós marcados, com ordenação, estilos e contornos PDF opcionais.",
+ "version": "0.3",
+ "sourceDigest": "54b38f6844726a1c78499e217c2cf64d2cebd568ef974973ac6c9a7ee39cac11",
+ "source": "document-definition-object/toc.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/toc/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/toc",
+ "markdown": "# Sumário\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/toc/\n\n## Marque títulos para incluí-los\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { title: { text: 'Contents', fontSize: 20, bold: true }, numberStyle: { bold: true } } },\n { text: 'Introduction', tocItem: true, fontSize: 18, margin: [0, 20, 0, 10] },\n 'Document body',\n { text: 'Details', tocItem: true, pageBreak: 'before', fontSize: 18 }\n ]\n};\n```\n\nO nó `toc` insere a lista gerada; `tocItem` marca os nós de texto a incluir. Os números de página são calculados durante o layout.\n\n## Vários sumários\n\nCada sumário é um nó de conteúdo separado. Use IDs para escolher em qual lista cada item aparecerá:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: [\n { toc: { id: 'main', title: 'All sections' } },\n { toc: { id: 'details', title: 'Detailed sections' } },\n { text: 'Overview', tocItem: 'main' },\n { text: 'Technical details', tocItem: ['main', 'details'], pageBreak: 'before' }\n ]\n};\n```\n\nNão coloque duas chaves `toc` no mesmo objeto; o JavaScript mantém somente o último valor.\n\n## Opções de sumário\n\n| Campo | Tipo | Significado |\n| --- | --- | --- |\n| `id` | string | Identificador de um sumário nomeado |\n| `title` | string ou nó de texto | Título opcional |\n| `textStyle`, `numberStyle` | objeto de estilo | Estilos do texto da entrada e do número da página |\n| `textMargin` | margem | Espaçamento da entrada |\n| `hideEmpty` | booleano | Oculta um sumário vazio; padrão `false`, desde 0.3.3 |\n| `sortBy` | `'page'` ou `'title'` | Ordenação; padrão `page`, desde 0.3.3 |\n| `sortLocale` | string | Localidade para ordenação; por padrão usa a localidade do runtime, desde 0.3.3 |\n| `outlines` | booleano | Inclui entradas nos marcadores PDF; desde 0.3.5 |\n\nEm um nó de texto marcado, `tocItem` aceita `true`, um ID de sumário ou um array de IDs. As propriedades `textStyle`, `numberStyle` e `textMargin` do nó de texto podem personalizar sua entrada. Consulte [contornos](/docs/0.3/pt-br/document-definition-object/outlines/) para controlar marcadores.\n"
+ },
+ {
+ "id": "de/document-definition-object/watermark",
+ "language": "de",
+ "translationKey": "document-definition-object/watermark",
+ "path": "/docs/0.3/de/document-definition-object/watermark/",
+ "title": "Wasserzeichen",
+ "description": "Lege Wasserzeichen in pdfmake 0.3 mit Beispielen, Optionen und Anwendungshinweisen fest.",
+ "version": "0.3",
+ "sourceDigest": "6282ba69e28519af356033aef8c20701350b760f1926f0c1d592767e5cde5c02",
+ "source": "document-definition-object/watermark.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/document-definition-object/watermark/",
+ "uri": "pdfmake://docs/0.3/de/document-definition-object/watermark",
+ "markdown": "# Wasserzeichen\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/document-definition-object/watermark/\n\n## Eigenschaften\n\n* `text` – Text des Wasserzeichens\n* `color` – Textfarbe\n* `opacity` – Deckkraft des Textes\n* `bold` – fette Textformatierung\n* `italics` – kursive Textformatierung\n* `fontSize` – eigene Schriftgröße des Textes (die ideale Größe wird automatisch berechnet)\n* `angle` – Drehwinkel des Textes\n\n## Beispiele\n\nEin einfaches Beispiel für die Verwendung:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};\n```\n\nBeispiel mit Schriftformatierung:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};\n```\n\nBeispiel mit eigener Schriftgröße:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};\n```\n\nBeispiel für den Drehwinkel des Wasserzeichens:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};\n```\n"
+ },
+ {
+ "id": "es/document-definition-object/watermark",
+ "language": "es",
+ "translationKey": "document-definition-object/watermark",
+ "path": "/docs/0.3/es/document-definition-object/watermark/",
+ "title": "Marca de agua",
+ "description": "Configura marcas de agua en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "6282ba69e28519af356033aef8c20701350b760f1926f0c1d592767e5cde5c02",
+ "source": "document-definition-object/watermark.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/document-definition-object/watermark/",
+ "uri": "pdfmake://docs/0.3/es/document-definition-object/watermark",
+ "markdown": "# Marca de agua\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/document-definition-object/watermark/\n\n## Propiedades\n\n* `text`: texto de la marca de agua\n* `color`: color del texto\n* `opacity`: opacidad del texto\n* `bold`: estilo en negrita del texto\n* `italics`: estilo en cursiva del texto\n* `fontSize`: tamaño de fuente propio (el tamaño ideal se calcula automáticamente)\n* `angle`: ángulo de rotación del texto\n\n## Ejemplos\n\nEjemplo de uso básico:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};\n```\n\nEjemplo de estilo de fuente:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};\n```\n\nEjemplo de tamaño de fuente propio:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};\n```\n\nEjemplo de ángulo de rotación de la marca de agua:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};\n```\n"
+ },
+ {
+ "id": "fr/document-definition-object/watermark",
+ "language": "fr",
+ "translationKey": "document-definition-object/watermark",
+ "path": "/docs/0.3/fr/document-definition-object/watermark/",
+ "title": "Filigrane",
+ "description": "Configurez un filigrane dans pdfmake 0.3 avec ses propriétés et des exemples.",
+ "version": "0.3",
+ "sourceDigest": "6282ba69e28519af356033aef8c20701350b760f1926f0c1d592767e5cde5c02",
+ "source": "document-definition-object/watermark.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/document-definition-object/watermark/",
+ "uri": "pdfmake://docs/0.3/fr/document-definition-object/watermark",
+ "markdown": "# Filigrane\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/document-definition-object/watermark/\n\n## Propriétés\n\n* `text` - texte du filigrane\n* `color` - couleur du texte\n* `opacity` - opacité du texte\n* `bold` - style gras du texte\n* `italics` - style italique du texte\n* `fontSize` - taille de police personnalisée du texte (la taille idéale est calculée automatiquement)\n* `angle` - angle de rotation du texte\n\n## Exemples\n\nExemple d’utilisation simple :\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};\n```\n\nExemple de style de police :\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};\n```\n\nExemple avec une taille de police personnalisée :\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};\n```\n\nExemple d’angle de rotation du filigrane :\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};\n```\n"
+ },
+ {
+ "id": "document-definition-object/watermark",
+ "language": "en",
+ "translationKey": "document-definition-object/watermark",
+ "path": "/docs/0.3/document-definition-object/watermark/",
+ "title": "Watermark",
+ "description": "Configure watermark in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "document-definition-object/watermark.md",
+ "url": "https://pdfmake.github.io/docs/0.3/document-definition-object/watermark/",
+ "uri": "pdfmake://docs/0.3/document-definition-object/watermark",
+ "markdown": "# Watermark\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/document-definition-object/watermark/\n\n## Properties\n\n* `text` - watermark text\n* `color` - color of text\n* `opacity` opacity of text\n* `bold` - bold style of text\n* `italics` - italics style of text\n* `fontSize` - own font size of text (ideal size is calculated automatically)\n* `angle` - angle of text rotation\n\n## Examples\n\nExample of simple basic usage:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};\n```\n\nExample of font style:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};\n```\n\nExample of own font size:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};\n```\n\nExample of watermark rotation angle:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};\n```\n"
+ },
+ {
+ "id": "pt-br/document-definition-object/watermark",
+ "language": "pt-br",
+ "translationKey": "document-definition-object/watermark",
+ "path": "/docs/0.3/pt-br/document-definition-object/watermark/",
+ "title": "Marca-d'água",
+ "description": "Configure marcas-d'água de texto no pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "6282ba69e28519af356033aef8c20701350b760f1926f0c1d592767e5cde5c02",
+ "source": "document-definition-object/watermark.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/watermark/",
+ "uri": "pdfmake://docs/0.3/pt-br/document-definition-object/watermark",
+ "markdown": "# Marca-d'água\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/document-definition-object/watermark/\n\n## Propriedades\n\n* `text` - texto da marca-d'água\n* `color` - cor do texto\n* `opacity` - opacidade do texto\n* `bold` - estilo em negrito do texto\n* `italics` - estilo em itálico do texto\n* `fontSize` - tamanho próprio da fonte (o tamanho ideal é calculado automaticamente)\n* `angle` - ângulo de rotação do texto\n\n## Exemplos\n\nExemplo de uso básico simples:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: 'test watermark',\n content: [\n '...'\n ]\n};\n```\n\nExemplo de estilo de fonte:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', color: 'blue', opacity: 0.3, bold: true, italics: false },\n content: [\n '...'\n ]\n};\n```\n\nExemplo de tamanho próprio da fonte:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', fontSize: 20 },\n content: [\n '...'\n ]\n};\n```\n\nExemplo do ângulo de rotação da marca-d'água:\n**JavaScript**\n\n```js\nvar docDefinition = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n watermark: { text: 'test watermark', angle: 70 },\n content: [\n '...'\n ]\n};\n```\n"
+ },
+ {
+ "id": "de/fonts",
+ "language": "de",
+ "translationKey": "fonts",
+ "path": "/docs/0.3/de/fonts/",
+ "title": "Schriften und Zeichensatzabdeckung",
+ "description": "Registriere Schriftfamilien und Varianten in Node.js oder im Browser und wähle Schriften, die die Sprachen deines Dokuments abdecken.",
+ "version": "0.3",
+ "sourceDigest": "62a4549bbe46519fb6f576d6cab99d9ed5fc071bddcfb1b77fa75f75df6e785b",
+ "source": "fonts/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/fonts/",
+ "uri": "pdfmake://docs/0.3/de/fonts",
+ "markdown": "# Schriften und Zeichensatzabdeckung\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/fonts/\n\n## Schriftstrategie auswählen\n\n| Laufzeit | Schriftquelle | Einrichtung |\n| --- | --- | --- |\n| Node.js | Echte Schriftdateien | `addFonts` mit absoluten Pfaden |\n| Node.js | PDF-Standardschriften | `require('pdfmake/standard-fonts/Helvetica')` |\n| Browser | Gebündeltes Roboto-VFS | `build/vfs_fonts.js` laden |\n| Browser | Benutzerdefiniertes VFS oder URLs | [Eigene Browser-Schriften](/docs/0.3/de/fonts/custom-fonts-client-side/) |\n\nDie Standardschriftfamilie ist `Roboto`. In Node.js werden die Dateien nicht automatisch registriert. Jede Familie sollte `normal`, `bold`, `italics` und `bolditalics` passenden Schriftdaten zuordnen. Ein Stil, der eine nicht registrierte Variante auswählt, kann fehlschlagen, obwohl normaler Text funktioniert.\n\n## Lokale Schriften in Node.js registrieren\n\nDieses Beispiel setzt voraus, dass sich lizenzierte Schriftdateien in einem Verzeichnis `fonts` neben deinem CommonJS-Skript befinden:\n\n**JavaScript**\n\n```js\nconst path = require('node:path');\nconst pdfmake = require('pdfmake');\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\nconst path = require('node:path');\nimport pdfmake from \"pdfmake\";\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);\n```\n\nDie Zulassungsliste eignet sich für unveränderliche Dateien, die deiner Anwendung gehören. Wenn Pfade von nicht vertrauenswürdigen Benutzern kommen, musst du auch symbolische Links und Dateisystemberechtigungen berücksichtigen. Ein Zeichenfolgenpräfix wie `fonts/` ist keine sichere Zugriffsschranke.\n\n## Text auf Glyphenabdeckung abstimmen\n\nStandardschriften haben begrenzte Kodierungen und decken nicht beliebige Unicode-Zeichen ab. Wähle eingebettete Schriften mit den benötigten Glyphen deiner tatsächlichen Sprachen. Eine Unicode-Zeichenfolge allein garantiert nicht, dass die ausgewählte Schrift sie darstellen kann. Prüfe repräsentative Zeichen und alle fetten und kursiven Varianten in erzeugten PDFs.\n\npdfmake bettet Schriften über PDFKit ein. Binde im Browser nur benötigte Schriftfamilien ein; VFS-Daten erhöhen Download- und Verarbeitungskosten. Beachte die Lizenz zur Weitergabe und Einbettung jeder Schrift.\n\n## Verwandte Anleitungen\n\n[14 Standardschriften](/docs/0.3/de/fonts/standard-14-fonts/) · [Browser-VFS](/docs/0.3/de/fonts/custom-fonts-client-side/vfs/) · [Schrift-URLs](/docs/0.3/de/fonts/custom-fonts-client-side/url/) · [Fehlerbehebung](/docs/0.3/de/guides/troubleshooting/)\n"
+ },
+ {
+ "id": "es/fonts",
+ "language": "es",
+ "translationKey": "fonts",
+ "path": "/docs/0.3/es/fonts/",
+ "title": "Fuentes y caracteres",
+ "description": "Selecciona y registra fuentes para pdfmake 0.3 que cubran los caracteres y las variantes necesarios en tus documentos.",
+ "version": "0.3",
+ "sourceDigest": "62a4549bbe46519fb6f576d6cab99d9ed5fc071bddcfb1b77fa75f75df6e785b",
+ "source": "fonts/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/fonts/",
+ "uri": "pdfmake://docs/0.3/es/fonts",
+ "markdown": "# Fuentes y caracteres\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/fonts/\n\n## Elige una estrategia de fuentes\n\n| Entorno | Origen de la fuente | Configuración |\n| --- | --- | --- |\n| Node.js | Archivos de fuente reales | `addFonts` con rutas absolutas |\n| Node.js | Fuentes PDF estándar | `require('pdfmake/standard-fonts/Helvetica')` |\n| Navegador | VFS de Roboto empaquetado | Carga `build/vfs_fonts.js` |\n| Navegador | VFS personalizado o URL | [Fuentes personalizadas para navegador](/docs/0.3/es/fonts/custom-fonts-client-side/) |\n\nLa familia predeterminada es `Roboto`. Node.js no registra sus archivos automáticamente. Cada familia debe asignar datos de fuente adecuados a `normal`, `bold`, `italics` y `bolditalics`. Un estilo que seleccione una variante inexistente puede fallar aunque el texto normal se muestre bien.\n\n## Registrar fuentes locales en Node.js\n\nEste ejemplo supone que tienes archivos de fuentes con licencia en un directorio `fonts` junto al script CommonJS:\n\n**JavaScript**\n\n```js\nconst path = require('node:path');\nconst pdfmake = require('pdfmake');\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\nconst path = require('node:path');\nimport pdfmake from \"pdfmake\";\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);\n```\n\nLa lista de permitidos es adecuada para archivos inmutables que pertenezcan a la aplicación. Si las rutas provienen de usuarios no confiables, ten también en cuenta los enlaces simbólicos y los permisos del sistema de archivos. No consideres seguro un prefijo de cadena como `fonts/`.\n\n## Relacionar el texto con la cobertura de glifos\n\nLas fuentes estándar tienen codificaciones limitadas; no cubren Unicode arbitrario. Elige fuentes incrustadas con los glifos necesarios para los idiomas de tus documentos. Una cadena Unicode por sí sola no garantiza que la fuente seleccionada pueda representarla. Comprueba en los PDF generados los caracteres representativos y todas las variantes de negrita/cursiva.\n\npdfmake incrusta fuentes mediante PDFKit. Incluye solo las familias de fuentes necesarias para el navegador; los datos VFS aumentan el coste de descarga y análisis. Respeta las licencias de redistribución e incrustación de cada fuente.\n\n## Guías relacionadas\n\n[Las 14 fuentes estándar](/docs/0.3/es/fonts/standard-14-fonts/) · [VFS del navegador](/docs/0.3/es/fonts/custom-fonts-client-side/vfs/) · [URL de fuentes](/docs/0.3/es/fonts/custom-fonts-client-side/url/) · [Solución de problemas](/docs/0.3/es/guides/troubleshooting/)\n"
+ },
+ {
+ "id": "fr/fonts",
+ "language": "fr",
+ "translationKey": "fonts",
+ "path": "/docs/0.3/fr/fonts/",
+ "title": "Polices et couverture des caractères",
+ "description": "Enregistrez des familles et variantes de polices dans Node.js ou le navigateur, et choisissez des polices adaptées aux langues de vos documents.",
+ "version": "0.3",
+ "sourceDigest": "62a4549bbe46519fb6f576d6cab99d9ed5fc071bddcfb1b77fa75f75df6e785b",
+ "source": "fonts/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/fonts/",
+ "uri": "pdfmake://docs/0.3/fr/fonts",
+ "markdown": "# Polices et couverture des caractères\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/fonts/\n\n## Choisir une stratégie de polices\n\n| Environnement | Source de polices | Configuration |\n| --- | --- | --- |\n| Node.js | Fichiers de police réels | `addFonts` avec des chemins absolus |\n| Node.js | Polices PDF standard | `require('pdfmake/standard-fonts/Helvetica')` |\n| Navigateur | VFS Roboto intégré | Charger `build/vfs_fonts.js` |\n| Navigateur | VFS personnalisé ou URL | [Polices personnalisées dans le navigateur](/docs/0.3/fr/fonts/custom-fonts-client-side/) |\n\nLa famille par défaut est `Roboto`. Node.js n’enregistre pas automatiquement ses fichiers. Pour chaque famille, associez `normal`, `bold`, `italics` et `bolditalics` aux données de police appropriées. Un style qui sélectionne une variante manquante peut échouer même si le texte normal s’affiche.\n\n## Enregistrer des polices locales dans Node.js\n\nCet exemple suppose que vous possédez les fichiers de police sous licence dans un dossier `fonts` à côté de votre script CommonJS :\n\n**JavaScript**\n\n```js\nconst path = require('node:path');\nconst pdfmake = require('pdfmake');\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\nconst path = require('node:path');\nimport pdfmake from \"pdfmake\";\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);\n```\n\nCette liste d’autorisation convient aux fichiers immuables gérés par l’application. Si les chemins proviennent d’utilisateurs non fiables, tenez également compte des liens symboliques et des permissions du système de fichiers. Une simple vérification de préfixe telle que `fonts/` ne constitue pas une limite de sécurité.\n\n## Faire correspondre le texte aux glyphes disponibles\n\nLes polices standard ont des encodages limités et ne couvrent pas n’importe quel caractère Unicode. Choisissez des polices incorporées qui contiennent les glyphes nécessaires aux langues de vos documents. Une chaîne Unicode ne garantit pas à elle seule que la police choisie saura l’afficher. Vérifiez des caractères représentatifs ainsi que toutes les variantes grasses et italiques dans les PDF générés.\n\npdfmake incorpore les polices au moyen de PDFKit. Dans le navigateur, n’incluez que les familles nécessaires : les données VFS augmentent les coûts de téléchargement et d’analyse. Respectez les licences de redistribution et d’incorporation de chaque police.\n\n## Guides associés\n\n[Les 14 polices standard](/docs/0.3/fr/fonts/standard-14-fonts/) · [VFS du navigateur](/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/) · [URL de polices](/docs/0.3/fr/fonts/custom-fonts-client-side/url/) · [Dépannage](/docs/0.3/fr/guides/troubleshooting/)\n"
+ },
+ {
+ "id": "fonts",
+ "language": "en",
+ "translationKey": "fonts",
+ "path": "/docs/0.3/fonts/",
+ "title": "Fonts and character coverage",
+ "description": "Register font families and variants in Node.js or browsers, and choose fonts that cover your document languages.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "fonts/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fonts/",
+ "uri": "pdfmake://docs/0.3/fonts",
+ "markdown": "# Fonts and character coverage\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/fonts/\n\n## Choose a font strategy\n\n| Runtime | Font source | Setup |\n| --- | --- | --- |\n| Node.js | Real font files | `addFonts` with absolute paths |\n| Node.js | Standard PDF fonts | `require('pdfmake/standard-fonts/Helvetica')` |\n| Browser | Bundled Roboto VFS | Load `build/vfs_fonts.js` |\n| Browser | Custom VFS or URLs | [Custom browser fonts](/docs/0.3/fonts/custom-fonts-client-side/) |\n\nThe default family is `Roboto`. Node.js does not automatically register its files. Every family should map `normal`, `bold`, `italics` and `bolditalics` to appropriate font data. A style selecting a missing variant can fail even if normal text works.\n\n## Register local fonts in Node.js\n\nThis example assumes you have licensed font files in a `fonts` directory beside your CommonJS script:\n\n**JavaScript**\n\n```js\nconst path = require('node:path');\nconst pdfmake = require('pdfmake');\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\nconst path = require('node:path');\nimport pdfmake from \"pdfmake\";\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);\n```\n\nThe allowlist is appropriate for application-owned, immutable files. When paths come from untrusted users, also account for symlinks and filesystem permissions. Do not treat a string prefix such as `fonts/` as a secure boundary.\n\n## Match text to glyph coverage\n\nStandard fonts have limited encodings; they do not cover arbitrary Unicode. Choose embedded fonts with the glyphs your actual languages need. A Unicode string alone does not guarantee the selected font can render it. Verify representative characters and all bold/italic variants in generated PDFs.\n\npdfmake embeds fonts through PDFKit. Include only the browser font families you need; VFS data increases download and parse costs. Respect each font's redistribution and embedding license.\n\n## Related guides\n\n[Standard 14 fonts](/docs/0.3/fonts/standard-14-fonts/) · [Browser VFS](/docs/0.3/fonts/custom-fonts-client-side/vfs/) · [Font URLs](/docs/0.3/fonts/custom-fonts-client-side/url/) · [Troubleshooting](/docs/0.3/guides/troubleshooting/)\n"
+ },
+ {
+ "id": "pt-br/fonts",
+ "language": "pt-br",
+ "translationKey": "fonts",
+ "path": "/docs/0.3/pt-br/fonts/",
+ "title": "Fontes e cobertura de caracteres",
+ "description": "Registre famílias e variantes de fontes no Node.js ou no navegador e escolha fontes que cubram os idiomas do documento.",
+ "version": "0.3",
+ "sourceDigest": "62a4549bbe46519fb6f576d6cab99d9ed5fc071bddcfb1b77fa75f75df6e785b",
+ "source": "fonts/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/fonts/",
+ "uri": "pdfmake://docs/0.3/pt-br/fonts",
+ "markdown": "# Fontes e cobertura de caracteres\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/fonts/\n\n## Escolha uma estratégia de fontes\n\n| Ambiente | Origem da fonte | Configuração |\n| --- | --- | --- |\n| Node.js | Arquivos de fonte reais | `addFonts` com caminhos absolutos |\n| Node.js | Fontes PDF padrão | `require('pdfmake/standard-fonts/Helvetica')` |\n| Navegador | VFS Roboto incluído | Carregue `build/vfs_fonts.js` |\n| Navegador | VFS personalizado ou URLs | [Fontes personalizadas no navegador](/docs/0.3/pt-br/fonts/custom-fonts-client-side/) |\n\nA família padrão é `Roboto`. O Node.js não registra seus arquivos automaticamente. Cada família deve associar `normal`, `bold`, `italics` e `bolditalics` aos dados de fonte adequados. Selecionar um estilo sem a variante correspondente pode causar uma falha, mesmo quando o texto normal funciona.\n\n## Registre fontes locais no Node.js\n\nEste exemplo pressupõe que você tem arquivos de fonte licenciados em um diretório `fonts` ao lado do script CommonJS:\n\n**JavaScript**\n\n```js\nconst path = require('node:path');\nconst pdfmake = require('pdfmake');\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\nconst path = require('node:path');\nimport pdfmake from \"pdfmake\";\nconst fonts = {\n Roboto: {\n normal: path.join(__dirname, 'fonts/Roboto-Regular.ttf'),\n bold: path.join(__dirname, 'fonts/Roboto-Medium.ttf'),\n italics: path.join(__dirname, 'fonts/Roboto-Italic.ttf'),\n bolditalics: path.join(__dirname, 'fonts/Roboto-MediumItalic.ttf')\n }\n};\nconst allowed = new Set(Object.values(fonts.Roboto));\npdfmake.addFonts(fonts);\npdfmake.setLocalAccessPolicy(file => allowed.has(path.resolve(file)));\npdfmake.setUrlAccessPolicy(() => false);\n```\n\nA lista de permissões é adequada a arquivos imutáveis controlados pela aplicação. Quando os caminhos vêm de usuários não confiáveis, considere também links simbólicos e permissões do sistema de arquivos. Um prefixo de texto como `fonts/` não define um limite seguro.\n\n## Combine o texto com a cobertura de glifos\n\nAs fontes padrão têm codificações limitadas; elas não abrangem Unicode arbitrário. Escolha fontes incorporadas que contenham os glifos necessários aos idiomas usados. Uma cadeia Unicode, por si só, não garante que a fonte selecionada consiga renderizá-la. Verifique caracteres representativos e todas as variantes em negrito e itálico nos PDFs gerados.\n\nO pdfmake incorpora fontes por meio do PDFKit. Inclua no navegador apenas as famílias necessárias; os dados do VFS aumentam o custo de download e análise. Respeite as licenças de redistribuição e incorporação de cada fonte.\n\n## Guias relacionados\n\n[As 14 fontes padrão](/docs/0.3/pt-br/fonts/standard-14-fonts/) · [VFS no navegador](/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/) · [URLs de fontes](/docs/0.3/pt-br/fonts/custom-fonts-client-side/url/) · [Solução de problemas](/docs/0.3/pt-br/guides/troubleshooting/)\n"
+ },
+ {
+ "id": "de/fonts/custom-fonts-client-side",
+ "language": "de",
+ "translationKey": "fonts/custom-fonts-client-side",
+ "path": "/docs/0.3/de/fonts/custom-fonts-client-side/",
+ "title": "Eigene Schriften im Browser",
+ "description": "Verwende eigene Schriften in pdfmake 0.3 in Browseranwendungen.",
+ "version": "0.3",
+ "sourceDigest": "ac4405571a6117ebb522a964e5a17a54067292ff7e11fe6f1321aedbbec503a3",
+ "source": "fonts/custom-fonts-client-side/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/fonts/custom-fonts-client-side/",
+ "uri": "pdfmake://docs/0.3/de/fonts/custom-fonts-client-side",
+ "markdown": "# Eigene Schriften im Browser\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/fonts/custom-fonts-client-side/\n\npdfmake verwendet standardmäßig die Schrift Roboto. Diese Anleitung erklärt, wie du in Browser-Code eigene Schriften mit pdfmake verwendest.\n\n## Es gibt zwei Möglichkeiten:\n* [Verwende ein virtuelles Dateisystem](/docs/0.3/de/fonts/custom-fonts-client-side/vfs/).\n* [Verwende eine Schriftdatei über eine URL (https://- oder http://-Protokoll)](/docs/0.3/de/fonts/custom-fonts-client-side/url/).\n"
+ },
+ {
+ "id": "es/fonts/custom-fonts-client-side",
+ "language": "es",
+ "translationKey": "fonts/custom-fonts-client-side",
+ "path": "/docs/0.3/es/fonts/custom-fonts-client-side/",
+ "title": "Fuentes personalizadas (cliente)",
+ "description": "Configura fuentes personalizadas en el cliente con pdfmake 0.3 mediante ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "ac4405571a6117ebb522a964e5a17a54067292ff7e11fe6f1321aedbbec503a3",
+ "source": "fonts/custom-fonts-client-side/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/fonts/custom-fonts-client-side/",
+ "uri": "pdfmake://docs/0.3/es/fonts/custom-fonts-client-side",
+ "markdown": "# Fuentes personalizadas (cliente)\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/fonts/custom-fonts-client-side/\n\npdfmake usa Roboto de forma predeterminada. Esta guía explica cómo utilizar tus propias fuentes con pdfmake en el código del cliente.\n\n## Hay dos formas de hacerlo:\n* [usar el sistema de archivos virtual](/docs/0.3/es/fonts/custom-fonts-client-side/vfs/)\n* [usar un archivo de fuente mediante una URL con protocolo https:// o http://](/docs/0.3/es/fonts/custom-fonts-client-side/url/)\n"
+ },
+ {
+ "id": "fr/fonts/custom-fonts-client-side",
+ "language": "fr",
+ "translationKey": "fonts/custom-fonts-client-side",
+ "path": "/docs/0.3/fr/fonts/custom-fonts-client-side/",
+ "title": "Polices personnalisées côté client",
+ "description": "Configurez vos propres polices dans pdfmake 0.3 côté client, avec des exemples et des options.",
+ "version": "0.3",
+ "sourceDigest": "ac4405571a6117ebb522a964e5a17a54067292ff7e11fe6f1321aedbbec503a3",
+ "source": "fonts/custom-fonts-client-side/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/fonts/custom-fonts-client-side/",
+ "uri": "pdfmake://docs/0.3/fr/fonts/custom-fonts-client-side",
+ "markdown": "# Polices personnalisées côté client\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/fonts/custom-fonts-client-side/\n\npdfmake utilise Roboto par défaut. Ce guide explique comment utiliser vos propres polices avec pdfmake dans du code exécuté côté client.\n\n## Deux méthodes sont possibles\n\n- [Utiliser le système de fichiers virtuel](/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/)\n- [Utiliser un fichier de police via une URL (protocole https:// ou http://)](/docs/0.3/fr/fonts/custom-fonts-client-side/url/)\n"
+ },
+ {
+ "id": "fonts/custom-fonts-client-side",
+ "language": "en",
+ "translationKey": "fonts/custom-fonts-client-side",
+ "path": "/docs/0.3/fonts/custom-fonts-client-side/",
+ "title": "Custom fonts (client-side)",
+ "description": "Configure custom fonts (client-side) in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "fonts/custom-fonts-client-side/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fonts/custom-fonts-client-side/",
+ "uri": "pdfmake://docs/0.3/fonts/custom-fonts-client-side",
+ "markdown": "# Custom fonts (client-side)\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/fonts/custom-fonts-client-side/\n\npdfmake uses the Roboto font by default. This guide explains how to use your own fonts with pdfmake (in client-side code).\n\n## Two ways are now possible:\n* [use virtual file system](/docs/0.3/fonts/custom-fonts-client-side/vfs/)\n* [use font file via URL (https:// or http:// protocol)](/docs/0.3/fonts/custom-fonts-client-side/url/)\n"
+ },
+ {
+ "id": "pt-br/fonts/custom-fonts-client-side",
+ "language": "pt-br",
+ "translationKey": "fonts/custom-fonts-client-side",
+ "path": "/docs/0.3/pt-br/fonts/custom-fonts-client-side/",
+ "title": "Fontes personalizadas no cliente",
+ "description": "Configure fontes personalizadas no lado do cliente com o pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "ac4405571a6117ebb522a964e5a17a54067292ff7e11fe6f1321aedbbec503a3",
+ "source": "fonts/custom-fonts-client-side/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/fonts/custom-fonts-client-side/",
+ "uri": "pdfmake://docs/0.3/pt-br/fonts/custom-fonts-client-side",
+ "markdown": "# Fontes personalizadas no cliente\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/fonts/custom-fonts-client-side/\n\nPor padrão, o pdfmake usa a fonte Roboto. Este guia explica como usar suas próprias fontes com o pdfmake no código do cliente.\n\n## Há duas opções:\n\n* [usar um sistema de arquivos virtual](/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/)\n* [usar um arquivo de fonte por URL (`https://` ou `http://`)](/docs/0.3/pt-br/fonts/custom-fonts-client-side/url/)\n"
+ },
+ {
+ "id": "de/fonts/custom-fonts-client-side/url",
+ "language": "de",
+ "translationKey": "fonts/custom-fonts-client-side/url",
+ "path": "/docs/0.3/de/fonts/custom-fonts-client-side/url/",
+ "title": "Über das URL-Protokoll",
+ "description": "Binde Schriftdateien über URL-Adressen in pdfmake ein und registriere sie für die Verwendung in der Browseranwendung.",
+ "version": "0.3",
+ "sourceDigest": "bf188fde3eaf272b9276ccee602251c8d4292f0f32bc556e0350e2555a41e3ed",
+ "source": "fonts/custom-fonts-client-side/url/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/fonts/custom-fonts-client-side/url/",
+ "uri": "pdfmake://docs/0.3/de/fonts/custom-fonts-client-side/url",
+ "markdown": "# Über das URL-Protokoll\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/fonts/custom-fonts-client-side/url/\n\nUm eigene Schriften zu verwenden, sind zwei Schritte erforderlich:\n\n1. Weise `pdfMake.addFonts(...)` in JavaScript deine über eine URL erreichbaren Schriftdateien zu.\n2. Gib die Schrift in der Dokumentdefinition an.\n\n## 1. Weise `pdfMake.addFonts(...)` in JavaScript die Schriftdateien zu\n\nSchriftdateien müssen über eine URL (mit `https://`- oder `http://`-Protokoll) erreichbar sein. Rufe in deinem Code vor `pdfMake.createPdf(docDefinition)` `pdfMake.addFonts(...)` auf, wie im folgenden Beispiel:\n\n**JavaScript**\n\n```js\nvar fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);\n```\n\n**TypeScript**\n\n```ts\nvar fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);\n```\n\n## 2. Gib die Schrift in deiner Dokumentdefinition an\n\npdfMake verwendet standardmäßig `Roboto`. Damit deine eigene Schrift verwendet wird, musst du sie in der Dokumentdefinition angeben.\n\nAm einfachsten legst du sie global in **`defaultStyle`** fest:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}\n```\n"
+ },
+ {
+ "id": "es/fonts/custom-fonts-client-side/url",
+ "language": "es",
+ "translationKey": "fonts/custom-fonts-client-side/url",
+ "path": "/docs/0.3/es/fonts/custom-fonts-client-side/url/",
+ "title": "Mediante protocolo URL",
+ "description": "Configura fuentes personalizadas mediante el protocolo URL en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "bf188fde3eaf272b9276ccee602251c8d4292f0f32bc556e0350e2555a41e3ed",
+ "source": "fonts/custom-fonts-client-side/url/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/fonts/custom-fonts-client-side/url/",
+ "uri": "pdfmake://docs/0.3/es/fonts/custom-fonts-client-side/url",
+ "markdown": "# Mediante protocolo URL\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/fonts/custom-fonts-client-side/url/\n\nPara usar fuentes personalizadas, se requieren dos pasos:\n\n1. Asigna a `pdfMake.addFonts(...)` los archivos de fuente accesibles mediante URL en JavaScript.\n2. Especifica la fuente en la definición del documento.\n\n## 1. Asigna a `pdfMake.addFonts(...)` los archivos de fuente en JavaScript\n\nLos archivos de fuente deben ser accesibles mediante una URL con protocolo https:// o http://. En tu código, antes de llamar a `pdfMake.createPdf(docDefinition)`, asigna `pdfMake.addFonts(...)` como en el siguiente ejemplo:\n\n**JavaScript**\n\n```js\nvar fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);\n```\n\n**TypeScript**\n\n```ts\nvar fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);\n```\n\n## 2. Especifica la fuente en la definición del documento\n\npdfMake usa `Roboto` como fuente predeterminada. Por tanto, para usar tu fuente, debes especificarla en el objeto de definición del documento.\n\nLa forma más sencilla es establecerla globalmente en `defaultStyle`:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}\n```\n"
+ },
+ {
+ "id": "fr/fonts/custom-fonts-client-side/url",
+ "language": "fr",
+ "translationKey": "fonts/custom-fonts-client-side/url",
+ "path": "/docs/0.3/fr/fonts/custom-fonts-client-side/url/",
+ "title": "Par protocole URL",
+ "description": "Configurez l’utilisation des polices par protocole URL dans pdfmake 0.3 avec des exemples, des options et des notes d’utilisation.",
+ "version": "0.3",
+ "sourceDigest": "bf188fde3eaf272b9276ccee602251c8d4292f0f32bc556e0350e2555a41e3ed",
+ "source": "fonts/custom-fonts-client-side/url/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/fonts/custom-fonts-client-side/url/",
+ "uri": "pdfmake://docs/0.3/fr/fonts/custom-fonts-client-side/url",
+ "markdown": "# Par protocole URL\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/fonts/custom-fonts-client-side/url/\n\nL’utilisation de polices personnalisées nécessite deux étapes :\n\n1. Transmettez à `pdfMake.addFonts(...)` les fichiers de polices accessibles par URL depuis votre JavaScript.\n2. Spécifiez la police dans la définition du document.\n\n## 1. Transmettre les fichiers de polices à `pdfMake.addFonts(...)` dans votre JavaScript\n\nLes fichiers de polices doivent être accessibles par URL (protocole https:// ou http://). Dans votre code, avant d’appeler `pdfMake.createPdf(docDefinition)`, configurez `pdfMake.addFonts(...)` comme dans l’exemple ci-dessous :\n\n**JavaScript**\n\n```js\nvar fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);\n```\n\n**TypeScript**\n\n```ts\nvar fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);\n```\n\n## 2. Spécifier la police dans la définition du document\n\npdfMake utilise « Roboto » par défaut. Pour employer une autre police, spécifiez-la dans l’objet de définition du document.\n\nLe plus simple consiste à la définir globalement dans **defaultStyle** :\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}\n```\n"
+ },
+ {
+ "id": "fonts/custom-fonts-client-side/url",
+ "language": "en",
+ "translationKey": "fonts/custom-fonts-client-side/url",
+ "path": "/docs/0.3/fonts/custom-fonts-client-side/url/",
+ "title": "via URL protocol",
+ "description": "Configure via url protocol in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "fonts/custom-fonts-client-side/url/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fonts/custom-fonts-client-side/url/",
+ "uri": "pdfmake://docs/0.3/fonts/custom-fonts-client-side/url",
+ "markdown": "# via URL protocol\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/fonts/custom-fonts-client-side/url/\n\nTo use custom fonts, 2 steps are required:\n\n1. assign `pdfMake.addFonts(...)` your font files accessible via url address in your javascript\n2. specify the font in your doc-definition\n\n## 1. assign `pdfMake.addFonts(...)` your font files in your javascript\n\nFont files must be accessible via url address (https:// or http:// protocol). In your code, before calling `pdfMake.createPdf(docDefinition)` set `pdfMake.addFonts(...)` as in the example below:\n\n**JavaScript**\n\n```js\nvar fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);\n```\n\n**TypeScript**\n\n```ts\nvar fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);\n```\n\n## 2. specify the font in your doc-definition\n\npdfMake uses 'Roboto' as default font, so in order to use your font, you should specify it in your doc-definition object.\n\nThe easiest way is to set it globally in the **defaultStyle**\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}\n```\n"
+ },
+ {
+ "id": "pt-br/fonts/custom-fonts-client-side/url",
+ "language": "pt-br",
+ "translationKey": "fonts/custom-fonts-client-side/url",
+ "path": "/docs/0.3/pt-br/fonts/custom-fonts-client-side/url/",
+ "title": "Por URL",
+ "description": "Configure fontes personalizadas acessíveis por URL no pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "bf188fde3eaf272b9276ccee602251c8d4292f0f32bc556e0350e2555a41e3ed",
+ "source": "fonts/custom-fonts-client-side/url/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/fonts/custom-fonts-client-side/url/",
+ "uri": "pdfmake://docs/0.3/pt-br/fonts/custom-fonts-client-side/url",
+ "markdown": "# Por URL\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/fonts/custom-fonts-client-side/url/\n\nPara usar fontes personalizadas, são necessárias duas etapas:\n\n1. atribua a `pdfMake.addFonts(...)` os arquivos de fonte acessíveis por URL no JavaScript;\n2. especifique a fonte na definição do documento.\n\n## 1. Atribua a `pdfMake.addFonts(...)` os arquivos de fonte no JavaScript\n\nOs arquivos de fonte precisam estar acessíveis por URL (protocolo `https://` ou `http://`). No código, antes de chamar `pdfMake.createPdf(docDefinition)`, configure `pdfMake.addFonts(...)` como no exemplo:\n\n**JavaScript**\n\n```js\nvar fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);\n```\n\n**TypeScript**\n\n```ts\nvar fonts = {\n yourFontName: {\n normal: 'https://example.com/fonts/fontFile.ttf',\n bold: 'https://example.com/fonts/fontFile2.ttf',\n italics: 'https://example.com/fonts/fontFile3.ttf',\n bolditalics: 'https://example.com/fonts/fontFile4.ttf'\n },\n anotherFontName: {\n\n },\n\n // download default Roboto font from unpkg.com\n Roboto: {\n normal: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Regular.ttf',\n bold: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Medium.ttf',\n italics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-Italic.ttf',\n bolditalics: 'https://unpkg.com/pdfmake@0.3.12/build/fonts/Roboto/Roboto-MediumItalic.ttf'\n },\n\n // example of usage fonts in collection\n PingFangSC: {\n normal: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['https://example.com/fonts/pingfang.ttc', 'PingFangSC-Semibold'],\n }\n};\n\npdfMake.addFonts(fonts);\n```\n\n## 2. Especifique a fonte na definição do documento\n\nO pdfMake usa `Roboto` como fonte padrão. Para usar sua fonte, especifique-a no objeto de definição do documento.\n\nA maneira mais simples é defini-la globalmente em **`defaultStyle`**:\n\n**JavaScript**\n\n```js\nvar docDefinition = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['Example document content'],\n defaultStyle: {\n font: 'yourFontName'\n }\n}\n```\n"
+ },
+ {
+ "id": "de/fonts/custom-fonts-client-side/vfs",
+ "language": "de",
+ "translationKey": "fonts/custom-fonts-client-side/vfs",
+ "path": "/docs/0.3/de/fonts/custom-fonts-client-side/vfs/",
+ "title": "Eigene Schriften mit VFS",
+ "description": "Erstelle ein virtuelles Schriftdateisystem außerhalb von node_modules, registriere Schriftvarianten und verwende eine eigene Familie in Browser-PDFs.",
+ "version": "0.3",
+ "sourceDigest": "bea37c79f0184516d0fe4a72f5f5c7b3dfb11fa1b76e3eb1d2b51e41c2128cb2",
+ "source": "fonts/custom-fonts-client-side/vfs/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/fonts/custom-fonts-client-side/vfs/",
+ "uri": "pdfmake://docs/0.3/de/fonts/custom-fonts-client-side/vfs",
+ "markdown": "# Eigene Schriften mit VFS\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/fonts/custom-fonts-client-side/vfs/\n\n## Schriftcontainer erstellen\n\nVerwende lizenzierte Schriftdateien, die die benötigten Sprachen abdecken. Lege sie im Verzeichnis `fonts/` deiner Anwendung ab und erzeuge vom Projektstamm aus eine VFS-Datei:\n\n```sh\nnode node_modules/pdfmake/build-vfs.js ./fonts ./vfs_fonts.js\n```\n\nAlle Dateien im angegebenen Verzeichnis werden als Base64-Einträge eingebettet. Lege erzeugte Anwendungsressourcen außerhalb von `node_modules` ab, damit eine Installation deine eigenen Schriften nicht überschreibt. Erzeuge die VFS-Datei neu, sobald sich die Schriftdateien ändern. Für normale [Schriftpfade in Node.js](/docs/0.3/de/fonts/) ist keine Browser-VFS erforderlich.\n\n## Laden und registrieren\n\nLade die Engine vor dem erzeugten VFS-Skript. Wenn `pdfMake` bereits verfügbar ist, registriert das erzeugte Skript seine Dateien. In einem Bundler importierst du das VFS-Objekt und rufst `addVirtualFileSystem` explizit auf:\n\n**JavaScript**\n\n```js\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');\n```\n\nErsetze die Namen durch die exakten Schlüssel in deiner erzeugten VFS-Datei. Schriftfamiliennamen wie `MyFont` verwendest du in Stilen; Dateischlüssel verweisen auf eingebettete Dateien. Definiere jede verwendete Variante. Du kannst mehrere Varianten derselben Datei zuordnen, wenn das beabsichtigt ist; dadurch entsteht aber keine echte fette oder kursive Schrift.\n\n## Schriftsammlungen\n\nFür unterstützte TrueType-Sammlungen kann ein Deskriptor als `[filename, faceName]` angegeben werden:\n\n**JavaScript**\n\n```js\npdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});\n```\n\n**TypeScript**\n\n```ts\npdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});\n```\n\nBette die Sammlung ein und verwende gültige Namen für die Schriftschnitte. Dieses Beispiel registriert nur normale und fette Schrift; ergänze kursive Varianten, bevor du sie verwendest.\n\n## Häufige Fehler\n\nWenn eine Datei nicht gefunden wird, vergleiche den Dateinamen im Deskriptor mit den Schlüsseln der erzeugten VFS-Datei. Wenn eine Schrift nicht definiert ist, vergleiche `defaultStyle.font` mit der Schriftfamilienzuordnung. Wenn Zeichen fehlen, prüfe die Glyphenabdeckung der Schrift. Wenn das Browser-Bundle zu groß ist, entferne nicht verwendete Familien und Dateien aus dem Eingabeverzeichnis der VFS.\n"
+ },
+ {
+ "id": "es/fonts/custom-fonts-client-side/vfs",
+ "language": "es",
+ "translationKey": "fonts/custom-fonts-client-side/vfs",
+ "path": "/docs/0.3/es/fonts/custom-fonts-client-side/vfs/",
+ "title": "Fuentes personalizadas con VFS",
+ "description": "Crea un sistema de archivos virtual para fuentes fuera de node_modules, registra variantes de fuente y usa una familia personalizada en los PDF del navegador.",
+ "version": "0.3",
+ "sourceDigest": "bea37c79f0184516d0fe4a72f5f5c7b3dfb11fa1b76e3eb1d2b51e41c2128cb2",
+ "source": "fonts/custom-fonts-client-side/vfs/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/fonts/custom-fonts-client-side/vfs/",
+ "uri": "pdfmake://docs/0.3/es/fonts/custom-fonts-client-side/vfs",
+ "markdown": "# Fuentes personalizadas con VFS\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/fonts/custom-fonts-client-side/vfs/\n\n## Crear el contenedor de fuentes\n\nUsa archivos de fuentes con licencia que cubran los idiomas de destino. Colócalos en el directorio `fonts/` de la aplicación y genera un archivo VFS desde la raíz del proyecto:\n\n```sh\nnode node_modules/pdfmake/build-vfs.js ./fonts ./vfs_fonts.js\n```\n\nEsto incrusta **todos los archivos** del directorio proporcionado como entradas Base64. Mantén los recursos generados de la aplicación fuera de `node_modules` para que una instalación no sobrescriba tus fuentes personalizadas. Vuelve a generar el VFS cada vez que cambien los archivos de fuente. El VFS del navegador no es necesario para las [rutas de fuentes normales de Node](/docs/0.3/es/fonts/).\n\n## Cargar y registrar\n\nCarga el motor antes del script VFS generado. El script generado registra sus archivos cuando `pdfMake` ya está disponible. En un empaquetador, importa el objeto VFS y llama explícitamente a `addVirtualFileSystem`:\n\n**JavaScript**\n\n```js\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');\n```\n\nSustituye estos nombres por las claves exactas del VFS generado. Los nombres de familias de fuente como `MyFont` se usan en los estilos; las claves de archivo identifican los archivos incrustados. Define cada variante que uses. Puedes asignar varias variantes a un solo archivo si es intencional, pero eso no crea una variante real en negrita o cursiva.\n\n## Colecciones de fuentes\n\nPara una colección TrueType compatible, el descriptor puede ser `[filename, faceName]`:\n\n**JavaScript**\n\n```js\npdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});\n```\n\n**TypeScript**\n\n```ts\npdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});\n```\n\nIncrusta la colección y usa nombres de variantes válidos. Este ejemplo solo registra normal y negrita; añade las variantes cursivas antes de usarlas.\n\n## Errores frecuentes\n\nSi no se encuentra un archivo, compara el nombre del descriptor con las claves del VFS generado. Si una fuente no está definida, compara `defaultStyle.font` con el mapa de familias. Si faltan caracteres, comprueba la cobertura de glifos de la fuente. Si el paquete del navegador es grande, elimina del directorio de entrada VFS las familias y los archivos que no uses.\n"
+ },
+ {
+ "id": "fr/fonts/custom-fonts-client-side/vfs",
+ "language": "fr",
+ "translationKey": "fonts/custom-fonts-client-side/vfs",
+ "path": "/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/",
+ "title": "Polices personnalisées avec le VFS",
+ "description": "Créez un système de fichiers virtuel en dehors de node_modules, enregistrez des variantes de polices et utilisez une famille personnalisée dans les PDF du navigateur.",
+ "version": "0.3",
+ "sourceDigest": "bea37c79f0184516d0fe4a72f5f5c7b3dfb11fa1b76e3eb1d2b51e41c2128cb2",
+ "source": "fonts/custom-fonts-client-side/vfs/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/",
+ "uri": "pdfmake://docs/0.3/fr/fonts/custom-fonts-client-side/vfs",
+ "markdown": "# Polices personnalisées avec le VFS\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/\n\n## Créer le conteneur de polices\n\nUtilisez des fichiers de polices sous licence qui couvrent les langues visées. Placez-les dans le répertoire `fonts/` de votre application et générez un fichier VFS depuis la racine du projet :\n\n```sh\nnode node_modules/pdfmake/build-vfs.js ./fonts ./vfs_fonts.js\n```\n\nTous les fichiers du répertoire fourni sont intégrés sous forme d’entrées base64. Gardez les ressources générées de l’application en dehors de `node_modules` afin qu’une installation ne remplace pas vos polices personnalisées. Régénérez le VFS chaque fois que les fichiers de polices changent. Le VFS du navigateur n’est pas nécessaire pour les [chemins de polices Node.js](/docs/0.3/fr/fonts/).\n\n## Charger et enregistrer les polices\n\nChargez le moteur avant le script VFS généré. Le script généré enregistre ses fichiers si `pdfMake` est déjà disponible. Avec un bundler, importez l’objet VFS et appelez explicitement `addVirtualFileSystem` :\n\n**JavaScript**\n\n```js\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');\n```\n\nRemplacez ces noms par les clés exactes du VFS généré. Les noms de famille, comme `MyFont`, sont utilisés dans les styles ; les clés de fichier désignent les fichiers incorporés. Définissez chaque variante que vous utilisez. Vous pouvez associer plusieurs variantes à un seul fichier si c’est intentionnel, mais cela ne crée pas de véritable graisse ou style italique.\n\n## Collections de polices\n\nPour une collection TrueType prise en charge, un descripteur peut être un tableau `[filename, faceName]` :\n\n**JavaScript**\n\n```js\npdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});\n```\n\n**TypeScript**\n\n```ts\npdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});\n```\n\nIncorporez la collection et utilisez des noms de faces valides. Cet exemple n’enregistre que les variantes normale et grasse ; ajoutez les variantes italiques avant de les utiliser.\n\n## Erreurs fréquentes\n\nSi un fichier est introuvable, comparez le nom de fichier du descripteur aux clés du VFS généré. Si une police n’est pas définie, comparez `defaultStyle.font` à la famille dans le mappage. Si des caractères manquent, vérifiez la couverture des glyphes de la police. Si le bundle du navigateur est volumineux, retirez du répertoire d’entrée VFS les familles et fichiers inutilisés.\n"
+ },
+ {
+ "id": "fonts/custom-fonts-client-side/vfs",
+ "language": "en",
+ "translationKey": "fonts/custom-fonts-client-side/vfs",
+ "path": "/docs/0.3/fonts/custom-fonts-client-side/vfs/",
+ "title": "Custom fonts with VFS",
+ "description": "Build a virtual font filesystem outside node_modules, register font variants, and use a custom family in browser PDFs.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "fonts/custom-fonts-client-side/vfs/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fonts/custom-fonts-client-side/vfs/",
+ "uri": "pdfmake://docs/0.3/fonts/custom-fonts-client-side/vfs",
+ "markdown": "# Custom fonts with VFS\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/fonts/custom-fonts-client-side/vfs/\n\n## Build the font container\n\nUse licensed font files that cover your target languages. Place them in your application's `fonts/` directory and generate a VFS file from your project root:\n\n```sh\nnode node_modules/pdfmake/build-vfs.js ./fonts ./vfs_fonts.js\n```\n\nThis embeds **all files** in the supplied directory as base64 entries. Keep generated application assets outside `node_modules` so an install cannot overwrite your custom fonts. Rebuild the VFS whenever the font files change. Browser VFS is unnecessary for normal [Node font paths](/docs/0.3/fonts/).\n\n## Load and register\n\nLoad the engine before your generated VFS script. The generated script registers its files when `pdfMake` is already available. In a bundler, import the VFS object and call `addVirtualFileSystem` explicitly:\n\n**JavaScript**\n\n```js\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');\n```\n\nReplace these names with the exact keys in your generated VFS. Font family names such as `MyFont` are the names you use in styles; file keys identify embedded files. Define every variant you use. You can map multiple variants to one file when that is intentional, but this does not create a real bold or italic face.\n\n## Font collections\n\nFor a supported TrueType collection, a descriptor can be `[filename, faceName]`:\n\n**JavaScript**\n\n```js\npdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});\n```\n\n**TypeScript**\n\n```ts\npdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});\n```\n\nEmbed the collection and use valid face names. This example registers normal and bold only; add italic variants before using them.\n\n## Common failures\n\nIf a file cannot be found, compare the descriptor filename to the generated VFS keys. If a font is undefined, compare `defaultStyle.font` to the family map. If characters are missing, test the font's glyph coverage. If the browser bundle is large, remove unused families and files from the VFS input directory.\n"
+ },
+ {
+ "id": "pt-br/fonts/custom-fonts-client-side/vfs",
+ "language": "pt-br",
+ "translationKey": "fonts/custom-fonts-client-side/vfs",
+ "path": "/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/",
+ "title": "Fontes personalizadas com VFS",
+ "description": "Crie um sistema virtual de arquivos de fontes fora de node_modules, registre variantes e use a família personalizada em PDFs no navegador.",
+ "version": "0.3",
+ "sourceDigest": "bea37c79f0184516d0fe4a72f5f5c7b3dfb11fa1b76e3eb1d2b51e41c2128cb2",
+ "source": "fonts/custom-fonts-client-side/vfs/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/",
+ "uri": "pdfmake://docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs",
+ "markdown": "# Fontes personalizadas com VFS\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/\n\n## Crie o contêiner de fontes\n\nUse arquivos de fonte licenciados que cubram os idiomas desejados. Coloque-os no diretório `fonts/` da aplicação e gere um arquivo VFS a partir da raiz do projeto:\n\n```sh\nnode node_modules/pdfmake/build-vfs.js ./fonts ./vfs_fonts.js\n```\n\nIsso incorpora **todos os arquivos** do diretório informado como entradas base64. Mantenha os assets gerados da aplicação fora de `node_modules` para que uma instalação não sobrescreva suas fontes personalizadas. Gere o VFS novamente sempre que os arquivos de fonte mudarem. O VFS do navegador é desnecessário para [caminhos de fontes no Node.js](/docs/0.3/pt-br/fonts/).\n\n## Carregue e registre\n\nCarregue o mecanismo antes do script VFS gerado. O script gerado registra os arquivos quando `pdfMake` já está disponível. Em um bundler, importe o objeto VFS e chame `addVirtualFileSystem` explicitamente:\n\n**JavaScript**\n\n```js\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport customVfs from './vfs_fonts';\n\npdfMake.addVirtualFileSystem(customVfs);\npdfMake.addFonts({\n MyFont: {\n normal: 'MyFont-Regular.ttf',\n bold: 'MyFont-Bold.ttf',\n italics: 'MyFont-Italic.ttf',\n bolditalics: 'MyFont-BoldItalic.ttf'\n }\n});\n\nawait pdfMake.createPdf({\n defaultStyle: { font: 'MyFont' },\n content: ['A document using my font.']\n}).download('document.pdf');\n```\n\nSubstitua os nomes pelas chaves exatas do VFS gerado. Nomes de família, como `MyFont`, são usados nos estilos; as chaves de arquivo identificam os arquivos incorporados. Defina todas as variantes que usar. É possível mapear várias variantes para um mesmo arquivo quando isso for intencional, mas isso não cria uma face realmente em negrito ou itálico.\n\n## Coleções de fontes\n\nPara uma coleção TrueType compatível, o descritor pode ser `[filename, faceName]`:\n\n**JavaScript**\n\n```js\npdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});\n```\n\n**TypeScript**\n\n```ts\npdfMake.addFonts({\n PingFangSC: {\n normal: ['pingfang.ttc', 'PingFangSC-Regular'],\n bold: ['pingfang.ttc', 'PingFangSC-Semibold']\n }\n});\n```\n\nIncorpore a coleção e use nomes de face válidos. Este exemplo registra apenas as variantes normal e negrito; adicione as variantes itálicas antes de usá-las.\n\n## Problemas comuns\n\nSe um arquivo não for encontrado, compare o nome no descritor com as chaves do VFS gerado. Se uma fonte estiver indefinida, compare `defaultStyle.font` com o mapa de famílias. Se faltarem caracteres, verifique a cobertura de glifos da fonte. Se o bundle do navegador ficar grande, remova do diretório de entrada do VFS as famílias e os arquivos que não são usados.\n"
+ },
+ {
+ "id": "de/fonts/icons",
+ "language": "de",
+ "translationKey": "fonts/icons",
+ "path": "/docs/0.3/de/fonts/icons/",
+ "title": "Symbole",
+ "description": "Verwende Icon-Schriften in pdfmake 0.3 mit einer registrierten Schriftfamilie und einem eigenen Stil.",
+ "version": "0.3",
+ "sourceDigest": "389a424f61b90f95836afb77e66802f06435c1b671de3c8b4054b385699698b1",
+ "source": "fonts/icons.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/fonts/icons/",
+ "uri": "pdfmake://docs/0.3/de/fonts/icons",
+ "markdown": "# Symbole\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/fonts/icons/\n\n- Erstelle eine Schriftdatei bei http://fontello.com/ oder einem ähnlichen Dienst und lade sie herunter.\n\n- Erzeuge aus der Schriftdatei (zum Beispiel `.ttf`) eine `vfs_fonts.js`-Datei (siehe [eigene Schriften verwenden](/docs/0.3/de/fonts/custom-fonts-client-side/vfs/)).\n\n- Registriere die Schrift in JavaScript (es kann ausreichen, nur `normal` zu definieren):\n**JavaScript**\n\n```js\npdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}\n```\n\n**TypeScript**\n\n```ts\npdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}\n```\n\n- Lege einen Stil für Symbole an:\n` icon: {\n font: 'Fontello'\n }`\n- Erstelle einen Textabsatz:\n`\n { text: '', style: 'icon' }, //icon wifi`\n- Verwende als Text das Zeichen aus den Kommentaren in `fontello-codes.css`, nicht den Escape-Wert.\n\n---\n\nWenn du ein Symbol innerhalb eines Textes brauchst, musst du Textobjekte verschachteln:\n\n**JavaScript**\n\n```js\nvar dd = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };\n```\nDies gibt Folgendes aus: „[gift icon] my present“.\n"
+ },
+ {
+ "id": "es/fonts/icons",
+ "language": "es",
+ "translationKey": "fonts/icons",
+ "path": "/docs/0.3/es/fonts/icons/",
+ "title": "Iconos",
+ "description": "Configura iconos en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "389a424f61b90f95836afb77e66802f06435c1b671de3c8b4054b385699698b1",
+ "source": "fonts/icons.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/fonts/icons/",
+ "uri": "pdfmake://docs/0.3/es/fonts/icons",
+ "markdown": "# Iconos\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/fonts/icons/\n\n- Crea una fuente en http://fontello.com/ o un servicio similar y descárgala.\n\n- A partir del archivo de fuente (por ejemplo, `.ttf`), crea el archivo `vfs_fonts.js` (consulta cómo [usar fuentes personalizadas](/docs/0.3/es/fonts/custom-fonts-client-side/vfs/)).\n\n- Define la fuente en JavaScript (puede bastar con definir `normal`):\n**JavaScript**\n\n```js\npdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}\n```\n\n**TypeScript**\n\n```ts\npdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}\n```\n\n- Añade un estilo para los iconos:\n` icon: {\n font: 'Fontello'\n }`\n- Crea un párrafo de texto:\n`\n { text: '', style: 'icon' }, //icon wifi`\n- Usa como texto el carácter copiado de los comentarios de `fontello-codes.css` (no el valor escapado).\n\n---\n\nSi necesitas un icono dentro del texto, anida objetos de texto:\n\n**JavaScript**\n\n```js\nvar dd = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };\n```\nEsto produce: «[icono de regalo] my present».\n"
+ },
+ {
+ "id": "fr/fonts/icons",
+ "language": "fr",
+ "translationKey": "fonts/icons",
+ "path": "/docs/0.3/fr/fonts/icons/",
+ "title": "Icônes",
+ "description": "Configurez des icônes dans pdfmake 0.3 à l’aide de polices personnalisées.",
+ "version": "0.3",
+ "sourceDigest": "389a424f61b90f95836afb77e66802f06435c1b671de3c8b4054b385699698b1",
+ "source": "fonts/icons.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/fonts/icons/",
+ "uri": "pdfmake://docs/0.3/fr/fonts/icons",
+ "markdown": "# Icônes\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/fonts/icons/\n\n- Créez une police sur http://fontello.com/ ou un site similaire, puis téléchargez-la.\n\n- À partir du fichier de police (par exemple `.ttf`), créez un fichier `vfs_fonts.js` (voir [comment utiliser des polices personnalisées](/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/)).\n\n- Déclarez la police en JavaScript (il peut suffire de définir `normal`) :\n**JavaScript**\n\n```js\npdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}\n```\n\n**TypeScript**\n\n```ts\npdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}\n```\n\n- Ajoutez un style pour les icônes :\n` icon: {\n font: 'Fontello'\n }`\n- Créez un paragraphe de texte :\n`\n { text: '', style: 'icon' }, //icon wifi`\n- Copiez le caractère indiqué dans les commentaires de `fontello-codes.css` (et non sa valeur échappée).\n\n---\n\nPour insérer une icône au sein d’un texte, imbriquez des objets de texte :\n\n**JavaScript**\n\n```js\nvar dd = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };\n```\nCela affiche « [icône cadeau] my present ».\n"
+ },
+ {
+ "id": "fonts/icons",
+ "language": "en",
+ "translationKey": "fonts/icons",
+ "path": "/docs/0.3/fonts/icons/",
+ "title": "Icons",
+ "description": "Configure icons in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "fonts/icons.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fonts/icons/",
+ "uri": "pdfmake://docs/0.3/fonts/icons",
+ "markdown": "# Icons\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/fonts/icons/\n\n- make a font at http://fontello.com/ or something and download it\n\n- from font file (for example .ttf) create vfs_fonts.js file (see how to [use custom fonts](/docs/0.3/fonts/custom-fonts-client-side/vfs/))\n\n- define font in js (just defining normal might be enough):\n**JavaScript**\n\n```js\npdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}\n```\n\n**TypeScript**\n\n```ts\npdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}\n```\n\n- add a style for icons:\n` icon: {\n font: 'Fontello'\n }`\n- make a text paragraph:\n`\n { text: '', style: 'icon' }, //icon wifi`\n- as the text you copy from the fontello-codes.css from the comments (not the escaped value)\n\n---\n\nIf you need an icon within text, you need to nest text objects:\n\n**JavaScript**\n\n```js\nvar dd = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };\n```\nthis puts out: \"[gift icon] my present\"\n"
+ },
+ {
+ "id": "pt-br/fonts/icons",
+ "language": "pt-br",
+ "translationKey": "fonts/icons",
+ "path": "/docs/0.3/pt-br/fonts/icons/",
+ "title": "Ícones",
+ "description": "Configure ícones no pdfmake 0.3 com exemplos, opções e orientações de uso.",
+ "version": "0.3",
+ "sourceDigest": "389a424f61b90f95836afb77e66802f06435c1b671de3c8b4054b385699698b1",
+ "source": "fonts/icons.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/fonts/icons/",
+ "uri": "pdfmake://docs/0.3/pt-br/fonts/icons",
+ "markdown": "# Ícones\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/fonts/icons/\n\n- Crie uma fonte em http://fontello.com/ ou em um serviço semelhante e baixe-a.\n\n- A partir do arquivo de fonte (por exemplo, `.ttf`), crie o arquivo `vfs_fonts.js` (consulte como [usar fontes personalizadas](/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/)).\n\n- Defina a fonte em JavaScript (talvez baste definir `normal`):\n**JavaScript**\n\n```js\npdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}\n```\n\n**TypeScript**\n\n```ts\npdfMake.fonts = {\n Fontello: {\n normal: 'fontello.ttf',\n bold: 'fontello.ttf',\n italics: 'fontello.ttf',\n bolditalics: 'fontello.ttf'\n }\n}\n```\n\n- Adicione um estilo para os ícones:\n` icon: {\n font: 'Fontello'\n }`\n- Crie um parágrafo de texto:\n`\n { text: '', style: 'icon' }, //icon wifi`\n- Copie o texto dos comentários de `fontello-codes.css` (não o valor com escape).\n\n---\n\nSe precisar de um ícone dentro do texto, aninhe objetos de texto:\n\n**JavaScript**\n\n```js\nvar dd = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: [{\ntext: [\n { text: '', style: 'icon' }, //icon gift\n \" my present\"\n ]\n}] };\n```\nO resultado será: \"[ícone de presente] meu presente\"\n"
+ },
+ {
+ "id": "de/fonts/standard-14-fonts",
+ "language": "de",
+ "translationKey": "fonts/standard-14-fonts",
+ "path": "/docs/0.3/de/fonts/standard-14-fonts/",
+ "title": "Die 14 Standardschriften",
+ "description": "Verwende Standardschriftfamilien von PDF in Node.js und Browser-Bundles; beachte die begrenzte Zeichenkodierung.",
+ "version": "0.3",
+ "sourceDigest": "b405dc401267671e4bd1aafcd6aa77046caff49e1ae6ed0019ab6d8f16361c4e",
+ "source": "fonts/standard-14-fonts.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/fonts/standard-14-fonts/",
+ "uri": "pdfmake://docs/0.3/de/fonts/standard-14-fonts",
+ "markdown": "# Die 14 Standardschriften\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/fonts/standard-14-fonts/\n\nPDF enthält [14 Standardschriften](http://www.enfocus.com/manuals/ReferenceGuide/PS/18/enUS/en-us/common/pse/concept/c_aa1044513.html).\n\n**Zeichenabdeckung:** Standardschriften verwenden begrenzte Kodierungen und unterstützen nicht beliebige Unicode-Zeichen. Verwende für mehrsprachige Dokumente eingebettete Schriften und prüfe die benötigten Glyphen.\n\n## Verwendung von pdfmake auf dem Server\n\n**Anwendungsbeispiel:**\n**JavaScript**\n\n```js\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});\n```\n\n## Verwendung von pdfmake im Browser\n\nBundles mit Standardschriften sind im Verzeichnis `build/standard-fonts/` des pdfmake-Pakets verfügbar. Binde das Bundle jeder benötigten Schriftfamilie **nach** `pdfmake.min.js` ein. Jedes Bundle registriert seine Schriften automatisch bei `pdfMake`.\n\nBeispiel für Helvetica:\n\n```html\n\n\n\n```\n\nVerfügbare Bundles: `Courier.js`, `Helvetica.js`, `Times.js`, `Symbol.js` und `ZapfDingbats.js`. Setze `defaultStyle.font` auf eine registrierte Schriftfamilie, wie oben gezeigt.\n"
+ },
+ {
+ "id": "es/fonts/standard-14-fonts",
+ "language": "es",
+ "translationKey": "fonts/standard-14-fonts",
+ "path": "/docs/0.3/es/fonts/standard-14-fonts/",
+ "title": "Las 14 fuentes estándar",
+ "description": "Usa familias de fuentes PDF estándar en Node.js y en los paquetes para navegador, con codificaciones de caracteres limitadas.",
+ "version": "0.3",
+ "sourceDigest": "b405dc401267671e4bd1aafcd6aa77046caff49e1ae6ed0019ab6d8f16361c4e",
+ "source": "fonts/standard-14-fonts.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/fonts/standard-14-fonts/",
+ "uri": "pdfmake://docs/0.3/es/fonts/standard-14-fonts",
+ "markdown": "# Las 14 fuentes estándar\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/fonts/standard-14-fonts/\n\nPDF incluye las [14 fuentes estándar](http://www.enfocus.com/manuals/ReferenceGuide/PS/18/enUS/en-us/common/pse/concept/c_aa1044513.html).\n\n**Cobertura de caracteres:** las fuentes estándar usan codificaciones limitadas y no admiten Unicode arbitrario. Para documentos multilingües, usa fuentes incrustadas y prueba los glifos que necesites.\n\n## Uso de pdfmake en el servidor\n\n**Ejemplo de uso:**\n**JavaScript**\n\n```js\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});\n```\n\n## Uso de pdfmake en el cliente\n\nLos paquetes de fuentes estándar están disponibles en el directorio `build/standard-fonts/` del paquete pdfmake. Incluye el paquete de cada familia que necesites **después** de `pdfmake.min.js`. Cada paquete registra automáticamente sus fuentes en `pdfMake`.\n\nPor ejemplo, para usar Helvetica:\n\n```html\n\n\n\n```\n\nLos paquetes disponibles son `Courier.js`, `Helvetica.js`, `Times.js`, `Symbol.js` y `ZapfDingbats.js`. Asigna `defaultStyle.font` a una familia de fuentes registrada, como se muestra arriba.\n"
+ },
+ {
+ "id": "fr/fonts/standard-14-fonts",
+ "language": "fr",
+ "translationKey": "fonts/standard-14-fonts",
+ "path": "/docs/0.3/fr/fonts/standard-14-fonts/",
+ "title": "Les 14 polices standard",
+ "description": "Utilisez les familles de polices PDF standard dans les bundles Node.js et navigateur, avec leurs encodages de caractères limités.",
+ "version": "0.3",
+ "sourceDigest": "b405dc401267671e4bd1aafcd6aa77046caff49e1ae6ed0019ab6d8f16361c4e",
+ "source": "fonts/standard-14-fonts.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/fonts/standard-14-fonts/",
+ "uri": "pdfmake://docs/0.3/fr/fonts/standard-14-fonts",
+ "markdown": "# Les 14 polices standard\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/fonts/standard-14-fonts/\n\nLes PDF contiennent [14 polices standard](http://www.enfocus.com/manuals/ReferenceGuide/PS/18/enUS/en-us/common/pse/concept/c_aa1044513.html).\n\n**Couverture des caractères :** les polices standard utilisent des encodages limités et ne prennent pas en charge l’ensemble des caractères Unicode. Pour les documents multilingues, utilisez des polices incorporées et testez les glyphes nécessaires.\n\n## Utiliser pdfmake côté serveur\n\n**Exemple d’utilisation :**\n**JavaScript**\n\n```js\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});\n```\n\n\n## Utiliser pdfmake côté client\n\nLes bundles des polices standard sont disponibles dans le répertoire `build/standard-fonts/` du package pdfmake. Incluez le bundle de chaque famille dont vous avez besoin **après** `pdfmake.min.js`. Chaque bundle enregistre automatiquement ses polices auprès de `pdfMake`.\n\nPar exemple, pour utiliser Helvetica :\n\n```html\n\n\n\n```\n\nLes bundles disponibles sont `Courier.js`, `Helvetica.js`, `Times.js`, `Symbol.js` et `ZapfDingbats.js`. Définissez `defaultStyle.font` avec le nom d’une famille enregistrée, comme dans l’exemple ci-dessus.\n"
+ },
+ {
+ "id": "fonts/standard-14-fonts",
+ "language": "en",
+ "translationKey": "fonts/standard-14-fonts",
+ "path": "/docs/0.3/fonts/standard-14-fonts/",
+ "title": "Standard 14 fonts",
+ "description": "Use standard PDF font families in Node.js and browser bundles, with limited character encodings.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "fonts/standard-14-fonts.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fonts/standard-14-fonts/",
+ "uri": "pdfmake://docs/0.3/fonts/standard-14-fonts",
+ "markdown": "# Standard 14 fonts\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/fonts/standard-14-fonts/\n\nPDF contains [standard 14 fonts](http://www.enfocus.com/manuals/ReferenceGuide/PS/18/enUS/en-us/common/pse/concept/c_aa1044513.html).\n\n**Character coverage:** Standard fonts use limited encodings and do not support arbitrary Unicode. Use embedded fonts for multilingual documents and test the glyphs you need.\n\n## Use in pdfmake on the server side\n\n**Example of usage:**\n**JavaScript**\n\n```js\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});\n```\n\n\n## Use in pdfmake on the client side\n\nStandard font bundles are available in the pdfmake package's `build/standard-fonts/` directory. Include the bundle for each font family you need **after** `pdfmake.min.js`. Each bundle automatically registers its fonts with `pdfMake`.\n\nFor example, to use Helvetica:\n\n```html\n\n\n\n```\n\nThe available bundles are `Courier.js`, `Helvetica.js`, `Times.js`, `Symbol.js` and `ZapfDingbats.js`. Set `defaultStyle.font` to a registered font family, as shown above.\n"
+ },
+ {
+ "id": "pt-br/fonts/standard-14-fonts",
+ "language": "pt-br",
+ "translationKey": "fonts/standard-14-fonts",
+ "path": "/docs/0.3/pt-br/fonts/standard-14-fonts/",
+ "title": "As 14 fontes padrão",
+ "description": "Use famílias de fontes PDF padrão no Node.js e em bundles de navegador, considerando as codificações de caracteres limitadas.",
+ "version": "0.3",
+ "sourceDigest": "b405dc401267671e4bd1aafcd6aa77046caff49e1ae6ed0019ab6d8f16361c4e",
+ "source": "fonts/standard-14-fonts.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/fonts/standard-14-fonts/",
+ "uri": "pdfmake://docs/0.3/pt-br/fonts/standard-14-fonts",
+ "markdown": "# As 14 fontes padrão\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/fonts/standard-14-fonts/\n\nO PDF inclui as [14 fontes padrão](http://www.enfocus.com/manuals/ReferenceGuide/PS/18/enUS/en-us/common/pse/concept/c_aa1044513.html).\n\n**Cobertura de caracteres:** as fontes padrão usam codificações limitadas e não oferecem suporte a Unicode arbitrário. Para documentos multilíngues, use fontes incorporadas e teste os glifos necessários.\n\n## Uso do pdfmake no servidor\n\n**Exemplo de uso:**\n**JavaScript**\n\n```js\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar fonts = {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique'\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique'\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic'\n },\n Symbol: {\n normal: 'Symbol'\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats'\n }\n};\n\nvar pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\n\nvar docDefinition: TDocumentDefinitions = {\n content: ['First paragraph', 'Another paragraph'],\n defaultStyle: {\n font: 'Helvetica'\n }\n};\n\nvar pdf = pdfmake.createPdf(docDefinition);\npdf.write('test.pdf').then(() => {\n // success event\n}, err => {\n console.error(err);\n});\n```\n\n\n## Uso do pdfmake no cliente\n\nOs bundles de fontes padrão estão disponíveis no diretório `build/standard-fonts/` do pacote pdfmake. Inclua o bundle de cada família necessária **depois** de `pdfmake.min.js`. Cada bundle registra automaticamente suas fontes em `pdfMake`.\n\nPor exemplo, para usar Helvetica:\n\n```html\n\n\n\n```\n\nOs bundles disponíveis são `Courier.js`, `Helvetica.js`, `Times.js`, `Symbol.js` e `ZapfDingbats.js`. Defina `defaultStyle.font` como uma família registrada, conforme mostrado acima.\n"
+ },
+ {
+ "id": "de/getting-started",
+ "language": "de",
+ "translationKey": "getting-started",
+ "path": "/docs/0.3/de/getting-started/",
+ "title": "Einrichtung",
+ "description": "Installiere pdfmake 0.3 für Node.js oder den Browser und wähle die passende Promise-basierte Ausgabe.",
+ "version": "0.3",
+ "sourceDigest": "f826ae5d92343da4bd37277368403475123e72ebb5b4d8d754e27ac70adb8ab1",
+ "source": "getting-started/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/getting-started/",
+ "uri": "pdfmake://docs/0.3/de/getting-started",
+ "markdown": "# Einrichtung\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/getting-started/\n\n## Die Laufzeit entscheidet\n\n- [Node.js](/docs/0.3/de/getting-started/server-side/): PDF-Dateien schreiben oder Bytes an eine API-Antwort übergeben.\n- [Browser](/docs/0.3/de/getting-started/client-side/): Vorschau öffnen oder eine PDF herunterladen.\n\nBeide Laufzeiten verwenden dieselbe [Dokumentdefinition](/docs/0.3/de/document-definition-object/), benötigen aber unterschiedliche Imports und Schriftregistrierung. Vermische die Einrichtung nicht mit älteren `PdfPrinter`-Beispielen. Die Ausgabe in 0.3 ist Promise-basiert: Fehler mit `await` und `try/catch` behandeln.\n\n[Die erste PDF](/docs/0.3/de/learn/first-pdf/) zeigt den gesamten Ablauf.\n\n## Vor dem Start\n\nVerwende die Dokumentation passend zur installierten Version (`npm ls pdfmake`). Beginne mit einem minimalen Beispiel, bevor du eigene Schriften, entfernte Bilder oder Tabellenlayouts hinzufügst. Wenn du eine Anwendung mit Version 0.1/0.2 betreibst, folge der [Migrationsanleitung](/docs/0.3/de/migration-from-0.1/).\n\n## JavaScript und TypeScript\n\nDieser Entwicklungszweig liefert eigene TypeScript-Deklarationen mit der Library aus und trennt Node- und Browser-APIs. Installiere f�r den lokal gepackten Zweig TypeScript ohne `@types/pdfmake`. Das ver�ffentlichte npm-Paket 0.3.12 ben�tigt weiterhin passende Community-Typen; die hier beschriebenen nativen Deklarationen und die Vorabvalidierung sind noch unver�ffentlicht. Gepr�ft wird mit TypeScript 5.9.3.\n\n```sh\nnpm install pdfmake@0.3.12\nnpm install --save-dev typescript@~5.9.3\n```\n\nNode.js: Speichere dies als `document.mts`. Mit `NodeNext` bildet der Compiler die tatsächlichen Node-Imports ab. Eine CommonJS-Datei mit `.cts` kann stattdessen mit `import pdfmake = require(\"pdfmake\")` beginnen. Verlasse dich nicht auf benannte Laufzeit-Imports.\n\n```json\n{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"strict\": true,\n \"esModuleInterop\": true\n }\n}\n```\n\n**JavaScript**\n\n```js\nimport pdfmake from 'pdfmake';\nimport { strict as assert } from 'node:assert';\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from 'pdfmake';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces.js';\nimport { strict as assert } from 'node:assert';\n\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');\n```\n\nBrowser-Bundler: Importiere den fertigen Browser-Einstieg und registriere das VFS direkt. Verwende `module: \"ESNext\"` und `moduleResolution: \"Bundler\"` im Bundler-Projekt; diese Optionen benötigen einen Bundler und sind nicht zum direkten Ausführen der Ausgabe in Node gedacht.\n\n**JavaScript**\n\n```js\nimport pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] };\nexport async function render() {\n return pdfmake.createPdf(definition).getBlob();\n}\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces';\n\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;\nexport async function render(): Promise {\n return pdfmake.createPdf(definition).getBlob();\n}\n```\n\nTypen bieten Vervollst�ndigung und Pr�fungen beim Kompilieren. Sie validieren kein externes JSON und garantieren kein erfolgreiches Layout. Die eigenen Deklarationen unterscheiden Node-`write` von Browser-`getBlob`, `download`, `open` und `print`. Verwende f�r Bundler explizite Browser-Imports. Playground und eingebettete Beispiele pr�fen TypeScript lokal vor dem Rendern. Siehe [Dokumentvalidierung](/docs/0.3/de/guides/errors/) f�r Laufzeitpr�fungen.\n"
+ },
+ {
+ "id": "es/getting-started",
+ "language": "es",
+ "translationKey": "getting-started",
+ "path": "/docs/0.3/es/getting-started/",
+ "title": "Instalación",
+ "description": "Instala pdfmake 0.3 en Node.js o el navegador y elige una salida basada en Promises para tu aplicación.",
+ "version": "0.3",
+ "sourceDigest": "f826ae5d92343da4bd37277368403475123e72ebb5b4d8d754e27ac70adb8ab1",
+ "source": "getting-started/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/getting-started/",
+ "uri": "pdfmake://docs/0.3/es/getting-started",
+ "markdown": "# Instalación\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/getting-started/\n\n## Elige el entorno de ejecución\n\n- [Node.js](/docs/0.3/es/getting-started/server-side/): escribir un archivo, devolver un Buffer desde una API o consumir un flujo.\n- [Navegador](/docs/0.3/es/getting-started/client-side/): descargar, abrir, imprimir u obtener un Blob.\n\nAmbos entornos usan la misma [definición del documento](/docs/0.3/es/document-definition-object/). Los métodos de salida devuelven Promises. La carga de fuentes es distinta entre archivos de Node y contenedores de fuentes del navegador.\n\n## Antes de empezar\n\nUsa la documentación correspondiente a la versión instalada (`npm ls pdfmake`). Empieza con un ejemplo mínimo antes de añadir fuentes personalizadas, imágenes remotas o distribuciones de tablas. Para aplicaciones 0.1/0.2, sigue la [guía de migración](/docs/0.3/es/migration-from-0.1/).\n\n## JavaScript y TypeScript\n\nEsta rama de desarrollo incluye declaraciones TypeScript propias con la biblioteca y separa las API de Node y navegador. Para el paquete construido localmente, instala TypeScript sin `@types/pdfmake`. El paquete npm publicado 0.3.12 a�n necesita sus tipos comunitarios correspondientes; las declaraciones nativas y la validaci�n previa descritas aqu� todav�a no est�n publicadas. El compilador comprobado es TypeScript 5.9.3.\n\n```sh\nnpm install pdfmake@0.3.12\nnpm install --save-dev typescript@~5.9.3\n```\n\nNode.js: guarda este ejemplo como `document.mts`. `NodeNext` permite al compilador seguir la resolución real de Node. Un archivo CommonJS `.cts` puede empezar con `import pdfmake = require(\"pdfmake\")`. Evita depender de imports de ejecución con nombre.\n\n```json\n{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"strict\": true,\n \"esModuleInterop\": true\n }\n}\n```\n\n**JavaScript**\n\n```js\nimport pdfmake from 'pdfmake';\nimport { strict as assert } from 'node:assert';\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from 'pdfmake';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces.js';\nimport { strict as assert } from 'node:assert';\n\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');\n```\n\nCon un bundler para el navegador, importa el punto de entrada precompilado y registra directamente el VFS. Usa `module: \"ESNext\"` y `moduleResolution: \"Bundler\"`; estas opciones requieren un bundler y no sirven para ejecutar la salida directamente en Node.\n\n**JavaScript**\n\n```js\nimport pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] };\nexport async function render() {\n return pdfmake.createPdf(definition).getBlob();\n}\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces';\n\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;\nexport async function render(): Promise {\n return pdfmake.createPdf(definition).getBlob();\n}\n```\n\nLos tipos ofrecen autocompletado y comprobaciones al compilar. No validan JSON externo ni garantizan el dise�o. Las declaraciones incluidas distinguen `write` en Node de `getBlob`, `download`, `open` y `print` en el navegador. Usa imports expl�citos del navegador con bundlers. El playground y los ejemplos integrados comprueban TypeScript localmente antes del renderizado. Consulta la [validaci�n de documentos](/docs/0.3/es/guides/errors/) para las comprobaciones en ejecuci�n.\n"
+ },
+ {
+ "id": "fr/getting-started",
+ "language": "fr",
+ "translationKey": "getting-started",
+ "path": "/docs/0.3/fr/getting-started/",
+ "title": "Bien démarrer",
+ "description": "Choisissez Node.js ou le navigateur, enregistrez les polices et générez votre premier PDF avec pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f826ae5d92343da4bd37277368403475123e72ebb5b4d8d754e27ac70adb8ab1",
+ "source": "getting-started/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/getting-started/",
+ "uri": "pdfmake://docs/0.3/fr/getting-started",
+ "markdown": "# Bien démarrer\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/getting-started/\n\n## Choisir votre environnement\n\n- [Node.js](/docs/0.3/fr/getting-started/server-side/) : écrire un fichier, renvoyer un Buffer depuis une API ou consommer un flux.\n- [Navigateur](/docs/0.3/fr/getting-started/client-side/) : télécharger, ouvrir, imprimer ou obtenir un Blob.\n\nLes deux environnements utilisent la même [définition de document](/docs/0.3/fr/document-definition-object/). Les méthodes de sortie renvoient des Promises. Le chargement des polices diffère entre les fichiers Node et les conteneurs de polices du navigateur.\n\n## Avant de commencer\n\nConsultez la documentation correspondant à la version installée (`npm ls pdfmake`). Commencez par un exemple minimal avant d’ajouter des polices personnalisées, des images distantes ou des dispositions de tableau. Pour les applications 0.1/0.2, suivez le [guide de migration](/docs/0.3/fr/migration-from-0.1/).\n\n## JavaScript et TypeScript\n\nCette branche de d�veloppement fournit ses propres d�clarations TypeScript avec la biblioth�que et s�pare les API Node et navigateur. Pour le paquet construit localement, installez TypeScript sans `@types/pdfmake`. Le paquet npm publi� 0.3.12 n�cessite encore les types communautaires correspondants ; les d�clarations natives et la validation pr�alable pr�sent�es ici ne sont pas encore publi�es. Le compilateur v�rifi� est TypeScript 5.9.3.\n\n```sh\nnpm install pdfmake@0.3.12\nnpm install --save-dev typescript@~5.9.3\n```\n\nNode.js : enregistrez cet exemple dans `document.mts`. `NodeNext` permet au compilateur de suivre la résolution réelle de Node. Un fichier CommonJS `.cts` peut commencer par `import pdfmake = require(\"pdfmake\")`. Évitez les imports nommés à l’exécution.\n\n```json\n{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"strict\": true,\n \"esModuleInterop\": true\n }\n}\n```\n\n**JavaScript**\n\n```js\nimport pdfmake from 'pdfmake';\nimport { strict as assert } from 'node:assert';\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from 'pdfmake';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces.js';\nimport { strict as assert } from 'node:assert';\n\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');\n```\n\nAvec un bundler pour navigateur, importez le point d’entrée précompilé et enregistrez directement le VFS. Utilisez `module: \"ESNext\"` et `moduleResolution: \"Bundler\"` ; ces options nécessitent un bundler et ne conviennent pas à une sortie exécutée directement par Node.\n\n**JavaScript**\n\n```js\nimport pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] };\nexport async function render() {\n return pdfmake.createPdf(definition).getBlob();\n}\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces';\n\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;\nexport async function render(): Promise {\n return pdfmake.createPdf(definition).getBlob();\n}\n```\n\nLes types apportent la compl�tion et les v�rifications � la compilation. Ils ne valident pas le JSON externe et ne garantissent pas la mise en page. Les d�clarations fournies distinguent `write` dans Node de `getBlob`, `download`, `open` et `print` dans le navigateur. Utilisez les imports explicites du navigateur pour les bundlers. Le playground et les exemples int�gr�s v�rifient TypeScript localement avant le rendu. Consultez la [validation des documents](/docs/0.3/fr/guides/errors/) pour les contr�les � l�ex�cution.\n"
+ },
+ {
+ "id": "getting-started",
+ "language": "en",
+ "translationKey": "getting-started",
+ "path": "/docs/0.3/getting-started/",
+ "title": "Getting started",
+ "description": "Choose Node.js or browser setup, register fonts, and generate your first pdfmake 0.3 PDF.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "getting-started/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/getting-started/",
+ "uri": "pdfmake://docs/0.3/getting-started",
+ "markdown": "# Getting started\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/getting-started/\n\n## Choose your runtime\n\n- [Node.js](/docs/0.3/getting-started/server-side/): write a file, return a Buffer from an API, or consume a stream.\n- [Browser](/docs/0.3/getting-started/client-side/): download, open, print, or obtain a Blob.\n\nBoth runtimes use the same [document definition](/docs/0.3/document-definition-object/). Output helpers return Promises. Font loading differs between Node files and browser font containers.\n\n## Before you begin\n\nUse the docs for your installed version (`npm ls pdfmake`). Start with a minimal example before adding custom fonts, remote images or table layouts. For 0.1/0.2 applications, follow the [migration guide](/docs/0.3/migration-from-0.1/).\n\n## JavaScript and TypeScript\n\nThis development branch bundles native TypeScript declarations with the library, with separate Node and browser APIs. Install TypeScript without `@types/pdfmake` when using the locally packed branch. The published npm package 0.3.12 still needs its matching community types; the native declarations and preflight API described here are unreleased. The tested compiler is TypeScript 5.9.3.\n\n```sh\nnpm install pdfmake@0.3.12\nnpm install --save-dev typescript@~5.9.3\n```\n\nNode.js: save this as `document.mts`. Use `NodeNext` so the compiler models actual Node imports. A CommonJS `.cts` file can instead start with `import pdfmake = require(\"pdfmake\")`. Avoid relying on named runtime imports.\n\n```json\n{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"strict\": true,\n \"esModuleInterop\": true\n }\n}\n```\n\n**JavaScript**\n\n```js\nimport pdfmake from 'pdfmake';\nimport { strict as assert } from 'node:assert';\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from 'pdfmake';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces.js';\nimport { strict as assert } from 'node:assert';\n\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');\n```\n\nBrowser bundlers: import the prebuilt browser entry and register the VFS directly. Use `module: \"ESNext\"` and `moduleResolution: \"Bundler\"` in your bundler project; these options require a bundler and are not a configuration for directly running Node output.\n\n**JavaScript**\n\n```js\nimport pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] };\nexport async function render() {\n return pdfmake.createPdf(definition).getBlob();\n}\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces';\n\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;\nexport async function render(): Promise {\n return pdfmake.createPdf(definition).getBlob();\n}\n```\n\nTypes provide completion and compile-time checks. They do not validate external JSON or guarantee a successful layout. The bundled declarations distinguish Node `write` from browser `getBlob`, `download`, `open` and `print`. Use explicit browser imports for bundlers. The playground and inline examples check TypeScript locally before rendering. See [document validation](/docs/0.3/guides/errors/) for runtime checks.\n"
+ },
+ {
+ "id": "pt-br/getting-started",
+ "language": "pt-br",
+ "translationKey": "getting-started",
+ "path": "/docs/0.3/pt-br/getting-started/",
+ "title": "Primeiros passos",
+ "description": "Escolha a configuração para Node.js ou navegador, registre fontes e gere seu primeiro PDF com o pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f826ae5d92343da4bd37277368403475123e72ebb5b4d8d754e27ac70adb8ab1",
+ "source": "getting-started/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/getting-started/",
+ "uri": "pdfmake://docs/0.3/pt-br/getting-started",
+ "markdown": "# Primeiros passos\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/getting-started/\n\n## Escolha o ambiente de execução\n\n- [Node.js](/docs/0.3/pt-br/getting-started/server-side/): grave um arquivo, retorne um Buffer de uma API ou consuma um stream.\n- [Navegador](/docs/0.3/pt-br/getting-started/client-side/): baixe, abra, imprima ou obtenha um Blob.\n\nOs dois ambientes usam a mesma [definição de documento](/docs/0.3/pt-br/document-definition-object/). Os métodos de saída retornam Promises. O carregamento de fontes é diferente entre arquivos no Node.js e contêineres de fontes no navegador.\n\n## Antes de começar\n\nConsulte a documentação da versão instalada (`npm ls pdfmake`). Comece com um exemplo mínimo antes de adicionar fontes personalizadas, imagens remotas ou layouts de tabela. Em aplicações 0.1/0.2, siga o [guia de migração](/docs/0.3/pt-br/migration-from-0.1/).\n\n## JavaScript e TypeScript\n\nEsta branch de desenvolvimento inclui declara��es TypeScript pr�prias na biblioteca e separa as APIs do Node e do navegador. Para o pacote gerado localmente, instale TypeScript sem `@types/pdfmake`. O pacote npm publicado 0.3.12 ainda exige os tipos comunit�rios correspondentes; as declara��es nativas e a valida��o pr�via descritas aqui ainda n�o foram publicadas. O compilador verificado � TypeScript 5.9.3.\n\n```sh\nnpm install pdfmake@0.3.12\nnpm install --save-dev typescript@~5.9.3\n```\n\nNode.js: salve este exemplo como `document.mts`. `NodeNext` permite ao compilador seguir a resolução real do Node. Um arquivo CommonJS `.cts` pode começar com `import pdfmake = require(\"pdfmake\")`. Evite depender de imports nomeados em tempo de execução.\n\n```json\n{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"strict\": true,\n \"esModuleInterop\": true\n }\n}\n```\n\n**JavaScript**\n\n```js\nimport pdfmake from 'pdfmake';\nimport { strict as assert } from 'node:assert';\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from 'pdfmake';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces.js';\nimport { strict as assert } from 'node:assert';\n\npdfmake.addFonts({ Helvetica: { normal: 'Helvetica', bold: 'Helvetica-Bold', italics: 'Helvetica-Oblique', bolditalics: 'Helvetica-BoldOblique' } });\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(name => name.startsWith('Helvetica'));\nconst definition: TDocumentDefinitions = { content: [{ table: { body: [['ESM', 'TypeScript'], ['Promise', 'Output']] } }], defaultStyle: { font: 'Helvetica' } };\nconst buffer: Buffer = await pdfmake.createPdf(definition).getBuffer();\nassert.equal(buffer.subarray(0, 5).toString(), '%PDF-');\n```\n\nCom um bundler para navegador, importe a entrada pré-compilada e registre o VFS diretamente. Use `module: \"ESNext\"` e `moduleResolution: \"Bundler\"`; essas opções exigem um bundler e não servem para executar a saída diretamente no Node.\n\n**JavaScript**\n\n```js\nimport pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] };\nexport async function render() {\n return pdfmake.createPdf(definition).getBlob();\n}\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from 'pdfmake/build/pdfmake.js';\nimport vfs from 'pdfmake/build/vfs_fonts.js';\nimport type { TDocumentDefinitions } from 'pdfmake/interfaces';\n\npdfmake.addVirtualFileSystem(vfs);\nconst definition = { content: [{ text: 'TypeScript browser bundler', bold: true }] } satisfies TDocumentDefinitions;\nexport async function render(): Promise {\n return pdfmake.createPdf(definition).getBlob();\n}\n```\n\nOs tipos oferecem preenchimento autom�tico e verifica��es na compila��o. Eles n�o validam JSON externo nem garantem o layout. As declara��es inclu�das distinguem `write` no Node de `getBlob`, `download`, `open` e `print` no navegador. Use imports expl�citos do navegador com bundlers. O playground e os exemplos integrados verificam TypeScript localmente antes da renderiza��o. Consulte a [valida��o de documentos](/docs/0.3/pt-br/guides/errors/) para verifica��es em tempo de execu��o.\n"
+ },
+ {
+ "id": "de/getting-started/client-side",
+ "language": "de",
+ "translationKey": "getting-started/client-side",
+ "path": "/docs/0.3/de/getting-started/client-side/",
+ "title": "Browser-Schnellstart",
+ "description": "Lade pdfmake 0.3 und das Schrift-Bundle und lade dann ein PDF als Reaktion auf eine Benutzeraktion herunter.",
+ "version": "0.3",
+ "sourceDigest": "01745b0861d3d7c78def82206112d36936e7fb0d4c4486fbdd53bc321fbb1530",
+ "source": "getting-started/client-side/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/getting-started/client-side/",
+ "uri": "pdfmake://docs/0.3/de/getting-started/client-side",
+ "markdown": "# Browser-Schnellstart\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/getting-started/client-side/\n\n## Browserressourcen installieren und kopieren\n\n```sh\nnpm install pdfmake@0.3.12\n```\n\nKopiere `node_modules/pdfmake/build/pdfmake.min.js` und `node_modules/pdfmake/build/vfs_fonts.js` neben diese HTML-Datei. Stelle das Verzeichnis über deinen lokalen Entwicklungsserver bereit.\n\n## PDF erzeugen\n\n```html\n\n\nMy first PDF\n\n \n \n \n \n \n\n\n```\n\nLade die Engine **vor** ihrem Schrift-Bundle. `vfs_fonts.js` stellt die standardmäßigen Roboto-Schriftdateien bereit. Für dieses Beispiel benötigst du keine serverseitige Rendering-API. Wenn das Promise von `download()` erfüllt wird, wurde der Download gestartet; es bestätigt nicht, dass der Benutzer die Datei gespeichert hat.\n\n## Einen Bundler verwenden\n\n**JavaScript**\n\n```js\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');\n```\n\nDieser Code wird innerhalb des Moduls oder eines asynchronen Event-Handlers deiner Anwendung ausgeführt. Wenn du ein SSR-Framework nutzt, darf der Import nicht in serverseitig ausgeführten Code geraten. Verwende in TypeScript Typdefinitionen, die zu deiner installierten pdfmake-Version passen; Typen machen eine ältere Laufzeit nicht mit der 0.3-API kompatibel.\n\n## Öffnen und drucken\n\nRufe `open()` oder `print()` während einer Benutzeraktion auf, um Popup-Blocker zu vermeiden. Wenn du zuerst Daten abrufst, öffne synchron ein Fenster und übergib es anschließend an die Ausgabemethode. Siehe [Browsermethoden](/docs/0.3/de/getting-started/client-side/methods/).\n\n## Nächste Schritte\n\n[Eigene Schriften](/docs/0.3/de/fonts/custom-fonts-client-side/) · [Browsermethoden](/docs/0.3/de/getting-started/client-side/methods/) · [Fehlerbehebung](/docs/0.3/de/guides/troubleshooting/)\n"
+ },
+ {
+ "id": "es/getting-started/client-side",
+ "language": "es",
+ "translationKey": "getting-started/client-side",
+ "path": "/docs/0.3/es/getting-started/client-side/",
+ "title": "Inicio rápido en el navegador",
+ "description": "Carga pdfmake 0.3 y su paquete de fuentes y descarga un PDF mediante una acción del usuario.",
+ "version": "0.3",
+ "sourceDigest": "01745b0861d3d7c78def82206112d36936e7fb0d4c4486fbdd53bc321fbb1530",
+ "source": "getting-started/client-side/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/getting-started/client-side/",
+ "uri": "pdfmake://docs/0.3/es/getting-started/client-side",
+ "markdown": "# Inicio rápido en el navegador\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/getting-started/client-side/\n\n## Instalar y copiar los recursos del navegador\n\n```sh\nnpm install pdfmake@0.3.12\n```\n\nCopia `node_modules/pdfmake/build/pdfmake.min.js` y `node_modules/pdfmake/build/vfs_fonts.js` junto a este archivo HTML. Sirve el directorio con tu servidor de desarrollo local.\n\n## Generar un PDF\n\n```html\n\n\nMy first PDF\n\n \n \n \n \n \n\n\n```\n\nCarga el motor **antes** del paquete de fuentes. `vfs_fonts.js` proporciona los archivos de la fuente Roboto predeterminada. Este ejemplo no requiere una API de renderizado en el servidor. Si la Promise de `download()` se resuelve, significa que se inició la descarga; no confirma que el usuario guardase el archivo.\n\n## Usar un empaquetador\n\n**JavaScript**\n\n```js\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');\n```\n\nEste código se ejecuta dentro del módulo de la aplicación o de un controlador de eventos asíncrono. Si usas un marco SSR, mantén las importaciones fuera de la ejecución exclusiva del servidor. Para TypeScript, utiliza declaraciones compatibles con la versión de pdfmake instalada; los tipos no hacen que un entorno de ejecución anterior admita la API 0.3.\n\n## Abrir e imprimir\n\nLlama a `open()` o `print()` como respuesta a un gesto del usuario para evitar que el navegador bloquee ventanas emergentes. Si primero cargas datos, abre una ventana de forma síncrona y pásala después al método de salida. Consulta los [métodos del navegador](/docs/0.3/es/getting-started/client-side/methods/).\n\n## Pasos siguientes\n\n[Fuentes personalizadas](/docs/0.3/es/fonts/custom-fonts-client-side/) · [Métodos del navegador](/docs/0.3/es/getting-started/client-side/methods/) · [Solución de problemas](/docs/0.3/es/guides/troubleshooting/)\n"
+ },
+ {
+ "id": "fr/getting-started/client-side",
+ "language": "fr",
+ "translationKey": "getting-started/client-side",
+ "path": "/docs/0.3/fr/getting-started/client-side/",
+ "title": "Démarrage rapide dans le navigateur",
+ "description": "Chargez pdfmake 0.3 et son lot de polices, puis téléchargez un PDF à la suite d’une action de l’utilisateur.",
+ "version": "0.3",
+ "sourceDigest": "01745b0861d3d7c78def82206112d36936e7fb0d4c4486fbdd53bc321fbb1530",
+ "source": "getting-started/client-side/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/getting-started/client-side/",
+ "uri": "pdfmake://docs/0.3/fr/getting-started/client-side",
+ "markdown": "# Démarrage rapide dans le navigateur\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/getting-started/client-side/\n\n## Installer et copier les ressources du navigateur\n\n```sh\nnpm install pdfmake@0.3.12\n```\n\nCopiez `node_modules/pdfmake/build/pdfmake.min.js` et `node_modules/pdfmake/build/vfs_fonts.js` à côté de ce fichier HTML. Servez le dossier avec votre serveur de développement local.\n\n## Générer un PDF\n\n```html\n\n\nMy first PDF\n\n \n \n \n \n \n\n\n```\n\nChargez le moteur **avant** son lot de polices. `vfs_fonts.js` fournit les fichiers Roboto par défaut. Cet exemple ne nécessite pas d’API de rendu côté serveur. La résolution de `download()` signifie que le téléchargement a été lancé ; elle ne confirme pas que l’utilisateur a enregistré le fichier.\n\n## Utiliser un bundler\n\n**JavaScript**\n\n```js\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');\n```\n\nCe code s’exécute dans le module de votre application ou dans un gestionnaire d’événement asynchrone. Avec un framework SSR, ne chargez pas ces imports côté serveur. Pour TypeScript, utilisez des déclarations compatibles avec la version pdfmake installée ; les types ne permettent pas à une ancienne version d’exécuter l’API 0.3.\n\n## Ouvrir et imprimer\n\nAppelez `open()` ou `print()` à la suite d’une action de l’utilisateur pour éviter le blocage des fenêtres surgissantes. Si vous récupérez d’abord des données, ouvrez une fenêtre de façon synchrone, puis transmettez-la à la méthode de sortie. Consultez [Méthodes du navigateur](/docs/0.3/fr/getting-started/client-side/methods/).\n\n## Étapes suivantes\n\n[Polices personnalisées](/docs/0.3/fr/fonts/custom-fonts-client-side/) · [Méthodes du navigateur](/docs/0.3/fr/getting-started/client-side/methods/) · [Dépannage](/docs/0.3/fr/guides/troubleshooting/)\n"
+ },
+ {
+ "id": "getting-started/client-side",
+ "language": "en",
+ "translationKey": "getting-started/client-side",
+ "path": "/docs/0.3/getting-started/client-side/",
+ "title": "Browser quickstart",
+ "description": "Load pdfmake 0.3 and its font bundle, then download a PDF from a user action.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "getting-started/client-side/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/getting-started/client-side/",
+ "uri": "pdfmake://docs/0.3/getting-started/client-side",
+ "markdown": "# Browser quickstart\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/getting-started/client-side/\n\n## Install and copy the browser assets\n\n```sh\nnpm install pdfmake@0.3.12\n```\n\nCopy `node_modules/pdfmake/build/pdfmake.min.js` and `node_modules/pdfmake/build/vfs_fonts.js` next to this HTML file. Serve the directory with your local development server.\n\n## Generate a PDF\n\n```html\n\n\nMy first PDF\n\n \n \n \n \n \n\n\n```\n\nLoad the engine **before** its font bundle. `vfs_fonts.js` supplies the default Roboto font files. You do not need a server-side rendering API for this example. `download()` resolving means the download has been initiated; it does not confirm a user saved the file.\n\n## Use a bundler\n\n**JavaScript**\n\n```js\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');\n```\n\nThis code runs inside your application's module or async event handler. Keep imports out of server-only execution when using SSR frameworks. For TypeScript, use declarations compatible with your installed pdfmake version; types do not make an older runtime support the 0.3 API.\n\n## Open and print\n\nCall `open()` or `print()` from a user gesture to avoid popup blocking. When fetching data first, open a window synchronously and pass it to the output method afterward. See [browser methods](/docs/0.3/getting-started/client-side/methods/).\n\n## Next steps\n\n[Custom fonts](/docs/0.3/fonts/custom-fonts-client-side/) · [Browser methods](/docs/0.3/getting-started/client-side/methods/) · [Troubleshooting](/docs/0.3/guides/troubleshooting/)\n"
+ },
+ {
+ "id": "pt-br/getting-started/client-side",
+ "language": "pt-br",
+ "translationKey": "getting-started/client-side",
+ "path": "/docs/0.3/pt-br/getting-started/client-side/",
+ "title": "Início rápido no navegador",
+ "description": "Carregue o pdfmake 0.3 e seu bundle de fontes e, em seguida, baixe um PDF em resposta a uma ação do usuário.",
+ "version": "0.3",
+ "sourceDigest": "01745b0861d3d7c78def82206112d36936e7fb0d4c4486fbdd53bc321fbb1530",
+ "source": "getting-started/client-side/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/getting-started/client-side/",
+ "uri": "pdfmake://docs/0.3/pt-br/getting-started/client-side",
+ "markdown": "# Início rápido no navegador\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/getting-started/client-side/\n\n## Instale e copie os assets do navegador\n\n```sh\nnpm install pdfmake@0.3.12\n```\n\nCopie `node_modules/pdfmake/build/pdfmake.min.js` e `node_modules/pdfmake/build/vfs_fonts.js` para junto deste arquivo HTML. Sirva o diretório usando seu servidor local de desenvolvimento.\n\n## Gere um PDF\n\n```html\n\n\nMy first PDF\n\n \n \n \n \n \n\n\n```\n\nCarregue o mecanismo **antes** do bundle de fontes. `vfs_fonts.js` fornece os arquivos da fonte Roboto padrão. Este exemplo não exige uma API de renderização no servidor. A resolução de `download()` significa que o download foi iniciado; ela não confirma que o usuário salvou o arquivo.\n\n## Use um bundler\n\n**JavaScript**\n\n```js\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfMake from 'pdfmake/build/pdfmake';\nimport pdfFonts from 'pdfmake/build/vfs_fonts';\n\npdfMake.addVirtualFileSystem(pdfFonts);\nawait pdfMake.createPdf({ content: ['Bundled application'] }).download('document.pdf');\n```\n\nEste código é executado dentro do módulo da aplicação ou de um manipulador de eventos assíncrono. Ao usar frameworks com SSR, mantenha as importações fora da execução exclusiva do servidor. No TypeScript, use declarações compatíveis com a versão instalada do pdfmake; os tipos não fazem uma versão antiga do runtime aceitar a API 0.3.\n\n## Abra e imprima\n\nChame `open()` ou `print()` a partir de uma ação do usuário para evitar bloqueios de pop-up. Se primeiro buscar dados, abra uma janela de forma síncrona e passe-a ao método de saída depois. Consulte os [métodos do navegador](/docs/0.3/pt-br/getting-started/client-side/methods/).\n\n## Próximas etapas\n\n[Fontes personalizadas](/docs/0.3/pt-br/fonts/custom-fonts-client-side/) · [Métodos do navegador](/docs/0.3/pt-br/getting-started/client-side/methods/) · [Solução de problemas](/docs/0.3/pt-br/guides/troubleshooting/)\n"
+ },
+ {
+ "id": "de/getting-started/client-side/examples",
+ "language": "de",
+ "translationKey": "getting-started/client-side/examples",
+ "path": "/docs/0.3/de/getting-started/client-side/examples/",
+ "title": "Beispiele",
+ "description": "Sieh dir Beispiele für die Verwendung von pdfmake 0.3 an.",
+ "version": "0.3",
+ "sourceDigest": "564c62eedf95371a7703dae15a84350aa49933c3eb606a9e4ed6cdb4541f38d7",
+ "source": "getting-started/client-side/examples.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/getting-started/client-side/examples/",
+ "uri": "pdfmake://docs/0.3/de/getting-started/client-side/examples",
+ "markdown": "# Beispiele\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/getting-started/client-side/examples/\n\nSieh dir den [Playground](/docs/0.3/de/playground/) und die [Beispiele](https://github.com/bpampuch/pdfmake/tree/master/examples) an.\n"
+ },
+ {
+ "id": "es/getting-started/client-side/examples",
+ "language": "es",
+ "translationKey": "getting-started/client-side/examples",
+ "path": "/docs/0.3/es/getting-started/client-side/examples/",
+ "title": "Ejemplos",
+ "description": "Configura ejemplos en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "564c62eedf95371a7703dae15a84350aa49933c3eb606a9e4ed6cdb4541f38d7",
+ "source": "getting-started/client-side/examples.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/getting-started/client-side/examples/",
+ "uri": "pdfmake://docs/0.3/es/getting-started/client-side/examples",
+ "markdown": "# Ejemplos\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/getting-started/client-side/examples/\n\nConsulta el [entorno de pruebas](/docs/0.3/es/playground/) y los [ejemplos](https://github.com/bpampuch/pdfmake/tree/master/examples).\n"
+ },
+ {
+ "id": "fr/getting-started/client-side/examples",
+ "language": "fr",
+ "translationKey": "getting-started/client-side/examples",
+ "path": "/docs/0.3/fr/getting-started/client-side/examples/",
+ "title": "Exemples",
+ "description": "Découvrez des exemples pour pdfmake 0.3 et essayez-les dans le playground.",
+ "version": "0.3",
+ "sourceDigest": "564c62eedf95371a7703dae15a84350aa49933c3eb606a9e4ed6cdb4541f38d7",
+ "source": "getting-started/client-side/examples.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/getting-started/client-side/examples/",
+ "uri": "pdfmake://docs/0.3/fr/getting-started/client-side/examples",
+ "markdown": "# Exemples\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/getting-started/client-side/examples/\n\nConsultez [le playground](/docs/0.3/fr/playground/) et les [exemples](https://github.com/bpampuch/pdfmake/tree/master/examples).\n"
+ },
+ {
+ "id": "getting-started/client-side/examples",
+ "language": "en",
+ "translationKey": "getting-started/client-side/examples",
+ "path": "/docs/0.3/getting-started/client-side/examples/",
+ "title": "Examples",
+ "description": "Configure examples in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "getting-started/client-side/examples.md",
+ "url": "https://pdfmake.github.io/docs/0.3/getting-started/client-side/examples/",
+ "uri": "pdfmake://docs/0.3/getting-started/client-side/examples",
+ "markdown": "# Examples\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/getting-started/client-side/examples/\n\nCheck out [the playground](/docs/0.3/playground/) and [examples](https://github.com/bpampuch/pdfmake/tree/master/examples).\n"
+ },
+ {
+ "id": "pt-br/getting-started/client-side/examples",
+ "language": "pt-br",
+ "translationKey": "getting-started/client-side/examples",
+ "path": "/docs/0.3/pt-br/getting-started/client-side/examples/",
+ "title": "Exemplos",
+ "description": "Explore exemplos de uso do pdfmake 0.3 no navegador.",
+ "version": "0.3",
+ "sourceDigest": "564c62eedf95371a7703dae15a84350aa49933c3eb606a9e4ed6cdb4541f38d7",
+ "source": "getting-started/client-side/examples.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/getting-started/client-side/examples/",
+ "uri": "pdfmake://docs/0.3/pt-br/getting-started/client-side/examples",
+ "markdown": "# Exemplos\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/getting-started/client-side/examples/\n\nConfira o [playground](/docs/0.3/pt-br/playground/) e os [exemplos](https://github.com/bpampuch/pdfmake/tree/master/examples).\n"
+ },
+ {
+ "id": "de/getting-started/client-side/methods",
+ "language": "de",
+ "translationKey": "getting-started/client-side/methods",
+ "path": "/docs/0.3/de/getting-started/client-side/methods/",
+ "title": "Ausgabemethoden im Browser",
+ "description": "Lade PDFs herunter, öffne, drucke oder erhalte PDF-Bytes und Blobs mit Promise-basierten Browsermethoden in pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "9223df7c21e72e445796980b101e0e55c3724007a9f7b3f7e0888260b13476f1",
+ "source": "getting-started/client-side/methods.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/getting-started/client-side/methods/",
+ "uri": "pdfmake://docs/0.3/de/getting-started/client-side/methods",
+ "markdown": "# Ausgabemethoden im Browser\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/getting-started/client-side/methods/\n\n## Dokument erstellen\n\nNachdem du [Engine und Schriften geladen hast](/docs/0.3/de/getting-started/client-side/):\n\n**JavaScript**\n\n```js\nconst output = pdfMake.createPdf(docDefinition, options);\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfMake.createPdf(docDefinition, options);\n```\n\nDas optionale zweite Argument enthält [Rendering-Optionen](/docs/0.3/de/options/). `createPdf` gibt sofort einen Ausgabe-Wrapper zurück. Ausgabemethoden liefern Promises; behandle deren Ablehnungen.\n\n## Ausgabe auswählen\n\n| Methode | Ergebnis | Verhalten |\n| --- | --- | --- |\n| `download(filename?)` | `undefined` | Startet einen Download; Standarddateiname ist `file.pdf` |\n| `open(window?)` | `undefined` | Öffnet das erzeugte PDF in einem neuen oder angegebenen Fenster |\n| `print(window?)` | `undefined` | Öffnet ein PDF mit Druckaktion; das Verhalten hängt vom Viewer ab |\n| `getBlob()` | `Blob` | Binärdaten mit MIME-Typ `application/pdf` |\n| `getBuffer()` | Buffer-kompatible Bytes | Rohe PDF-Bytes |\n| `getBase64()` | `string` | Base64-kodiertes PDF |\n| `getDataUrl()` | `string` | Base64-Data-URL |\n| `getStream()` | PDFKit-Stream | Ausgabe auf niedriger Ebene; verwende normalerweise Blob oder Bytes |\n\n**JavaScript**\n\n```js\ntry {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}\n```\n\nEin erfülltes Download-Promise bestätigt nicht, dass der Benutzer die Datei gespeichert hat. Drucken hängt vom Browser und PDF-Viewer ab; verlasse dich nicht auf stilles Drucken.\n\n## Nach asynchroner Arbeit öffnen\n\nÖffne das Fenster direkt im Click-Handler des Benutzers, bevor du auf Daten wartest. Andernfalls können Popup-Blocker das Öffnen verhindern.\n\n**JavaScript**\n\n```js\nasync function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nasync function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}\n```\n\nRufe `openReport` im Click-Handler deiner Anwendung auf und behandle das abgelehnte Promise. Ersetze zum Drucken `.open(win)` durch `.print(win)`. Mit `window` navigierst du im aktuellen Tab. Lege den PDF-Titel über die [Dokumentmetadaten](/docs/0.3/de/document-definition-object/document-medatadata/) fest; Dateinamen und Titel im Viewer hängen vom Browser ab.\n\n## Blob-URLs verwalten\n\n**JavaScript**\n\n```js\nconst blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.\n```\n\n**TypeScript**\n\n```ts\nconst blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.\n```\n\nLass die URL bestehen, solange der Viewer sie verwendet. Rufe beim Aufräumen `URL.revokeObjectURL(url)` auf. Verwende für jeden Renderdurchlauf einen neuen Ausgabe-Wrapper. Kombiniere die manuelle Verarbeitung eines Streams nicht mit Buffer- oder Blob-Hilfsmethoden auf demselben Ausgabe-Wrapper.\n\n## URL-Zugriffsrichtlinie\n\nSeit **0.3.6** akzeptiert `setUrlAccessPolicy(callback)` einen synchronen booleschen Callback. Diese Funktion ist keine vollständige Netzwerksandbox; Weiterleitungen im Browser können stattfinden, bevor die endgültige URL geprüft wird. Siehe [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/).\n"
+ },
+ {
+ "id": "es/getting-started/client-side/methods",
+ "language": "es",
+ "translationKey": "getting-started/client-side/methods",
+ "path": "/docs/0.3/es/getting-started/client-side/methods/",
+ "title": "Métodos de salida en el navegador",
+ "description": "Descarga, abre, imprime u obtén bytes y objetos Blob de PDF con los métodos de navegador de pdfmake 0.3 basados en Promise.",
+ "version": "0.3",
+ "sourceDigest": "9223df7c21e72e445796980b101e0e55c3724007a9f7b3f7e0888260b13476f1",
+ "source": "getting-started/client-side/methods.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/getting-started/client-side/methods/",
+ "uri": "pdfmake://docs/0.3/es/getting-started/client-side/methods",
+ "markdown": "# Métodos de salida en el navegador\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/getting-started/client-side/methods/\n\n## Crear un documento\n\nDespués de [cargar el motor y las fuentes](/docs/0.3/es/getting-started/client-side/):\n\n**JavaScript**\n\n```js\nconst output = pdfMake.createPdf(docDefinition, options);\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfMake.createPdf(docDefinition, options);\n```\n\nEl segundo argumento opcional contiene las [opciones de renderizado](/docs/0.3/es/options/). `createPdf` devuelve inmediatamente un contenedor de salida. Los métodos de salida devuelven Promises; gestiona sus rechazos.\n\n## Elegir un formato de salida\n\n| Método | Se resuelve como | Comportamiento |\n| --- | --- | --- |\n| `download(filename?)` | `undefined` | Inicia una descarga; el nombre predeterminado es `file.pdf` |\n| `open(window?)` | `undefined` | Navega a un PDF generado en una ventana nueva o proporcionada |\n| `print(window?)` | `undefined` | Abre un PDF con una acción de impresión; el comportamiento depende del visor |\n| `getBlob()` | `Blob` | Datos binarios con el tipo MIME `application/pdf` |\n| `getBuffer()` | Bytes compatibles con Buffer | Bytes PDF sin procesar |\n| `getBase64()` | `string` | PDF codificado en Base64 |\n| `getDataUrl()` | `string` | URL de datos Base64 |\n| `getStream()` | Flujo de PDFKit | Salida de bajo nivel; normalmente conviene usar Blob o bytes |\n\n**JavaScript**\n\n```js\ntry {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}\n```\n\nQue la Promise de descarga se resuelva no confirma que el usuario haya guardado el archivo. La impresión depende del navegador y del visor PDF; no cuentes con una impresión silenciosa.\n\n## Abrir después de un proceso asíncrono\n\nAbre la ventana directamente en el controlador de clic del usuario, antes de esperar los datos. De lo contrario, los bloqueadores de ventanas emergentes podrían impedirlo.\n\n**JavaScript**\n\n```js\nasync function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nasync function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}\n```\n\nLlama a `openReport` desde el controlador de clic de la aplicación y gestiona el rechazo de su Promise. Para imprimir, sustituye `.open(win)` por `.print(win)`. Pasar `window` navega por la pestaña actual. Establece el [título de los metadatos](/docs/0.3/es/document-definition-object/document-medatadata/) del documento para asignar un nombre al PDF; los nombres y títulos que muestra el visor dependen del navegador.\n\n## Gestionar URL de Blob\n\n**JavaScript**\n\n```js\nconst blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.\n```\n\n**TypeScript**\n\n```ts\nconst blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.\n```\n\nMantén la URL activa mientras el visor la use. Llama a `URL.revokeObjectURL(url)` durante la limpieza. Usa un contenedor de salida nuevo para cada renderizado. Evita mezclar el consumo manual del flujo con los métodos de búfer o Blob en la misma salida.\n\n## Política de acceso a URL\n\nDesde la versión **0.3.6**, `setUrlAccessPolicy(callback)` acepta una función de retorno síncrono booleano. No es un entorno de red completamente aislado y las redirecciones del navegador pueden producirse antes de que se compruebe la URL final. Consulta [seguridad de recursos](/docs/0.3/es/guides/resource-security/).\n"
+ },
+ {
+ "id": "fr/getting-started/client-side/methods",
+ "language": "fr",
+ "translationKey": "getting-started/client-side/methods",
+ "path": "/docs/0.3/fr/getting-started/client-side/methods/",
+ "title": "Méthodes de sortie du navigateur",
+ "description": "Téléchargez, ouvrez ou imprimez des PDF et obtenez leurs octets ou Blob avec les méthodes Promise de pdfmake 0.3 pour navigateur.",
+ "version": "0.3",
+ "sourceDigest": "9223df7c21e72e445796980b101e0e55c3724007a9f7b3f7e0888260b13476f1",
+ "source": "getting-started/client-side/methods.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/getting-started/client-side/methods/",
+ "uri": "pdfmake://docs/0.3/fr/getting-started/client-side/methods",
+ "markdown": "# Méthodes de sortie du navigateur\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/getting-started/client-side/methods/\n\n## Créer un document\n\nAprès avoir [chargé le moteur et les polices](/docs/0.3/fr/getting-started/client-side/) :\n\n**JavaScript**\n\n```js\nconst output = pdfMake.createPdf(docDefinition, options);\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfMake.createPdf(docDefinition, options);\n```\n\nLe deuxième argument facultatif contient les [options de rendu](/docs/0.3/fr/options/). `createPdf` renvoie immédiatement un objet de sortie. Les méthodes de sortie renvoient des Promises ; gérez leurs rejets.\n\n## Choisir une sortie\n\n| Méthode | Valeur résolue | Comportement |\n| --- | --- | --- |\n| `download(filename?)` | `undefined` | Lance un téléchargement ; le nom de fichier par défaut est `file.pdf` |\n| `open(window?)` | `undefined` | Navigue vers le PDF généré dans une nouvelle fenêtre ou une fenêtre fournie |\n| `print(window?)` | `undefined` | Ouvre un PDF avec une action d’impression ; le comportement varie selon le lecteur |\n| `getBlob()` | `Blob` | Données binaires avec le type MIME `application/pdf` |\n| `getBuffer()` | Octets compatibles avec Buffer | Octets PDF bruts |\n| `getBase64()` | `string` | PDF encodé en base64 |\n| `getDataUrl()` | `string` | URL de données base64 |\n| `getStream()` | Flux PDFKit | Sortie de bas niveau ; préférez généralement Blob ou les octets |\n\n**JavaScript**\n\n```js\ntry {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}\n```\n\nLa résolution de la Promise de téléchargement ne confirme pas que l’utilisateur a enregistré le fichier. L’impression dépend du navigateur et du lecteur PDF ; ne vous fiez pas à l’impression silencieuse.\n\n## Ouvrir après une opération asynchrone\n\nOuvrez la fenêtre directement dans le gestionnaire de clic de l’utilisateur, avant d’attendre les données. Sinon, le bloqueur de fenêtres surgissantes peut refuser l’ouverture.\n\n**JavaScript**\n\n```js\nasync function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nasync function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}\n```\n\nAppelez `openReport` depuis le gestionnaire de clic de votre application et gérez le rejet de sa Promise. Pour imprimer, remplacez `.open(win)` par `.print(win)`. Le passage de `window` navigue dans l’onglet actuel. Définissez le [titre des métadonnées](/docs/0.3/fr/document-definition-object/document-medatadata/) du document pour identifier le PDF ; le nom de fichier et le titre affichés par le lecteur dépendent du navigateur.\n\n## Gérer les URL Blob\n\n**JavaScript**\n\n```js\nconst blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.\n```\n\n**TypeScript**\n\n```ts\nconst blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.\n```\n\nConservez l’URL tant que le lecteur l’utilise. Appelez `URL.revokeObjectURL(url)` lors du nettoyage. Utilisez un nouvel objet de sortie pour chaque rendu. Évitez de mélanger la lecture manuelle d’un flux avec les méthodes buffer ou Blob sur la même sortie.\n\n## Politique d’accès aux URL\n\nDepuis la version **0.3.6**, `setUrlAccessPolicy(callback)` accepte une fonction synchrone qui renvoie un booléen. Elle ne constitue pas un bac à sable réseau complet, et les redirections du navigateur peuvent avoir lieu avant la vérification de l’URL finale. Consultez la [sécurité des ressources](/docs/0.3/fr/guides/resource-security/).\n"
+ },
+ {
+ "id": "getting-started/client-side/methods",
+ "language": "en",
+ "translationKey": "getting-started/client-side/methods",
+ "path": "/docs/0.3/getting-started/client-side/methods/",
+ "title": "Browser output methods",
+ "description": "Download, open, print or obtain PDF bytes and Blobs with Promise-based pdfmake 0.3 browser methods.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "getting-started/client-side/methods.md",
+ "url": "https://pdfmake.github.io/docs/0.3/getting-started/client-side/methods/",
+ "uri": "pdfmake://docs/0.3/getting-started/client-side/methods",
+ "markdown": "# Browser output methods\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/getting-started/client-side/methods/\n\n## Create a document\n\nAfter [loading the engine and fonts](/docs/0.3/getting-started/client-side/):\n\n**JavaScript**\n\n```js\nconst output = pdfMake.createPdf(docDefinition, options);\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfMake.createPdf(docDefinition, options);\n```\n\nThe optional second argument contains [rendering options](/docs/0.3/options/). `createPdf` returns an output wrapper immediately. Output helpers return Promises; handle their rejection.\n\n## Choose an output\n\n| Method | Resolves to | Behavior |\n| --- | --- | --- |\n| `download(filename?)` | `undefined` | Initiate a download; filename defaults to `file.pdf` |\n| `open(window?)` | `undefined` | Navigate a new or supplied window to the generated PDF |\n| `print(window?)` | `undefined` | Open a PDF carrying a print action; viewer behavior varies |\n| `getBlob()` | `Blob` | Binary data with MIME type `application/pdf` |\n| `getBuffer()` | Buffer-compatible bytes | Raw PDF bytes |\n| `getBase64()` | `string` | Base64-encoded PDF |\n| `getDataUrl()` | `string` | Base64 data URL |\n| `getStream()` | PDFKit stream | Low-level output; usually prefer Blob or bytes |\n\n**JavaScript**\n\n```js\ntry {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}\n```\n\nA resolved download Promise does not confirm that the user saved the file. Printing depends on the browser and PDF viewer; do not rely on silent printing.\n\n## Open after asynchronous work\n\nOpen the window directly inside a user click handler, before awaiting data. Otherwise popup blockers may reject it.\n\n**JavaScript**\n\n```js\nasync function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nasync function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}\n```\n\nCall `openReport` from your application's click handler and handle its rejected Promise. For printing, replace `.open(win)` with `.print(win)`. Passing `window` navigates the current tab. Set the document's [metadata title](/docs/0.3/document-definition-object/document-medatadata/) to label the PDF; viewer filenames and titles remain browser-dependent.\n\n## Manage Blob URLs\n\n**JavaScript**\n\n```js\nconst blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.\n```\n\n**TypeScript**\n\n```ts\nconst blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.\n```\n\nKeep the URL alive while the viewer uses it. Call `URL.revokeObjectURL(url)` during cleanup. Use a fresh output wrapper for each render. Avoid mixing manual stream consumption with buffer or Blob helpers on the same output.\n\n## URL access policy\n\nSince **0.3.6**, `setUrlAccessPolicy(callback)` accepts a synchronous boolean callback. It is not a complete network sandbox, and browser redirects may happen before the final URL is checked. See [resource security](/docs/0.3/guides/resource-security/).\n"
+ },
+ {
+ "id": "pt-br/getting-started/client-side/methods",
+ "language": "pt-br",
+ "translationKey": "getting-started/client-side/methods",
+ "path": "/docs/0.3/pt-br/getting-started/client-side/methods/",
+ "title": "Métodos de saída no navegador",
+ "description": "Baixe, abra, imprima ou obtenha bytes e Blobs de PDF com os métodos assíncronos do pdfmake 0.3 no navegador.",
+ "version": "0.3",
+ "sourceDigest": "9223df7c21e72e445796980b101e0e55c3724007a9f7b3f7e0888260b13476f1",
+ "source": "getting-started/client-side/methods.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/getting-started/client-side/methods/",
+ "uri": "pdfmake://docs/0.3/pt-br/getting-started/client-side/methods",
+ "markdown": "# Métodos de saída no navegador\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/getting-started/client-side/methods/\n\n## Crie um documento\n\nDepois de [carregar o mecanismo e as fontes](/docs/0.3/pt-br/getting-started/client-side/):\n\n**JavaScript**\n\n```js\nconst output = pdfMake.createPdf(docDefinition, options);\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfMake.createPdf(docDefinition, options);\n```\n\nO segundo argumento, opcional, contém as [opções de renderização](/docs/0.3/pt-br/options/). `createPdf` retorna imediatamente um wrapper de saída. Os métodos de saída retornam Promises; trate as rejeições.\n\n## Escolha um formato de saída\n\n| Método | Valor resolvido | Comportamento |\n| --- | --- | --- |\n| `download(filename?)` | `undefined` | Inicia um download; o nome padrão é `file.pdf` |\n| `open(window?)` | `undefined` | Navega uma janela nova ou fornecida até o PDF gerado |\n| `print(window?)` | `undefined` | Abre um PDF com uma ação de impressão; o comportamento varia conforme o visualizador |\n| `getBlob()` | `Blob` | Dados binários com tipo MIME `application/pdf` |\n| `getBuffer()` | Bytes compatíveis com Buffer | Bytes brutos do PDF |\n| `getBase64()` | `string` | PDF codificado em base64 |\n| `getDataUrl()` | `string` | URL de dados em base64 |\n| `getStream()` | Stream do PDFKit | Saída de baixo nível; em geral, prefira Blob ou bytes |\n\n**JavaScript**\n\n```js\ntry {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n await pdfMake.createPdf(docDefinition).download('report.pdf');\n} catch (error) {\n console.error('PDF generation failed', error);\n}\n```\n\nO sucesso da Promise de download não confirma que o usuário salvou o arquivo. A impressão depende do navegador e do visualizador de PDF; não conte com impressão silenciosa.\n\n## Abra após trabalho assíncrono\n\nAbra a janela diretamente dentro do manipulador de clique do usuário, antes de aguardar os dados. Caso contrário, os bloqueadores de pop-ups podem rejeitá-la.\n\n**JavaScript**\n\n```js\nasync function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nasync function openReport() {\n const win = window.open('', '_blank');\n if (!win) throw new Error('Allow popups to open the PDF');\n try {\n const response = await fetch('/report-data');\n if (!response.ok) throw new Error('Could not load report data');\n const data = await response.json();\n const definition = { content: [String(data.title)] };\n await pdfMake.createPdf(definition).open(win);\n } catch (error) {\n win.close();\n throw error;\n }\n}\n```\n\nChame `openReport` no manipulador de clique da aplicação e trate a Promise rejeitada. Para imprimir, substitua `.open(win)` por `.print(win)`. Passar `window` navega a aba atual. Defina o [título nos metadados](/docs/0.3/pt-br/document-definition-object/document-medatadata/) do documento para identificá-lo; os nomes de arquivo e títulos exibidos dependem do navegador.\n\n## Gerencie URLs de Blob\n\n**JavaScript**\n\n```js\nconst blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.\n```\n\n**TypeScript**\n\n```ts\nconst blob = await pdfMake.createPdf(docDefinition).getBlob();\nconst url = URL.createObjectURL(blob);\ndocument.querySelector('#preview').src = url;\n// Revoke url when replacing the preview or removing it, after it is no longer needed.\n```\n\nMantenha a URL ativa enquanto o visualizador a estiver usando. Chame `URL.revokeObjectURL(url)` durante a limpeza. Use um novo wrapper de saída para cada renderização. Evite misturar o consumo manual de streams com os métodos de buffer ou Blob na mesma saída.\n\n## Política de acesso a URLs\n\nDesde a versão **0.3.6**, `setUrlAccessPolicy(callback)` aceita uma função síncrona que retorna um booleano. Ela não é um sandbox de rede completo, e redirecionamentos no navegador podem ocorrer antes da verificação da URL final. Consulte [segurança de recursos](/docs/0.3/pt-br/guides/resource-security/).\n"
+ },
+ {
+ "id": "de/getting-started/client-side/supported-browsers",
+ "language": "de",
+ "translationKey": "getting-started/client-side/supported-browsers",
+ "path": "/docs/0.3/de/getting-started/client-side/supported-browsers/",
+ "title": "Unterstützte Browser",
+ "description": "Prüfe die Browserkompatibilität sowie Einschränkungen der Hilfsfunktionen zum Öffnen, Drucken und Herunterladen.",
+ "version": "0.3",
+ "sourceDigest": "3ea8d830019ccfb8321db6f8c7fe9d40ba017ac0b435e042cefefa32be20db66",
+ "source": "getting-started/client-side/supported-browsers.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/getting-started/client-side/supported-browsers/",
+ "uri": "pdfmake://docs/0.3/de/getting-started/client-side/supported-browsers",
+ "markdown": "# Unterstützte Browser\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/getting-started/client-side/supported-browsers/\n\n* Edge\n* Firefox\n* Chrome\n* Chrome (Android)\n* Opera\n* Safari (iOS)\n* Safari (iOS) iPhone\n\n\n> **Note:** Die Methoden **`open()`** und **`print()`** werden nur in folgenden Browsern unterstützt:\n\n* Firefox\n* Chrome\n* Opera\n\n\n\n> **Note:** Browser-Erweiterungen können die Funktion von pdfmake beeinflussen (insbesondere `open()` und `print()`). Wenn pdfmake nicht funktioniert, deaktiviere testweise die Erweiterungen.\n\n\n\n> **Note:** AdBlock\n\n\nDie vollständige Beschreibung findest du im [Issue](https://github.com/bpampuch/pdfmake/issues/800).\n"
+ },
+ {
+ "id": "es/getting-started/client-side/supported-browsers",
+ "language": "es",
+ "translationKey": "getting-started/client-side/supported-browsers",
+ "path": "/docs/0.3/es/getting-started/client-side/supported-browsers/",
+ "title": "Navegadores compatibles",
+ "description": "Consulta la compatibilidad de los navegadores y las limitaciones de las funciones para abrir, imprimir y descargar.",
+ "version": "0.3",
+ "sourceDigest": "3ea8d830019ccfb8321db6f8c7fe9d40ba017ac0b435e042cefefa32be20db66",
+ "source": "getting-started/client-side/supported-browsers.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/getting-started/client-side/supported-browsers/",
+ "uri": "pdfmake://docs/0.3/es/getting-started/client-side/supported-browsers",
+ "markdown": "# Navegadores compatibles\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/getting-started/client-side/supported-browsers/\n\n* Edge\n* Firefox\n* Chrome\n* Chrome (Android)\n* Opera\n* Safari (iOS)\n* Safari (iOS) iPhone\n\n\n> **Note:** Los métodos **`open()`** e **`print()`** solo son compatibles con:\n\n* Firefox\n* Chrome\n* Opera\n\n\n\n> **Note:** Los complementos instalados en los navegadores pueden afectar al funcionamiento de pdfmake (especialmente a `open()` y `print()`). Si pdfmake no funciona, prueba a desactivar los complementos.\n\n\n\n> **Note:** AdBlock\n\n\nLa descripción completa está disponible en este [incidente](https://github.com/bpampuch/pdfmake/issues/800).\n"
+ },
+ {
+ "id": "fr/getting-started/client-side/supported-browsers",
+ "language": "fr",
+ "translationKey": "getting-started/client-side/supported-browsers",
+ "path": "/docs/0.3/fr/getting-started/client-side/supported-browsers/",
+ "title": "Navigateurs pris en charge",
+ "description": "Vérifiez la compatibilité des navigateurs et les limites des fonctions d’ouverture, d’impression et de téléchargement.",
+ "version": "0.3",
+ "sourceDigest": "3ea8d830019ccfb8321db6f8c7fe9d40ba017ac0b435e042cefefa32be20db66",
+ "source": "getting-started/client-side/supported-browsers.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/getting-started/client-side/supported-browsers/",
+ "uri": "pdfmake://docs/0.3/fr/getting-started/client-side/supported-browsers",
+ "markdown": "# Navigateurs pris en charge\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/getting-started/client-side/supported-browsers/\n\n* Edge\n* Firefox\n* Chrome\n* Chrome (Android)\n* Opera\n* Safari (iOS)\n* Safari (iOS) iPhone\n\n\n> **Note:** Les méthodes **`open()`** et **`print()`** ne sont prises en charge que dans :\n\n* Firefox\n* Chrome\n* Opera\n\n\n\n> **Note:** Les extensions de navigateur peuvent affecter le fonctionnement de pdfmake (en particulier `open()` et `print()`). Si pdfmake ne fonctionne pas, essayez de désactiver les extensions du navigateur.\n\n\n\n> **Note:** AdBlock\n\n\nLa description complète est disponible dans cette [issue](https://github.com/bpampuch/pdfmake/issues/800).\n"
+ },
+ {
+ "id": "getting-started/client-side/supported-browsers",
+ "language": "en",
+ "translationKey": "getting-started/client-side/supported-browsers",
+ "path": "/docs/0.3/getting-started/client-side/supported-browsers/",
+ "title": "Supported browsers",
+ "description": "Check browser compatibility and limitations of open, print and download helpers.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "getting-started/client-side/supported-browsers.md",
+ "url": "https://pdfmake.github.io/docs/0.3/getting-started/client-side/supported-browsers/",
+ "uri": "pdfmake://docs/0.3/getting-started/client-side/supported-browsers",
+ "markdown": "# Supported browsers\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/getting-started/client-side/supported-browsers/\n\n* Edge\n* Firefox\n* Chrome\n* Chrome (Android)\n* Opera\n* Safari (iOS)\n* Safari (iOS) iPhone\n\n\n> **Note:** Methods **`open()`** and **`print()`** are supported only in:\n\n* Firefox\n* Chrome\n* Opera\n\n\n\n> **Note:** Add-ons used in browsers can affect the functionality of pdfmake (especially for `open()` and `print()`). If pdfmake is not working try disable add-ons in browser.\n\n\n\n> **Note:** AdBlock\n\n\nFully description is available in [issue](https://github.com/bpampuch/pdfmake/issues/800).\n"
+ },
+ {
+ "id": "pt-br/getting-started/client-side/supported-browsers",
+ "language": "pt-br",
+ "translationKey": "getting-started/client-side/supported-browsers",
+ "path": "/docs/0.3/pt-br/getting-started/client-side/supported-browsers/",
+ "title": "Navegadores compatíveis",
+ "description": "Consulte a compatibilidade dos navegadores e as limitações dos métodos para abrir, imprimir e baixar PDFs.",
+ "version": "0.3",
+ "sourceDigest": "3ea8d830019ccfb8321db6f8c7fe9d40ba017ac0b435e042cefefa32be20db66",
+ "source": "getting-started/client-side/supported-browsers.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/getting-started/client-side/supported-browsers/",
+ "uri": "pdfmake://docs/0.3/pt-br/getting-started/client-side/supported-browsers",
+ "markdown": "# Navegadores compatíveis\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/getting-started/client-side/supported-browsers/\n\n* Edge\n* Firefox\n* Chrome\n* Chrome (Android)\n* Opera\n* Safari (iOS)\n* Safari (iOS) iPhone\n\n\n> **Note:** Os métodos **`open()`** e **`print()`** são compatíveis apenas com:\n\n* Firefox\n* Chrome\n* Opera\n\n\n\n> **Note:** As extensões instaladas no navegador podem afetar o funcionamento do pdfmake (especialmente `open()` e `print()`). Se o pdfmake não funcionar, tente desativar as extensões do navegador.\n\n\n\n> **Note:** AdBlock\n\n\nA descrição completa está disponível nesta [issue](https://github.com/bpampuch/pdfmake/issues/800).\n"
+ },
+ {
+ "id": "de/getting-started/examples-from-comunity",
+ "language": "de",
+ "translationKey": "getting-started/examples-from-comunity",
+ "path": "/docs/0.3/de/getting-started/examples-from-comunity/",
+ "title": "Beispiele aus der Community",
+ "description": "Entdecke Beispiele aus der Community für pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "e2c8721f10e846c4674b764d9275542cc75f8c76e79e0ec6f97f2fae8194e6e5",
+ "source": "getting-started/examples-from-comunity/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/getting-started/examples-from-comunity/",
+ "uri": "pdfmake://docs/0.3/de/getting-started/examples-from-comunity",
+ "markdown": "# Beispiele aus der Community\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/getting-started/examples-from-comunity/\n\n- [Vue.js-Beispiel](https://github.com/bpampuch/pdfmake/issues/2498)\n- [React-Native-Beispiel](https://github.com/ieschalier/rn-pdfmake)\n"
+ },
+ {
+ "id": "es/getting-started/examples-from-comunity",
+ "language": "es",
+ "translationKey": "getting-started/examples-from-comunity",
+ "path": "/docs/0.3/es/getting-started/examples-from-comunity/",
+ "title": "Ejemplos de la comunidad",
+ "description": "Consulta ejemplos de la comunidad para pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "e2c8721f10e846c4674b764d9275542cc75f8c76e79e0ec6f97f2fae8194e6e5",
+ "source": "getting-started/examples-from-comunity/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/getting-started/examples-from-comunity/",
+ "uri": "pdfmake://docs/0.3/es/getting-started/examples-from-comunity",
+ "markdown": "# Ejemplos de la comunidad\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/getting-started/examples-from-comunity/\n\n- [Ejemplo de Vue.js](https://github.com/bpampuch/pdfmake/issues/2498)\n- [Ejemplo de React Native](https://github.com/ieschalier/rn-pdfmake)\n"
+ },
+ {
+ "id": "fr/getting-started/examples-from-comunity",
+ "language": "fr",
+ "translationKey": "getting-started/examples-from-comunity",
+ "path": "/docs/0.3/fr/getting-started/examples-from-comunity/",
+ "title": "Exemples de la communauté",
+ "description": "Configurez et explorez des exemples pdfmake 0.3 partagés par la communauté.",
+ "version": "0.3",
+ "sourceDigest": "e2c8721f10e846c4674b764d9275542cc75f8c76e79e0ec6f97f2fae8194e6e5",
+ "source": "getting-started/examples-from-comunity/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/getting-started/examples-from-comunity/",
+ "uri": "pdfmake://docs/0.3/fr/getting-started/examples-from-comunity",
+ "markdown": "# Exemples de la communauté\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/getting-started/examples-from-comunity/\n\n- [Exemple avec Vue.js](https://github.com/bpampuch/pdfmake/issues/2498)\n- [Exemple avec React Native](https://github.com/ieschalier/rn-pdfmake)\n"
+ },
+ {
+ "id": "getting-started/examples-from-comunity",
+ "language": "en",
+ "translationKey": "getting-started/examples-from-comunity",
+ "path": "/docs/0.3/getting-started/examples-from-comunity/",
+ "title": "Examples from the community",
+ "description": "Configure examples from the community in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "getting-started/examples-from-comunity/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/getting-started/examples-from-comunity/",
+ "uri": "pdfmake://docs/0.3/getting-started/examples-from-comunity",
+ "markdown": "# Examples from the community\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/getting-started/examples-from-comunity/\n\n- [vue.js example](https://github.com/bpampuch/pdfmake/issues/2498)\n- [react-native example](https://github.com/ieschalier/rn-pdfmake)\n"
+ },
+ {
+ "id": "pt-br/getting-started/examples-from-comunity",
+ "language": "pt-br",
+ "translationKey": "getting-started/examples-from-comunity",
+ "path": "/docs/0.3/pt-br/getting-started/examples-from-comunity/",
+ "title": "Exemplos da comunidade",
+ "description": "Veja exemplos da comunidade que integram o pdfmake com outras plataformas.",
+ "version": "0.3",
+ "sourceDigest": "e2c8721f10e846c4674b764d9275542cc75f8c76e79e0ec6f97f2fae8194e6e5",
+ "source": "getting-started/examples-from-comunity/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/getting-started/examples-from-comunity/",
+ "uri": "pdfmake://docs/0.3/pt-br/getting-started/examples-from-comunity",
+ "markdown": "# Exemplos da comunidade\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/getting-started/examples-from-comunity/\n\n- [Exemplo com Vue.js](https://github.com/bpampuch/pdfmake/issues/2498)\n- [Exemplo com React Native](https://github.com/ieschalier/rn-pdfmake)\n"
+ },
+ {
+ "id": "de/getting-started/server-side",
+ "language": "de",
+ "translationKey": "getting-started/server-side",
+ "path": "/docs/0.3/de/getting-started/server-side/",
+ "title": "Node.js-Schnellstart",
+ "description": "Erzeuge mit Node.js, pdfmake 0.3, Standardschriften und Promise-basierter Ausgabe eine vollständige PDF-Datei.",
+ "version": "0.3",
+ "sourceDigest": "8cca67c7aaa82929be7388e0f7844c6250300ff14631cb12f266686f1cae3789",
+ "source": "getting-started/server-side/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/getting-started/server-side/",
+ "uri": "pdfmake://docs/0.3/de/getting-started/server-side",
+ "markdown": "# Node.js-Schnellstart\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/getting-started/server-side/\n\n## Installieren\n\nVerwende **Node.js 20 oder neuer**. Erstelle eine Anwendung und installiere pdfmake:\n\n```sh\nnpm init -y\nnpm install pdfmake@0.3.12\n```\n\nDie genaue Version macht das Beispiel reproduzierbar. Prüfe die Versionshinweise und teste, bevor du ein neueres Patch-Release auswählst.\n\n## Erste PDF-Datei schreiben\n\nSpeichere das vollständige Beispiel als `first-pdf.cjs` und führe `node first-pdf.cjs` aus.\n\n**JavaScript**\n\n```js\n// docs-test: node-quickstart\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: node-quickstart\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n`write()` wird erfüllt, wenn die Ausgabedatei geschlossen ist. Behandle abgelehnte Promises, damit eine fehlgeschlagene Generierung nicht unbemerkt zu einer erfolgreichen API-Antwort führt.\n\nHelvetica benötigt keine lokalen Schriftdateien. Daher sperrt das Beispiel externe URLs und erlaubt über die lokale Richtlinie nur Standard-Schriftkennungen. Die aktuelle Implementierung prüft diese Kennungen, obwohl sie keine Dateipfade sind. Standardschriften haben eine begrenzte Zeichenabdeckung. Für mehrsprachige Dokumente [registriere geeignete Schriftdateien](/docs/0.3/de/fonts/) und erlaube ihre aufgelösten Pfade ausdrücklich.\n\n## PDF-Bytes über eine API zurückgeben\n\n**JavaScript**\n\n```js\nconst buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);\n```\n\n**TypeScript**\n\n```ts\nconst buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);\n```\n\nDieses Snippet setzt voraus, dass `pdfmake` wie oben konfiguriert und `response` das Response-Objekt deines Frameworks ist. Prüfe Anfragedaten, bevor du eine Definition erstellst. Erzeuge für jede Anfrage eine neue Definition; das Layout verändert sie.\n\n## ESM-Anwendungen\n\nDas Node.js-Paket exportiert ein konfiguriertes Singleton. Verwende in einer ESM-Anwendung `import pdfmake from 'pdfmake'`; erstelle keine Instanz mit `new PdfPrinter(...)` wie in älteren Beispielen. Registriere Schriften und Richtlinien einmal beim Anwendungsstart. Ändere die Singleton-Konfiguration nicht für parallele Anfragen.\n\n## Nächste Schritte\n\n[Ausgabemethoden](/docs/0.3/de/getting-started/server-side/methods/) · [Ressourcenzugriff](/docs/0.3/de/guides/resource-security/) · [Rezept: Rechnung](/docs/0.3/de/guides/invoice/)\n"
+ },
+ {
+ "id": "es/getting-started/server-side",
+ "language": "es",
+ "translationKey": "getting-started/server-side",
+ "path": "/docs/0.3/es/getting-started/server-side/",
+ "title": "Inicio rápido con Node.js",
+ "description": "Crea un archivo PDF completo en Node.js con pdfmake 0.3, fuentes estándar y salida basada en Promise.",
+ "version": "0.3",
+ "sourceDigest": "8cca67c7aaa82929be7388e0f7844c6250300ff14631cb12f266686f1cae3789",
+ "source": "getting-started/server-side/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/getting-started/server-side/",
+ "uri": "pdfmake://docs/0.3/es/getting-started/server-side",
+ "markdown": "# Inicio rápido con Node.js\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/getting-started/server-side/\n\n## Instalar\n\nUsa Node.js **20 o posterior**. Crea una aplicación e instala pdfmake:\n\n```sh\nnpm init -y\nnpm install pdfmake@0.3.12\n```\n\nLa versión exacta hace que el ejemplo sea reproducible. Revisa las notas de la versión y prueba antes de elegir un parche más reciente.\n\n## Escribir tu primer PDF\n\nGuarda este ejemplo completo como `first-pdf.cjs` y ejecútalo con `node first-pdf.cjs`.\n\n**JavaScript**\n\n```js\n// docs-test: node-quickstart\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: node-quickstart\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n`write()` se resuelve cuando el archivo de salida está cerrado. Gestiona el rechazo de las Promises para que un error de generación no produzca en silencio una respuesta de API correcta.\n\nHelvetica no necesita archivos de fuentes locales, por lo que el ejemplo deniega las URL externas y permite solo los identificadores de las fuentes estándar mediante la política local. La implementación actual comprueba estos identificadores aunque no sean rutas de archivo. Las fuentes estándar tienen cobertura de caracteres limitada. Para documentos multilingües, [registra archivos de fuentes adecuados](/docs/0.3/es/fonts/) y permite explícitamente sus rutas resueltas.\n\n## Devolver bytes PDF desde una API\n\n**JavaScript**\n\n```js\nconst buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);\n```\n\n**TypeScript**\n\n```ts\nconst buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);\n```\n\nEste fragmento supone que `pdfmake` está configurado como se indicó antes y que `response` es el objeto de respuesta de tu marco de trabajo. Valida los datos de la solicitud antes de construir una definición. Crea una definición nueva por solicitud; la maquetación la modifica.\n\n## Aplicaciones ESM\n\nEl paquete Node exporta un singleton configurado. En una aplicación ESM, usa `import pdfmake from 'pdfmake'`; no lo instancies con `new PdfPrinter(...)` como en los ejemplos antiguos. Registra las fuentes y las políticas una vez al iniciar la aplicación. Evita cambiar la configuración del singleton por cada solicitud simultánea.\n\n## Pasos siguientes\n\n[Métodos de salida](/docs/0.3/es/getting-started/server-side/methods/) · [Acceso a recursos](/docs/0.3/es/guides/resource-security/) · [Receta para una factura](/docs/0.3/es/guides/invoice/)\n"
+ },
+ {
+ "id": "fr/getting-started/server-side",
+ "language": "fr",
+ "translationKey": "getting-started/server-side",
+ "path": "/docs/0.3/fr/getting-started/server-side/",
+ "title": "Démarrage rapide avec Node.js",
+ "description": "Créez un fichier PDF complet avec pdfmake 0.3 dans Node.js, les polices standard et des sorties fondées sur des Promises.",
+ "version": "0.3",
+ "sourceDigest": "8cca67c7aaa82929be7388e0f7844c6250300ff14631cb12f266686f1cae3789",
+ "source": "getting-started/server-side/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/getting-started/server-side/",
+ "uri": "pdfmake://docs/0.3/fr/getting-started/server-side",
+ "markdown": "# Démarrage rapide avec Node.js\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/getting-started/server-side/\n\n## Installer\n\nUtilisez Node.js **20 ou ultérieur**. Créez une application et installez pdfmake :\n\n```sh\nnpm init -y\nnpm install pdfmake@0.3.12\n```\n\nLa version exacte rend cet exemple reproductible. Consultez les notes de version et effectuez des tests avant de choisir un correctif plus récent.\n\n## Écrire votre premier PDF\n\nEnregistrez cet exemple complet sous `first-pdf.cjs`, puis exécutez `node first-pdf.cjs`.\n\n**JavaScript**\n\n```js\n// docs-test: node-quickstart\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: node-quickstart\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n`write()` se résout lorsque le fichier de sortie est fermé. Gérez le rejet des Promises afin qu’un échec de génération ne produise pas silencieusement une réponse API présentée comme réussie.\n\nHelvetica ne nécessite aucun fichier de police local ; l’exemple bloque donc les URL externes et n’autorise, via la stratégie locale, que les identifiants de polices standard. L’implémentation actuelle vérifie ces identifiants même s’il ne s’agit pas de chemins de fichiers. Les polices standard couvrent un nombre limité de caractères. Pour les documents multilingues, [enregistrez des fichiers de police adaptés](/docs/0.3/fr/fonts/) et autorisez explicitement leurs chemins résolus.\n\n## Renvoyer les octets PDF depuis une API\n\n**JavaScript**\n\n```js\nconst buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);\n```\n\n**TypeScript**\n\n```ts\nconst buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);\n```\n\nCet extrait suppose que `pdfmake` est configuré comme ci-dessus et que `response` est l’objet de réponse de votre framework. Validez les données reçues avant de construire une définition. Créez une définition neuve pour chaque requête : la mise en page la modifie.\n\n## Applications ESM\n\nLe paquet Node exporte une instance configurée. Dans une application ESM, utilisez `import pdfmake from 'pdfmake'` ; ne créez pas d’instance avec `new PdfPrinter(...)` comme dans les anciens exemples. Enregistrez les polices et les stratégies une seule fois au démarrage de l’application. Évitez de modifier la configuration de l’instance partagée pendant des requêtes concurrentes.\n\n## Étapes suivantes\n\n[Méthodes de sortie](/docs/0.3/fr/getting-started/server-side/methods/) · [Accès aux ressources](/docs/0.3/fr/guides/resource-security/) · [Recette de facture](/docs/0.3/fr/guides/invoice/)\n"
+ },
+ {
+ "id": "getting-started/server-side",
+ "language": "en",
+ "translationKey": "getting-started/server-side",
+ "path": "/docs/0.3/getting-started/server-side/",
+ "title": "Node.js quickstart",
+ "description": "Create a complete PDF file in Node.js using pdfmake 0.3, standard fonts and Promise-based output.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "getting-started/server-side/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/getting-started/server-side/",
+ "uri": "pdfmake://docs/0.3/getting-started/server-side",
+ "markdown": "# Node.js quickstart\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/getting-started/server-side/\n\n## Install\n\nUse Node.js **20 or later**. Create an application and install pdfmake:\n\n```sh\nnpm init -y\nnpm install pdfmake@0.3.12\n```\n\nThe exact version makes this example reproducible. Check release notes and test before choosing a newer patch.\n\n## Write your first PDF\n\nSave this complete example as `first-pdf.cjs`, then run `node first-pdf.cjs`.\n\n**JavaScript**\n\n```js\n// docs-test: node-quickstart\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: node-quickstart\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n`write()` resolves when the output file has closed. Handle rejected Promises so failed generation cannot silently produce a successful API response.\n\nHelvetica needs no local font files, so the example denies external URLs and allows only the standard font identifiers through the local policy. The current implementation checks these identifiers even though they are not file paths. Standard fonts have limited character coverage. For multilingual documents, [register suitable font files](/docs/0.3/fonts/) and explicitly allow their resolved paths.\n\n## Return PDF bytes from an API\n\n**JavaScript**\n\n```js\nconst buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);\n```\n\n**TypeScript**\n\n```ts\nconst buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);\n```\n\nThis snippet assumes `pdfmake` is configured as above and `response` is your framework's response object. Validate request data before building a definition. Construct a fresh definition for each request; layout mutates it.\n\n## ESM applications\n\nThe Node package exports a configured singleton. In an ESM application use `import pdfmake from 'pdfmake'`; do not instantiate it with `new PdfPrinter(...)` as in older examples. Register fonts and policies once during application startup. Avoid changing singleton configuration per concurrent request.\n\n## Next steps\n\n[Output methods](/docs/0.3/getting-started/server-side/methods/) · [Resource access](/docs/0.3/guides/resource-security/) · [Invoice recipe](/docs/0.3/guides/invoice/)\n"
+ },
+ {
+ "id": "pt-br/getting-started/server-side",
+ "language": "pt-br",
+ "translationKey": "getting-started/server-side",
+ "path": "/docs/0.3/pt-br/getting-started/server-side/",
+ "title": "Início rápido no Node.js",
+ "description": "Crie um arquivo PDF completo no Node.js com pdfmake 0.3, fontes padrão e saída baseada em Promises.",
+ "version": "0.3",
+ "sourceDigest": "8cca67c7aaa82929be7388e0f7844c6250300ff14631cb12f266686f1cae3789",
+ "source": "getting-started/server-side/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/getting-started/server-side/",
+ "uri": "pdfmake://docs/0.3/pt-br/getting-started/server-side",
+ "markdown": "# Início rápido no Node.js\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/getting-started/server-side/\n\n## Instale\n\nUse Node.js **20 ou posterior**. Crie uma aplicação e instale o pdfmake:\n\n```sh\nnpm init -y\nnpm install pdfmake@0.3.12\n```\n\nA versão exata torna o exemplo reproduzível. Consulte as notas de versão e teste antes de escolher uma atualização.\n\n## Gere seu primeiro PDF\n\nSalve este exemplo completo como `first-pdf.cjs` e execute `node first-pdf.cjs`.\n\n**JavaScript**\n\n```js\n// docs-test: node-quickstart\nconst pdfmake = require('pdfmake');\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: node-quickstart\nimport pdfmake from \"pdfmake\";\n\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica' },\n content: [\n { text: 'Hello, pdfmake!', fontSize: 24, bold: true },\n 'Your first PDF, generated in Node.js.'\n ]\n };\n await pdfmake.createPdf(definition).write('document.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n`write()` resolve quando o arquivo de saída é fechado. Trate Promises rejeitadas para que uma falha na geração não produza silenciosamente uma resposta de API bem-sucedida.\n\nO Helvetica não precisa de arquivos de fonte locais, então o exemplo bloqueia URLs externas e permite, pela política local, apenas os identificadores das fontes padrão. A implementação atual verifica esses identificadores mesmo que eles não sejam caminhos de arquivo. As fontes padrão têm cobertura limitada de caracteres. Para documentos multilíngues, [registre arquivos de fonte adequados](/docs/0.3/pt-br/fonts/) e permita explicitamente os caminhos resolvidos.\n\n## Retorne bytes de PDF por uma API\n\n**JavaScript**\n\n```js\nconst buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);\n```\n\n**TypeScript**\n\n```ts\nconst buffer = await pdfmake.createPdf({\n defaultStyle: { font: 'Helvetica' },\n content: ['API document']\n}).getBuffer();\n\n// Adapt these lines to your HTTP framework:\nresponse.setHeader('Content-Type', 'application/pdf');\nresponse.setHeader('Content-Disposition', 'attachment; filename=\"document.pdf\"');\nresponse.end(buffer);\n```\n\nEste trecho pressupõe que `pdfmake` foi configurado como acima e que `response` é o objeto de resposta do seu framework. Valide os dados da requisição antes de criar a definição. Crie uma definição nova para cada requisição; o layout a altera.\n\n## Aplicações ESM\n\nO pacote Node.js exporta um singleton configurado. Em uma aplicação ESM, use `import pdfmake from 'pdfmake'`; não o instancie com `new PdfPrinter(...)` como nos exemplos antigos. Registre fontes e políticas uma vez na inicialização da aplicação. Evite mudar a configuração do singleton por requisição concorrente.\n\n## Próximas etapas\n\n[Métodos de saída](/docs/0.3/pt-br/getting-started/server-side/methods/) · [Acesso a recursos](/docs/0.3/pt-br/guides/resource-security/) · [Receita para faturas](/docs/0.3/pt-br/guides/invoice/)\n"
+ },
+ {
+ "id": "de/getting-started/server-side/examples",
+ "language": "de",
+ "translationKey": "getting-started/server-side/examples",
+ "path": "/docs/0.3/de/getting-started/server-side/examples/",
+ "title": "Beispiele",
+ "description": "Sieh dir Beispiele für die Verwendung von pdfmake 0.3 an.",
+ "version": "0.3",
+ "sourceDigest": "948d95fa838012c81b3343e5bcfafa089a1340bd04b510cdff7f3b4e5a44a8bb",
+ "source": "getting-started/server-side/examples.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/getting-started/server-side/examples/",
+ "uri": "pdfmake://docs/0.3/de/getting-started/server-side/examples",
+ "markdown": "# Beispiele\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/getting-started/server-side/examples/\n\nSiehe die [Beispiele](https://github.com/bpampuch/pdfmake/tree/master/examples) und das [Skript des Dev-Playground-Servers](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js).\n"
+ },
+ {
+ "id": "es/getting-started/server-side/examples",
+ "language": "es",
+ "translationKey": "getting-started/server-side/examples",
+ "path": "/docs/0.3/es/getting-started/server-side/examples/",
+ "title": "Ejemplos",
+ "description": "Configura ejemplos en pdfmake 0.3 con ejemplos, opciones y notas de uso.",
+ "version": "0.3",
+ "sourceDigest": "948d95fa838012c81b3343e5bcfafa089a1340bd04b510cdff7f3b4e5a44a8bb",
+ "source": "getting-started/server-side/examples.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/getting-started/server-side/examples/",
+ "uri": "pdfmake://docs/0.3/es/getting-started/server-side/examples",
+ "markdown": "# Ejemplos\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/getting-started/server-side/examples/\n\nConsulta los [ejemplos](https://github.com/bpampuch/pdfmake/tree/master/examples) y el [script del servidor del entorno de desarrollo](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js).\n"
+ },
+ {
+ "id": "fr/getting-started/server-side/examples",
+ "language": "fr",
+ "translationKey": "getting-started/server-side/examples",
+ "path": "/docs/0.3/fr/getting-started/server-side/examples/",
+ "title": "Exemples",
+ "description": "Découvrez les exemples et le serveur de développement du playground pour pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "948d95fa838012c81b3343e5bcfafa089a1340bd04b510cdff7f3b4e5a44a8bb",
+ "source": "getting-started/server-side/examples.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/getting-started/server-side/examples/",
+ "uri": "pdfmake://docs/0.3/fr/getting-started/server-side/examples",
+ "markdown": "# Exemples\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/getting-started/server-side/examples/\n\nConsultez les [exemples](https://github.com/bpampuch/pdfmake/tree/master/examples) et le [script du serveur dev-playground](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js).\n"
+ },
+ {
+ "id": "getting-started/server-side/examples",
+ "language": "en",
+ "translationKey": "getting-started/server-side/examples",
+ "path": "/docs/0.3/getting-started/server-side/examples/",
+ "title": "Examples",
+ "description": "Configure examples in pdfmake 0.3 with examples, options and usage notes.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "getting-started/server-side/examples.md",
+ "url": "https://pdfmake.github.io/docs/0.3/getting-started/server-side/examples/",
+ "uri": "pdfmake://docs/0.3/getting-started/server-side/examples",
+ "markdown": "# Examples\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/getting-started/server-side/examples/\n\nsee [examples](https://github.com/bpampuch/pdfmake/tree/master/examples) and [dev-playground server script](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js)\n"
+ },
+ {
+ "id": "pt-br/getting-started/server-side/examples",
+ "language": "pt-br",
+ "translationKey": "getting-started/server-side/examples",
+ "path": "/docs/0.3/pt-br/getting-started/server-side/examples/",
+ "title": "Exemplos",
+ "description": "Explore exemplos de uso do pdfmake 0.3 no servidor.",
+ "version": "0.3",
+ "sourceDigest": "948d95fa838012c81b3343e5bcfafa089a1340bd04b510cdff7f3b4e5a44a8bb",
+ "source": "getting-started/server-side/examples.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/getting-started/server-side/examples/",
+ "uri": "pdfmake://docs/0.3/pt-br/getting-started/server-side/examples",
+ "markdown": "# Exemplos\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/getting-started/server-side/examples/\n\nConsulte os [exemplos](https://github.com/bpampuch/pdfmake/tree/master/examples) e o [script do servidor do playground de desenvolvimento](https://github.com/bpampuch/pdfmake/blob/master/dev-playground/server.js).\n"
+ },
+ {
+ "id": "de/getting-started/server-side/methods",
+ "language": "de",
+ "translationKey": "getting-started/server-side/methods",
+ "path": "/docs/0.3/de/getting-started/server-side/methods/",
+ "title": "Ausgabemethoden in Node.js",
+ "description": "Referenz für createPdf, Buffer, Base64, Datei- und Streamausgabe sowie Ressourcenrichtlinien in pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f0daec88513f195e653aeface6a0c5a92da517ba092a13919c74940aa3169a09",
+ "source": "getting-started/server-side/methods.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/getting-started/server-side/methods/",
+ "uri": "pdfmake://docs/0.3/de/getting-started/server-side/methods",
+ "markdown": "# Ausgabemethoden in Node.js\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/getting-started/server-side/methods/\n\n## Dokument erstellen\n\n**JavaScript**\n\n```js\nconst output = pdfmake.createPdf(docDefinition, options);\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfmake.createPdf(docDefinition, options);\n```\n\n`docDefinition` ist eine [Dokumentdefinition](/docs/0.3/de/document-definition-object/). `options` ist ein optionales [Optionsobjekt](/docs/0.3/de/options/). `createPdf` gibt sofort einen Ausgabe-Wrapper zurück; Fehler bei der Generierung lehnen das Promise der Ausgabemethode ab. Ungültige Argumenttypen können synchron einen Fehler auslösen.\n\n## Ausgabemethoden\n\n| Methode | Ergebnis | Verwendung |\n| --- | --- | --- |\n| `write(filename)` | `undefined` | Datei schreiben und auf das Schließen warten |\n| `getBuffer()` | `Buffer` | PDF-Bytes für eine API zurückgeben |\n| `getBase64()` | `string` | Bytes als Base64 kodieren |\n| `getDataUrl()` | `string` | Base64 das Präfix `data:application/pdf;base64,` voranstellen |\n| `getStream()` | PDFKit-Dokumentstream | Stream direkt verwalten |\n\n**JavaScript**\n\n```js\ntry {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}\n```\n\n`getBuffer()` speichert sein Promise zwischen; `getBase64()` und `getDataUrl()` verwenden dieselben Bytes wieder. Erzeuge für einen unabhängigen Renderdurchlauf einen neuen Ausgabe-Wrapper. Kombiniere die manuelle Streamverarbeitung nicht mit Buffer- oder Dateihilfsmethoden auf demselben Wrapper.\n\n## Stream verarbeiten\n\n**JavaScript**\n\n```js\nconst stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();\n```\n\n**TypeScript**\n\n```ts\nconst stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();\n```\n\n`destination` muss ein von deiner Anwendung verwalteter beschreibbarer Stream sein. Registriere Ereignis-Listener, bevor du `end()` aufrufst. Für eine einfache Datei ist `write()` vorzuziehen. Streaming macht das Dokumentlayout nicht inkrementell: pdfmake legt das Dokumentlayout fertig, bevor der Stream zurückgegeben wird.\n\n## URL-Zugriffsrichtlinie\n\nVerfügbar seit **0.3.6**. Konfiguriere sie vor dem Erstellen von Dokumenten:\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});\n```\n\nDer Callback muss synchron den booleschen Wert `true` zurückgeben, damit eine URL erlaubt wird. Eine `async`-Funktion gibt ein Promise zurück und wird in der aktuellen Implementierung abgelehnt. Eine Zulassungsliste ist nur eine Schutzmaßnahme gegen SSRF; setze Netzwerkregeln ein oder verwende geprüfte Bytes, wenn du nicht vertrauenswürdige Eingaben verarbeitest. Siehe [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/).\n\n## Zugriff auf lokale Dateien\n\nVerfügbar seit **0.3.8**. Wenn alle Ressourcen eingebettet sind, kannst du lokale Dateien sperren:\n\n**JavaScript**\n\n```js\npdfmake.setLocalAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\npdfmake.setLocalAccessPolicy(() => false);\n```\n\nErlaube für lokale Schriften oder Bilder exakt aufgelöste Pfade statt eines Zeichenfolgenpräfixes. Siehe die [vollständige Einrichtung lokaler Schriften](/docs/0.3/de/fonts/). `undefined` löscht eine konfigurierte Richtlinie; eine nicht gesetzte Richtlinie sperrt nicht automatisch alle Zugriffe.\n"
+ },
+ {
+ "id": "es/getting-started/server-side/methods",
+ "language": "es",
+ "translationKey": "getting-started/server-side/methods",
+ "path": "/docs/0.3/es/getting-started/server-side/methods/",
+ "title": "Métodos de salida en Node.js",
+ "description": "Referencia de createPdf, Buffer, base64, salida a archivos, flujos y políticas de recursos en pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f0daec88513f195e653aeface6a0c5a92da517ba092a13919c74940aa3169a09",
+ "source": "getting-started/server-side/methods.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/getting-started/server-side/methods/",
+ "uri": "pdfmake://docs/0.3/es/getting-started/server-side/methods",
+ "markdown": "# Métodos de salida en Node.js\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/getting-started/server-side/methods/\n\n## Crear un documento\n\n**JavaScript**\n\n```js\nconst output = pdfmake.createPdf(docDefinition, options);\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfmake.createPdf(docDefinition, options);\n```\n\n`docDefinition` es una [definición de documento](/docs/0.3/es/document-definition-object/). `options` es un [objeto de opciones](/docs/0.3/es/options/) opcional. `createPdf` devuelve inmediatamente un contenedor de salida; los errores de generación rechazan la Promise del método de salida. Los tipos de argumentos no válidos pueden producir una excepción síncrona.\n\n## Métodos de salida\n\n| Método | Se resuelve como | Uso |\n| --- | --- | --- |\n| `write(filename)` | `undefined` | Escribe un archivo y espera a que se cierre |\n| `getBuffer()` | `Buffer` | Devuelve bytes PDF desde una API |\n| `getBase64()` | `string` | Codifica los bytes en Base64 |\n| `getDataUrl()` | `string` | Antepone `data:application/pdf;base64,` a Base64 |\n| `getStream()` | Flujo de documento PDFKit | Gestiona directamente un flujo |\n\n**JavaScript**\n\n```js\ntry {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}\n```\n\n`getBuffer()` almacena en caché su Promise; `getBase64()` y `getDataUrl()` reutilizan esos bytes. Crea un contenedor de salida nuevo para un renderizado independiente. No combines el consumo manual del flujo con los métodos de búfer o archivo en el mismo contenedor.\n\n## Consumir un flujo\n\n**JavaScript**\n\n```js\nconst stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();\n```\n\n**TypeScript**\n\n```ts\nconst stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();\n```\n\n`destination` debe ser un flujo escribible gestionado por la aplicación. Añade los listeners antes de llamar a `end()`. Para un archivo sencillo, es preferible usar `write()`. La salida en flujo no hace que la maquetación del documento sea incremental: pdfmake sigue maquetando el documento antes de devolver este flujo.\n\n## Política de acceso a URL\n\nDisponible desde la versión **0.3.6**. Configúrala antes de crear documentos:\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});\n```\n\nPara permitir una URL, el callback debe devolver el valor booleano `true` **de forma síncrona**. Una función `async` devuelve una Promise y la implementación actual la rechaza. Una lista de permitidos es solo una capa de protección contra SSRF; usa controles de red o proporciona bytes validados cuando proceses entradas que no sean de confianza. Consulta [seguridad de recursos](/docs/0.3/es/guides/resource-security/).\n\n## Política de acceso a archivos locales\n\nDisponible desde la versión **0.3.8**. Si todos los recursos están incrustados, deniega el acceso a archivos locales:\n\n**JavaScript**\n\n```js\npdfmake.setLocalAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\npdfmake.setLocalAccessPolicy(() => false);\n```\n\nPara fuentes o imágenes locales, permite las rutas resueltas exactas en lugar de un prefijo de cadena. Consulta la [configuración completa de fuentes locales](/docs/0.3/es/fonts/). `undefined` borra una política configurada; omitir la política no equivale a denegar todo.\n"
+ },
+ {
+ "id": "fr/getting-started/server-side/methods",
+ "language": "fr",
+ "translationKey": "getting-started/server-side/methods",
+ "path": "/docs/0.3/fr/getting-started/server-side/methods/",
+ "title": "Méthodes de sortie Node.js",
+ "description": "Référence de createPdf, Buffer, base64, sortie fichier, flux et politiques de ressources dans pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f0daec88513f195e653aeface6a0c5a92da517ba092a13919c74940aa3169a09",
+ "source": "getting-started/server-side/methods.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/getting-started/server-side/methods/",
+ "uri": "pdfmake://docs/0.3/fr/getting-started/server-side/methods",
+ "markdown": "# Méthodes de sortie Node.js\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/getting-started/server-side/methods/\n\n## Créer un document\n\n**JavaScript**\n\n```js\nconst output = pdfmake.createPdf(docDefinition, options);\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfmake.createPdf(docDefinition, options);\n```\n\n`docDefinition` est une [définition de document](/docs/0.3/fr/document-definition-object/). `options` est un [objet d’options](/docs/0.3/fr/options/) facultatif. `createPdf` renvoie immédiatement un objet de sortie ; les erreurs de génération rejettent la Promise de la méthode de sortie. Des types d’arguments invalides peuvent provoquer une exception synchrone.\n\n## Méthodes de sortie\n\n| Méthode | Valeur résolue | Utilisation |\n| --- | --- | --- |\n| `write(filename)` | `undefined` | Écrit un fichier et attend sa fermeture |\n| `getBuffer()` | `Buffer` | Renvoie les octets PDF depuis une API |\n| `getBase64()` | `string` | Encode les octets en base64 |\n| `getDataUrl()` | `string` | Préfixe le base64 avec `data:application/pdf;base64,` |\n| `getStream()` | Flux de document PDFKit | Gère directement un flux |\n\n**JavaScript**\n\n```js\ntry {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}\n```\n\n`getBuffer()` met sa Promise en cache ; `getBase64()` et `getDataUrl()` réutilisent ces octets. Créez un nouvel objet de sortie pour chaque rendu indépendant. Ne combinez pas la lecture manuelle d’un flux avec les méthodes de sortie buffer ou fichier sur le même objet.\n\n## Consommer un flux\n\n**JavaScript**\n\n```js\nconst stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();\n```\n\n**TypeScript**\n\n```ts\nconst stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();\n```\n\n`destination` doit être un flux inscriptible géré par votre application. Ajoutez les écouteurs avant d’appeler `end()`. Pour écrire simplement un fichier, préférez `write()`. La sortie en flux ne rend pas la mise en page incrémentale : pdfmake compose le document avant de renvoyer ce flux.\n\n## Politique d’accès aux URL\n\nDisponible depuis la version **0.3.6**. Configurez cette politique avant de créer les documents :\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});\n```\n\nLa fonction de rappel doit renvoyer **synchroniquement** la valeur booléenne `true` pour autoriser une URL. Une fonction `async` renvoie une Promise et est rejetée par l’implémentation actuelle. Une liste d’autorisation n’est qu’une couche de protection contre les SSRF ; utilisez des contrôles réseau ou fournissez des octets validés si vous traitez des entrées non fiables. Consultez la [sécurité des ressources](/docs/0.3/fr/guides/resource-security/).\n\n## Politique d’accès aux fichiers locaux\n\nDisponible depuis la version **0.3.8**. Refusez l’accès aux fichiers locaux lorsque toutes les ressources sont intégrées :\n\n**JavaScript**\n\n```js\npdfmake.setLocalAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\npdfmake.setLocalAccessPolicy(() => false);\n```\n\nPour les polices ou images locales, autorisez des chemins résolus exacts plutôt qu’un préfixe de chaîne. Consultez la [configuration complète des polices locales](/docs/0.3/fr/fonts/). `undefined` efface une politique configurée ; l’absence de politique ne signifie pas que tout accès est refusé.\n"
+ },
+ {
+ "id": "getting-started/server-side/methods",
+ "language": "en",
+ "translationKey": "getting-started/server-side/methods",
+ "path": "/docs/0.3/getting-started/server-side/methods/",
+ "title": "Node.js output methods",
+ "description": "Reference for createPdf, Buffer, base64, file output, streams and resource policies in pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "getting-started/server-side/methods.md",
+ "url": "https://pdfmake.github.io/docs/0.3/getting-started/server-side/methods/",
+ "uri": "pdfmake://docs/0.3/getting-started/server-side/methods",
+ "markdown": "# Node.js output methods\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/getting-started/server-side/methods/\n\n## Create a document\n\n**JavaScript**\n\n```js\nconst output = pdfmake.createPdf(docDefinition, options);\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfmake.createPdf(docDefinition, options);\n```\n\n`docDefinition` is a [document definition](/docs/0.3/document-definition-object/). `options` is an optional [options object](/docs/0.3/options/). `createPdf` returns an output wrapper immediately; generation errors reject the output method's Promise. Invalid argument types can throw synchronously.\n\n## Output helpers\n\n| Method | Resolves to | Use |\n| --- | --- | --- |\n| `write(filename)` | `undefined` | Write a file and wait for it to close |\n| `getBuffer()` | `Buffer` | Return PDF bytes from an API |\n| `getBase64()` | `string` | Encode the bytes as base64 |\n| `getDataUrl()` | `string` | Prefix base64 with `data:application/pdf;base64,` |\n| `getStream()` | PDFKit document stream | Manage a stream directly |\n\n**JavaScript**\n\n```js\ntry {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}\n```\n\n`getBuffer()` caches its Promise; `getBase64()` and `getDataUrl()` reuse those bytes. Create a new output wrapper for an independent render. Do not combine manual stream consumption with buffer/file helpers on the same wrapper.\n\n## Consume a stream\n\n**JavaScript**\n\n```js\nconst stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();\n```\n\n**TypeScript**\n\n```ts\nconst stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();\n```\n\n`destination` must be a writable stream managed by your application. Attach listeners before calling `end()`. Prefer `write()` for a simple file. Streaming output does not make document layout incremental: pdfmake still lays out the document before returning this stream.\n\n## URL access policy\n\nAvailable since **0.3.6**. Configure it before creating documents:\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});\n```\n\nThe callback must return the boolean `true` **synchronously** to allow a URL. An `async` function returns a Promise and is rejected by the current implementation. An allowlist is only one layer of SSRF protection; use network controls or supply validated bytes when processing untrusted input. See [resource security](/docs/0.3/guides/resource-security/).\n\n## Local file access policy\n\nAvailable since **0.3.8**. Deny local files when all resources are embedded:\n\n**JavaScript**\n\n```js\npdfmake.setLocalAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\npdfmake.setLocalAccessPolicy(() => false);\n```\n\nFor local fonts or images, allow exact resolved paths rather than a string prefix. See the [complete local font setup](/docs/0.3/fonts/). `undefined` clears a configured policy; an omitted policy is not a deny-all policy.\n"
+ },
+ {
+ "id": "pt-br/getting-started/server-side/methods",
+ "language": "pt-br",
+ "translationKey": "getting-started/server-side/methods",
+ "path": "/docs/0.3/pt-br/getting-started/server-side/methods/",
+ "title": "Métodos de saída no Node.js",
+ "description": "Referência de createPdf, Buffer, base64, gravação de arquivos, streams e políticas de acesso a recursos no pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f0daec88513f195e653aeface6a0c5a92da517ba092a13919c74940aa3169a09",
+ "source": "getting-started/server-side/methods.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/getting-started/server-side/methods/",
+ "uri": "pdfmake://docs/0.3/pt-br/getting-started/server-side/methods",
+ "markdown": "# Métodos de saída no Node.js\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/getting-started/server-side/methods/\n\n## Crie um documento\n\n**JavaScript**\n\n```js\nconst output = pdfmake.createPdf(docDefinition, options);\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfmake.createPdf(docDefinition, options);\n```\n\n`docDefinition` é uma [definição de documento](/docs/0.3/pt-br/document-definition-object/). `options` é um [objeto de opções](/docs/0.3/pt-br/options/) opcional. `createPdf` retorna imediatamente um wrapper de saída; erros de geração rejeitam a Promise do método de saída. Tipos de argumentos inválidos podem lançar uma exceção síncrona.\n\n## Métodos de saída\n\n| Método | Valor resolvido | Uso |\n| --- | --- | --- |\n| `write(filename)` | `undefined` | Grava um arquivo e aguarda seu fechamento |\n| `getBuffer()` | `Buffer` | Retorna bytes do PDF para uma API |\n| `getBase64()` | `string` | Codifica os bytes em base64 |\n| `getDataUrl()` | `string` | Prefixa base64 com `data:application/pdf;base64,` |\n| `getStream()` | Stream de documento PDFKit | Gerencia diretamente um stream |\n\n**JavaScript**\n\n```js\ntry {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n const output = pdfmake.createPdf(docDefinition);\n const bytes = await output.getBuffer();\n // Send or store bytes here.\n} catch (error) {\n // Report generation failure to your caller.\n}\n```\n\n`getBuffer()` armazena sua Promise em cache; `getBase64()` e `getDataUrl()` reutilizam esses bytes. Crie um novo wrapper de saída para uma renderização independente. Não combine o consumo manual do stream com métodos de buffer ou gravação de arquivo no mesmo wrapper.\n\n## Consuma um stream\n\n**JavaScript**\n\n```js\nconst stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();\n```\n\n**TypeScript**\n\n```ts\nconst stream = await pdfmake.createPdf(docDefinition).getStream();\nstream.on('error', error => { /* Handle generation errors. */ });\ndestination.on('error', error => { /* Handle destination errors. */ });\nstream.pipe(destination);\nstream.end();\n```\n\n`destination` precisa ser um stream gravável gerenciado pela aplicação. Adicione os listeners antes de chamar `end()`. Para gravar um arquivo simples, prefira `write()`. A saída por stream não torna o layout incremental: o pdfmake ainda organiza o documento antes de retornar esse stream.\n\n## Política de acesso a URLs\n\nDisponível desde a versão **0.3.6**. Configure-a antes de criar documentos:\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(url => {\n const parsed = new URL(url);\n return parsed.protocol === 'https:' && parsed.hostname === 'assets.example.com';\n});\n```\n\nA função de callback deve retornar o booleano `true` **sincronamente** para permitir uma URL. Uma função `async` retorna uma Promise e é rejeitada pela implementação atual. Uma lista de permissões é apenas uma camada de proteção contra SSRF; use controles de rede ou forneça bytes validados ao processar entradas não confiáveis. Consulte [segurança de recursos](/docs/0.3/pt-br/guides/resource-security/).\n\n## Política de acesso a arquivos locais\n\nDisponível desde a versão **0.3.8**. Se todos os recursos estiverem incorporados, bloqueie arquivos locais:\n\n**JavaScript**\n\n```js\npdfmake.setLocalAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\npdfmake.setLocalAccessPolicy(() => false);\n```\n\nPara fontes ou imagens locais, permita os caminhos resolvidos exatos em vez de um prefixo de texto. Consulte a [configuração completa de fontes locais](/docs/0.3/pt-br/fonts/). `undefined` remove uma política configurada; uma política omitida não bloqueia tudo.\n"
+ },
+ {
+ "id": "de/getting-started/server-side/supported-nodejs-versions",
+ "language": "de",
+ "translationKey": "getting-started/server-side/supported-nodejs-versions",
+ "path": "/docs/0.3/de/getting-started/server-side/supported-nodejs-versions/",
+ "title": "Unterstützte Node.js-Versionen",
+ "description": "Prüfe die Laufzeitanforderung des Pakets und die CI-Laufzeitmatrix für pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "a3773119140b35aeeb52b0f988b7fbc41e35370ef21c63bcb1f6d8de8683380d",
+ "source": "getting-started/server-side/supported-nodejs-versions.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/getting-started/server-side/supported-nodejs-versions/",
+ "uri": "pdfmake://docs/0.3/de/getting-started/server-side/supported-nodejs-versions",
+ "markdown": "# Unterstützte Node.js-Versionen\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/getting-started/server-side/supported-nodejs-versions/\n\n## Laufzeitanforderung\n\nDas Paket 0.3.12 gibt in `package.json` **Node.js >=20** als Mindestversion an. Die vorgeschlagene CI-Matrix umfasst Node.js 20, 22 und 24 unter Linux, Windows und macOS. Diese Kompatibilitätstests sind unabhängig vom Sicherheits-Support der Node.js-Versionen.\n\nVerwende in der Produktion eine Node.js-Version, die noch gewartet wird. Sieh im [offiziellen Veröffentlichungsplan von Node.js](https://github.com/nodejs/Release#release-schedule) nach, bevor du eine Laufzeit auswählst. Teste deine Schriften, Ressourcen und Dokumentlast mit genau der Version, die du bereitstellst.\n"
+ },
+ {
+ "id": "es/getting-started/server-side/supported-nodejs-versions",
+ "language": "es",
+ "translationKey": "getting-started/server-side/supported-nodejs-versions",
+ "path": "/docs/0.3/es/getting-started/server-side/supported-nodejs-versions/",
+ "title": "Versiones de Node.js compatibles",
+ "description": "Consulta el requisito de versión del paquete y la matriz de entornos de integración continua para pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "a3773119140b35aeeb52b0f988b7fbc41e35370ef21c63bcb1f6d8de8683380d",
+ "source": "getting-started/server-side/supported-nodejs-versions.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/getting-started/server-side/supported-nodejs-versions/",
+ "uri": "pdfmake://docs/0.3/es/getting-started/server-side/supported-nodejs-versions",
+ "markdown": "# Versiones de Node.js compatibles\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/getting-started/server-side/supported-nodejs-versions/\n\n## Requisito de versión\n\nEl paquete 0.3.12 declara **Node.js >=20** en `package.json`. La matriz de CI propuesta incluye Node.js 20, 22 y 24 en Linux, Windows y macOS. La cobertura de compatibilidad es independiente del soporte de seguridad de Node.js upstream.\n\nPara producción, usa una versión de Node.js que siga en mantenimiento. Consulta el [calendario oficial de versiones de Node.js](https://github.com/nodejs/Release#release-schedule) antes de elegir el entorno de ejecución. Prueba tus fuentes, recursos y carga de documentos en la versión exacta que vas a desplegar.\n"
+ },
+ {
+ "id": "fr/getting-started/server-side/supported-nodejs-versions",
+ "language": "fr",
+ "translationKey": "getting-started/server-side/supported-nodejs-versions",
+ "path": "/docs/0.3/fr/getting-started/server-side/supported-nodejs-versions/",
+ "title": "Versions de Node.js prises en charge",
+ "description": "Vérifiez la version minimale requise par le paquet et la matrice d’exécution d’intégration continue de pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "a3773119140b35aeeb52b0f988b7fbc41e35370ef21c63bcb1f6d8de8683380d",
+ "source": "getting-started/server-side/supported-nodejs-versions.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/getting-started/server-side/supported-nodejs-versions/",
+ "uri": "pdfmake://docs/0.3/fr/getting-started/server-side/supported-nodejs-versions",
+ "markdown": "# Versions de Node.js prises en charge\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/getting-started/server-side/supported-nodejs-versions/\n\n## Version minimale requise\n\nLe paquet 0.3.12 déclare **Node.js >=20** dans `package.json`. La matrice CI proposée couvre Node.js 20, 22 et 24 sous Linux, Windows et macOS. La couverture de compatibilité est distincte de la prise en charge de sécurité de Node.js en amont.\n\nEn production, utilisez une version de Node.js encore maintenue. Consultez le [calendrier officiel des versions de Node.js](https://github.com/nodejs/Release#release-schedule) avant de choisir votre environnement. Testez vos polices, vos ressources et votre charge de génération sur la version exacte que vous déployez.\n"
+ },
+ {
+ "id": "getting-started/server-side/supported-nodejs-versions",
+ "language": "en",
+ "translationKey": "getting-started/server-side/supported-nodejs-versions",
+ "path": "/docs/0.3/getting-started/server-side/supported-nodejs-versions/",
+ "title": "Supported Node.js versions",
+ "description": "Check the package engine requirement and continuous-integration runtime matrix for pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "getting-started/server-side/supported-nodejs-versions.md",
+ "url": "https://pdfmake.github.io/docs/0.3/getting-started/server-side/supported-nodejs-versions/",
+ "uri": "pdfmake://docs/0.3/getting-started/server-side/supported-nodejs-versions",
+ "markdown": "# Supported Node.js versions\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/getting-started/server-side/supported-nodejs-versions/\n\n## Engine requirement\n\nThe 0.3.12 package declares **Node.js >=20** in `package.json`. The proposed CI matrix covers Node.js 20, 22 and 24 on Linux, Windows and macOS. Compatibility coverage is separate from upstream Node.js security support.\n\nUse a Node.js release that is still maintained for production. Consult the [official Node.js release schedule](https://github.com/nodejs/Release#release-schedule) before choosing a runtime. Test your own fonts, resources and document workload on the exact version you deploy.\n"
+ },
+ {
+ "id": "pt-br/getting-started/server-side/supported-nodejs-versions",
+ "language": "pt-br",
+ "translationKey": "getting-started/server-side/supported-nodejs-versions",
+ "path": "/docs/0.3/pt-br/getting-started/server-side/supported-nodejs-versions/",
+ "title": "Versões compatíveis do Node.js",
+ "description": "Consulte o requisito do pacote e a matriz de ambientes de execução da integração contínua para o pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "a3773119140b35aeeb52b0f988b7fbc41e35370ef21c63bcb1f6d8de8683380d",
+ "source": "getting-started/server-side/supported-nodejs-versions.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/getting-started/server-side/supported-nodejs-versions/",
+ "uri": "pdfmake://docs/0.3/pt-br/getting-started/server-side/supported-nodejs-versions",
+ "markdown": "# Versões compatíveis do Node.js\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/getting-started/server-side/supported-nodejs-versions/\n\n## Requisito do mecanismo\n\nO pacote 0.3.12 declara **Node.js >=20** em `package.json`. A matriz de CI proposta abrange Node.js 20, 22 e 24 em Linux, Windows e macOS. A cobertura de compatibilidade é diferente do suporte de segurança oferecido pelo projeto Node.js.\n\nEm produção, use uma versão do Node.js que ainda receba manutenção. Consulte o [cronograma oficial de versões do Node.js](https://github.com/nodejs/Release#release-schedule) antes de escolher o ambiente de execução. Teste suas fontes, recursos e carga de documentos na versão exata que será implantada.\n"
+ },
+ {
+ "id": "de/guides",
+ "language": "de",
+ "translationKey": "guides",
+ "path": "/docs/0.3/de/guides/",
+ "title": "Anleitungen und Rezepte",
+ "description": "Praktische Rezepte für pdfmake 0.3 zu APIs, Rechnungen, Sicherheit, Leistung, Migration und KI-gestützter Entwicklung.",
+ "version": "0.3",
+ "sourceDigest": "cb74b315d38242522e55688bb21f3467ea69795d4ed5f0279aa709979a5549cf",
+ "source": "guides/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/guides/",
+ "uri": "pdfmake://docs/0.3/de/guides",
+ "markdown": "# Anleitungen und Rezepte\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/guides/\n\n## Dokumente erstellen und betreiben\n\n- [Playground-Anleitung](/docs/0.3/de/guides/playground/): Beispiele bearbeiten, Seiten prüfen und Quelldateien lokal behalten.\n- [Rezept: Rechnung](/docs/0.3/de/guides/invoice/): ein vollständiges ausführbares Dokument mit Tabelle, Summen und Seitenzahlen.\n- [API-Übersicht](/docs/0.3/de/guides/api-reference/): wo Konfiguration, Definitionen und Ausgabemethoden hingehören.\n- [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/): URLs, Dateien und nicht vertrauenswürdige Eingaben sicher verarbeiten.\n- [Leistung](/docs/0.3/de/guides/performance/): Layout, Ausgabe, Speicher und Parallelität getrennt messen.\n- [Fehlerbehebung](/docs/0.3/de/guides/troubleshooting/): Probleme mit Schriften, Imports, Tabellen und Ausgaben diagnostizieren.\n- [LLM- und MCP-Integration](/docs/0.3/de/guides/llm-and-mcp/): versionierte Dokumentation online und offline mit KI-Werkzeugen verwenden.\n- [Mitwirken](/docs/0.3/de/guides/contributing/): Quellcode finden und Regressionen testen.\n"
+ },
+ {
+ "id": "es/guides",
+ "language": "es",
+ "translationKey": "guides",
+ "path": "/docs/0.3/es/guides/",
+ "title": "Guías y recetas",
+ "description": "Recetas prácticas de pdfmake 0.3 para API, facturas, seguridad, rendimiento, migración y desarrollo asistido por IA.",
+ "version": "0.3",
+ "sourceDigest": "cb74b315d38242522e55688bb21f3467ea69795d4ed5f0279aa709979a5549cf",
+ "source": "guides/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/guides/",
+ "uri": "pdfmake://docs/0.3/es/guides",
+ "markdown": "# Guías y recetas\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/guides/\n\n## Crear y gestionar documentos\n\n- [Guía del entorno de pruebas](/docs/0.3/es/guides/playground/): edita ejemplos, inspecciona páginas y conserva los archivos de código fuente localmente.\n\n- [Receta para una factura](/docs/0.3/es/guides/invoice/): documento ejecutable completo con tabla, totales y números de página.\n- [Referencia de la API](/docs/0.3/es/guides/api-reference/): dónde corresponden la configuración, las definiciones y los métodos de salida.\n- [Seguridad de recursos](/docs/0.3/es/guides/resource-security/): gestión segura de URL, archivos y entradas que no sean de confianza.\n- [Rendimiento](/docs/0.3/es/guides/performance/): mide por separado la maquetación, la salida, la memoria y la concurrencia.\n- [Solución de problemas](/docs/0.3/es/guides/troubleshooting/): diagnostica problemas con fuentes, importaciones, tablas y salida.\n- [Integración con LLM y MCP](/docs/0.3/es/guides/llm-and-mcp/): documentación versionada para herramientas de IA, en línea y sin conexión.\n- [Contribuciones](/docs/0.3/es/guides/contributing/): navegación por el código fuente y pruebas de regresión.\n"
+ },
+ {
+ "id": "fr/guides",
+ "language": "fr",
+ "translationKey": "guides",
+ "path": "/docs/0.3/fr/guides/",
+ "title": "Guides et recettes",
+ "description": "Des recettes pratiques pour pdfmake 0.3 : API, factures, sécurité, performances, dépannage et développement assisté par l’IA.",
+ "version": "0.3",
+ "sourceDigest": "cb74b315d38242522e55688bb21f3467ea69795d4ed5f0279aa709979a5549cf",
+ "source": "guides/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/guides/",
+ "uri": "pdfmake://docs/0.3/fr/guides",
+ "markdown": "# Guides et recettes\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/guides/\n\n## Créer et gérer des documents\n\n- [Guide du playground](/docs/0.3/fr/guides/playground/) : modifiez les exemples, examinez les pages et conservez les fichiers source en local.\n- [Recette de facture](/docs/0.3/fr/guides/invoice/) : un document complet et exécutable avec tableau, totaux et numéros de page.\n- [Référence de l’API](/docs/0.3/fr/guides/api-reference/) : où placer la configuration, les définitions et les méthodes de sortie.\n- [Sécurité des ressources](/docs/0.3/fr/guides/resource-security/) : gérer les URL, les fichiers et les entrées non fiables en toute sécurité.\n- [Performances](/docs/0.3/fr/guides/performance/) : mesurer séparément la mise en page, la sortie, la mémoire et la concurrence.\n- [Dépannage](/docs/0.3/fr/guides/troubleshooting/) : diagnostiquer les problèmes de polices, d’imports, de tableaux et de génération.\n- [Intégration LLM et MCP](/docs/0.3/fr/guides/llm-and-mcp/) : documentation versionnée pour les outils d’IA, en ligne et hors ligne.\n- [Contribuer](/docs/0.3/fr/guides/contributing/) : explorer les sources et exécuter les tests de non-régression.\n"
+ },
+ {
+ "id": "guides",
+ "language": "en",
+ "translationKey": "guides",
+ "path": "/docs/0.3/guides/",
+ "title": "Guides and recipes",
+ "description": "Practical pdfmake 0.3 recipes for APIs, invoices, security, performance, migration and AI-assisted development.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "guides/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/guides/",
+ "uri": "pdfmake://docs/0.3/guides",
+ "markdown": "# Guides and recipes\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/guides/\n\n## Build and operate documents\n\n- [Playground guide](/docs/0.3/guides/playground/): edit examples, inspect pages and keep source files locally.\n\n- [Invoice recipe](/docs/0.3/guides/invoice/): a complete runnable document with a table, totals and page numbers.\n- [API reference](/docs/0.3/guides/api-reference/): where configuration, definitions and output methods belong.\n- [Resource security](/docs/0.3/guides/resource-security/): safe handling of URLs, files and untrusted inputs.\n- [Performance](/docs/0.3/guides/performance/): measure layout, output, memory and concurrency separately.\n- [Troubleshooting](/docs/0.3/guides/troubleshooting/): diagnose fonts, imports, tables and output failures.\n- [LLM and MCP integration](/docs/0.3/guides/llm-and-mcp/): versioned docs for AI tools, online and offline.\n- [Contributing](/docs/0.3/guides/contributing/): source navigation and regression testing.\n"
+ },
+ {
+ "id": "pt-br/guides",
+ "language": "pt-br",
+ "translationKey": "guides",
+ "path": "/docs/0.3/pt-br/guides/",
+ "title": "Guias práticos",
+ "description": "Resolva erros, proteja recursos, mantenha documentos localmente e integre pdfmake 0.3 à sua aplicação com exemplos claros.",
+ "version": "0.3",
+ "sourceDigest": "cb74b315d38242522e55688bb21f3467ea69795d4ed5f0279aa709979a5549cf",
+ "source": "guides/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/guides/",
+ "uri": "pdfmake://docs/0.3/pt-br/guides",
+ "markdown": "# Guias práticos\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/guides/\n\n## Para o trabalho diário\n\n- [Erros e diagnósticos](/docs/0.3/pt-br/guides/errors/): diferencie sintaxe JavaScript, estrutura do documento, recursos e saída; leia os diagnósticos do playground e da biblioteca.\n- [Segurança de recursos](/docs/0.3/pt-br/guides/resource-security/): controle arquivos locais, imagens, URLs e entradas não confiáveis.\n- [Exemplo de fatura](/docs/0.3/pt-br/guides/invoice/): gere uma fatura completa com tabela de itens, total, estilos e número de página.\n- [Desempenho e memória](/docs/0.3/pt-br/guides/performance/): meça custos de layout e saída, reduza recursos repetidos e controle a concorrência.\n- [Solução de problemas](/docs/0.3/pt-br/guides/troubleshooting/): verifique fontes, tabelas, importações, Promises e recursos.\n- [Integração com LLM e MCP](/docs/0.3/pt-br/guides/llm-and-mcp/): consulte a documentação em Markdown ou por ferramentas MCP.\n- [Visão geral da API](/docs/0.3/pt-br/guides/api-reference/): encontre métodos de configuração, opções de renderização e funções de saída.\n- [Contribuição e arquitetura do código-fonte](/docs/0.3/pt-br/guides/contributing/): valide mudanças na biblioteca ou na documentação.\n- [Playground](/docs/0.3/pt-br/guides/playground/): edite, veja a prévia automática e salve localmente.\n\nCrie uma definição nova para cada solicitação: o layout modifica o objeto. Valide os dados e nunca execute callbacks JavaScript de origem não confiável.\n"
+ },
+ {
+ "id": "de/guides/api-reference",
+ "language": "de",
+ "translationKey": "guides/api-reference",
+ "path": "/docs/0.3/de/guides/api-reference/",
+ "title": "API-Übersicht",
+ "description": "Finde Konfigurationsmethoden, Rendering-Optionen und Ausgabemethoden der Node.js- und Browser-APIs von pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f1491a6775394bd4e30fc8da29d4972607400a030e766c3e7acd329137b35166",
+ "source": "guides/api-reference.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/guides/api-reference/",
+ "uri": "pdfmake://docs/0.3/de/guides/api-reference",
+ "markdown": "# API-Übersicht\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/guides/api-reference/\n\n## Einmal konfigurieren, oft rendern\n\nBeide Einstiegspunkte stellen ein Singleton bereit. Konfiguriere Schriften, Richtlinien und Layouts beim Start der Anwendung. Ändere keine gemeinsam genutzte Konfiguration, während parallele Anfragen rendern.\n\n| Methode | Laufzeit | Verhalten |\n| --- | --- | --- |\n| `addFonts(fonts)` | Beide | Schriftfamilien zusammenführen; eine angegebene Familie ersetzt die bisherige Zuordnung |\n| `setFonts(fonts)` | Beide | Gesamte Schriftzuordnung ersetzen |\n| `clearFonts()` | Beide | Registrierte Schriften entfernen |\n| `addTableLayouts(layouts)` | Beide | Benannte Layoutfunktionen zusammenführen |\n| `setTableLayouts(layouts)` | Beide | Benannte Layoutfunktionen ersetzen |\n| `clearTableLayouts()` | Beide | Benutzerdefinierte Layouts entfernen |\n| `setProgressCallback(callback)` | Beide | Rendering-Fortschritt empfangen; kein Profiler für das Seitenlayout |\n| `setUrlAccessPolicy(callback)` | Beide, seit 0.3.6 | Ressourcen-URLs nur zulassen, wenn der Callback synchron `true` zurückgibt |\n| `setLocalAccessPolicy(callback)` | Node.js, seit 0.3.8 | Lokale Ressourcen nur zulassen, wenn der Callback synchron `true` zurückgibt |\n| `addVirtualFileSystem(vfs)` | Browser | Base64-Schrift- und Ressourcendaten zum virtuellen Dateisystem hinzufügen |\n| `addFontContainer(container)` | Browser | Einen gebündelten Schriftcontainer registrieren |\n\n## Rendern\n\n`createPdf(docDefinition, options?)` akzeptiert Objekte und gibt einen Ausgabe-Wrapper zurück. Verwende [Dokumentfelder](/docs/0.3/de/document-definition-object/) im ersten Argument und [Rendering-Optionen](/docs/0.3/de/options/) im zweiten.\n\n| Ausgabe | Node.js | Browser |\n| --- | --- | --- |\n| `getBuffer()`, `getBase64()`, `getDataUrl()`, `getStream()` | Ja | Ja |\n| `write(filename)` | Ja | Nein |\n| `download(filename?)`, `open(window?)`, `print(window?)`, `getBlob()` | Nein | Ja |\n\nAlle Ausgabemethoden geben Promises zurück. Behandle abgelehnte Promises immer. Der `createPdf`-Wrapper selbst ist kein Promise. Details zum Lebenszyklus findest du unter [Node.js-Methoden](/docs/0.3/de/getting-started/server-side/methods/) und [Browsermethoden](/docs/0.3/de/getting-started/client-side/methods/).\n"
+ },
+ {
+ "id": "es/guides/api-reference",
+ "language": "es",
+ "translationKey": "guides/api-reference",
+ "path": "/docs/0.3/es/guides/api-reference/",
+ "title": "Resumen de la API",
+ "description": "Consulta los métodos de configuración, las opciones de renderizado y los métodos de salida de las API de Node.js y navegador de pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f1491a6775394bd4e30fc8da29d4972607400a030e766c3e7acd329137b35166",
+ "source": "guides/api-reference.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/guides/api-reference/",
+ "uri": "pdfmake://docs/0.3/es/guides/api-reference",
+ "markdown": "# Resumen de la API\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/guides/api-reference/\n\n## Configurar una vez y renderizar muchas veces\n\nAmbos puntos de entrada exponen un singleton. Configura las fuentes, las políticas y las distribuciones al iniciar la aplicación. No sustituyas la configuración compartida mientras se renderizan solicitudes simultáneas.\n\n| Método | Entorno | Comportamiento |\n| --- | --- | --- |\n| `addFonts(fonts)` | Ambos | Combina familias de fuentes; una familia proporcionada sustituye la asignación anterior |\n| `setFonts(fonts)` | Ambos | Sustituye todo el mapa de fuentes |\n| `clearFonts()` | Ambos | Borra las fuentes registradas |\n| `addTableLayouts(layouts)` | Ambos | Combina funciones de distribución con nombre |\n| `setTableLayouts(layouts)` | Ambos | Sustituye las distribuciones con nombre |\n| `clearTableLayouts()` | Ambos | Borra las distribuciones personalizadas |\n| `setProgressCallback(callback)` | Ambos | Recibe el progreso del renderizado; no es un perfilador de maquetación por página |\n| `setUrlAccessPolicy(callback)` | Ambos, desde 0.3.6 | Permite URL de recursos solo si el callback devuelve `true` de forma síncrona |\n| `setLocalAccessPolicy(callback)` | Node, desde 0.3.8 | Permite recursos locales solo si el callback devuelve `true` de forma síncrona |\n| `addVirtualFileSystem(vfs)` | Navegador | Añade datos Base64 de fuentes y recursos al sistema de archivos virtual |\n| `addFontContainer(container)` | Navegador | Registra un contenedor de fuentes empaquetado |\n\n## Renderizar\n\n`createPdf(docDefinition, options?)` acepta objetos y devuelve un contenedor de salida. Usa los [campos del documento](/docs/0.3/es/document-definition-object/) en el primer argumento y las [opciones de renderizado](/docs/0.3/es/options/) en el segundo.\n\n| Salida | Node | Navegador |\n| --- | --- | --- |\n| `getBuffer()`, `getBase64()`, `getDataUrl()`, `getStream()` | Sí | Sí |\n| `write(filename)` | Sí | No |\n| `download(filename?)`, `open(window?)`, `print(window?)`, `getBlob()` | No | Sí |\n\nTodos los métodos de salida devuelven Promises. Gestiona siempre los rechazos. El contenedor que devuelve `createPdf` no es una Promise. Consulta [métodos de Node](/docs/0.3/es/getting-started/server-side/methods/) y [métodos del navegador](/docs/0.3/es/getting-started/client-side/methods/) para conocer los detalles del ciclo de vida.\n"
+ },
+ {
+ "id": "fr/guides/api-reference",
+ "language": "fr",
+ "translationKey": "guides/api-reference",
+ "path": "/docs/0.3/fr/guides/api-reference/",
+ "title": "API en bref",
+ "description": "Retrouvez les méthodes de configuration, les options de rendu et les fonctions de sortie de l’API pdfmake 0.3 pour Node.js et le navigateur.",
+ "version": "0.3",
+ "sourceDigest": "f1491a6775394bd4e30fc8da29d4972607400a030e766c3e7acd329137b35166",
+ "source": "guides/api-reference.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/guides/api-reference/",
+ "uri": "pdfmake://docs/0.3/fr/guides/api-reference",
+ "markdown": "# API en bref\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/guides/api-reference/\n\n## Configurer une fois, générer plusieurs fois\n\nLes deux points d’entrée exposent un singleton. Configurez les polices, les règles d’accès et les mises en page au démarrage de l’application. Ne remplacez pas la configuration partagée pendant le rendu de requêtes concurrentes.\n\n| Méthode | Environnement | Comportement |\n| --- | --- | --- |\n| `addFonts(fonts)` | Les deux | Fusionne les familles de polices ; une famille fournie remplace le mappage précédent de cette famille |\n| `setFonts(fonts)` | Les deux | Remplace l’ensemble de la table de polices |\n| `clearFonts()` | Les deux | Efface les polices enregistrées |\n| `addTableLayouts(layouts)` | Les deux | Fusionne les fonctions de mise en page nommées |\n| `setTableLayouts(layouts)` | Les deux | Remplace les mises en page nommées |\n| `clearTableLayouts()` | Les deux | Efface les mises en page personnalisées |\n| `setProgressCallback(callback)` | Les deux | Reçoit la progression du rendu ; ce n’est pas un profileur de mise en page |\n| `setUrlAccessPolicy(callback)` | Les deux, depuis 0.3.6 | Autorise les URL de ressources uniquement si la fonction renvoie `true` de façon synchrone |\n| `setLocalAccessPolicy(callback)` | Node, depuis 0.3.8 | Autorise les ressources locales uniquement si la fonction renvoie `true` de façon synchrone |\n| `addVirtualFileSystem(vfs)` | Navigateur | Ajoute des données de police ou de ressource encodées en base64 au système de fichiers virtuel |\n| `addFontContainer(container)` | Navigateur | Enregistre un conteneur de polices empaqueté |\n\n## Générer\n\n`createPdf(docDefinition, options?)` accepte des objets et renvoie un conteneur de sortie. Utilisez les [champs de document](/docs/0.3/fr/document-definition-object/) dans le premier argument et les [options de rendu](/docs/0.3/fr/options/) dans le second.\n\n| Sortie | Node | Navigateur |\n| --- | --- | --- |\n| `getBuffer()`, `getBase64()`, `getDataUrl()`, `getStream()` | Oui | Oui |\n| `write(filename)` | Oui | Non |\n| `download(filename?)`, `open(window?)`, `print(window?)`, `getBlob()` | Non | Oui |\n\nToutes les fonctions de sortie renvoient des Promises. Gérez toujours leur rejet. Le conteneur renvoyé par `createPdf` n’est pas une Promise. Consultez les détails du cycle de vie pour les [méthodes Node](/docs/0.3/fr/getting-started/server-side/methods/) et les [méthodes navigateur](/docs/0.3/fr/getting-started/client-side/methods/).\n"
+ },
+ {
+ "id": "guides/api-reference",
+ "language": "en",
+ "translationKey": "guides/api-reference",
+ "path": "/docs/0.3/guides/api-reference/",
+ "title": "API at a glance",
+ "description": "Find configuration methods, rendering options and output helpers for the pdfmake 0.3 Node.js and browser APIs.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "guides/api-reference.md",
+ "url": "https://pdfmake.github.io/docs/0.3/guides/api-reference/",
+ "uri": "pdfmake://docs/0.3/guides/api-reference",
+ "markdown": "# API at a glance\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/guides/api-reference/\n\n## Configure once, render many\n\nBoth entry points expose a singleton. Configure fonts, policies and layouts at application startup. Do not replace shared configuration while concurrent requests are rendering.\n\n| Method | Runtime | Behavior |\n| --- | --- | --- |\n| `addFonts(fonts)` | Both | Merge font families; a supplied family replaces the previous family mapping |\n| `setFonts(fonts)` | Both | Replace the whole font map |\n| `clearFonts()` | Both | Clear registered fonts |\n| `addTableLayouts(layouts)` | Both | Merge named layout functions |\n| `setTableLayouts(layouts)` | Both | Replace named layouts |\n| `clearTableLayouts()` | Both | Clear custom layouts |\n| `setProgressCallback(callback)` | Both | Receive rendering progress; not a page-layout profiler |\n| `setUrlAccessPolicy(callback)` | Both, since 0.3.6 | Allow resource URLs only when callback returns `true` synchronously |\n| `setLocalAccessPolicy(callback)` | Node, since 0.3.8 | Allow local resources only when callback returns `true` synchronously |\n| `addVirtualFileSystem(vfs)` | Browser | Add base64 font/resource data to the virtual filesystem |\n| `addFontContainer(container)` | Browser | Register a packaged font container |\n\n## Render\n\n`createPdf(docDefinition, options?)` accepts objects and returns an output wrapper. Use [document fields](/docs/0.3/document-definition-object/) in the first argument and [render options](/docs/0.3/options/) in the second.\n\n| Output | Node | Browser |\n| --- | --- | --- |\n| `getBuffer()`, `getBase64()`, `getDataUrl()`, `getStream()` | Yes | Yes |\n| `write(filename)` | Yes | No |\n| `download(filename?)`, `open(window?)`, `print(window?)`, `getBlob()` | No | Yes |\n\nAll output helpers return Promises. Always handle rejection. The `createPdf` wrapper itself is not a Promise. See [Node methods](/docs/0.3/getting-started/server-side/methods/) and [browser methods](/docs/0.3/getting-started/client-side/methods/) for lifecycle details.\n"
+ },
+ {
+ "id": "pt-br/guides/api-reference",
+ "language": "pt-br",
+ "translationKey": "guides/api-reference",
+ "path": "/docs/0.3/pt-br/guides/api-reference/",
+ "title": "Visão geral da API",
+ "description": "Consulte os métodos de configuração, as opções de renderização e as funções de saída das APIs Node.js e navegador do pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f1491a6775394bd4e30fc8da29d4972607400a030e766c3e7acd329137b35166",
+ "source": "guides/api-reference.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/guides/api-reference/",
+ "uri": "pdfmake://docs/0.3/pt-br/guides/api-reference",
+ "markdown": "# Visão geral da API\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/guides/api-reference/\n\n## Configure uma vez, renderize várias vezes\n\nAmbas as entradas expõem um singleton. Configure fontes, políticas e layouts na inicialização da aplicação. Não substitua a configuração compartilhada enquanto houver solicitações simultâneas em renderização.\n\n| Método | Ambiente | Comportamento |\n| --- | --- | --- |\n| `addFonts(fonts)` | Ambos | Mescla famílias de fontes; uma família fornecida substitui o mapeamento anterior dessa família |\n| `setFonts(fonts)` | Ambos | Substitui todo o mapa de fontes |\n| `clearFonts()` | Ambos | Limpa as fontes registradas |\n| `addTableLayouts(layouts)` | Ambos | Mescla funções de layout nomeadas |\n| `setTableLayouts(layouts)` | Ambos | Substitui os layouts nomeados |\n| `clearTableLayouts()` | Ambos | Limpa os layouts personalizados |\n| `setProgressCallback(callback)` | Ambos | Recebe o progresso da renderização; não é um profiler de layout de páginas |\n| `setUrlAccessPolicy(callback)` | Ambos, desde 0.3.6 | Permite URLs de recursos somente quando o callback retorna `true` de forma síncrona |\n| `setLocalAccessPolicy(callback)` | Node, desde 0.3.8 | Permite recursos locais somente quando o callback retorna `true` de forma síncrona |\n| `addVirtualFileSystem(vfs)` | Navegador | Adiciona dados de fontes/recursos em base64 ao sistema de arquivos virtual |\n| `addFontContainer(container)` | Navegador | Registra um contêiner de fontes empacotado |\n\n## Renderize\n\n`createPdf(docDefinition, options?)` aceita objetos e retorna um invólucro de saída. Use [campos do documento](/docs/0.3/pt-br/document-definition-object/) no primeiro argumento e [opções de renderização](/docs/0.3/pt-br/options/) no segundo.\n\n| Saída | Node | Navegador |\n| --- | --- | --- |\n| `getBuffer()`, `getBase64()`, `getDataUrl()`, `getStream()` | Sim | Sim |\n| `write(filename)` | Sim | Não |\n| `download(filename?)`, `open(window?)`, `print(window?)`, `getBlob()` | Não | Sim |\n\nTodas as funções de saída retornam Promises. Trate sempre as rejeições. O invólucro retornado por `createPdf` não é uma Promise. Consulte [métodos do Node](/docs/0.3/pt-br/getting-started/server-side/methods/) e [métodos do navegador](/docs/0.3/pt-br/getting-started/client-side/methods/) para detalhes do ciclo de vida.\n"
+ },
+ {
+ "id": "de/guides/contributing",
+ "language": "de",
+ "translationKey": "guides/contributing",
+ "path": "/docs/0.3/de/guides/contributing/",
+ "title": "Mitwirken und Quellcodearchitektur",
+ "description": "Lerne die Rendering-Pipeline von pdfmake kennen, ergänze gezielte Regressionstests und prüfe Beiträge zur Bibliothek oder Dokumentation lokal.",
+ "version": "0.3",
+ "sourceDigest": "ca6cb5430de16efbb426ec56f526fac9bd29bebd50ca1a5c9f971b896f29363b",
+ "source": "guides/contributing.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/guides/contributing/",
+ "uri": "pdfmake://docs/0.3/de/guides/contributing",
+ "markdown": "# Mitwirken und Quellcodearchitektur\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/guides/contributing/\n\n## Quellcodeübersicht\n\nDie Bibliothek und diese Website liegen in getrennten Repositories:\n\n- [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake): Engine, Bundles, Tests und Beispiele.\n- [pdfmake/docs](https://github.com/pdfmake/docs): diese versionierte Entwicklerwebsite und die Dokumentationswerkzeuge.\n\nDer Node.js-Einstieg der Bibliothek ist `src/index.js`; gemeinsame Konfiguration liegt in `src/base.js`. Die Browserintegration befindet sich unter `src/browser-extensions/`. `Printer` bereitet Ressourcen vor und erzeugt die PDFKit-Ausgabe. `DocPreprocessor` normalisiert Knoten, `DocMeasure` und `TextInlines` messen sie, `LayoutBuilder` und `TableProcessor` teilen sie auf Seiten auf, und `Renderer` schreibt PDFKit-Zeichenanweisungen.\n\n## Änderungen an der Engine prüfen\n\n```sh\nnpm ci\nnpm test\nnpm run build:examples\nnpm run test:package\n```\n\n`npm test` erstellt generierte Node.js- und Browserartefakte und führt dann Mocha und ESLint aus. Unit-Tests importieren kompiliertes `js/`; erstelle diese Dateien nach Änderungen in `src/` erneut. Bearbeite `js/` oder `build/` nicht direkt. Der neue Paket-Rauchtest installiert das tatsächliche Tarball in einem temporären Consumer mit Produktionsabhängigkeiten und prüft anschließend die Node.js-Ausgabe und beide Browser-Bundles. Er ersetzt Tests in echten Browsern nicht.\n\nBewahre bei Optimierungen Text, Schriftmetriken, Stilvererbung und Seiteneinteilung. Ergänze einen Regressionstest für einen Randfall und vergleiche, wenn möglich, mit dem bisherigen Verhalten. Halte Leistungsbenchmarks getrennt von Korrektheitstests.\n\n## Dokumentationsänderungen prüfen\n\nVerwende Node.js >=24.11 und Hugo **0.168.0**. Führe im Repository Folgendes aus:\n\n```sh\nnpm ci\nnpm run docs:generate\nnpm test\nnpm run build\nnpm run dev\n```\n\nÖffne die von Hugo ausgegebene Adresse. Die Generierung erstellt den Website-Suchindex, Markdown-Exporte und den MCP-Korpus aus `content/`. Tests prüfen Metadaten, Beispiele und MCP-Verhalten. Der Build prüft generierte interne Links und Fragmentziele. Übernimm die neu generierten Ausgaben zusammen mit den Quelldateien, damit Clients den Korpus ohne Hugo-Installation verwenden können.\n\n## Releases\n\nDie Bibliothek behält den GitHub-Release-Trigger des Upstream-Projekts bei. Der vorgeschlagene Workflow prüft, ob Tag und Version übereinstimmen, erstellt und testet das Paket, generiert Beispiele, prüft ein gepacktes Consumer-Projekt und veröffentlicht anschließend genau dieses Tarball mit Herkunftsnachweis. Lokale Tests veröffentlichen nichts in der Registry.\n\nDer Dokumentationsworkflow erstellt und lädt bei Pushes und Pull Requests ein Prüf-Artefakt hoch; er überschreibt nicht die versionierte Produktionswebsite. Die bestehende Bereitstellung für mehrere Versionen muss mit den Maintainer:innen abgestimmt werden, bevor die Deployment-Konfiguration geändert wird.\n"
+ },
+ {
+ "id": "es/guides/contributing",
+ "language": "es",
+ "translationKey": "guides/contributing",
+ "path": "/docs/0.3/es/guides/contributing/",
+ "title": "Contribuciones y arquitectura del código fuente",
+ "description": "Explora la canalización de renderizado de pdfmake, añade pruebas de regresión específicas y valida localmente las contribuciones a la biblioteca o a la documentación.",
+ "version": "0.3",
+ "sourceDigest": "ca6cb5430de16efbb426ec56f526fac9bd29bebd50ca1a5c9f971b896f29363b",
+ "source": "guides/contributing.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/guides/contributing/",
+ "uri": "pdfmake://docs/0.3/es/guides/contributing",
+ "markdown": "# Contribuciones y arquitectura del código fuente\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/guides/contributing/\n\n## Mapa del código fuente\n\nLa biblioteca y este sitio tienen repositorios independientes:\n\n- [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake): motor, paquetes, pruebas y ejemplos.\n- [pdfmake/docs](https://github.com/pdfmake/docs): sitio de desarrollo versionado y herramientas de documentación.\n\nLa entrada de Node de la biblioteca es `src/index.js`; la configuración común está en `src/base.js`. La integración del navegador se encuentra en `src/browser-extensions/`. `Printer` prepara recursos y crea la salida de PDFKit. `DocPreprocessor` normaliza nodos, `DocMeasure` y `TextInlines` los miden, `LayoutBuilder` y `TableProcessor` los paginan y `Renderer` escribe las instrucciones de dibujo de PDFKit.\n\n## Validar cambios del motor\n\n```sh\nnpm ci\nnpm test\nnpm run build:examples\nnpm run test:package\n```\n\n`npm test` genera los artefactos de Node y del navegador y luego ejecuta Mocha y ESLint. Las pruebas unitarias importan `js/` compilado, así que vuelve a compilar después de editar `src/`. No edites `js/` ni `build/` directamente. La nueva prueba de humo del paquete instala el tarball real en un consumidor temporal con dependencias de producción y luego prueba la salida de Node y ambos paquetes para navegador. No sustituye las pruebas en navegadores reales.\n\nAl optimizar, conserva el texto, las métricas de fuentes, la herencia de estilos y la paginación. Añade una prueba de regresión para un caso límite y, cuando sea posible, compara con el comportamiento anterior. Mantén los benchmarks de rendimiento separados de las comprobaciones de corrección.\n\n## Validar cambios de documentación\n\nUsa Node >=24.11 y Hugo **0.168.0**. Desde este repositorio:\n\n```sh\nnpm ci\nnpm run docs:generate\nnpm test\nnpm run build\nnpm run dev\n```\n\nAbre la dirección que muestra Hugo. La generación produce el índice de búsqueda del sitio, las exportaciones Markdown y el corpus MCP a partir de `content/`. Las pruebas comprueban los metadatos, los ejemplos y el comportamiento MCP. La compilación verifica los enlaces internos generados y los destinos de fragmentos. Confirma las salidas generadas junto con las modificaciones de origen para que los clientes puedan usar el corpus sin instalar Hugo.\n\n## Publicaciones\n\nLa biblioteca conserva su activador upstream de GitHub Releases. El flujo de trabajo propuesto comprueba que coincidan la etiqueta y la versión, genera, prueba, compila los ejemplos, prueba un paquete de consumo y luego publica el mismo tarball con procedencia. Las pruebas locales no publican nada en el registro.\n\nEl flujo de trabajo de documentación genera y carga un artefacto para revisión en las inserciones y solicitudes de cambios; no sobrescribe el sitio de producción versionado. La organización existente para publicar varias versiones de ese sitio debe coordinarse con los mantenedores antes de cambiar el despliegue.\n"
+ },
+ {
+ "id": "fr/guides/contributing",
+ "language": "fr",
+ "translationKey": "guides/contributing",
+ "path": "/docs/0.3/fr/guides/contributing/",
+ "title": "Contribuer et architecture du code source",
+ "description": "Parcourez le pipeline de rendu pdfmake, ajoutez des tests de régression ciblés et validez localement vos contributions à la bibliothèque ou à la documentation.",
+ "version": "0.3",
+ "sourceDigest": "ca6cb5430de16efbb426ec56f526fac9bd29bebd50ca1a5c9f971b896f29363b",
+ "source": "guides/contributing.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/guides/contributing/",
+ "uri": "pdfmake://docs/0.3/fr/guides/contributing",
+ "markdown": "# Contribuer et architecture du code source\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/guides/contributing/\n\n## Plan du code source\n\nLa bibliothèque et ce site sont hébergés dans des dépôts distincts :\n\n- [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake) : moteur, bundles, tests et exemples.\n- [pdfmake/docs](https://github.com/pdfmake/docs) : ce site de documentation versionné et ses outils.\n\nLe point d’entrée Node de la bibliothèque est `src/index.js` ; la configuration commune se trouve dans `src/base.js`. L’intégration navigateur se trouve dans `src/browser-extensions/`. `Printer` prépare les ressources et crée la sortie PDFKit. `DocPreprocessor` normalise les nœuds, `DocMeasure` et `TextInlines` les mesurent, `LayoutBuilder` et `TableProcessor` gèrent la pagination, et `Renderer` écrit les instructions de dessin PDFKit.\n\n## Valider les changements du moteur\n\n```sh\nnpm ci\nnpm test\nnpm run build:examples\nnpm run test:package\n```\n\n`npm test` construit les artefacts Node et navigateur générés, puis exécute Mocha et ESLint. Les tests unitaires importent le dossier compilé `js/` : reconstruisez-le après toute modification de `src/`. Ne modifiez pas directement `js/` ou `build/`. Le nouveau test de fumée du paquet installe l’archive réelle dans un consommateur temporaire avec les dépendances de production, puis teste la sortie Node et les deux bundles navigateur. Il ne remplace pas les tests dans de vrais navigateurs.\n\nLors d’une optimisation, préservez le texte, les métriques de police, l’héritage des styles et la pagination. Ajoutez un test de régression pour le cas limite et, si possible, une comparaison avec le comportement précédent. Gardez les benchmarks de performance séparés des contrôles de correction.\n\n## Valider les changements de documentation\n\nUtilisez Node >=24.11 et Hugo **0.168.0**. Depuis ce dépôt :\n\n```sh\nnpm ci\nnpm run docs:generate\nnpm test\nnpm run build\nnpm run dev\n```\n\nOuvrez l’adresse affichée par Hugo. La génération produit l’index de recherche du site, les exports Markdown et le corpus MCP depuis `content/`. Les tests vérifient les métadonnées, les exemples et le comportement MCP. La compilation vérifie les liens internes générés et les fragments de destination. Commitez les sorties régénérées avec les modifications sources afin que les clients puissent utiliser le corpus sans installer Hugo.\n\n## Versions\n\nLa bibliothèque conserve son déclencheur GitHub Release en amont. Le workflow proposé vérifie la correspondance entre l’étiquette et la version, construit, teste, génère les exemples, teste un consommateur du paquet puis publie cette même archive avec provenance. Les tests locaux ne publient rien dans le registre.\n\nLe workflow de documentation construit et téléverse un artefact de revue pour les pushes et les demandes de fusion ; il ne remplace pas le site de production versionné. Toute modification du mécanisme existant de publication multi-version du site doit être coordonnée avec les responsables du dépôt.\n"
+ },
+ {
+ "id": "guides/contributing",
+ "language": "en",
+ "translationKey": "guides/contributing",
+ "path": "/docs/0.3/guides/contributing/",
+ "title": "Contributing and source architecture",
+ "description": "Navigate the pdfmake rendering pipeline, add focused regression tests, and validate library or documentation contributions locally.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "guides/contributing.md",
+ "url": "https://pdfmake.github.io/docs/0.3/guides/contributing/",
+ "uri": "pdfmake://docs/0.3/guides/contributing",
+ "markdown": "# Contributing and source architecture\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/guides/contributing/\n\n## Source map\n\nThe library and this site have separate repositories:\n\n- [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake): engine, bundles, tests and examples.\n- [pdfmake/docs](https://github.com/pdfmake/docs): this versioned developer site and documentation tools.\n\nThe library's Node entry is `src/index.js`; common configuration lives in `src/base.js`. Browser integration lives in `src/browser-extensions/`. `Printer` prepares resources and creates PDFKit output. `DocPreprocessor` normalizes nodes, `DocMeasure` and `TextInlines` measure them, `LayoutBuilder` and `TableProcessor` paginate them, and `Renderer` writes PDFKit drawing instructions.\n\n## Validate engine changes\n\n```sh\nnpm ci\nnpm test\nnpm run build:examples\nnpm run test:package\n```\n\n`npm test` builds generated Node and browser artifacts, then runs Mocha and ESLint. Unit tests import compiled `js/`, so rebuild after editing `src/`. Do not edit `js/` or `build/` directly. The new package smoke test installs the actual tarball in a temporary consumer with production dependencies, then exercises Node output and both browser bundles. It does not replace testing in real browsers.\n\nPreserve text, font metrics, style inheritance and pagination when optimizing. Add an edge-case regression and, when possible, a comparison with the previous behavior. Keep a performance benchmark separate from correctness gates.\n\n## Validate documentation changes\n\nUse Node >=24.11 and Hugo **0.168.0**. From this repository:\n\n```sh\nnpm ci\nnpm run docs:generate\nnpm test\nnpm run build\nnpm run dev\n```\n\nOpen the address printed by Hugo. Generation produces the website search index, Markdown exports and MCP corpus from `content/`. Tests check metadata, examples and MCP behavior. The build verifies generated internal links and fragment targets. Commit regenerated outputs alongside source edits so clients can use the corpus without installing Hugo.\n\n## Releases\n\nThe library retains its upstream GitHub Release trigger. The proposed workflow checks tag/version agreement, builds, tests, generates examples, tests a packed consumer, then publishes that same tarball with provenance. No registry publication happens when running local tests.\n\nThe docs workflow builds and uploads a review artifact on pushes and pull requests; it does not overwrite the versioned production site. That site's existing multi-version publishing arrangement must be coordinated with maintainers before changing deployment.\n"
+ },
+ {
+ "id": "pt-br/guides/contributing",
+ "language": "pt-br",
+ "translationKey": "guides/contributing",
+ "path": "/docs/0.3/pt-br/guides/contributing/",
+ "title": "Contribuição e arquitetura do código-fonte",
+ "description": "Explore o pipeline de renderização do pdfmake, adicione testes de regressão específicos e valide contribuições à biblioteca ou à documentação localmente.",
+ "version": "0.3",
+ "sourceDigest": "ca6cb5430de16efbb426ec56f526fac9bd29bebd50ca1a5c9f971b896f29363b",
+ "source": "guides/contributing.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/guides/contributing/",
+ "uri": "pdfmake://docs/0.3/pt-br/guides/contributing",
+ "markdown": "# Contribuição e arquitetura do código-fonte\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/guides/contributing/\n\n## Mapa do código-fonte\n\nA biblioteca e este site têm repositórios separados:\n\n- [bpampuch/pdfmake](https://github.com/bpampuch/pdfmake): motor, bundles, testes e exemplos.\n- [pdfmake/docs](https://github.com/pdfmake/docs): este site de desenvolvimento versionado e as ferramentas de documentação.\n\nA entrada Node da biblioteca é `src/index.js`; a configuração comum fica em `src/base.js`. A integração com o navegador fica em `src/browser-extensions/`. `Printer` prepara os recursos e cria a saída do PDFKit. `DocPreprocessor` normaliza os nós, `DocMeasure` e `TextInlines` os medem, `LayoutBuilder` e `TableProcessor` os distribuem pelas páginas, e `Renderer` grava as instruções de desenho do PDFKit.\n\n## Valide mudanças no motor\n\n```sh\nnpm ci\nnpm test\nnpm run build:examples\nnpm run test:package\n```\n\n`npm test` compila artefatos gerados para Node e navegador e, em seguida, executa Mocha e ESLint. Os testes unitários importam o conteúdo compilado em `js/`; recompile depois de editar `src/`. O novo teste de integridade do pacote instala o tarball real em um consumidor temporário com dependências de produção e exercita a saída do Node e os dois bundles de navegador. Ele não substitui testes em navegadores reais.\n\nAo otimizar, preserve texto, métricas de fontes, herança de estilos e paginação. Acrescente uma regressão de caso extremo e, quando possível, uma comparação com o comportamento anterior. Mantenha benchmarks de desempenho separados dos critérios de correção.\n\n## Valide mudanças na documentação\n\nUse Node >=24.11 e Hugo **0.168.0**. Neste repositório, execute:\n\n```sh\nnpm ci\nnpm run docs:generate\nnpm test\nnpm run build\nnpm run dev\n```\n\nAbra o endereço exibido pelo Hugo. A geração produz o índice de busca do site, as exportações Markdown e o corpus MCP a partir de `content/`. Os testes verificam metadados, exemplos e o comportamento do MCP. O build verifica links internos gerados e destinos de fragmentos. Faça commit dos resultados regenerados junto com as edições-fonte para que os clientes possam usar o corpus sem instalar Hugo.\n\n## Releases\n\nA biblioteca mantém o gatilho de GitHub Release upstream. O workflow proposto verifica se tag e versão correspondem, compila, testa, gera exemplos, testa um consumidor do pacote e publica o mesmo tarball com proveniência. Executar testes localmente não publica nada no registro.\n\nO workflow da documentação compila e envia um artefato para revisão em pushes e pull requests; ele não sobrescreve o site de produção versionado. A organização de publicação multiversão existente para esse site deve ser coordenada com os mantenedores antes de alterar o deployment.\n"
+ },
+ {
+ "id": "de/guides/errors",
+ "language": "de",
+ "translationKey": "guides/errors",
+ "path": "/docs/0.3/de/guides/errors/",
+ "title": "Fehler und Diagnose",
+ "description": "Finde JavaScript-Syntaxfehler, ungültige Dokumentknoten, Ressourcenfehler und unterbrochene Ausgaben anhand aussagekräftiger Diagnosen.",
+ "version": "0.3",
+ "sourceDigest": "e4dda1a91f9ef3e34e7b45d6b46a0bc638ea75a858d155ea73e148259ff35728",
+ "source": "guides/errors.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/guides/errors/",
+ "uri": "pdfmake://docs/0.3/de/guides/errors",
+ "markdown": "# Fehler und Diagnose\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/guides/errors/\n\n## Zuerst die fehlerhafte Phase bestimmen\n\nEine ungültige Definition sollte einen Fehler auslösen und Inhalte nicht stillschweigend auslassen. Entscheidend ist, an welcher Stelle der Fehler auftritt und wie er an deine Anwendung weitergegeben wird.\n\n| Phase | Typischer Fehler | Wo beheben? |\n| --- | --- | --- |\n| JavaScript-Parsing | Fehlendes Komma, Anführungszeichen oder schließende Klammer | Quellcode-Editor; die Bibliothek wurde noch nicht aufgerufen |\n| Ausführung der Definition | `ReferenceError` oder fehlschlagender Callback | Anwendungscode, der die Definition erstellt |\n| Dokumentstruktur | Falscher Knotentyp, ungültige Tabellenzeilen oder Liste | Angegebener Pfad in der Definition |\n| Ressourcenladen | Fehlende Schrift, abgelehnte URL, nicht lesbares Bild | Schrift-/Ressourcenregistrierung und Zugriffsrichtlinien |\n| Layout/Rendering | Zu großer Inhalt, ungültige Abmessungen oder Callback-Fehler | Kleinste Definition, die den Fehler reproduziert |\n| Ausgabe | Geschlossener Stream, Schreibrechte oder Fehler des Ziels | Fehlerbehandlung für Buffer, Stream oder Datei |\n\n## Immer auf die Ausgabe warten\n\n**JavaScript**\n\n```js\nasync function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nasync function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}\n```\n\nGib einen Fehler an den API-Aufrufer zurück oder zeige `error.message` in der Benutzeroberfläche an. Gib keine leere PDF zurück und melde keinen Erfolg, nachdem die Ablehnung verschluckt wurde. Vermeide es, Dokumentinhalte oder geheime Zugangsdaten für Ressourcen zu protokollieren.\n\n## Dokumentpfad lesen\n\nDer lokale Verbesserungszweig der Bibliothek ergänzt `PDFMAKE_INVALID_DOCUMENT`-Diagnosen mit `phase: 'preprocess'` und einer Eigenschaft `path`. Ein Beispiel:\n\n```text\nUnrecognized document structure: ...\nDocument path: content[0].columns[0].ul[1]\n```\n\nDer Pfad verweist auf den zweiten Listeneintrag in der ersten Spalte des ersten Hauptinhaltsknotens. Prüfe auf Tippfehler wie `{ txt: 'Hello' }` statt `{ text: 'Hello' }`. Bei fehlerhaften Tabellenzeilen werden die Zeile und die erwartete Anzahl an Zellen angegeben. Leere Tabellen melden, dass `table.body` nichtleere Zeilen-Arrays enthalten muss. Behalte `{}`-Platzhalter für überspannte Zellen bei. Vorhandener Fehlertext bleibt bestehen; verwende nach Möglichkeit die Diagnosefelder statt Zeichenfolgen aus der Meldung zu parsen.\n\nDiese strukturierten Diagnosen sind **neu im lokalen Verbesserungszweig**; das veröffentlichte Paket 0.3.12 enthält sie noch nicht. Allgemeine Fehler liefern weiterhin eine Meldung. Der Zweig lehnt außerdem vorzeitig geschlossene Buffer-Streams ab, statt deren Promise unerfüllt zu lassen.\n\n## Syntaxfehler im Playground\n\nDer Editor parst die Definition, bevor er sie ausführt, markiert die fehlerhafte Stelle und zeigt Zeile und Spalte an. **Im Editor zum Fehler springen** fokussiert die Stelle. Undo/Redo und das Fehlerfeld ermöglichen Korrekturen, ohne deine Arbeit zu verlieren. Bei Live-Vorschau bleibt die letzte erfolgreiche PDF während der Bearbeitung und nach Fehlern sichtbar; der Download ist deaktiviert, wenn die Vorschau nicht mehr zum aktuellen Quelltext passt.\n\n## Schwierige Fehler eingrenzen\n\nVerwende dieselben Schriften und dieselbe Laufzeit. Ersetze den Inhalt durch einen einzelnen Absatz und füge die Blöcke schrittweise wieder hinzu, bis das Problem erneut auftritt. Prüfe bei Tabellen zuerst Zeilenlängen und Zellüberspannungen, bevor du Breiten anpasst. Verwende bei Ressourcenfehlern zunächst eine bekannte lokale Schrift und ein eingebettetes Bild. Weitere Symptome findest du unter [Fehlerbehebung](/docs/0.3/de/guides/troubleshooting/).\n\n## Die vollst�ndige Definition vor dem Rendern pr�fen\n\nDie lokale, unver�ffentlichte API `validateDocument(input, options)` pr�ft alle deklarierten Dokumenteigenschaften und sammelt mehrere Fehler mit Pfaden. Zus�tzlich pr�ft sie Tabellen, Spans, Referenzen, Zahlenbereiche und Zyklen. Sie ver�ndert keine Eingabe, f�hrt keine Callbacks aus und greift auf keine Ressourcen zu. Unbekannte Eigenschaften sind standardm��ig Warnungen; mit `strict: true` werden sie zu Fehlern.\n\n**JavaScript**\n\n```js\nconst input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}\n```\n\n**TypeScript**\n\n```ts\nconst input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}\n```\n\nDas Ergebnis enth�lt `valid`, `errors`, `warnings`, `deferred` und `truncated`. Jeder Befund enth�lt `path`, `code`, `severity` und `message`. Standardgrenzen: 100 Befunde, 100 Verschachtelungsebenen und 50.000 untersuchte Werte. Ein ausgesch�pftes Limit meldet niemals Erfolg. Callback-Ergebnisse, Ressourcenverf�gbarkeit und -dekodierung sowie das endg�ltige Layout werden weiterhin beim Rendern gepr�ft. JavaScript muss bereits syntaktisch g�ltig sein, bevor diese Objekt-API aufgerufen werden kann.\n\n�bergebe `{ validation: true }` als zweites Argument an `createPdf`, um ung�ltige Definitionen vor dem Laden von Ressourcen abzulehnen. Ein ung�ltiges Dokument wirft einen `DocumentValidationError` mit `code: \"PDFMAKE_VALIDATION_ERROR\"`, `phase: \"validation\"` und einem `diagnostics`-Array. Bestehende Aufrufe bleiben kompatibel; die automatische Vorabpr�fung ist optional. Der lokale Playground f�hrt sie mit der verbesserten Library automatisch aus.\n"
+ },
+ {
+ "id": "es/guides/errors",
+ "language": "es",
+ "translationKey": "guides/errors",
+ "path": "/docs/0.3/es/guides/errors/",
+ "title": "Errores y diagnósticos",
+ "description": "Detecta errores de sintaxis JavaScript, nodos de documento malformados, fallos de recursos e interrupciones de salida con diagnósticos útiles.",
+ "version": "0.3",
+ "sourceDigest": "e4dda1a91f9ef3e34e7b45d6b46a0bc638ea75a858d155ea73e148259ff35728",
+ "source": "guides/errors.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/guides/errors/",
+ "uri": "pdfmake://docs/0.3/es/guides/errors",
+ "markdown": "# Errores y diagnósticos\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/guides/errors/\n\n## Identifica primero la etapa que falla\n\nUna definición no válida debe producir un error, no omitir contenido en silencio. La pregunta útil es en qué punto falló y cómo llega el error a la aplicación.\n\n| Etapa | Fallo habitual | Dónde corregirlo |\n| --- | --- | --- |\n| Análisis de JavaScript | Falta una coma, una comilla o una llave de cierre | Editor de código; todavía no se ha llamado a la biblioteca |\n| Ejecución de la definición | `ReferenceError` o fallo de un callback | Código de la aplicación que construye la definición |\n| Estructura del documento | Tipo de nodo mal escrito, fila de tabla o lista no válida | Ruta de definición indicada |\n| Carga de recursos | Falta una fuente, URL rechazada, imagen ilegible | Registro de fuentes/recursos y políticas de acceso |\n| Maquetación/renderizado | Contenido demasiado grande, dimensiones no válidas o fallo de un callback | Definición más pequeña que reproduzca el problema |\n| Salida | Flujo cerrado, permisos de escritura o fallo del destino | Gestión de errores de búfer/flujo/archivo |\n\n## Espera siempre la salida\n\n**JavaScript**\n\n```js\nasync function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nasync function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}\n```\n\nDevuelve un error a quien llama la API o muestra `error.message` en la interfaz. No respondas con un PDF vacío ni informes de éxito después de descartar el rechazo. Evita registrar el contenido de los documentos o credenciales privadas de recursos.\n\n## Leer una ruta del documento\n\nLa rama local de mejoras de la biblioteca añade diagnósticos `PDFMAKE_INVALID_DOCUMENT` con `phase: 'preprocess'` y una propiedad `path`. Por ejemplo:\n\n```text\nUnrecognized document structure: ...\nDocument path: content[0].columns[0].ul[1]\n```\n\nEsto apunta al segundo elemento de la lista en la primera columna del primer nodo del cuerpo. Comprueba si hay un error tipográfico, como `{ txt: 'Hello' }` en lugar de `{ text: 'Hello' }`. Las filas de tabla malformadas identifican la fila y el número de celdas esperado. Las tablas vacías explican que `table.body` necesita matrices de filas no vacías. Conserva los marcadores `{}` para las celdas combinadas. Se mantiene el texto de error existente; cuando estén disponibles, los consumidores deben usar los campos de diagnóstico en lugar de analizar las cadenas del mensaje.\n\nEstos diagnósticos estructurados son **nuevos en la rama local de mejoras**; el paquete publicado 0.3.12 todavía no los incluye. Los errores genéricos siguen teniendo un mensaje. La rama también rechaza los flujos de búfer cerrados antes de tiempo, en vez de dejar pendiente su Promise.\n\n## Errores de sintaxis en el entorno de pruebas\n\nEl editor analiza la definición antes de ejecutarla, marca la ubicación defectuosa y muestra la línea y la columna. **Go to error in editor** lleva el cursor a esa ubicación. Las funciones Deshacer/Rehacer y el panel de errores permiten corregir el problema sin perder el trabajo. Con la vista previa en directo, el último PDF generado correctamente permanece visible durante las ediciones y los fallos, pero su descarga se desactiva cuando ya no coincide con el código actual.\n\n## Reducir los fallos difíciles\n\nMantén las mismas fuentes y el mismo entorno de ejecución. Sustituye el cuerpo por un párrafo y luego vuelve a añadir bloques hasta que reaparezca el problema. En las tablas, comprueba la longitud de las filas y las celdas combinadas antes de ajustar los anchos. Si fallan los recursos, empieza con una fuente local conocida y una imagen incrustada. Consulta [solución de problemas](/docs/0.3/es/guides/troubleshooting/) para ver más síntomas.\n\n## Validar la definici�n completa antes del renderizado\n\nLa API local a�n no publicada `validateDocument(input, options)` comprueba todas las propiedades declaradas del documento y re�ne varios errores con sus rutas. Tambi�n comprueba tablas, celdas combinadas, referencias, rangos num�ricos y ciclos. No modifica la entrada, ejecuta callbacks ni accede a recursos. Las propiedades desconocidas generan advertencias; `strict: true` las convierte en errores.\n\n**JavaScript**\n\n```js\nconst input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}\n```\n\n**TypeScript**\n\n```ts\nconst input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}\n```\n\nEl resultado contiene `valid`, `errors`, `warnings`, `deferred` y `truncated`. Cada diagn�stico incluye `path`, `code`, `severity` y `message`. L�mites predeterminados: 100 diagn�sticos, 100 niveles y 50 000 valores inspeccionados. Un l�mite agotado nunca informa de �xito. Los resultados de callbacks, la disponibilidad y decodificaci�n de recursos y el dise�o final se comprueban durante el renderizado. JavaScript debe ser sint�cticamente v�lido antes de llamar a esta API de objetos.\n\nPasa `{ validation: true }` como segundo argumento a `createPdf` para rechazar definiciones incorrectas antes de cargar recursos. Un documento no v�lido lanza un `DocumentValidationError` con `code: \"PDFMAKE_VALIDATION_ERROR\"`, `phase: \"validation\"` y un array `diagnostics`. Los usos existentes siguen siendo compatibles; la comprobaci�n previa es opcional. El playground local la ejecuta autom�ticamente con la biblioteca mejorada.\n"
+ },
+ {
+ "id": "fr/guides/errors",
+ "language": "fr",
+ "translationKey": "guides/errors",
+ "path": "/docs/0.3/fr/guides/errors/",
+ "title": "Erreurs et diagnostics",
+ "description": "Repérez les erreurs de syntaxe JavaScript, les nœuds de document mal formés, les échecs de ressources et les sorties interrompues à l’aide de diagnostics exploitables.",
+ "version": "0.3",
+ "sourceDigest": "e4dda1a91f9ef3e34e7b45d6b46a0bc638ea75a858d155ea73e148259ff35728",
+ "source": "guides/errors.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/guides/errors/",
+ "uri": "pdfmake://docs/0.3/fr/guides/errors",
+ "markdown": "# Erreurs et diagnostics\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/guides/errors/\n\n## Identifier d’abord l’étape en échec\n\nUne définition non valide doit provoquer une erreur, plutôt que d’omettre du contenu sans avertissement. Il faut déterminer où l’échec s’est produit et comment cette erreur remonte dans votre application.\n\n| Étape | Échec courant | Où le corriger |\n| --- | --- | --- |\n| Analyse JavaScript | Virgule, guillemet ou accolade fermante manquante | Éditeur de code ; la bibliothèque n’a pas encore été appelée |\n| Exécution de la définition | `ReferenceError` ou échec d’une fonction de rappel | Code de l’application qui construit la définition |\n| Structure du document | Type de nœud mal orthographié, lignes de tableau ou liste non valides | Chemin de définition signalé |\n| Chargement des ressources | Police manquante, URL refusée, image illisible | Enregistrement des polices/ressources et règles d’accès |\n| Mise en page/rendu | Contenu trop volumineux, dimensions non valides ou fonction de rappel en échec | Plus petite définition permettant de reproduire le problème |\n| Sortie | Flux fermé, droits d’écriture ou échec de destination | Gestion des erreurs de buffer, flux ou fichier |\n\n## Toujours attendre la sortie\n\n**JavaScript**\n\n```js\nasync function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nasync function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}\n```\n\nRenvoyez l’erreur à l’appelant de l’API ou affichez `error.message` dans l’interface. Ne répondez pas avec un PDF vide et n’annoncez pas un succès après avoir ignoré le rejet. Évitez de journaliser le contenu du document ou les identifiants privés des ressources.\n\n## Lire le chemin dans le document\n\nLa branche locale d’amélioration de la bibliothèque ajoute des diagnostics `PDFMAKE_INVALID_DOCUMENT` avec `phase: 'preprocess'` et une propriété `path`. Par exemple :\n\n```text\nUnrecognized document structure: ...\nDocument path: content[0].columns[0].ul[1]\n```\n\nCe chemin désigne le deuxième élément de liste dans la première colonne du premier nœud du corps. Cherchez une faute telle que `{ txt: 'Hello' }` à la place de `{ text: 'Hello' }`. Pour des lignes de tableau mal formées, le diagnostic indique la ligne et le nombre de cellules attendu. Les tableaux vides précisent que `table.body` doit contenir des tableaux de lignes non vides. Conservez les objets `{}` de remplacement pour les cellules fusionnées. Le texte d’erreur existant est maintenu ; lorsque les champs de diagnostic sont disponibles, les appelants doivent les utiliser au lieu d’analyser les chaînes de message.\n\nCes diagnostics structurés sont **nouveaux dans la branche locale d’amélioration** ; le paquet publié 0.3.12 ne les contient pas encore. Les erreurs génériques comportent toujours un message. La branche rejette également les flux de buffer fermés prématurément au lieu de laisser leur Promise en attente.\n\n## Erreurs de syntaxe dans le playground\n\nL’éditeur analyse la définition avant son exécution, marque l’emplacement fautif et affiche la ligne et la colonne. **Aller à l’erreur dans l’éditeur** place le curseur à cet endroit. L’annulation/restauration et le panneau d’erreurs permettent de corriger le problème sans perdre le travail. Avec l’aperçu en direct, le dernier PDF généré avec succès reste visible pendant les modifications et les échecs, mais son téléchargement est désactivé s’il ne correspond plus au code actuel.\n\n## Réduire les échecs difficiles à diagnostiquer\n\nConservez les mêmes polices et le même environnement d’exécution. Remplacez le corps par un seul paragraphe, puis réajoutez les blocs jusqu’à ce que le problème réapparaisse. Pour les tableaux, vérifiez les longueurs des lignes et les fusions avant d’ajuster les largeurs. En cas d’échec lié aux ressources, commencez par une police locale connue et une image intégrée. Consultez [Dépannage](/docs/0.3/fr/guides/troubleshooting/) pour découvrir d’autres symptômes.\n\n## Valider la d�finition compl�te avant le rendu\n\nL�API locale non publi�e `validateDocument(input, options)` v�rifie toutes les propri�t�s d�clar�es du document et rassemble plusieurs erreurs avec leurs chemins. Elle contr�le aussi les tableaux, les cellules fusionn�es, les r�f�rences, les plages num�riques et les cycles. Elle ne modifie pas l�entr�e, n�ex�cute aucun callback et n�acc�de � aucune ressource. Les propri�t�s inconnues produisent des avertissements ; `strict: true` les transforme en erreurs.\n\n**JavaScript**\n\n```js\nconst input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}\n```\n\n**TypeScript**\n\n```ts\nconst input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}\n```\n\nLe r�sultat contient `valid`, `errors`, `warnings`, `deferred` et `truncated`. Chaque diagnostic contient `path`, `code`, `severity` et `message`. Limites par d�faut : 100 diagnostics, 100 niveaux et 50 000 valeurs inspect�es. Une limite atteinte ne donne jamais un r�sultat valide. Les r�sultats des callbacks, la disponibilit� et le d�codage des ressources ainsi que la mise en page finale restent v�rifi�s pendant le rendu. Le code JavaScript doit d�j� �tre syntaxiquement valide pour appeler cette API objet.\n\nPassez `{ validation: true }` comme deuxi�me argument � `createPdf` pour rejeter une d�finition incorrecte avant de charger les ressources. Le document invalide l�ve un `DocumentValidationError` avec `code: \"PDFMAKE_VALIDATION_ERROR\"`, `phase: \"validation\"` et un tableau `diagnostics`. Les appels existants restent compatibles ; cette v�rification pr�alable est facultative. Le playground local l�ex�cute automatiquement avec la biblioth�que am�lior�e.\n"
+ },
+ {
+ "id": "guides/errors",
+ "language": "en",
+ "translationKey": "guides/errors",
+ "path": "/docs/0.3/guides/errors/",
+ "title": "Errors and diagnostics",
+ "description": "Find JavaScript syntax mistakes, malformed document nodes, resource failures and interrupted output, with actionable diagnostics.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "guides/errors.md",
+ "url": "https://pdfmake.github.io/docs/0.3/guides/errors/",
+ "uri": "pdfmake://docs/0.3/guides/errors",
+ "markdown": "# Errors and diagnostics\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/guides/errors/\n\n## First identify the failing stage\n\nAn invalid definition should fail rather than silently omit content. The useful\nquestion is where it failed and how that error reaches your application.\n\n| Stage | Typical failure | Where to fix it |\n| --- | --- | --- |\n| JavaScript parsing | Missing comma, quote or closing brace | Source editor; the library has not been called yet |\n| Definition execution | `ReferenceError` or a failing callback | Application code constructing the definition |\n| Document structure | Misspelled node type, invalid table rows or list | The reported definition path |\n| Resource loading | Missing font, rejected URL, unreadable image | Font/resource registration and access policies |\n| Layout/rendering | Content too large, invalid dimensions or callback failure | The smallest reproducing definition |\n| Output | Closed stream, write permissions or destination failure | Buffer/stream/file error handling |\n\n## Always await the output\n\n**JavaScript**\n\n```js\nasync function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nasync function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}\n```\n\nReturn an error to the API caller or display `error.message` in the UI. Do not\nrespond with an empty PDF or report success after swallowing the rejection.\nAvoid logging document contents or private resource credentials.\n\n## Read a document path\n\nThe local library improvement branch adds `PDFMAKE_INVALID_DOCUMENT` diagnostics\nwith `phase: 'preprocess'` and a `path` property. For example:\n\n```text\nUnrecognized document structure: ...\nDocument path: content[0].columns[0].ul[1]\n```\n\nThis points to the second list item in the first column of the first body node.\nCheck for a typo such as `{ txt: 'Hello' }` instead of `{ text: 'Hello' }`.\nMalformed table rows identify the row and expected number of cells. Empty tables\nexplain that `table.body` needs nonempty row arrays. Retain `{}` placeholders for\nspanned cells. Existing error text is retained; callers should use the diagnostic\nfields when present instead of parsing message strings.\n\nThese structured diagnostics are **new in the local improvement branch**; the\npublished 0.3.12 package does not yet contain them. Generic errors still have a\nmessage. The branch also rejects prematurely closed buffer streams instead of\nleaving their Promise pending.\n\n## Syntax errors in the playground\n\nThe editor parses the definition before executing it, marks the faulty location,\nand displays a line and column. **Go to error in editor** focuses the location.\nUndo/redo and the error panel let you correct a mistake without losing work.\nWith live preview, the last successful PDF stays visible during edits and failures,\nbut its download is disabled when it no longer matches the current source.\n\n## Reduce difficult failures\n\nKeep the same fonts and runtime. Replace the body with a single paragraph, then\nadd blocks back until the issue returns. For tables, check row lengths and spans\nbefore adjusting widths. For resource failures, start with a known local font and\nembedded image. See [troubleshooting](/docs/0.3/guides/troubleshooting/) for more symptoms.\n\n## Validate the complete definition before rendering\n\nThe local, unreleased API `validateDocument(input, options)` checks all declared document properties and collects multiple errors with paths. It also checks tables, spans, references, numeric ranges and circular structures. It does not mutate input, execute callbacks or access resources. Unknown properties are warnings by default; use `strict: true` to treat them as errors.\n\n**JavaScript**\n\n```js\nconst input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}\n```\n\n**TypeScript**\n\n```ts\nconst input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}\n```\n\nThe result contains `valid`, `errors`, `warnings`, `deferred` and `truncated`. Each diagnostic includes `path`, `code`, `severity` and `message`. Defaults: 100 diagnostics, 100 nesting levels and 50,000 inspected values. An exhausted limit never reports success. Callback results, resource availability/decoding and final layout remain render-time checks. JavaScript syntax must already parse before this object API can run.\n\nPass `{ validation: true }` as the second argument to `createPdf` to reject invalid definitions before resource loading. An invalid document throws a `DocumentValidationError` with `code: \"PDFMAKE_VALIDATION_ERROR\"`, `phase: \"validation\"` and a `diagnostics` array. Existing calls remain compatible; automatic preflight is opt-in. The local playground runs this check automatically when using the improved library.\n"
+ },
+ {
+ "id": "pt-br/guides/errors",
+ "language": "pt-br",
+ "translationKey": "guides/errors",
+ "path": "/docs/0.3/pt-br/guides/errors/",
+ "title": "Erros e diagnósticos",
+ "description": "Encontre erros de sintaxe JavaScript, nós de documento malformados, falhas de recursos e interrupções de saída com diagnósticos úteis.",
+ "version": "0.3",
+ "sourceDigest": "e4dda1a91f9ef3e34e7b45d6b46a0bc638ea75a858d155ea73e148259ff35728",
+ "source": "guides/errors.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/guides/errors/",
+ "uri": "pdfmake://docs/0.3/pt-br/guides/errors",
+ "markdown": "# Erros e diagnósticos\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/guides/errors/\n\n## Primeiro, identifique a etapa que falhou\n\nUma definição inválida deve falhar em vez de omitir conteúdo silenciosamente. A pergunta útil é em que etapa ocorreu a falha e como esse erro chega à sua aplicação.\n\n| Etapa | Falha comum | Onde corrigir |\n| --- | --- | --- |\n| Análise de JavaScript | Vírgula, aspas ou chave de fechamento ausente | Editor-fonte; a biblioteca ainda não foi chamada |\n| Execução da definição | `ReferenceError` ou callback que falhou | Código da aplicação que constrói a definição |\n| Estrutura do documento | Tipo de nó escrito incorretamente, linhas de tabela ou lista inválidas | Caminho da definição informado |\n| Carregamento de recursos | Fonte ausente, URL rejeitada, imagem ilegível | Registro de fontes/recursos e políticas de acesso |\n| Layout/renderização | Conteúdo grande demais, dimensões inválidas ou falha de callback | Menor definição que reproduza o problema |\n| Saída | Stream fechado, falta de permissão de escrita ou destino indisponível | Tratamento de erros de buffer/stream/arquivo |\n\n## Sempre aguarde a saída\n\n**JavaScript**\n\n```js\nasync function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}\n```\n\n**TypeScript**\n\n```ts\nasync function generateReport(pdfmake, definition) {\n try {\n return await pdfmake.createPdf(definition).getBuffer();\n } catch (error) {\n console.error('PDF generation failed', {\n message: error.message,\n code: error.code,\n phase: error.phase,\n path: error.path\n });\n throw error;\n }\n}\n```\n\nRetorne um erro ao chamador da API ou exiba `error.message` na interface. Não responda com um PDF vazio nem informe sucesso depois de descartar a rejeição. Evite registrar o conteúdo do documento ou credenciais de recursos privados.\n\n## Leia o caminho do documento\n\nO branch local de melhorias da biblioteca adiciona diagnósticos `PDFMAKE_INVALID_DOCUMENT` com `phase: 'preprocess'` e uma propriedade `path`. Por exemplo:\n\n```text\nUnrecognized document structure: ...\nDocument path: content[0].columns[0].ul[1]\n```\n\nIsso aponta para o segundo item da lista no primeiro nó do corpo da primeira coluna. Verifique erros de digitação como `{ txt: 'Hello' }` em vez de `{ text: 'Hello' }`. Linhas de tabela malformadas identificam a linha e o número esperado de células. Tabelas vazias explicam que `table.body` precisa conter arrays de linhas não vazios. Mantenha placeholders `{}` para células mescladas. O texto de erro existente é preservado; quando disponíveis, os chamadores devem usar os campos de diagnóstico em vez de analisar strings de mensagem.\n\nEsses diagnósticos estruturados são **novos no branch local de melhorias**; o pacote 0.3.12 publicado ainda não os contém. Erros genéricos continuam tendo uma mensagem. O branch também rejeita streams de buffer fechados prematuramente em vez de deixar a Promise pendente.\n\n## Erros de sintaxe no playground\n\nO editor analisa a definição antes de executá-la, marca o local com erro e exibe linha e coluna. **Go to error in editor** leva o foco ao local. Desfazer/refazer e o painel de erros permitem corrigir o problema sem perder o trabalho. Com a prévia ao vivo, o último PDF gerado com sucesso continua visível durante edições e falhas, mas seu download fica desativado quando ele deixa de corresponder ao código atual.\n\n## Reduza falhas difíceis\n\nMantenha as mesmas fontes e o mesmo ambiente. Substitua o corpo por um único parágrafo e, em seguida, reintroduza os blocos até o problema voltar. Em tabelas, confira o comprimento das linhas e os spans antes de ajustar as larguras. Para falhas de recursos, comece com uma fonte local conhecida e uma imagem incorporada. Consulte [solução de problemas](/docs/0.3/pt-br/guides/troubleshooting/) para ver outros sintomas.\n\n## Validar a defini��o completa antes da renderiza��o\n\nA API local ainda n�o publicada `validateDocument(input, options)` verifica todas as propriedades declaradas do documento e re�ne v�rios erros com seus caminhos. Tamb�m verifica tabelas, c�lulas mescladas, refer�ncias, intervalos num�ricos e ciclos. N�o modifica a entrada, executa callbacks nem acessa recursos. Propriedades desconhecidas geram avisos; `strict: true` transforma esses avisos em erros.\n\n**JavaScript**\n\n```js\nconst input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}\n```\n\n**TypeScript**\n\n```ts\nconst input = { content: [{ text: 'Report', fontSize: 'large' }] };\nconst report = pdfMake.validateDocument(input, { strict: true });\nfor (const issue of report.errors) {\n console.error(issue.path, issue.code, issue.message);\n}\n```\n\nO resultado cont�m `valid`, `errors`, `warnings`, `deferred` e `truncated`. Cada diagn�stico inclui `path`, `code`, `severity` e `message`. Limites padr�o: 100 diagn�sticos, 100 n�veis e 50.000 valores inspecionados. Um limite esgotado nunca informa sucesso. Os resultados dos callbacks, a disponibilidade e a decodifica��o dos recursos e o layout final continuam sendo verificados durante a renderiza��o. O JavaScript j� precisa ser sintaticamente v�lido antes de chamar esta API de objetos.\n\nPasse `{ validation: true }` como segundo argumento para `createPdf` para rejeitar defini��es inv�lidas antes de carregar recursos. Um documento inv�lido lan�a um `DocumentValidationError` com `code: \"PDFMAKE_VALIDATION_ERROR\"`, `phase: \"validation\"` e um array `diagnostics`. As chamadas existentes permanecem compat�veis; a verifica��o pr�via � opcional. O playground local a executa automaticamente com a biblioteca aprimorada.\n"
+ },
+ {
+ "id": "de/guides/invoice",
+ "language": "de",
+ "translationKey": "guides/invoice",
+ "path": "/docs/0.3/de/guides/invoice/",
+ "title": "Rezept: Rechnung",
+ "description": "Erzeuge eine vollständige Rechnungs-PDF mit wiederverwendbaren Stilen, wiederholter Tabellenkopfzeile, Summen und Seitenzahlen.",
+ "version": "0.3",
+ "sourceDigest": "834285f04d4a3a792e6f17f99a72113c67334451ebcb39a498d27c528c9f8cc4",
+ "source": "guides/invoice.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/guides/invoice/",
+ "uri": "pdfmake://docs/0.3/de/guides/invoice",
+ "markdown": "# Rezept: Rechnung\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/guides/invoice/\n\n## Beispiel ausführen\n\nInstalliere `pdfmake@0.3.12`, speichere den folgenden Inhalt als `invoice.cjs` und führe `node invoice.cjs` aus. Das Beispiel verwendet die Standardschrift Helvetica mit ASCII-Inhalt, um externe Ressourcen zu vermeiden. Für eine größere Sprachenabdeckung solltest du eingebettete Schriften verwenden.\n\n**JavaScript**\n\n```js\n// docs-test: invoice\nconst pdfmake = require('pdfmake');\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = cents => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: invoice\nimport pdfmake from \"pdfmake\";\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = (cents: number) => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n## An deine Anwendung anpassen\n\nDies ist ein Layoutbeispiel und keine Steuer- oder Buchhaltungslösung. Prüfe Mengen und Preise, bevor du die Definition erzeugst. In diesem Beispiel werden Beträge als ganzzahlige Cent-Werte gespeichert, um Dezimalfehler durch wiederholte Addition zu vermeiden; wende deine fachlichen Rundungsregeln separat an. Ersetze für eine HTTP-Antwort `write()` durch `getBuffer()`, wie in der [Node.js-Schnellstartanleitung](/docs/0.3/de/getting-started/server-side/) gezeigt.\n\n`headerRows: 1` wiederholt die Tabellenkopfzeile, wenn die Zeilen auf einer neuen Seite fortgesetzt werden. Jede Zeile muss dieselbe Länge wie `widths` haben. Erzeuge für jede Rechnung eine neue Definition.\n"
+ },
+ {
+ "id": "es/guides/invoice",
+ "language": "es",
+ "translationKey": "guides/invoice",
+ "path": "/docs/0.3/es/guides/invoice/",
+ "title": "Receta para una factura",
+ "description": "Genera un PDF de factura completo con estilos reutilizables, encabezado de tabla repetido, totales y números de página.",
+ "version": "0.3",
+ "sourceDigest": "834285f04d4a3a792e6f17f99a72113c67334451ebcb39a498d27c528c9f8cc4",
+ "source": "guides/invoice.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/guides/invoice/",
+ "uri": "pdfmake://docs/0.3/es/guides/invoice",
+ "markdown": "# Receta para una factura\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/guides/invoice/\n\n## Ejecutar el ejemplo\n\nInstala `pdfmake@0.3.12`, guarda el siguiente código como `invoice.cjs` y ejecútalo con `node invoice.cjs`. Usa Helvetica estándar con contenido ASCII para evitar recursos externos. Para una cobertura más amplia de idiomas, usa fuentes incrustadas.\n\n**JavaScript**\n\n```js\n// docs-test: invoice\nconst pdfmake = require('pdfmake');\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = cents => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: invoice\nimport pdfmake from \"pdfmake\";\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = (cents: number) => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n## Adaptarlo a tu aplicación\n\nEste ejemplo se centra en la maquetación; no implementa impuestos ni contabilidad. Valida las cantidades y los precios antes de generar la definición. Aquí los importes se expresan en céntimos enteros para evitar acumular errores decimales; aplica por separado las reglas de redondeo de tu dominio. Para una respuesta HTTP, sustituye `write()` por `getBuffer()`, como se muestra en el [inicio rápido de Node.js](/docs/0.3/es/getting-started/server-side/).\n\n`headerRows: 1` repite el encabezado de la tabla cuando las filas continúan en una página nueva. Mantén la misma longitud en cada fila que en `widths`. Crea una definición nueva para cada factura.\n"
+ },
+ {
+ "id": "fr/guides/invoice",
+ "language": "fr",
+ "translationKey": "guides/invoice",
+ "path": "/docs/0.3/fr/guides/invoice/",
+ "title": "Recette de facture",
+ "description": "Générez un PDF de facture complet avec styles réutilisables, en-tête de tableau répété, totaux et numéros de page.",
+ "version": "0.3",
+ "sourceDigest": "834285f04d4a3a792e6f17f99a72113c67334451ebcb39a498d27c528c9f8cc4",
+ "source": "guides/invoice.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/guides/invoice/",
+ "uri": "pdfmake://docs/0.3/fr/guides/invoice",
+ "markdown": "# Recette de facture\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/guides/invoice/\n\n## Exécuter l’exemple\n\nInstallez `pdfmake@0.3.12`, enregistrez ce fichier sous `invoice.cjs` et lancez `node invoice.cjs`. L’exemple utilise Helvetica standard et du contenu ASCII afin d’éviter les ressources externes. Pour une couverture linguistique plus large, utilisez des polices incorporées.\n\n**JavaScript**\n\n```js\n// docs-test: invoice\nconst pdfmake = require('pdfmake');\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = cents => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: invoice\nimport pdfmake from \"pdfmake\";\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = (cents: number) => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n## Adapter l’exemple à votre application\n\nIl s’agit d’un exemple de mise en page, pas d’une implémentation fiscale ou comptable. Validez les quantités et les prix avant de générer la définition. Cet exemple utilise des centimes entiers pour éviter l’accumulation d’erreurs décimales ; appliquez séparément les règles d’arrondi de votre domaine. Pour une réponse HTTP, remplacez `write()` par `getBuffer()`, comme dans le [démarrage rapide Node.js](/docs/0.3/fr/getting-started/server-side/).\n\n`headerRows: 1` répète l’en-tête du tableau lorsque les lignes se poursuivent sur une nouvelle page. Chaque ligne doit avoir la même longueur que `widths`. Créez une nouvelle définition pour chaque facture.\n"
+ },
+ {
+ "id": "guides/invoice",
+ "language": "en",
+ "translationKey": "guides/invoice",
+ "path": "/docs/0.3/guides/invoice/",
+ "title": "Invoice recipe",
+ "description": "Generate a complete invoice PDF with reusable styles, a repeating table header, totals and page numbers.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "guides/invoice.md",
+ "url": "https://pdfmake.github.io/docs/0.3/guides/invoice/",
+ "uri": "pdfmake://docs/0.3/guides/invoice",
+ "markdown": "# Invoice recipe\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/guides/invoice/\n\n## Run the example\n\nInstall `pdfmake@0.3.12`, save this as `invoice.cjs`, and run `node invoice.cjs`. It uses standard Helvetica with ASCII content to avoid external resources. Use embedded fonts for wider language coverage.\n\n**JavaScript**\n\n```js\n// docs-test: invoice\nconst pdfmake = require('pdfmake');\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = cents => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: invoice\nimport pdfmake from \"pdfmake\";\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = (cents: number) => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n## Adapt it to your application\n\nThis is a layout example, not a tax or accounting implementation. Validate quantities and prices before generating the definition. Amounts use integer cents to avoid decimal accumulation in this example; apply your domain's rounding rules separately. For an HTTP response, replace `write()` with `getBuffer()` as shown in the [Node.js quickstart](/docs/0.3/getting-started/server-side/).\n\n`headerRows: 1` repeats the table header when rows continue onto a new page. Keep each row the same length as `widths`. Make a fresh definition for every invoice.\n"
+ },
+ {
+ "id": "pt-br/guides/invoice",
+ "language": "pt-br",
+ "translationKey": "guides/invoice",
+ "path": "/docs/0.3/pt-br/guides/invoice/",
+ "title": "Exemplo de fatura",
+ "description": "Gere um PDF de fatura completo com estilos reutilizáveis, cabeçalho de tabela repetido, totais e numeração de páginas.",
+ "version": "0.3",
+ "sourceDigest": "834285f04d4a3a792e6f17f99a72113c67334451ebcb39a498d27c528c9f8cc4",
+ "source": "guides/invoice.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/guides/invoice/",
+ "uri": "pdfmake://docs/0.3/pt-br/guides/invoice",
+ "markdown": "# Exemplo de fatura\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/guides/invoice/\n\n## Execute o exemplo\n\nInstale `pdfmake@0.3.12`, salve este código como `invoice.cjs` e execute `node invoice.cjs`. Ele usa Helvetica padrão com conteúdo ASCII para evitar recursos externos. Para maior cobertura de idiomas, use fontes incorporadas.\n\n**JavaScript**\n\n```js\n// docs-test: invoice\nconst pdfmake = require('pdfmake');\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = cents => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n// docs-test: invoice\nimport pdfmake from \"pdfmake\";\nconst fonts = require('pdfmake/standard-fonts/Helvetica');\npdfmake.addFonts(fonts);\npdfmake.setUrlAccessPolicy(() => false);\nconst standardNames = new Set(Object.values(fonts.Helvetica));\npdfmake.setLocalAccessPolicy(name => standardNames.has(name));\n\nasync function main() {\n const items = [\n { description: 'Design services', quantity: 2, unitPriceCents: 12500 },\n { description: 'Document review', quantity: 1, unitPriceCents: 7500 }\n ];\n const money = (cents: number) => (cents / 100).toFixed(2) + ' EUR';\n const total = items.reduce((sum, item) => sum + item.quantity * item.unitPriceCents, 0);\n const definition: TDocumentDefinitions = {\n defaultStyle: { font: 'Helvetica', fontSize: 10 },\n pageMargins: [40, 50, 40, 50],\n info: { title: 'Invoice INV-001', author: 'Example Studio' },\n footer: (page, pages) => ({ text: `Page ${page} of ${pages}`, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 20] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1,\n widths: ['*', 'auto', 'auto', 'auto'],\n body: [\n ['Description', 'Qty', 'Unit price', 'Amount'].map(text => ({ text, bold: true })),\n ...items.map(item => [item.description, item.quantity, money(item.unitPriceCents),\n { text: money(item.quantity * item.unitPriceCents), alignment: 'right' }])\n ]\n } },\n { text: 'Total: ' + money(total), alignment: 'right', bold: true, margin: [0, 16, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, margin: [0, 0, 0, 16] } }\n };\n await pdfmake.createPdf(definition).write('invoice.pdf');\n}\n\nmain().catch(error => { console.error(error); process.exitCode = 1; });\n```\n\n## Adapte à sua aplicação\n\nEste é um exemplo de layout, não uma implementação fiscal ou contábil. Valide quantidades e preços antes de gerar a definição. Neste exemplo, os valores usam centavos inteiros para evitar o acúmulo de erros decimais; aplique separadamente as regras de arredondamento do seu domínio. Para uma resposta HTTP, substitua `write()` por `getBuffer()`, como no [início rápido para Node.js](/docs/0.3/pt-br/getting-started/server-side/).\n\n`headerRows: 1` repete o cabeçalho da tabela quando as linhas continuam em uma página seguinte. Mantenha o mesmo número de células em cada linha e em `widths`. Crie uma definição nova para cada fatura.\n"
+ },
+ {
+ "id": "de/guides/llm-and-mcp",
+ "language": "de",
+ "translationKey": "guides/llm-and-mcp",
+ "path": "/docs/0.3/de/guides/llm-and-mcp/",
+ "title": "LLM- und MCP-Integration",
+ "description": "Verwende versionierte Markdown-Ressourcen, llms.txt und einen lokalen MCP-Dokumentationsserver mit reinem Lesezugriff für pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f369b718c3c46a1865fd7a38d3ccd5b001b457935d5a0a4bd9fccb22d194bbd3",
+ "source": "guides/llm-and-mcp.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/guides/llm-and-mcp/",
+ "uri": "pdfmake://docs/0.3/de/guides/llm-and-mcp",
+ "markdown": "# LLM- und MCP-Integration\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/guides/llm-and-mcp/\n\n## Dokumentation ohne MCP verwenden\n\nJede Seite ist als generiertes Markdown verfügbar. Dieselbe Quelle erzeugt:\n\n- [llms.txt](/docs/0.3/de/llms.txt): Seitenverzeichnis mit Beschreibungen und Markdown-Links.\n- [llms-full.txt](/docs/0.3/de/llms-full.txt): den vollständigen, versionierten Markdown-Korpus.\n- [docs-index.json](/docs/0.3/de/docs-index.json): Seiten-IDs, Titel, Beschreibungen, Quell-URLs und vollständiges Markdown.\n\nDiese Dateien erleichtern das Auffinden von Inhalten, garantieren aber keine Suchmaschinenindexierung oder Aufnahme in Modellindizes. Nenne im Prompt die installierte Bibliotheksversion. Bitte das Modell, die verwendete Dokumentationsseite anzugeben und Promise-basierte Ausgabemethoden zu verwenden. Die `AGENTS.md`-Datei der Bibliothek beschreibt den Quellprozess und Testbefehle für Coding-Agenten.\n\n## Lokalen MCP-Server starten\n\nKlone das Dokumentationsrepository, installiere die Abhängigkeiten, erzeuge den Korpus und starte den Server:\n\n```sh\ngit clone https://github.com/pdfmake/docs.git\ncd docs\nnpm ci\nnpm run docs:generate\nnode mcp/server.mjs\n```\n\nBis zur Annahme durch das Upstream-Projekt gehört dieser Server zum lokalen Verbesserungszweig. Starte ihn über die stdio-Konfiguration deines MCP-Clients und verwende absolute Pfade:\n\n```json\n{\n \"mcpServers\": {\n \"pdfmake-docs\": {\n \"command\": \"node\",\n \"args\": [\"/absolute/path/to/docs/mcp/server.mjs\"]\n }\n }\n}\n```\n\nErsetze den Beispielpfad durch den Pfad deines Klons. In Windows-JSON-Pfaden musst du `/` oder escaped `\\\\` verwenden. Die Speicherorte der Clientkonfiguration unterscheiden sich. Der Server schreibt Protokollnachrichten nach stdout und Fehler nach stderr. Nach der Installation der Abhängigkeiten benötigt er weder einen API-Schlüssel noch ein Modellkonto oder eine Netzwerkverbindung.\n\n## Werkzeuge und Ressourcen\n\n| Funktion | Eingabe | Ergebnis |\n| --- | --- | --- |\n| `search_docs` | `query`, optional `limit` (1–10), optional `language` | Rangsortierte Seiten mit exakten IDs, Sprache, Version, Quell-URLs und Auszügen |\n| `get_doc` | Exakte `id` aus der Suche | Vollständige Markdown-Seite |\n| MCP-Ressourcen | `pdfmake://docs/0.3/de/` | Dieselbe versionierte Markdown-Seite |\n\nDer Server kann nur den mitgelieferten Dokumentationskorpus lesen. Er kann keine PDFs rendern, keinen Code auswerten, keine vom Aufrufer ausgewählten Dateisystempfade lesen und keine entfernten URLs aufrufen. Erzeuge den Korpus nach Dokumentationsänderungen erneut und starte den Server neu.\n\n`language` akzeptiert `en` (Standard), `de`, `fr`, `es` und `pt-br`. Jede unterstützte Sprache enthält dieselbe vollständige Menge an Dokumentationsseiten. Bei der Suche werden Sprachen nicht unbemerkt vermischt. Eine übersetzte ID wie `de/learn/first-pdf` kann mit `get_doc` oder über die Ressource `pdfmake://docs/0.3/de/learn/first-pdf` abgerufen werden. Jede Sprache hat eigene Discovery-Dateien, zum Beispiel `/docs/0.3/de/llms.txt` und `/docs/0.3/de/llms-full.txt`.\n\n## Promptvorschlag\n\n> Ich verwende pdfmake 0.3.x in Node.js. Suche in der passenden Dokumentation, bevor du Code erzeugst. Verwende die Node-Singleton-API, registriere Schriften, konfiguriere synchrone Ressourcenrichtlinien, warte Ausgabemethoden mit await ab und nenne die verwendeten Seiten-IDs. Erstelle für jede Anfrage eine neue Dokumentdefinition.\n"
+ },
+ {
+ "id": "es/guides/llm-and-mcp",
+ "language": "es",
+ "translationKey": "guides/llm-and-mcp",
+ "path": "/docs/0.3/es/guides/llm-and-mcp/",
+ "title": "Integración con LLM y MCP",
+ "description": "Usa recursos Markdown versionados, llms.txt y un servidor MCP local de solo lectura para la documentación de pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f369b718c3c46a1865fd7a38d3ccd5b001b457935d5a0a4bd9fccb22d194bbd3",
+ "source": "guides/llm-and-mcp.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/guides/llm-and-mcp/",
+ "uri": "pdfmake://docs/0.3/es/guides/llm-and-mcp",
+ "markdown": "# Integración con LLM y MCP\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/guides/llm-and-mcp/\n\n## Usar la documentación sin MCP\n\nCada página está disponible como Markdown generado. Las mismas fuentes producen:\n\n- [llms.txt](/docs/0.3/es/llms.txt): índice de páginas con descripciones y enlaces Markdown.\n- [llms-full.txt](/docs/0.3/es/llms-full.txt): corpus completo de Markdown versionado.\n- [docs-index.json](/docs/0.3/es/docs-index.json): identificadores de páginas, títulos, descripciones, URL de origen y Markdown completo.\n\nSon ayudas para descubrir contenido, no una garantía de indexación en motores de búsqueda o modelos. Incluye en tu prompt la versión de la biblioteca instalada. Pide al modelo que cite la página y use los métodos de salida basados en Promise. El archivo `AGENTS.md` de la biblioteca explica a los agentes de programación la canalización de origen y los comandos de prueba.\n\n## Ejecutar el servidor MCP local\n\nClona el repositorio de documentación, instala sus dependencias, genera el corpus e inicia el servidor:\n\n```sh\ngit clone https://github.com/pdfmake/docs.git\ncd docs\nnpm ci\nnpm run docs:generate\nnode mcp/server.mjs\n```\n\nEste servidor forma parte de la rama local de mejoras hasta que se acepte upstream. Inícialo mediante la configuración stdio de tu cliente MCP, con rutas absolutas:\n\n```json\n{\n \"mcpServers\": {\n \"pdfmake-docs\": {\n \"command\": \"node\",\n \"args\": [\"/absolute/path/to/docs/mcp/server.mjs\"]\n }\n }\n}\n```\n\nSustituye la ruta de ejemplo por la ruta de tu clon. En JSON de Windows, las rutas deben usar `/` o `\\\\` escapadas. Las ubicaciones de configuración varían según el cliente. El servidor escribe los mensajes del protocolo en stdout y los errores en stderr. No requiere una clave API, una cuenta de modelo ni una conexión de red después de instalar las dependencias.\n\n## Herramientas y recursos\n\n| Funcionalidad | Entrada | Resultado |\n| --- | --- | --- |\n| `search_docs` | `query`, `limit` opcional (1–10), `language` opcional | Páginas ordenadas por relevancia con sus identificadores exactos, idioma, versión, URL de origen y extractos |\n| `get_doc` | `id` exacto obtenido en la búsqueda | Página Markdown completa |\n| Recursos MCP | `pdfmake://docs/0.3/` | La misma página Markdown versionada |\n\nEl servidor solo puede leer su corpus de documentación incluido. No puede renderizar PDF, evaluar código, leer rutas del sistema de archivos seleccionadas por quien llama ni consultar URL remotas. Vuelve a generar el corpus y a iniciar el servidor después de editar documentación.\n\n`language` acepta `en` (predeterminado), `de`, `fr`, `es` y `pt-br`. Cada idioma admitido contiene el mismo conjunto completo de páginas de documentación. La búsqueda nunca mezcla idiomas en silencio. Se puede leer un identificador traducido como `de/learn/first-pdf` con `get_doc` o mediante el recurso `pdfmake://docs/0.3/de/learn/first-pdf`. Cada idioma también tiene sus propios archivos de descubrimiento; por ejemplo, `/docs/0.3/de/llms.txt` y `/docs/0.3/de/llms-full.txt`.\n\n## Prompt sugerido\n\n> Uso pdfmake 0.3.x en Node.js. Busca la documentación correspondiente antes de generar código. Usa la API singleton de Node, registra las fuentes, configura políticas de recursos síncronas, espera la salida e indica los identificadores de las páginas usadas. Crea una definición de documento nueva en cada solicitud.\n"
+ },
+ {
+ "id": "fr/guides/llm-and-mcp",
+ "language": "fr",
+ "translationKey": "guides/llm-and-mcp",
+ "path": "/docs/0.3/fr/guides/llm-and-mcp/",
+ "title": "Intégration LLM et MCP",
+ "description": "Utilisez les ressources Markdown versionnées, llms.txt et un serveur MCP local en lecture seule pour la documentation pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f369b718c3c46a1865fd7a38d3ccd5b001b457935d5a0a4bd9fccb22d194bbd3",
+ "source": "guides/llm-and-mcp.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/guides/llm-and-mcp/",
+ "uri": "pdfmake://docs/0.3/fr/guides/llm-and-mcp",
+ "markdown": "# Intégration LLM et MCP\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/guides/llm-and-mcp/\n\n## Utiliser la documentation sans MCP\n\nChaque page est disponible en Markdown généré. La même source produit :\n\n- [llms.txt](/docs/0.3/fr/llms.txt) : index des pages avec descriptions et liens Markdown.\n- [llms-full.txt](/docs/0.3/fr/llms-full.txt) : corpus Markdown versionné complet.\n- [docs-index.json](/docs/0.3/fr/docs-index.json) : identifiants, titres, descriptions, URL sources et Markdown complet des pages.\n\nCes fichiers facilitent la découverte ; ils ne garantissent ni l’indexation par un moteur de recherche ni celle par un modèle. Indiquez dans votre prompt la version de la bibliothèque installée. Demandez au modèle de citer la page et d’utiliser les méthodes de sortie basées sur Promise. Le fichier `AGENTS.md` de la bibliothèque explique le pipeline source et les commandes de test destinées aux agents de programmation.\n\n## Exécuter le serveur MCP local\n\nClonez le dépôt de documentation, installez ses dépendances, générez le corpus et démarrez le serveur :\n\n```sh\ngit clone https://github.com/pdfmake/docs.git\ncd docs\nnpm ci\nnpm run docs:generate\nnode mcp/server.mjs\n```\n\nCe serveur fait partie de la branche d’amélioration locale jusqu’à son acceptation en amont. Démarrez-le au moyen de la configuration stdio de votre client MCP, en utilisant des chemins absolus :\n\n```json\n{\n \"mcpServers\": {\n \"pdfmake-docs\": {\n \"command\": \"node\",\n \"args\": [\"/absolute/path/to/docs/mcp/server.mjs\"]\n }\n }\n}\n```\n\nRemplacez le chemin d’exemple par celui de votre clone. Dans un JSON Windows, utilisez `/` ou échappez les antislashs avec `\\\\`. L’emplacement de la configuration dépend du client. Le serveur écrit les messages du protocole sur stdout et les erreurs sur stderr. Après l’installation des dépendances, aucune clé API, aucun compte de modèle ni connexion réseau n’est nécessaire.\n\n## Outils et ressources\n\n| Capacité | Entrée | Résultat |\n| --- | --- | --- |\n| `search_docs` | `query`, `limit` facultatif (1–10), `language` facultatif | Pages classées avec identifiants exacts, langue, version, URL sources et extraits |\n| `get_doc` | `id` exact issu de la recherche | Page Markdown complète |\n| Ressources MCP | `pdfmake://docs/0.3/` | Même page Markdown versionnée |\n\nLe serveur ne peut lire que son corpus de documentation intégré. Il ne peut pas générer de PDF, exécuter du code d’exemple, lire des chemins du système de fichiers choisis par l’appelant ni parcourir des URL distantes. Régénérez le corpus et redémarrez le serveur après toute modification de la documentation.\n\n`language` accepte `en` (par défaut), `de`, `fr`, `es` et `pt-br`. Chaque langue prise en charge contient le même ensemble complet de pages de documentation. La recherche ne mélange jamais silencieusement les langues. Un identifiant traduit, tel que `de/learn/first-pdf`, peut être lu avec `get_doc` ou la ressource `pdfmake://docs/0.3/de/learn/first-pdf`. Chaque langue possède également ses propres fichiers de découverte, par exemple `/docs/0.3/de/llms.txt` et `/docs/0.3/de/llms-full.txt`.\n\n## Exemple de prompt\n\n> J’utilise pdfmake 0.3.x dans Node.js. Consulte la documentation correspondant à cette version avant de générer du code. Utilise l’API singleton Node, enregistre les polices, configure des politiques de ressources synchrones, attends la sortie et cite les identifiants des pages utilisées. Crée une nouvelle définition de document pour chaque requête.\n"
+ },
+ {
+ "id": "guides/llm-and-mcp",
+ "language": "en",
+ "translationKey": "guides/llm-and-mcp",
+ "path": "/docs/0.3/guides/llm-and-mcp/",
+ "title": "LLM and MCP integration",
+ "description": "Use versioned Markdown resources, llms.txt and a local read-only MCP documentation server with pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "guides/llm-and-mcp.md",
+ "url": "https://pdfmake.github.io/docs/0.3/guides/llm-and-mcp/",
+ "uri": "pdfmake://docs/0.3/guides/llm-and-mcp",
+ "markdown": "# LLM and MCP integration\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/guides/llm-and-mcp/\n\n## Use documentation without MCP\n\nEvery page is available as generated Markdown. The same source produces:\n\n- [llms.txt](/docs/0.3/llms.txt): page index with descriptions and Markdown links.\n- [llms-full.txt](/docs/0.3/llms-full.txt): the complete versioned Markdown corpus.\n- [docs-index.json](/docs/0.3/docs-index.json): page IDs, titles, descriptions, source URLs and full Markdown.\n\nThese are discovery aids, not a search-engine or model-indexing guarantee. Keep the installed library version in your prompt. Ask the model to cite the page and use Promise output methods. The library's `AGENTS.md` explains its source pipeline and test commands to coding agents.\n\n## Run the local MCP server\n\nClone the documentation repository, install its dependencies, generate the corpus and start the server:\n\n```sh\ngit clone https://github.com/pdfmake/docs.git\ncd docs\nnpm ci\nnpm run docs:generate\nnode mcp/server.mjs\n```\n\nThis server is part of the local improvement branch until accepted upstream. Start it through your MCP client's stdio configuration, using absolute paths:\n\n```json\n{\n \"mcpServers\": {\n \"pdfmake-docs\": {\n \"command\": \"node\",\n \"args\": [\"/absolute/path/to/docs/mcp/server.mjs\"]\n }\n }\n}\n```\n\nReplace the example path with your clone's path. On Windows JSON paths must use `/` or escaped `\\\\`. Client configuration locations vary. The server writes protocol messages to stdout and errors to stderr. It does not require an API key, model account or network connection after dependency installation.\n\n## Tools and resources\n\n| Capability | Input | Result |\n| --- | --- | --- |\n| `search_docs` | `query`, optional `limit` (1–10), optional `language` | Ranked pages with exact IDs, language, version, source URLs and excerpts |\n| `get_doc` | Exact `id` from search | Complete Markdown page |\n| MCP resources | `pdfmake://docs/0.3/` | The same versioned Markdown page |\n\nThe server can only read its bundled documentation corpus. It cannot render PDFs, evaluate code, read caller-selected filesystem paths or browse remote URLs. Re-run generation and restart it after editing documentation.\n\n`language` accepts `en` (default), `de`, `fr`, `es` and `pt-br`. Every supported language contains the same complete set of documentation pages. Search never silently mixes languages. A translated ID such as `de/learn/first-pdf` can be read with `get_doc` or the resource `pdfmake://docs/0.3/de/learn/first-pdf`. Each language also has its own discovery files, for example `/docs/0.3/de/llms.txt` and `/docs/0.3/de/llms-full.txt`.\n\n## Suggested prompt\n\n> I use pdfmake 0.3.x in Node.js. Search the matching documentation before generating code. Use the Node singleton API, register fonts, configure synchronous resource policies, await output, and cite the page IDs used. Build a fresh document definition per request.\n"
+ },
+ {
+ "id": "pt-br/guides/llm-and-mcp",
+ "language": "pt-br",
+ "translationKey": "guides/llm-and-mcp",
+ "path": "/docs/0.3/pt-br/guides/llm-and-mcp/",
+ "title": "Integração com LLM e MCP",
+ "description": "Use recursos Markdown versionados, llms.txt e um servidor MCP local e somente leitura para a documentação do pdfmake 0.3.",
+ "version": "0.3",
+ "sourceDigest": "f369b718c3c46a1865fd7a38d3ccd5b001b457935d5a0a4bd9fccb22d194bbd3",
+ "source": "guides/llm-and-mcp.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/guides/llm-and-mcp/",
+ "uri": "pdfmake://docs/0.3/pt-br/guides/llm-and-mcp",
+ "markdown": "# Integração com LLM e MCP\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/guides/llm-and-mcp/\n\n## Consulte a documentação sem MCP\n\nCada página também está disponível como Markdown gerado. A mesma fonte produz:\n\n- [llms.txt](/docs/0.3/pt-br/llms.txt): índice de páginas com descrições e links Markdown.\n- [llms-full.txt](/docs/0.3/pt-br/llms-full.txt): corpus Markdown completo e versionado.\n- [docs-index.json](/docs/0.3/pt-br/docs-index.json): IDs de páginas, títulos, descrições, URLs de origem e Markdown completo.\n\nEsses arquivos ajudam na descoberta; eles não garantem indexação por mecanismos de busca ou modelos. Informe ao modelo a versão da biblioteca instalada. Peça que cite as páginas e use métodos de saída baseados em Promise. O `AGENTS.md` da biblioteca explica o pipeline do código-fonte e os comandos de teste usados por agentes de programação.\n\n## Execute o servidor MCP local\n\nClone o repositório da documentação, instale as dependências, gere o corpus e inicie o servidor:\n\n```sh\ngit clone https://github.com/pdfmake/docs.git\ncd docs\nnpm ci\nnpm run docs:generate\nnode mcp/server.mjs\n```\n\nEste servidor faz parte do branch local de melhorias até ser aceito upstream. Inicie-o pela configuração stdio do seu cliente MCP, usando caminhos absolutos:\n\n```json\n{\n \"mcpServers\": {\n \"pdfmake-docs\": {\n \"command\": \"node\",\n \"args\": [\"/absolute/path/to/docs/mcp/server.mjs\"]\n }\n }\n}\n```\n\nSubstitua o caminho de exemplo pelo caminho do seu clone. Em JSON no Windows, use `/` ou `\\\\` escapado. O local da configuração varia conforme o cliente. O servidor escreve mensagens do protocolo em stdout e erros em stderr. Depois de instalar as dependências, ele não precisa de chave de API, conta de modelo nem conexão de rede.\n\n## Ferramentas e recursos\n\n| Recurso | Entrada | Resultado |\n| --- | --- | --- |\n| `search_docs` | `query`, `limit` opcional (1–10), `language` opcional | Páginas ordenadas por relevância, com IDs exatos, idioma, versão, URLs de origem e trechos |\n| `get_doc` | `id` exato obtido na busca | Página Markdown completa |\n| Recursos MCP | `pdfmake://docs/0.3/` | A mesma página Markdown versionada |\n\nO servidor só lê o corpus de documentação empacotado. Ele não renderiza PDFs, executa código, lê caminhos do sistema de arquivos escolhidos pelo chamador nem acessa URLs remotas. Gere novamente o corpus e reinicie o servidor depois de editar a documentação.\n\n`language` aceita `en` (padrão), `de`, `fr`, `es` e `pt-br`. Cada idioma compatível contém o mesmo conjunto completo de páginas da documentação. A busca nunca mistura idiomas sem avisar. Um ID traduzido como `de/learn/first-pdf` pode ser lido com `get_doc` ou pelo recurso `pdfmake://docs/0.3/de/learn/first-pdf`. Cada idioma também tem seus próprios arquivos de descoberta, por exemplo `/docs/0.3/de/llms.txt` e `/docs/0.3/de/llms-full.txt`.\n\n## Sugestão de prompt\n\n> Uso pdfmake 0.3.x no Node.js. Consulte a documentação correspondente antes de gerar código. Use a API singleton do Node, registre as fontes, configure políticas síncronas de recursos, aguarde a saída e cite os IDs das páginas usados. Crie uma definição de documento nova para cada solicitação.\n"
+ },
+ {
+ "id": "de/guides/performance",
+ "language": "de",
+ "translationKey": "guides/performance",
+ "path": "/docs/0.3/de/guides/performance/",
+ "title": "Leistung und Speicher",
+ "description": "Miss Layout- und Ausgabekosten von pdfmake, reduziere wiederholte Ressourcen und steuere die Parallelität, ohne das Dokumentverhalten zu ändern.",
+ "version": "0.3",
+ "sourceDigest": "9aada83a6a91e02de05a173270245ef69b2e909bde55078052abdcaddacc0bf2",
+ "source": "guides/performance.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/guides/performance/",
+ "uri": "pdfmake://docs/0.3/de/guides/performance",
+ "markdown": "# Leistung und Speicher\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/guides/performance/\n\n## Arbeitslast messen\n\nVergleiche repräsentative Dokumente mit derselben Node.js-Version, denselben Schriften und Eingabedaten. Erfasse Median und hohe Latenzwerte, Spitzenspeicherverbrauch, Seitenzahl und Ausgabegröße. Miss den Kaltstart und das Laden der Schriften getrennt von wiederholten Renderdurchläufen. Vergleiche Dokumente mit vielen Tabellen, langem Text und vielen Bildern separat.\n\n**JavaScript**\n\n```js\nconst start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });\n```\n\n**TypeScript**\n\n```ts\nconst start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });\n```\n\n`makeFreshDefinition()` ist eine eigene Factory-Funktion. Verwende keine Dokumentdefinition wieder, die das Layout bereits verändert hat. Prüfe neben der Geschwindigkeit auch den Text, die Seitenzahlen und repräsentative gerenderte Seiten.\n\n## Vermeidbare Arbeit reduzieren\n\n- Lege wiederholte Bilder im Wörterbuch `images` ab und verweise über ihren Schlüssel darauf. Skaliere große Quelldateien vor dem Einbetten; die Anzeigemaße verkleinern nicht die ursprünglichen Bilddaten.\n- Verwende feste Breiten, wenn dein Layout es zulässt. Inhaltsabhängige `auto`-Breiten erfordern Textmessungen; miss die Leistung, bevor du Tabellen neu gestaltest.\n- Registriere Schriften einmal. Liefere in Browseranwendungen nur die benötigten Schriftfamilien und Varianten aus.\n- Lass `fontLayoutCache` aktiviert, sofern kein gemessenes Kompatibilitätsproblem das Deaktivieren erfordert. Siehe [Rendering-Optionen](/docs/0.3/de/options/).\n- Vermeide Base64, wenn deine API binäre PDF-Bytes zurückgeben kann. Base64 stellt je drei Bytes mit vier Zeichen dar und legt außerdem eine Zeichenfolge im Speicher an.\n- Verwende `write()` oder verarbeite Streams direkt, um den zusätzlichen zusammengefügten Buffer von `getBuffer()` zu vermeiden, wenn du nur eine Datei oder einen Stream benötigst. Das Layout wird trotzdem vor der Ausgabe berechnet.\n\n## Parallelität steuern\n\nMehr gleichzeitige PDF-Aufträge können den Speicherverbrauch und die Verzögerungen der Event-Loop erhöhen. Begrenze die Zahl paralleler Renderdurchläufe und teste die Auslastung, statt nur eine Anfrage zu messen. Verwende Worker-Threads oder separate Prozesse, wenn blockierende Arbeit die Reaktionsfähigkeit der API beeinträchtigt. Ändere veränderliche Singleton-Konfiguration nicht pro Anfrage.\n\n## Benchmark für die Bibliotheksentwicklung\n\nDer Verbesserungszweig der Bibliothek enthält `npm run benchmark:text`, ausführbar nach `npm run build:node`. Der Benchmark vergleicht das Abflachen von Text-Arrays mit dem vorherigen Algorithmus anhand deterministischer gemischter Eingaben und prüft, ob die Ergebnisse übereinstimmen. Die optimierte Schleife vermeidet wiederholtes Kopieren von Präfixen. Der gemessene Geschwindigkeitsgewinn betrifft nur diese Hilfsfunktion; er sagt nichts über die Gesamtdauer der PDF-Erzeugung aus.\n\nZeitgrenzwerte sind bewusst nicht Teil von CI, da gemeinsam genutzte Runner unzuverlässige Messwerte liefern. Verwende Korrektheitstests als Freigabekriterium und halte Benchmark-Ergebnisse mit den Umgebungsdetails zur Prüfung fest.\n"
+ },
+ {
+ "id": "es/guides/performance",
+ "language": "es",
+ "translationKey": "guides/performance",
+ "path": "/docs/0.3/es/guides/performance/",
+ "title": "Rendimiento y memoria",
+ "description": "Mide los costes de maquetación y salida de pdfmake, reduce los recursos repetidos y controla la concurrencia sin cambiar el comportamiento del documento.",
+ "version": "0.3",
+ "sourceDigest": "9aada83a6a91e02de05a173270245ef69b2e909bde55078052abdcaddacc0bf2",
+ "source": "guides/performance.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/guides/performance/",
+ "uri": "pdfmake://docs/0.3/es/guides/performance",
+ "markdown": "# Rendimiento y memoria\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/guides/performance/\n\n## Medir tu carga de trabajo\n\nEvalúa documentos representativos con la misma versión de Node, las mismas fuentes y los mismos datos de entrada. Registra la latencia mediana y de cola, la memoria máxima, el número de páginas y el tamaño de salida. Separa el inicio en frío y la carga de fuentes de los renderizados repetidos. Compara por separado documentos con muchas tablas, texto extenso e imágenes.\n\n**JavaScript**\n\n```js\nconst start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });\n```\n\n**TypeScript**\n\n```ts\nconst start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });\n```\n\n`makeFreshDefinition()` es una función de fábrica propia. No reutilices una definición que ya haya sido modificada por la maquetación. Comprueba el texto, el número de páginas y algunas páginas representativas renderizadas, además de la velocidad.\n\n## Reducir trabajo evitable\n\n- Coloca las imágenes repetidas en el diccionario `images` y haz referencia a ellas por su clave. Reduce el tamaño de las imágenes de origen grandes antes de incrustarlas; las dimensiones de visualización no reducen el tamaño de los datos originales.\n- Siempre que la distribución lo permita, prefiere los anchos fijos. Los anchos `auto` determinados por el contenido requieren medir el texto; mide el rendimiento antes de rediseñar las tablas.\n- Registra las fuentes una vez. En aplicaciones de navegador, incluye solo las familias y variantes necesarias.\n- Mantén activado `fontLayoutCache` salvo que un problema de compatibilidad medido requiera desactivarlo. Consulta las [opciones de renderizado](/docs/0.3/es/options/).\n- Evita Base64 cuando tu API pueda devolver bytes PDF binarios. Base64 representa cada tres bytes con cuatro caracteres y también reserva una cadena.\n- Usa `write()` o consume el flujo directamente para evitar el Buffer concatenado adicional que produce `getBuffer()` cuando solo necesitas un archivo o un flujo. La maquetación sigue ocurriendo antes de consumir la salida.\n\n## Controlar la concurrencia\n\nMás trabajos PDF simultáneos pueden aumentar el uso de memoria y la latencia del bucle de eventos. Limita el número de renderizados simultáneos y prueba el rendimiento con carga, en vez de medir una sola solicitud. Usa hilos de trabajo o procesos independientes si el trabajo bloqueante afecta la capacidad de respuesta de la API. Mantén fuera del código por solicitud la configuración singleton mutable.\n\n## Benchmark de desarrollo de la biblioteca\n\nLa rama de mejoras de la biblioteca incluye `npm run benchmark:text` después de `npm run build:node`. Compara el aplanamiento de matrices de texto con el algoritmo anterior mediante una entrada mixta determinista y comprueba que los resultados sean equivalentes. El bucle optimizado evita copiar repetidamente los prefijos. Su aceleración mide solo esa función; no afirma que mejore en la misma proporción la generación completa de PDF.\n\nLos umbrales de tiempo están excluidos deliberadamente de CI porque los ejecutores compartidos producen mediciones ruidosas. Usa las pruebas de corrección como condición de aceptación y conserva los resultados del benchmark junto con los detalles del entorno para revisarlos.\n"
+ },
+ {
+ "id": "fr/guides/performance",
+ "language": "fr",
+ "translationKey": "guides/performance",
+ "path": "/docs/0.3/fr/guides/performance/",
+ "title": "Performances et mémoire",
+ "description": "Mesurez le coût de mise en page et de sortie de pdfmake, réduisez les ressources répétées et maîtrisez la concurrence sans changer le comportement du document.",
+ "version": "0.3",
+ "sourceDigest": "9aada83a6a91e02de05a173270245ef69b2e909bde55078052abdcaddacc0bf2",
+ "source": "guides/performance.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/guides/performance/",
+ "uri": "pdfmake://docs/0.3/fr/guides/performance",
+ "markdown": "# Performances et mémoire\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/guides/performance/\n\n## Mesurer votre charge de travail\n\nÉvaluez des documents représentatifs avec la même version de Node, les mêmes polices et les mêmes données d’entrée. Notez la latence médiane et de queue, la mémoire maximale, le nombre de pages et la taille de sortie. Séparez le démarrage à froid et le chargement des polices des rendus répétés. Comparez distinctement les documents contenant de nombreux tableaux, de longs textes ou beaucoup d’images.\n\n**JavaScript**\n\n```js\nconst start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });\n```\n\n**TypeScript**\n\n```ts\nconst start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });\n```\n\n`makeFreshDefinition()` est votre propre fonction de création. Ne réutilisez pas une définition déjà modifiée par la mise en page. Vérifiez aussi le texte, le nombre de pages et des pages rendues représentatives, pas seulement la vitesse.\n\n## Réduire le travail évitable\n\n- Placez les images répétées dans le dictionnaire `images` et référencez-les par leur clé. Redimensionnez les sources volumineuses avant de les intégrer ; les dimensions d’affichage ne réduisent pas leur charge utile.\n- Préférez des largeurs fixes si votre mise en page le permet. Les largeurs `auto` calculées selon le contenu nécessitent la mesure du texte ; mesurez les performances avant de remanier les tableaux.\n- Enregistrez les polices une fois. Dans les applications navigateur, ne livrez que les familles et variantes nécessaires.\n- Laissez `fontLayoutCache` activé sauf si un problème de compatibilité constaté impose de le désactiver. Consultez les [options de rendu](/docs/0.3/fr/options/).\n- Évitez base64 si votre API peut renvoyer les octets PDF binaires. Base64 représente trois octets par quatre caractères et alloue également une chaîne.\n- Utilisez `write()` ou consommez directement le flux pour éviter le Buffer concaténé supplémentaire créé par `getBuffer()` si vous avez uniquement besoin d’un fichier ou d’un flux. La mise en page a toutefois lieu avant la consommation de la sortie.\n\n## Maîtriser la concurrence\n\nUn plus grand nombre de tâches PDF simultanées peut augmenter la mémoire utilisée et le délai de la boucle d’événements. Limitez les rendus concurrents et testez le débit au lieu de mesurer seulement une requête. Utilisez des threads worker ou des processus séparés si le travail bloquant affecte la réactivité de l’API. Gardez la configuration mutable du singleton hors du code exécuté pour chaque requête.\n\n## Benchmark de développement de la bibliothèque\n\nLa branche d’amélioration de la bibliothèque comprend `npm run benchmark:text`, à exécuter après `npm run build:node`. Le benchmark compare l’aplatissement de tableaux de texte à l’algorithme précédent avec des entrées mixtes déterministes et vérifie l’équivalence des résultats. La boucle optimisée évite de recopier les préfixes à répétition. Son gain de vitesse concerne uniquement cet utilitaire ; il ne porte pas sur la durée totale de génération PDF.\n\nLes seuils de temps sont volontairement exclus de l’intégration continue, car les exécuteurs partagés produisent des mesures variables. Utilisez les tests de correction comme critères de validation et conservez les résultats du benchmark avec les détails de l’environnement pour la revue.\n"
+ },
+ {
+ "id": "guides/performance",
+ "language": "en",
+ "translationKey": "guides/performance",
+ "path": "/docs/0.3/guides/performance/",
+ "title": "Performance and memory",
+ "description": "Measure pdfmake layout and output costs, reduce repeated resources, and control concurrency without changing document behavior.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "guides/performance.md",
+ "url": "https://pdfmake.github.io/docs/0.3/guides/performance/",
+ "uri": "pdfmake://docs/0.3/guides/performance",
+ "markdown": "# Performance and memory\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/guides/performance/\n\n## Measure your workload\n\nBenchmark representative documents with the same Node version, fonts and input data. Record median and tail latency, peak memory, page count and output size. Separate cold startup/font loading from repeated renders. Compare table-heavy, long-text and image-heavy documents separately.\n\n**JavaScript**\n\n```js\nconst start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });\n```\n\n**TypeScript**\n\n```ts\nconst start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });\n```\n\n`makeFreshDefinition()` is your own factory. Do not reuse a definition already mutated by layout. Verify text, page counts and representative rendered pages as well as speed.\n\n## Reduce avoidable work\n\n- Put repeated images in the `images` dictionary and reference them by key. Resize large source images before embedding them; display dimensions do not reduce the original payload.\n- Prefer fixed widths when your layout permits them. Content-driven `auto` widths require text measurement; benchmark before redesigning tables.\n- Register fonts once. In browser applications, ship only needed font families and variants.\n- Keep `fontLayoutCache` enabled unless a measured compatibility problem requires disabling it. See [render options](/docs/0.3/options/).\n- Avoid base64 when your API can return binary PDF bytes. Base64 represents each three bytes with four characters and also allocates a string.\n- Use `write()` or direct stream consumption to avoid the additional concatenated Buffer produced by `getBuffer()` when you only need a file or stream. Layout still occurs before output consumption.\n\n## Control concurrency\n\nMore simultaneous PDF jobs can increase memory use and event-loop delay. Bound concurrent renders and load-test throughput rather than only measuring one request. Use worker threads or separate processes when blocking work affects API responsiveness. Keep mutable singleton configuration out of per-request code.\n\n## Library development benchmark\n\nThe library improvement branch includes `npm run benchmark:text` after `npm run build:node`. It compares text-array flattening with the previous algorithm using deterministic mixed input and verifies equivalent results. The optimized loop avoids repeated prefix copying. Its speedup measures that helper only; it is not a claim about total PDF generation time.\n\nTiming thresholds are deliberately excluded from CI because shared runners are noisy. Use correctness tests as gates and retain benchmark results with environment details for review.\n"
+ },
+ {
+ "id": "pt-br/guides/performance",
+ "language": "pt-br",
+ "translationKey": "guides/performance",
+ "path": "/docs/0.3/pt-br/guides/performance/",
+ "title": "Desempenho e memória",
+ "description": "Meça os custos de layout e saída do pdfmake, reduza recursos repetidos e controle a concorrência sem alterar o comportamento do documento.",
+ "version": "0.3",
+ "sourceDigest": "9aada83a6a91e02de05a173270245ef69b2e909bde55078052abdcaddacc0bf2",
+ "source": "guides/performance.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/guides/performance/",
+ "uri": "pdfmake://docs/0.3/pt-br/guides/performance",
+ "markdown": "# Desempenho e memória\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/guides/performance/\n\n## Meça sua carga de trabalho\n\nFaça benchmark de documentos representativos com a mesma versão do Node, as mesmas fontes e os mesmos dados de entrada. Registre a latência mediana e de cauda, o pico de memória, o número de páginas e o tamanho da saída. Separe a inicialização fria e o carregamento das fontes das renderizações repetidas. Compare documentos com muitas tabelas, textos longos e muitas imagens separadamente.\n\n**JavaScript**\n\n```js\nconst start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });\n```\n\n**TypeScript**\n\n```ts\nconst start = performance.now();\nconst bytes = await pdfmake.createPdf(makeFreshDefinition()).getBuffer();\nconsole.log({ milliseconds: performance.now() - start, bytes: bytes.length });\n```\n\n`makeFreshDefinition()` é uma função criada por você. Não reutilize uma definição que já foi modificada pelo layout. Além da velocidade, verifique o texto, o número de páginas e páginas renderizadas representativas.\n\n## Reduza trabalho evitável\n\n- Coloque imagens repetidas no dicionário `images` e faça referência a elas pela chave. Redimensione imagens-fonte grandes antes de incorporá-las; as dimensões de exibição não reduzem o conteúdo original.\n- Prefira larguras fixas quando o layout permitir. Larguras `auto` calculadas pelo conteúdo exigem medição de texto; faça benchmark antes de redesenhar tabelas.\n- Registre fontes uma vez. Em aplicações de navegador, inclua somente as famílias e variantes necessárias.\n- Mantenha `fontLayoutCache` ativado, a menos que um problema de compatibilidade medido exija desativá-lo. Consulte [opções de renderização](/docs/0.3/pt-br/options/).\n- Evite base64 quando sua API puder retornar bytes binários do PDF. Base64 representa cada três bytes com quatro caracteres e também aloca uma string.\n- Use `write()` ou consuma o stream diretamente para evitar o Buffer concatenado adicional produzido por `getBuffer()` quando você só precisa de um arquivo ou stream. O layout ainda ocorre antes do consumo da saída.\n\n## Controle a concorrência\n\nMais trabalhos de PDF simultâneos podem aumentar o uso de memória e o atraso do event loop. Limite as renderizações simultâneas e teste a carga e a vazão, em vez de medir apenas uma solicitação. Use worker threads ou processos separados quando o trabalho bloqueante afetar a capacidade de resposta da API. Não altere configurações mutáveis do singleton por solicitação.\n\n## Benchmark de desenvolvimento da biblioteca\n\nO branch de melhorias da biblioteca inclui `npm run benchmark:text` depois de `npm run build:node`. Ele compara a conversão de arrays de texto com o algoritmo anterior usando entradas mistas determinísticas e verifica resultados equivalentes. O loop otimizado evita cópias repetidas do prefixo. O ganho medido se aplica somente a esse helper; não é uma afirmação sobre o tempo total de geração do PDF.\n\nLimites de tempo foram deliberadamente excluídos da CI porque runners compartilhados têm resultados ruidosos. Use testes de correção como critérios e mantenha os resultados dos benchmarks junto com detalhes do ambiente para revisão.\n"
+ },
+ {
+ "id": "de/guides/playground",
+ "language": "de",
+ "translationKey": "guides/playground",
+ "path": "/docs/0.3/de/guides/playground/",
+ "title": "Playground-Anleitung",
+ "description": "Erkunde pdfmake-Beispiele mit Code-Editor, direkter PDF-Vorschau, Seitennavigation, lokalen Imports und herunterladbarem Quellcode.",
+ "version": "0.3",
+ "sourceDigest": "396ad48200f73ea3dadbbbcc3eaaf41d819c39e44ee4dd12c2546b4608adf171",
+ "source": "guides/playground.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/guides/playground/",
+ "uri": "pdfmake://docs/0.3/de/guides/playground",
+ "markdown": "# Playground-Anleitung\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/guides/playground/\n\n## Durch Bearbeiten lernen\n\nÖffne den [Playground](/docs/0.3/de/playground/), wähle ein Beispiel und bearbeite die Definition im linken Bereich. Rechts siehst du eine echte, mit PDF.js gerenderte PDF. Wenn **Live-Vorschau** aktiviert ist, wird die PDF nach jeder Bearbeitung automatisch aktualisiert. Wähle **Ausführen** oder drücke **Strg/Command + Enter**, um sie sofort zu aktualisieren.\n\nDer CodeMirror-6-Editor bietet Syntaxhervorhebung, Zeilennummern, Klammerzuordnung, Einrückung, Undo/Redo-Schaltflächen, einen persistenten Rückgängig-Verlauf und Syntaxdiagnosen mit Zeile und Spalte. Mit **Zum Fehler springen** wird die fehlerhafte Quelltextstelle fokussiert. Der Editor bietet außerdem Vervollständigungen. Drücke **Strg + Leertaste**, um sie aufzurufen. Vorgeschlagene Feldnamen sind Hinweise; gültigen Kontext, Typ und Werte beschreibt die Dokumentreferenz.\n\n## Beispiele\n\n| Beispiel | Erkunden |\n| --- | --- |\n| [Erstes Dokument](/docs/0.3/de/playground/?example=welcome) | Text, Abstände und Schriftstile |\n| [Rechnung](/docs/0.3/de/playground/?example=invoice) | Tabelle, Summen und Fußzeile mit Seitenzahlen |\n| [Tabellen](/docs/0.3/de/playground/?example=tables) | Wiederholte Kopfzeilen auf mehreren Seiten |\n| [Textstile](/docs/0.3/de/playground/?example=styles) | Benannte Stile und Inline-Überschreibungen |\n| [Spalten](/docs/0.3/de/playground/?example=columns) | Nebeneinander angeordnete Blöcke und Stapel |\n| [Zellüberspannungen](/docs/0.3/de/playground/?example=spans) | Zeilen- und Spaltenüberspannungen mit Platzhaltern |\n| [Seiten](/docs/0.3/de/playground/?example=pages) | Seitenumbrüche, Kopf- und Fußzeilen |\n| [Vektoren](/docs/0.3/de/playground/?example=vectors) | Eingebettete SVGs und QR-Codes |\n| [Bilder](/docs/0.3/de/playground/?example=images) | Eingebettete PNG-Daten unter einem Namen wiederverwenden |\n| [Listen](/docs/0.3/de/playground/?example=lists) | Nummerierte Listen, Aufzählungen und Links |\n\nEin `example`-URL-Parameter wählt ein bekanntes Beispiel aus; er akzeptiert kein JavaScript. Die Live-Vorschau aktualisiert auch wiederhergestellte Arbeitsbereiche, gespeicherte Dokumente und importierte Dateien. Schalte **Live-Vorschau** aus, bevor du Code importierst, den du zunächst prüfen möchtest.\n\n## Vorschau und Ausgabe\n\nVerwende die Pfeilschaltflächen, um die Seite zu wechseln, und das Zoommenü, um die Skalierung anzupassen. **Seitentext** zeigt den aus der aktuellen PDF-Seite extrahierten Text zur Prüfung und für unterstützende Technologien an. **PDF öffnen** öffnet die erzeugte Datei separat; **PDF herunterladen** speichert dieselben PDF-Bytes. Die Fußzeile zeigt Erstellungszeit und Ausgabegröße. Die Erstellungszeit umfasst nicht das Rendern der Vorschau mit PDF.js.\n\nDie Live-Vorschau wartet nach der letzten Änderung 650 ms und rendert anschließend in einem neuen Worker. Die vorherige PDF bleibt sichtbar, bis die nächste Seite außerhalb des Bildschirms fertig gerendert ist; danach wird die Canvas in einem Schritt ausgetauscht. Die ausgewählte PDF-Seite und Zoomstufe bleiben nach Möglichkeit erhalten. Downloads sind deaktiviert, wenn die sichtbare PDF nicht dem aktuellen Code entspricht. Bei Fehlern bleibt die letzte erfolgreiche Vorschau erhalten, statt durch ein leeres Feld ersetzt zu werden.\n\n## Arbeit behalten\n\n**Code exportieren** lädt die aktuelle Definition als JavaScript herunter. **.js importieren** liest eine lokale Datei ein. Dateien sind auf 500 KB begrenzt. Deaktiviere **Live-Vorschau**, bevor du Code importierst, den du vor dem Ausführen prüfen möchtest. Vor dem Zurücksetzen oder Wechseln des Beispiels wirst du gefragt, bevor Änderungen überschrieben werden.\n\n**Der aktuelle Arbeitsbereich wird lokal automatisch gespeichert** – einschließlich Definition, Editor-Auswahl, Undo-Verlauf, Beispiel, Seite und Zoomstufe. Beim Neuladen werden Editor, Undo-/Redo-Verlauf und die Einstellung der Live-Vorschau wiederhergestellt. Wenn die Live-Vorschau aktiviert ist, wird die wiederhergestellte PDF automatisch gerendert; Änderungen aktualisieren sie anschließend ohne **Ausführen**. Ist sie deaktiviert, bleibt das Rendering auch nach dem Neuladen manuell.\n\nGib dem Dokument einen Namen und wähle **Dokument speichern**, um eine separate lokale Kopie anzulegen. Ein neuer Name erzeugt ein weiteres gespeichertes Dokument; unter dem aktuell ausgewählten Namen wird die Datei aktualisiert. Über das Menü gespeicherter Dokumente stellst du ein Dokument und seinen Verlauf wieder her. **Löschen** entfernt diese benannte Kopie, behält aber den aktuellen Editorinhalt bei. Bis zu 30 benannte Dokumente können gespeichert werden. Es gelten die Speichergrenzen des Browsers.\n\n**Entwurf lokal speichern** bleibt ein separates Schnellsnapshot mit **Wiederherstellen**- und **Löschen**-Steuerung. **Automatisches Speichern des Arbeitsbereichs löschen** entfernt die aktuelle automatische Speicherung und pausiert sie, bis du wieder Text eingibst. Benannte Dokumente und Schnellentwürfe sind getrennt. Wenn der Browser-Speicher deaktiviert oder voll ist, funktioniert der Editor weiterhin und der Codeexport bleibt verfügbar. Diese Anwendung lädt weder Quellcode noch PDFs hoch.\n\n## Grenzen des Renderings\n\nJeder Renderdurchlauf startet einen neuen Browser-Worker. **Abbrechen** beendet ihn auch bei einer blockierten JavaScript-Schleife. Ein Zeitlimit von zehn Sekunden beendet unerwartet aufwendige Aufgaben. Vereinfache große Dokumente oder teste sie in einer kontrollierten Anwendung, wenn sie das Limit des Playgrounds überschreiten. Die PDF-API sperrt hier entfernte URL-Ressourcen; verwende eingebettete Bilder und die bereitgestellten Roboto-Schriften.\n\nBenutzerdefiniertes JavaScript ist vertrauenswürdiger Benutzer-Code, keine Sicherheitssandbox. Führe keinen Code aus unbekannter Quelle aus. Ein Worker schützt die Benutzeroberfläche vor Blockaden, isoliert aber keinen bösartigen Code. Hinweise für Produktions-APIs findest du unter [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/).\n\n## Eigenständiges Entwicklungswerkzeug starten\n\nFühre in einem erstellten Checkout der pdfmake-Bibliothek `npm run playground` aus. Damit wird dieselbe Benutzeroberfläche mit der Engine dieses Checkouts unter `http://127.0.0.1:1234/playground/` bereitgestellt. Für die separaten Werkzeuge ist Node.js >=22.13 erforderlich. Die Laufzeitanforderung der veröffentlichten Bibliothek bleibt Node.js >=20. Die Dokumentationswebsite kann mit `PDFMAKE_SOURCE` ebenfalls eine lokale Engine verwenden; siehe die README des Dokumentationsrepositorys.\n"
+ },
+ {
+ "id": "es/guides/playground",
+ "language": "es",
+ "translationKey": "guides/playground",
+ "path": "/docs/0.3/es/guides/playground/",
+ "title": "Guía del entorno de pruebas",
+ "description": "Explora ejemplos de pdfmake con un editor de código, vista previa directa del PDF, navegación por páginas, importaciones locales y descarga del código fuente.",
+ "version": "0.3",
+ "sourceDigest": "396ad48200f73ea3dadbbbcc3eaaf41d819c39e44ee4dd12c2546b4608adf171",
+ "source": "guides/playground.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/guides/playground/",
+ "uri": "pdfmake://docs/0.3/es/guides/playground",
+ "markdown": "# Guía del entorno de pruebas\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/guides/playground/\n\n## Aprende editando\n\nAbre el [entorno de pruebas](/docs/0.3/es/playground/), elige un ejemplo y edita la definición en el panel izquierdo. El panel derecho muestra un PDF real renderizado mediante PDF.js. Con **Live preview** activada, el PDF se actualiza automáticamente después de editar. Selecciona **Run** o pulsa **Ctrl/Command + Enter** para actualizarlo de inmediato.\n\nEl editor CodeMirror 6 incluye resaltado de sintaxis, números de línea, coincidencia de llaves, sangría, botones Deshacer/Rehacer, historial de deshacer persistente y diagnósticos de sintaxis con línea y columna. **Go to error** enfoca la ubicación problemática en el código. También ofrece autocompletado. Usa **Ctrl + Space** para solicitar sugerencias. Los nombres de campos que aparecen son pistas; la referencia del documento define el contexto, el tipo y los valores válidos.\n\n## Ejemplos\n\n| Ejemplo | Explora |\n| --- | --- |\n| [Primer documento](/docs/0.3/es/playground/?example=welcome) | Texto, espaciado y estilos de fuente |\n| [Factura](/docs/0.3/es/playground/?example=invoice) | Una tabla, totales y pie con número de página |\n| [Tablas](/docs/0.3/es/playground/?example=tables) | Encabezados repetidos en varias páginas |\n| [Estilos de texto](/docs/0.3/es/playground/?example=styles) | Estilos con nombre y anulaciones en línea |\n| [Columnas](/docs/0.3/es/playground/?example=columns) | Bloques y pilas uno junto a otro |\n| [Celdas combinadas](/docs/0.3/es/playground/?example=spans) | Celdas que abarcan filas y columnas con marcadores de posición |\n| [Páginas](/docs/0.3/es/playground/?example=pages) | Saltos de página, encabezados y pies de página |\n| [Vectores](/docs/0.3/es/playground/?example=vectors) | SVG incrustados y códigos QR |\n| [Imágenes](/docs/0.3/es/playground/?example=images) | Datos PNG incrustados y reutilizados por nombre |\n| [Listas](/docs/0.3/es/playground/?example=lists) | Listas numeradas, viñetas y enlaces |\n\nEl parámetro URL `example` selecciona un ejemplo conocido; no acepta JavaScript. La vista previa en directo también actualiza los espacios de trabajo restaurados, los documentos guardados y los archivos importados. Desactiva **Live preview** antes de importar código que quieras revisar primero.\n\n## Vista previa y salida\n\nUsa los botones de flecha para cambiar de página y el menú de zoom para cambiar la escala. **Page text** muestra el texto extraído de la página PDF actual para inspeccionarlo y para tecnologías de asistencia. **Open PDF** abre el archivo generado por separado; **Download PDF** guarda los mismos bytes PDF. El pie muestra el tiempo de generación y el tamaño de salida. El tiempo de generación no incluye el renderizado de la vista previa con PDF.js.\n\nLa vista previa en directo espera 650 ms después de la última edición y luego renderiza en un trabajador nuevo. El PDF anterior permanece visible hasta que termina el renderizado de la página nueva fuera de pantalla; entonces el lienzo se sustituye en un solo paso. Cuando es posible, se conservan la página PDF seleccionada y el nivel de zoom. Las descargas se desactivan mientras el PDF visible no coincida con el código actual. Los errores conservan la última vista previa correcta en lugar de sustituirla por un panel en blanco.\n\n## Conservar el trabajo\n\n**Export code** descarga la definición actual como JavaScript. **Import .js** lee un archivo local; el límite es de 500 KB. Desactiva **Live preview** antes de importar código que quieras revisar antes de ejecutarlo. Al reiniciar o cambiar de ejemplo se pregunta antes de sustituir las ediciones.\n\n**El espacio de trabajo actual se guarda automáticamente en el almacenamiento local**, incluida la definición, la selección del editor, el historial de deshacer, el ejemplo y la configuración de página y zoom. Al recargar, se restaura el editor, su historial de Deshacer/Rehacer y la preferencia de Live preview. Si la vista previa en directo está activada, el PDF restaurado se vuelve a renderizar automáticamente y las siguientes ediciones se actualizan sin pulsar Run. Si está desactivada, el renderizado sigue siendo manual incluso después de recargar.\n\nAsigna un nombre al documento y selecciona **Save document** para conservarlo como documento local independiente. Si le asignas un nombre nuevo, se crea otra entrada; si lo guardas con el mismo nombre seleccionado, se actualiza esa entrada. El menú de documentos guardados restaura un documento y su historial. Eliminar quita esa copia con nombre y conserva el contenido actual del editor. Se pueden guardar hasta 30 documentos con nombre. El almacenamiento del navegador también tiene cuotas.\n\n**Save draft locally** sigue siendo una instantánea rápida independiente con controles Restaurar/Borrar. **Clear workspace autosave** elimina el guardado automático actual y lo pausa hasta que vuelvas a escribir. Los documentos con nombre y los borradores rápidos son independientes. Si el almacenamiento del navegador está desactivado o lleno, el editor sigue funcionando y se puede exportar el código. Esta aplicación no sube el código ni el PDF.\n\n## Límites del renderizado\n\nCada renderizado inicia un trabajador nuevo del navegador. **Cancel** lo termina, incluso si hay un bucle JavaScript bloqueado. Un límite de diez segundos detiene el trabajo inesperadamente costoso. Simplifica los documentos grandes o pruébalos en una aplicación controlada si superan el límite del entorno de pruebas. Aquí, la API PDF deniega los recursos de URL remotas; usa imágenes incrustadas y las fuentes Roboto suministradas.\n\nEl JavaScript personalizado es código de confianza del usuario, no una caja de arena de seguridad. No ejecutes código de origen desconocido. Un trabajador protege la interfaz de usuario frente a bloqueos, pero no aísla el código malicioso. Consulta [seguridad de recursos](/docs/0.3/es/guides/resource-security/) para obtener recomendaciones sobre API en producción.\n\n## Ejecutar la herramienta de desarrollo independiente\n\nDesde una copia compilada de la biblioteca pdfmake, ejecuta `npm run playground`. Esto sirve la misma interfaz con el motor de esa copia en `http://127.0.0.1:1234/playground/`. Sus herramientas independientes requieren Node >=22.13. El requisito de ejecución de la biblioteca publicada sigue siendo Node >=20. El sitio de documentación también puede probar un motor local mediante `PDFMAKE_SOURCE`; consulta el README del repositorio de documentación.\n"
+ },
+ {
+ "id": "fr/guides/playground",
+ "language": "fr",
+ "translationKey": "guides/playground",
+ "path": "/docs/0.3/fr/guides/playground/",
+ "title": "Guide du playground",
+ "description": "Explorez les exemples pdfmake avec un éditeur de code, un aperçu PDF direct, la navigation entre les pages et l’importation locale.",
+ "version": "0.3",
+ "sourceDigest": "396ad48200f73ea3dadbbbcc3eaaf41d819c39e44ee4dd12c2546b4608adf171",
+ "source": "guides/playground.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/guides/playground/",
+ "uri": "pdfmake://docs/0.3/fr/guides/playground",
+ "markdown": "# Guide du playground\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/guides/playground/\n\n## Apprendre en modifiant le code\n\nOuvrez le [playground](/docs/0.3/fr/playground/), choisissez un exemple et modifiez la définition dans le panneau de gauche. Le panneau de droite affiche un véritable PDF rendu avec PDF.js. Lorsque l’aperçu en direct est activé, le PDF se met automatiquement à jour après vos modifications. Sélectionnez **Run** ou appuyez sur **Ctrl/Commande + Entrée** pour lancer immédiatement le rendu.\n\nL’éditeur CodeMirror 6 propose la coloration syntaxique, les numéros de ligne, l’appariement des parenthèses, l’indentation, les boutons Undo/Redo, un historique d’annulation conservé et des diagnostics de syntaxe indiquant la ligne et la colonne. **Go to error** place le curseur sur l’emplacement fautif. L’éditeur propose aussi des complétions. Utilisez **Ctrl + Espace** pour les afficher. Les noms de champs suggérés sont des indications ; la référence du document définit leur contexte, leur type et leurs valeurs valides.\n\n## Exemples\n\n| Exemple | Découverte |\n| --- | --- |\n| [Premier document](/docs/0.3/fr/playground/?example=welcome) | Texte, espacements et styles de police |\n| [Facture](/docs/0.3/fr/playground/?example=invoice) | Tableau, totaux et pied de page avec numéro de page |\n| [Tableaux](/docs/0.3/fr/playground/?example=tables) | En-têtes répétés sur plusieurs pages |\n| [Styles de texte](/docs/0.3/fr/playground/?example=styles) | Styles nommés et remplacements en ligne |\n| [Colonnes](/docs/0.3/fr/playground/?example=columns) | Blocs côte à côte et piles |\n| [Fusions](/docs/0.3/fr/playground/?example=spans) | Fusions de lignes et colonnes avec cellules de remplacement |\n| [Pages](/docs/0.3/fr/playground/?example=pages) | Sauts de page, en-têtes et pieds de page |\n| [Vecteurs](/docs/0.3/fr/playground/?example=vectors) | SVG intégrés et codes QR |\n| [Images](/docs/0.3/fr/playground/?example=images) | Données PNG intégrées réutilisées par nom |\n| [Listes](/docs/0.3/fr/playground/?example=lists) | Éléments numérotés, puces et liens |\n\nLe paramètre d’URL `example` sélectionne un exemple connu ; il n’accepte pas de JavaScript. L’aperçu en direct met aussi à jour les espaces de travail restaurés, les documents enregistrés et les fichiers importés. Désactivez **Live preview** avant d’importer du code que vous voulez examiner au préalable.\n\n## Aperçu et sortie\n\nUtilisez les flèches pour changer de page et le menu de zoom pour modifier l’échelle. **Page text** expose le texte extrait de la page PDF actuelle pour inspection et pour les technologies d’assistance. **Open PDF** ouvre le fichier généré séparément ; **Download PDF** enregistre les mêmes octets PDF. Le pied de page indique la durée de génération et la taille de sortie. La durée n’inclut pas le rendu de l’aperçu par PDF.js.\n\nL’aperçu en direct attend 650 ms après la dernière modification, puis effectue le rendu dans un nouveau worker. L’ancien PDF reste visible jusqu’à ce que la page suivante ait fini son rendu hors écran ; le canevas est alors remplacé en une seule opération. La page PDF sélectionnée et le zoom sont conservés lorsque c’est possible. Le téléchargement est désactivé tant que le PDF visible ne correspond pas au code actuel. En cas d’erreur, le dernier aperçu réussi reste affiché au lieu d’être remplacé par un panneau vide.\n\n## Conserver votre travail\n\n**Export code** télécharge la définition actuelle au format JavaScript. **Import .js** lit un fichier local. Les fichiers sont limités à 500 Ko. Désactivez **Live preview** avant d’importer du code que vous souhaitez examiner avant son exécution. Une réinitialisation ou un changement d’exemple demande confirmation avant de remplacer vos modifications.\n\n**L’espace de travail actuel est enregistré automatiquement en local**, avec la définition, la sélection de l’éditeur, l’historique d’annulation, l’exemple, la page et le zoom. Après rechargement, l’éditeur, son historique Undo/Redo et la préférence d’aperçu en direct sont restaurés. Si l’aperçu est activé, le PDF restauré est généré automatiquement et les modifications suivantes le mettent à jour sans cliquer sur Run. S’il est désactivé, le rendu reste manuel, même après rechargement.\n\nDonnez un nom au document et choisissez **Save document** pour conserver une copie locale distincte. Un nouveau nom crée un autre document enregistré ; enregistrer sous le nom sélectionné le met à jour. Le menu des documents enregistrés restaure un document et son historique. Delete supprime cette copie nommée tout en conservant le contenu actuel de l’éditeur. Vous pouvez conserver jusqu’à 30 documents nommés. Les limites de stockage du navigateur s’appliquent toujours.\n\n**Save draft locally** reste un instantané rapide distinct avec les commandes Restore/Clear. **Clear workspace autosave** supprime l’enregistrement automatique actuel et le suspend jusqu’à la prochaine saisie. Les documents nommés et les brouillons rapides sont distincts. Si le stockage du navigateur est désactivé ou plein, l’éditeur continue de fonctionner et l’export du code reste disponible. Cette application ne téléverse ni le code source ni les PDF.\n\n## Limites du rendu\n\nChaque rendu démarre un nouveau worker de navigateur. **Cancel** l’arrête, y compris s’il est bloqué dans une boucle JavaScript. Une limite de dix secondes interrompt les traitements anormalement coûteux. Simplifiez les documents volumineux ou testez-les dans une application contrôlée lorsqu’ils dépassent la limite du playground. Ici, l’API PDF refuse l’accès aux ressources par URL distante ; utilisez des images intégrées et les polices Roboto fournies.\n\nLe JavaScript personnalisé est du code utilisateur considéré comme fiable, et non une sandbox de sécurité. N’exécutez pas de code provenant d’une source inconnue. Un worker évite que l’interface ne se bloque, mais ne constitue pas une frontière d’isolation pour du code hostile. Consultez [Sécurité des ressources](/docs/0.3/fr/guides/resource-security/) pour les recommandations applicables aux API de production.\n\n## Lancer l’outil autonome de développement\n\nDepuis une copie de travail de la bibliothèque pdfmake déjà compilée, exécutez `npm run playground`. L’outil sert la même interface avec le moteur de cette copie à `http://127.0.0.1:1234/playground/`. Il requiert Node >=22.13 pour ses outils spécifiques. La version publiée de la bibliothèque continue d’exiger Node >=20 à l’exécution. Le site de documentation peut également prévisualiser un moteur local avec `PDFMAKE_SOURCE` ; consultez le README du dépôt de documentation.\n"
+ },
+ {
+ "id": "guides/playground",
+ "language": "en",
+ "translationKey": "guides/playground",
+ "path": "/docs/0.3/guides/playground/",
+ "title": "Playground guide",
+ "description": "Explore pdfmake examples with a code editor, direct PDF preview, page navigation, local imports and downloadable source.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "guides/playground.md",
+ "url": "https://pdfmake.github.io/docs/0.3/guides/playground/",
+ "uri": "pdfmake://docs/0.3/guides/playground",
+ "markdown": "# Playground guide\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/guides/playground/\n\n## Learn by editing\n\nOpen the [playground](/docs/0.3/playground/), choose an example and edit the definition\nin the left panel. The right panel shows a real PDF rendered through PDF.js.\nWith **Live preview** enabled, the PDF updates automatically after editing. Select **Run** or press **Ctrl/Command + Enter** for an immediate update.\n\nThe CodeMirror 6 editor includes syntax highlighting, line numbers, bracket matching, indentation, Undo/Redo buttons, persistent undo history and syntax diagnostics with line and column. Go to error focuses the offending source location. It also provides completions. Use **Ctrl + Space** to request completions. Suggested field names\nare hints; the document reference defines the valid context, type and values.\n\n## Examples\n\n| Example | Explore |\n| --- | --- |\n| [First document](/docs/0.3/playground/?example=welcome) | Text, spacing and font styles |\n| [Invoice](/docs/0.3/playground/?example=invoice) | A table, totals and a page-number footer |\n| [Tables](/docs/0.3/playground/?example=tables) | Repeating headers across multiple pages |\n| [Text styles](/docs/0.3/playground/?example=styles) | Named styles and inline overrides |\n| [Columns](/docs/0.3/playground/?example=columns) | Side-by-side blocks and stacks |\n| [Spans](/docs/0.3/playground/?example=spans) | Row and column spans with placeholders |\n| [Pages](/docs/0.3/playground/?example=pages) | Page breaks, headers and footers |\n| [Vectors](/docs/0.3/playground/?example=vectors) | Embedded SVG and QR codes |\n| [Images](/docs/0.3/playground/?example=images) | Embedded PNG data reused by name |\n| [Lists](/docs/0.3/playground/?example=lists) | Numbered lists, bullets and links |\n\nAn `example` URL parameter selects a known example; it does not accept JavaScript.\nLive preview also updates restored workspaces, saved documents and imported files.\nTurn **Live preview** off before importing code you want to inspect first.\n\n## Preview and output\n\nUse the arrow buttons to change pages and the zoom menu to change scale. **Page\ntext** exposes text extracted from the current PDF page for inspection and assistive\ntechnology. **Open PDF** opens the generated file separately; **Download PDF** saves\nthe same PDF bytes. The footer shows generation time and output size. Generation\ntime excludes PDF.js preview rendering.\n\nLive preview waits 650 ms after the last edit, then renders in a fresh worker. The old PDF stays visible until the next page has finished rendering off screen; the canvas is then replaced in one step. The selected PDF page and zoom are retained where possible. Downloads are disabled while the visible PDF does not match the current code. Errors keep the last successful preview instead of replacing it with a blank panel.\n\n## Keep your work\n\n**Export code** downloads the current definition as JavaScript. **Import .js** reads\na local file. Files are limited to 500 KB. Disable **Live preview** before importing\ncode you want to review before running it. Resetting or changing examples asks before replacing edits.\n\n**The current workspace is autosaved locally**, including the definition, editor selection, undo history, example, page and zoom settings. Reloading restores the editor, its Undo/Redo history and the Live preview preference. If Live preview is enabled, the restored PDF renders automatically and subsequent edits update it without pressing Run. If disabled, rendering stays manual, including after a reload.\n\nGive the document a name and choose **Save document** to keep a separate local document. Choosing a new name creates another saved document; saving under the same selected name updates it. The saved-documents menu restores a document and its history. Delete removes that named copy while retaining the current editor contents. Up to 30 named documents can be kept. Browser storage quotas still apply.\n\n**Save draft locally** remains a separate quick snapshot with Restore/Clear controls. **Clear workspace autosave** removes the current autosave and pauses it until you type again. Named documents and quick drafts are separate. If browser storage is disabled or full, the editor still works and code export remains available. No source or PDF is uploaded by this application.\n\n## Rendering boundaries\n\nEach render starts a fresh browser worker. **Cancel** terminates it, including a\nblocked JavaScript loop. A ten-second limit stops unexpectedly expensive work.\nSimplify large documents or test them in a controlled application when they exceed\nthe playground limit. The PDF API denies remote URL resources here; use embedded\nimages and the supplied Roboto fonts.\n\nCustom JavaScript is trusted user code, not a security sandbox. Do not run code from\nan unknown source. A worker protects the UI from blocking but is not an isolation\nboundary for hostile code. See [resource security](/docs/0.3/guides/resource-security/)\nfor production API guidance.\n\n## Run the standalone development tool\n\nFrom a built pdfmake library checkout, run `npm run playground`. This serves the\nsame UI with that checkout's engine at `http://127.0.0.1:1234/playground/`. It needs\nNode >=22.13 for its separate tooling. The published library's runtime requirement\nremains Node >=20. The docs site can also preview a local engine using\n`PDFMAKE_SOURCE`; see the documentation repository README.\n"
+ },
+ {
+ "id": "pt-br/guides/playground",
+ "language": "pt-br",
+ "translationKey": "guides/playground",
+ "path": "/docs/0.3/pt-br/guides/playground/",
+ "title": "Guia do playground",
+ "description": "Explore exemplos do pdfmake com editor de código, prévia direta do PDF, navegação entre páginas, imports locais e código-fonte para baixar.",
+ "version": "0.3",
+ "sourceDigest": "396ad48200f73ea3dadbbbcc3eaaf41d819c39e44ee4dd12c2546b4608adf171",
+ "source": "guides/playground.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/guides/playground/",
+ "uri": "pdfmake://docs/0.3/pt-br/guides/playground",
+ "markdown": "# Guia do playground\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/guides/playground/\n\n## Aprenda editando\n\nAbra o [playground · inglês](/docs/0.3/pt-br/playground/), escolha um exemplo e edite a definição no painel esquerdo. O painel direito mostra um PDF real renderizado pelo PDF.js. Com **Live preview** ativada, o PDF é atualizado automaticamente após a edição. Selecione **Run** ou pressione **Ctrl/Command + Enter** para atualizar imediatamente.\n\nO editor CodeMirror 6 inclui realce de sintaxe, números de linha, pareamento de colchetes, indentação, botões Undo/Redo, histórico persistente de desfazer e diagnósticos de sintaxe com linha e coluna. **Go to error** leva o foco ao local incorreto no código-fonte. O editor também oferece sugestões de preenchimento; use **Ctrl + Espaço** para solicitá-las. Os nomes de campos sugeridos são dicas: a referência do documento define o contexto, o tipo e os valores válidos.\n\n## Exemplos\n\n| Exemplo | Explore |\n| --- | --- |\n| [Primeiro documento](/docs/0.3/pt-br/playground/?example=welcome) | Texto, espaçamento e estilos de fonte |\n| [Fatura](/docs/0.3/pt-br/playground/?example=invoice) | Tabela, totais e rodapé com número de página |\n| [Tabelas](/docs/0.3/pt-br/playground/?example=tables) | Cabeçalhos repetidos em várias páginas |\n| [Estilos de texto](/docs/0.3/pt-br/playground/?example=styles) | Estilos nomeados e substituições em linha |\n| [Colunas](/docs/0.3/pt-br/playground/?example=columns) | Blocos lado a lado e pilhas |\n| [Mesclagens](/docs/0.3/pt-br/playground/?example=spans) | Mesclagens de linhas e colunas com placeholders |\n| [Páginas](/docs/0.3/pt-br/playground/?example=pages) | Quebras de página, cabeçalhos e rodapés |\n| [Vetores](/docs/0.3/pt-br/playground/?example=vectors) | SVG incorporado e códigos QR |\n| [Imagens](/docs/0.3/pt-br/playground/?example=images) | Dados PNG incorporados e reutilizados por nome |\n| [Listas](/docs/0.3/pt-br/playground/?example=lists) | Listas numeradas, marcadores e links |\n\nUm parâmetro `example` na URL seleciona um exemplo conhecido; ele não aceita JavaScript. A prévia ao vivo também atualiza espaços de trabalho restaurados, documentos salvos e arquivos importados. Desative **Live preview** antes de importar código que queira inspecionar primeiro.\n\n## Prévia e saída\n\nUse as setas para mudar de página e o menu de zoom para mudar a escala. **Page text** exibe o texto extraído da página atual do PDF para inspeção e tecnologias assistivas. **Open PDF** abre o arquivo gerado em outra janela; **Download PDF** salva os mesmos bytes do PDF. O rodapé mostra o tempo de geração e o tamanho da saída. O tempo de geração não inclui a renderização da prévia pelo PDF.js.\n\nA prévia ao vivo aguarda 650 ms depois da última edição e então renderiza em um worker novo. O PDF anterior permanece visível até que a página seguinte termine de ser renderizada fora da tela; o canvas é substituído em uma única etapa. Quando possível, a página selecionada e o zoom do PDF são preservados. Os downloads ficam desativados enquanto o PDF visível não corresponder ao código atual. Em caso de erro, a última prévia bem-sucedida continua visível em vez de ser substituída por um painel vazio.\n\n## Mantenha seu trabalho\n\n**Export code** baixa a definição atual como JavaScript. **Import .js** lê um arquivo local. O limite dos arquivos é 500 KB. Desative **Live preview** antes de importar código que queira revisar antes de executar. Ao redefinir ou trocar exemplos, o playground pede confirmação antes de substituir suas edições.\n\n**O espaço de trabalho atual é salvo automaticamente no navegador**, incluindo definição, seleção do editor, histórico de desfazer, exemplo, página e configurações de zoom. Ao recarregar, o editor, o histórico Undo/Redo e a preferência de prévia ao vivo são restaurados. Se a prévia estiver ativada, o PDF restaurado será renderizado automaticamente e as edições seguintes o atualizarão sem pressionar Run. Se estiver desativada, a renderização permanece manual, inclusive após recarregar a página.\n\nDê um nome ao documento e escolha **Save document** para manter uma cópia local separada. Escolher um nome novo cria outro documento salvo; salvar com o nome selecionado atualiza esse documento. O menu de documentos salvos restaura o documento e seu histórico. A opção de excluir remove essa cópia nomeada e mantém o conteúdo atual do editor. É possível manter até 30 documentos nomeados. As cotas de armazenamento do navegador continuam valendo.\n\n**Save draft locally** continua sendo uma cópia rápida separada, com controles Restore/Clear. **Clear workspace autosave** remove o salvamento automático atual e o pausa até você digitar novamente. Documentos nomeados e rascunhos rápidos são separados. Se o armazenamento do navegador estiver desativado ou cheio, o editor continua funcionando e a exportação de código permanece disponível. Esta aplicação não envia o código-fonte nem o PDF.\n\n## Limites de renderização\n\nCada renderização inicia um worker de navegador novo. **Cancel** encerra esse worker, inclusive se ele estiver preso em um loop JavaScript. Um limite de dez segundos interrompe trabalhos inesperadamente custosos. Simplifique documentos grandes ou teste-os em uma aplicação controlada se ultrapassarem o limite do playground. A API de PDF bloqueia recursos de URLs remotas neste ambiente; use imagens incorporadas e as fontes Roboto fornecidas.\n\nJavaScript personalizado é código confiável do usuário, não um sandbox de segurança. Não execute código de origem desconhecida. Um worker protege a interface contra bloqueios, mas não é uma barreira de isolamento contra código malicioso. Consulte [segurança de recursos](/docs/0.3/pt-br/guides/resource-security/) para recomendações sobre APIs de produção.\n\n## Execute a ferramenta de desenvolvimento independente\n\nEm um checkout compilado da biblioteca pdfmake, execute `npm run playground`. Ele serve a mesma interface com o motor desse checkout em `http://127.0.0.1:1234/playground/`. Essa ferramenta separada exige Node >=22.13. O requisito de execução da biblioteca publicada continua sendo Node >=20. O site de documentação também pode pré-visualizar um motor local por meio de `PDFMAKE_SOURCE`; consulte o README do repositório de documentação.\n"
+ },
+ {
+ "id": "de/guides/resource-security",
+ "language": "de",
+ "translationKey": "guides/resource-security",
+ "path": "/docs/0.3/de/guides/resource-security/",
+ "title": "Ressourcensicherheit",
+ "description": "Schütze in Serveranwendungen mit pdfmake den Zugriff auf externe URLs, lokale Dateien und nicht vertrauenswürdige Dokumenteingaben.",
+ "version": "0.3",
+ "sourceDigest": "6c29d58fcc33de62c3b85279453f4530abfd1801030ad057800f73e261b61a26",
+ "source": "guides/resource-security.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/guides/resource-security/",
+ "uri": "pdfmake://docs/0.3/de/guides/resource-security",
+ "markdown": "# Ressourcensicherheit\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/guides/resource-security/\n\n## Behandle Definitionen wie Anwendungscode\n\nEine Definition kann Callback-Funktionen für Kopf- und Fußzeilen, Tabellenlayouts und Seitenumbrüche enthalten. Werte niemals JavaScript aus, das ein nicht vertrauenswürdiger Aufrufer übermittelt. Nimm geprüfte Anwendungsdaten entgegen und erstelle die Definitionen selbst. Begrenze vor dem Rendern Eingabegröße, Verschachtelung, Tabellenabmessungen und Bildgröße.\n\n## Nicht benötigte Ressourcen sperren\n\nWenn alle Ressourcen als In-Memory-Daten bereitgestellt werden, sperre Ressourcenpfade in Form von Zeichenfolgen:\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);\n```\n\nDie aktuelle Implementierung leitet auch Standard-Schriftkennungen (zum Beispiel `Helvetica-Bold`) durch die lokale Richtlinie. Wenn du Standardschriften verwendest, erlaube die genau registrierten Kennungen; die [Node.js-Schnellstartanleitung](/docs/0.3/de/getting-started/server-side/) zeigt diese Einrichtung.\n\nURL-Richtlinien erfordern **0.3.6+**, lokale Richtlinien **0.3.8+**. Konfiguriere sie, bevor du Aufträge entgegennimmst. Eine nicht gesetzte Richtlinie erlaubt das Laden von Ressourcen; sie bedeutet nicht, dass alle Zugriffe gesperrt sind.\n\n## Synchrone Richtlinien verwenden\n\nDie Implementierung prüft, ob `callback(value) === true` gilt. Verwende in diesen Richtlinien keine `async`-Callbacks, DNS-Abfragen oder Promises. Lade freigegebene Ressourcen in deiner Anwendung vorab, wenn die Prüfung asynchron erfolgen muss, und übergib anschließend eingebettete Daten oder eine anwendungseigene Datei.\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});\n```\n\nDieses Beispiel mit Hostnamen bietet keinen vollständigen Schutz vor SSRF. DNS-Änderungen, Weiterleitungen, interne Adressbereiche und Netzwerkrechte der Bereitstellung sind ebenfalls relevant. Begrenze ausgehende Netzwerkzugriffe. In Node.js prüft der Resolver manuelle Weiterleitungsschritte. Browser können Weiterleitungen folgen, bevor die endgültige URL geprüft wird; Browserrichtlinien können nicht jeden Netzwerkschritt kontrollieren.\n\n## Lokale Dateien\n\nErlaube genau aufgelöste, von deiner Anwendung verwaltete Pfade. Eine funktionierende Zulassungsliste zeigt die [Schriftkonfiguration](/docs/0.3/de/fonts/). Vermeide `startsWith('fonts/')`, da damit weder Pfadmanipulation noch Dateisystem-Aliase verhindert werden. Schütze freigegebene Dateien vor Austausch und berücksichtige symbolische Links. Lass Aufrufer keine beliebigen Serverpfade auswählen.\n\n## Auftragsumfang begrenzen\n\nLayout- und Schriftenverarbeitung können CPU und Speicher verbrauchen, bevor ein Ausgabestream verfügbar ist. Verwende begrenzte Warteschlangen und isolierte Worker, wenn du große oder nicht vertrauenswürdige Dokumente verarbeitest. Ein Promise-Timeout unterbricht das synchrone Layout nicht. Wenn du eine harte Abbruchmöglichkeit brauchst, setze Prozesslimits.\n\n## PDF-Verschlüsselung ist davon getrennt\n\n[Passwörter und PDF-Berechtigungen](/docs/0.3/de/document-definition-object/security/) betreffen das erzeugte Dokument. Sie sichern nicht das Netzwerk, Dateisystem oder die Callback-Ausführung deines Servers.\n"
+ },
+ {
+ "id": "es/guides/resource-security",
+ "language": "es",
+ "translationKey": "guides/resource-security",
+ "path": "/docs/0.3/es/guides/resource-security/",
+ "title": "Seguridad de recursos",
+ "description": "Controla las URL externas, los archivos locales y las entradas de documentos que no sean de confianza al usar pdfmake en aplicaciones de servidor.",
+ "version": "0.3",
+ "sourceDigest": "6c29d58fcc33de62c3b85279453f4530abfd1801030ad057800f73e261b61a26",
+ "source": "guides/resource-security.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/guides/resource-security/",
+ "uri": "pdfmake://docs/0.3/es/guides/resource-security",
+ "markdown": "# Seguridad de recursos\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/guides/resource-security/\n\n## Trata las definiciones como código de la aplicación\n\nUna definición puede contener funciones callback para encabezados, pies de página, distribuciones de tablas y saltos de página. Nunca ejecutes JavaScript enviado por un usuario que no sea de confianza. Acepta datos de aplicación validados y construye las definiciones tú mismo. Limita el tamaño de la entrada, el anidamiento, las dimensiones de las tablas y el tamaño de las imágenes antes del renderizado.\n\n## Deniega los recursos que no necesites\n\nSi se proporcionan todos los recursos como datos en memoria, deniega las rutas de recursos basadas en cadenas:\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);\n```\n\nLa implementación actual también comprueba los identificadores de fuentes estándar (por ejemplo, `Helvetica-Bold`) mediante la política local. Si usas fuentes estándar, permite los identificadores registrados exactos; el [inicio rápido de Node](/docs/0.3/es/getting-started/server-side/) muestra esta configuración.\n\nLas políticas de URL requieren la versión **0.3.6 o posterior** y las políticas locales, la **0.3.8 o posterior**. Configúralas antes de aceptar trabajos. Una política no configurada permite cargar recursos; no equivale a denegar todo.\n\n## Usa políticas síncronas\n\nLa implementación comprueba si `callback(value) === true`. No uses funciones callback `async`, búsquedas DNS ni Promises en estas políticas. Si la validación requiere trabajo asíncrono, descarga antes los recursos aprobados en la aplicación y luego proporciona los datos incrustados o un archivo propiedad de la aplicación.\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});\n```\n\nEste ejemplo de nombre de host no protege por completo contra SSRF. También importan los cambios de DNS, las redirecciones, los rangos de direcciones internos y los permisos de red del despliegue. Aplica controles al tráfico de salida. En Node.js, el resolutor comprueba manualmente los saltos de redirección. Los navegadores pueden seguir redirecciones antes de comprobar la política de la URL final; las políticas del navegador no pueden controlar todos los saltos de red.\n\n## Archivos locales\n\nPermite rutas resueltas exactas que pertenezcan a la aplicación. Consulta [configuración de fuentes](/docs/0.3/es/fonts/) para ver una lista de permitidos funcional. Evita `startsWith('fonts/')`, que no resuelve rutas de recorrido ni alias del sistema de archivos. Protege los archivos aprobados contra sustituciones y ten en cuenta los enlaces simbólicos. No permitas que quien llama elija rutas arbitrarias del servidor.\n\n## Limitar el trabajo\n\nLa maquetación y el trabajo con fuentes pueden consumir CPU y memoria antes de que haya un flujo de salida disponible. Usa colas con límites y trabajadores aislados al servir documentos grandes o no confiables. Un tiempo límite de Promise por sí solo no interrumpe una maquetación síncrona. Si necesitas una cancelación estricta, añade límites a nivel de proceso.\n\n## El cifrado PDF es un tema aparte\n\nLas [contraseñas y permisos del PDF](/docs/0.3/es/document-definition-object/security/) afectan al documento generado. No protegen la red, el sistema de archivos ni la ejecución de callbacks del servidor.\n"
+ },
+ {
+ "id": "fr/guides/resource-security",
+ "language": "fr",
+ "translationKey": "guides/resource-security",
+ "path": "/docs/0.3/fr/guides/resource-security/",
+ "title": "Sécurité des ressources",
+ "description": "Contrôlez les URL externes, les fichiers locaux et les définitions non fiables quand vous utilisez pdfmake dans des applications serveur.",
+ "version": "0.3",
+ "sourceDigest": "6c29d58fcc33de62c3b85279453f4530abfd1801030ad057800f73e261b61a26",
+ "source": "guides/resource-security.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/guides/resource-security/",
+ "uri": "pdfmake://docs/0.3/fr/guides/resource-security",
+ "markdown": "# Sécurité des ressources\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/guides/resource-security/\n\n## Traiter les définitions comme du code applicatif\n\nUne définition peut contenir des fonctions de rappel pour les en-têtes, les pieds de page, les mises en page de tableaux et les sauts de page. N’exécutez jamais le JavaScript fourni par un appelant non fiable. Acceptez des données d’application validées et construisez vous-même les définitions. Avant le rendu, limitez la taille des entrées, leur profondeur d’imbrication, les dimensions des tableaux et la taille des images.\n\n## Refuser les ressources inutiles\n\nSi toutes les ressources sont fournies sous forme de données en mémoire, refusez les chemins de ressources sous forme de chaînes :\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);\n```\n\nL’implémentation actuelle transmet également les identifiants des polices standard (par exemple `Helvetica-Bold`) à la règle locale. Si vous utilisez les polices standard, autorisez leurs identifiants exacts enregistrés ; le [guide de démarrage Node](/docs/0.3/fr/getting-started/server-side/) montre cette configuration.\n\nLes règles d’accès URL nécessitent **0.3.6+** et les règles locales **0.3.8+**. Configurez-les avant d’accepter des tâches. Une règle non définie autorise le chargement de ressources ; elle ne signifie pas « tout refuser ».\n\n## Utiliser des règles synchrones\n\nL’implémentation vérifie `callback(value) === true`. N’utilisez pas de fonctions de rappel `async`, de requêtes DNS ou de Promises dans ces règles. Si la validation exige un traitement asynchrone, récupérez les ressources approuvées dans votre application, puis transmettez les données intégrées ou un fichier géré par l’application.\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});\n```\n\nCet exemple de nom d’hôte ne constitue pas une protection complète contre les attaques SSRF. Les changements DNS, les redirections, les plages d’adresses internes et les autorisations réseau du déploiement comptent également. Appliquez des contrôles réseau sortants. Sous Node.js, le résolveur vérifie chaque étape des redirections manuelles. Les navigateurs peuvent suivre des redirections avant de vérifier la règle sur l’URL finale ; les règles du navigateur ne peuvent pas contrôler chaque étape réseau.\n\n## Fichiers locaux\n\nAutorisez des chemins résolus exacts appartenant à l’application. Consultez la [configuration des polices](/docs/0.3/fr/fonts/) pour un exemple de liste d’autorisation fonctionnelle. Évitez `startsWith('fonts/')`, qui ne résout ni les traversées de répertoires ni les alias du système de fichiers. Protégez les fichiers autorisés contre le remplacement et tenez compte des liens symboliques. Ne laissez pas un appelant choisir des chemins arbitraires du serveur.\n\n## Limiter la charge\n\nLa mise en page et le traitement des polices peuvent consommer processeur et mémoire avant qu’un flux de sortie soit disponible. Utilisez des files d’attente limitées et des workers isolés pour les documents volumineux ou non fiables. Un délai sur une Promise n’interrompt pas à lui seul la mise en page synchrone. Ajoutez des limites au niveau du processus si une annulation ferme est nécessaire.\n\n## Le chiffrement PDF est distinct\n\nLes [mots de passe et autorisations PDF](/docs/0.3/fr/document-definition-object/security/) s’appliquent au document produit. Ils ne sécurisent ni le réseau ni le système de fichiers de votre serveur, et n’encadrent pas l’exécution des fonctions de rappel.\n"
+ },
+ {
+ "id": "guides/resource-security",
+ "language": "en",
+ "translationKey": "guides/resource-security",
+ "path": "/docs/0.3/guides/resource-security/",
+ "title": "Resource security",
+ "description": "Control external URLs, local files and untrusted document inputs when using pdfmake in server applications.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "guides/resource-security.md",
+ "url": "https://pdfmake.github.io/docs/0.3/guides/resource-security/",
+ "uri": "pdfmake://docs/0.3/guides/resource-security",
+ "markdown": "# Resource security\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/guides/resource-security/\n\n## Treat definitions as application code\n\nA definition can contain callback functions for headers, footers, table layouts and page breaks. Never evaluate JavaScript submitted by an untrusted caller. Accept validated application data and construct definitions yourself. Limit input size, nesting, table dimensions and image size before rendering.\n\n## Deny resources you do not need\n\nIf all resources are supplied as in-memory data, deny string-based resource paths:\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);\n```\n\nThe current implementation also passes standard font identifiers (for example `Helvetica-Bold`) through the local policy. Allow the exact registered identifiers when using standard fonts; the [Node quickstart](/docs/0.3/getting-started/server-side/) shows this setup.\n\nURL policies require **0.3.6+** and local policies **0.3.8+**. Configure them before accepting work. An unset policy permits resource loading; it does not mean deny-all.\n\n## Use synchronous policies\n\nThe implementation checks `callback(value) === true`. Do not use `async` callbacks, DNS lookups or promises inside these policies. Prefetch approved resources in your application if validation requires asynchronous work, then pass embedded data or an application-owned file.\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});\n```\n\nThis hostname example is not complete SSRF protection. DNS changes, redirects, internal address ranges and deployment network permissions also matter. Apply outbound network controls. On Node.js the resolver checks manual redirect hops. Browsers may follow redirects before the final URL policy check; browser policies cannot enforce control of every network hop.\n\n## Local files\n\nAllow exact resolved application-owned paths. See [font configuration](/docs/0.3/fonts/) for a working allowlist. Avoid `startsWith('fonts/')`, which does not resolve traversal or filesystem aliases. Protect approved files from replacement and account for symlinks. Do not let a caller select arbitrary server paths.\n\n## Bound the job\n\nLayout and font work can consume CPU and memory before an output stream is available. Use bounded queues and isolated workers when serving large or untrusted documents. A Promise timeout alone does not interrupt synchronous layout. Add process-level limits if you require hard cancellation.\n\n## PDF encryption is separate\n\n[Passwords and PDF permissions](/docs/0.3/document-definition-object/security/) affect the produced document. They do not secure your server's network, filesystem or callback execution.\n"
+ },
+ {
+ "id": "pt-br/guides/resource-security",
+ "language": "pt-br",
+ "translationKey": "guides/resource-security",
+ "path": "/docs/0.3/pt-br/guides/resource-security/",
+ "title": "Segurança de recursos",
+ "description": "Controle URLs externas, arquivos locais e entradas de documento não confiáveis ao usar pdfmake em aplicações de servidor.",
+ "version": "0.3",
+ "sourceDigest": "6c29d58fcc33de62c3b85279453f4530abfd1801030ad057800f73e261b61a26",
+ "source": "guides/resource-security.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/guides/resource-security/",
+ "uri": "pdfmake://docs/0.3/pt-br/guides/resource-security",
+ "markdown": "# Segurança de recursos\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/guides/resource-security/\n\n## Trate definições como código da aplicação\n\nUma definição pode conter funções de callback para cabeçalhos, rodapés, layouts de tabela e quebras de página. Nunca execute JavaScript enviado por um chamador não confiável. Aceite dados da aplicação já validados e construa você mesmo as definições. Limite o tamanho da entrada, o aninhamento, as dimensões das tabelas e o tamanho das imagens antes de renderizar.\n\n## Bloqueie recursos desnecessários\n\nSe todos os recursos forem fornecidos como dados em memória, bloqueie caminhos de recursos em formato de string:\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(() => false);\npdfmake.setLocalAccessPolicy(() => false);\n```\n\nA implementação atual também passa identificadores de fontes padrão (por exemplo, `Helvetica-Bold`) pela política local. Ao usar fontes padrão, permita os identificadores exatos registrados; o [início rápido para Node](/docs/0.3/pt-br/getting-started/server-side/) mostra essa configuração.\n\nAs políticas de URL exigem **0.3.6 ou superior** e as políticas locais, **0.3.8 ou superior**. Configure-as antes de aceitar trabalho. Uma política não definida permite o carregamento de recursos; isso não significa negar tudo.\n\n## Use políticas síncronas\n\nA implementação verifica se `callback(value) === true`. Não use callbacks `async`, consultas DNS ou Promises nessas políticas. Se a validação exigir trabalho assíncrono, busque previamente os recursos aprovados na aplicação e passe dados incorporados ou um arquivo controlado pela aplicação.\n\n**JavaScript**\n\n```js\npdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});\n```\n\n**TypeScript**\n\n```ts\npdfmake.setUrlAccessPolicy(value => {\n const url = new URL(value);\n return url.protocol === 'https:' && url.hostname === 'assets.example.com' && !url.username && !url.password;\n});\n```\n\nEste exemplo de nome de host não oferece proteção completa contra SSRF. Mudanças de DNS, redirecionamentos, faixas de endereços internos e permissões de rede do deployment também importam. Aplique controles de rede de saída. No Node.js, o resolvedor verifica os redirecionamentos manuais. Navegadores podem seguir redirecionamentos antes da verificação final da política de URL; políticas no navegador não conseguem controlar cada salto de rede.\n\n## Arquivos locais\n\nPermita caminhos resolvidos exatos que pertençam à aplicação. Consulte [configuração de fontes](/docs/0.3/pt-br/fonts/) para ver uma lista de permissões funcional. Evite `startsWith('fonts/')`, que não resolve travessia de diretórios nem aliases do sistema de arquivos. Proteja os arquivos aprovados contra substituição e considere links simbólicos. Não permita que um chamador escolha caminhos arbitrários do servidor.\n\n## Limite o trabalho\n\nO layout e o processamento de fontes podem consumir CPU e memória antes que um stream de saída esteja disponível. Use filas limitadas e workers isolados para documentos grandes ou não confiáveis. Um timeout de Promise, sozinho, não interrompe o layout síncrono. Se precisar de cancelamento rígido, adicione limites no nível do processo.\n\n## A criptografia do PDF é diferente\n\n[Senhas e permissões do PDF](/docs/0.3/pt-br/document-definition-object/security/) afetam o documento produzido. Elas não protegem a rede, o sistema de arquivos nem a execução de callbacks do servidor.\n"
+ },
+ {
+ "id": "de/guides/troubleshooting",
+ "language": "de",
+ "translationKey": "guides/troubleshooting",
+ "path": "/docs/0.3/de/guides/troubleshooting/",
+ "title": "Fehlerbehebung",
+ "description": "Untersuche häufige Fehler in pdfmake 0.3 mit Imports, Schriften, Tabellen, Promises, Browserfenstern und Ressourcen-Zugriffsrechten.",
+ "version": "0.3",
+ "sourceDigest": "5159bc06095c71b8ab0b613c4df51b538e163232b5543aa4bb809f90b91021bb",
+ "source": "guides/troubleshooting.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/guides/troubleshooting/",
+ "uri": "pdfmake://docs/0.3/de/guides/troubleshooting",
+ "markdown": "# Fehlerbehebung\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/guides/troubleshooting/\n\n## Zuerst Version und Laufzeit prüfen\n\nFühre `npm ls pdfmake` aus und vergleiche deinen Import mit der passenden Schnellstartanleitung. Ein Browser-Bundle und der Node.js-Einstieg bieten unterschiedliche Ausgabemethoden. Beispiele für Version 0.1/0.2 mit `new PdfPrinter(...)` oder Callbacks beschreiben nicht die API von 0.3.\n\n| Symptom | Prüfen | Lösung |\n| --- | --- | --- |\n| Schriftfamilie oder Variante ist nicht definiert | Familienname, Zuordnung für fett/kursiv, Standardschrift | Alle verwendeten Varianten registrieren und die Familie in `defaultStyle` auswählen |\n| Datei nicht gefunden oder Zugriff verweigert | Tatsächlich aufgelöster Pfad der Schrift/des Bildes und Richtlinie | Vorhandene anwendungseigene Pfade und eine passende synchrone Richtlinie verwenden |\n| Glyphen fehlen oder werden falsch dargestellt | Glyphenabdeckung der ausgewählten Schrift | Schrift mit den benötigten Sprachzeichen einbetten; auch fett und kursiv prüfen |\n| Tabelle leer oder fehlerhaft | `body`, Zeilenlängen und Zellenüberspannung | Nichtleere, einheitliche Zeilen und Platzhalter für überspannte Zellen bereitstellen |\n| `download` ist in Node.js keine Funktion | Importierte Laufzeit | In Node.js `write` oder `getBuffer` verwenden |\n| Browser öffnet kein Fenster | Benutzeraktion und Popup-Blocker | Ein Fenster direkt beim Klick öffnen, bevor asynchron Daten geladen werden |\n| URL trotz Zulassungs-Callback abgelehnt | Rückgabetyp des Callbacks | Synchron den booleschen Wert `true` zurückgeben; `async` entfernen |\n| HTTP-Bildanfrage schlägt fehl | URL, Richtlinie, CORS, Status und Weiterleitungen | Zugriff in der Ziel-Laufzeit prüfen; Browser setzen CORS durch |\n| Datei unvollständig oder fehlt | Abgelehntes Promise und Schreibstreamfehler | Auf `write()` warten und Ablehnung behandeln, bevor der Erfolg gemeldet wird |\n| Ausgabe ändert sich nach einem Upgrade | Version, Schriften, Eingaben und Standardwerte | Mit festgelegter Version reproduzieren und extrahierten Text, Seitenzahlen und gerenderte Seiten vergleichen |\n\n## Definition vereinfachen\n\nBeginne mit einem einfachen Absatz und bekannten funktionierenden Schriften. Ergänze Stile, Tabellenzeilen und Ressourcen einzeln. Erzeuge für jeden Versuch eine neue Definition. Trenne Anfrage- und Ressourcenfehler von Layoutfehlern.\n\n## Einen hilfreichen Fehlerbericht erstellen\n\nGib die genauen pdfmake- und Node.js-/Browser-Versionen, das Betriebssystem, eine minimale ausführbare Definition, die Schrifteinrichtung, erwartetes und tatsächliches Verhalten sowie den vollständigen relevanten Stack-Trace an. Entferne private Inhalte und Geheimnisse. Bei Seitenumbruchfehlern nenne die kleinste Eingabe, mit der sich das Problem noch reproduzieren lässt.\n"
+ },
+ {
+ "id": "es/guides/troubleshooting",
+ "language": "es",
+ "translationKey": "guides/troubleshooting",
+ "path": "/docs/0.3/es/guides/troubleshooting/",
+ "title": "Solución de problemas",
+ "description": "Diagnostica errores frecuentes de pdfmake 0.3 relacionados con importaciones, fuentes, tablas, Promises, ventanas del navegador y acceso a recursos.",
+ "version": "0.3",
+ "sourceDigest": "5159bc06095c71b8ab0b613c4df51b538e163232b5543aa4bb809f90b91021bb",
+ "source": "guides/troubleshooting.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/guides/troubleshooting/",
+ "uri": "pdfmake://docs/0.3/es/guides/troubleshooting",
+ "markdown": "# Solución de problemas\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/guides/troubleshooting/\n\n## Empieza por la versión y el entorno de ejecución\n\nEjecuta `npm ls pdfmake` y compara la importación con la guía de inicio rápido correspondiente. Un paquete para navegador y la entrada de Node exponen métodos de salida distintos. Los ejemplos de las versiones 0.1/0.2 que usan `new PdfPrinter(...)` o callbacks no describen la API 0.3.\n\n| Síntoma | Qué comprobar | Solución |\n| --- | --- | --- |\n| La familia o variante de fuente no está definida | Nombre de familia, asignación de negrita/cursiva y fuente predeterminada | Registra todas las variantes usadas y selecciona la familia en `defaultStyle` |\n| Archivo no encontrado o acceso denegado | Ruta resuelta real de la fuente/imagen y política | Usa rutas existentes propiedad de la aplicación y una política síncrona correspondiente |\n| Glifos ausentes o incorrectos | Cobertura de glifos de la fuente seleccionada | Incrusta una fuente que cubra el idioma; prueba también negrita y cursiva |\n| Tabla vacía o malformada | `body`, longitudes de filas y celdas combinadas | Proporciona filas no vacías y coherentes, y marcadores de posición para las celdas combinadas |\n| `download` no es una función en Node | Entorno de ejecución importado | Usa `write` o `getBuffer` desde la entrada de Node |\n| El navegador no abre una ventana | Gesto del usuario y bloqueador de ventanas emergentes | Abre la ventana directamente al hacer clic, antes de cargar datos de forma asíncrona |\n| Se deniega una URL pese al callback de permiso | Tipo de valor devuelto por el callback | Devuelve el valor booleano literal `true` de forma síncrona y quita `async` |\n| Falla la solicitud HTTP de una imagen | URL, política, CORS, estado y redirecciones | Comprueba el acceso en el entorno de ejecución de destino; los navegadores aplican CORS |\n| Archivo incompleto o ausente | Promise rechazada y errores de escritura | Espera a `write()` y gestiona su rechazo antes de informar que se completó |\n| La salida cambia tras una actualización | Versión, fuentes, entradas y valores predeterminados | Reproduce el problema con una versión fijada y compara el texto extraído, el número de páginas y las páginas renderizadas |\n\n## Reducir la definición\n\nEmpieza con un párrafo sencillo y fuentes que sepas que funcionan. Añade los estilos, las filas de tabla y los recursos de uno en uno. Construye una definición nueva en cada intento. Mantén separados los errores de solicitudes y recursos de los errores de maquetación.\n\n## Informar de un error útil\n\nIncluye las versiones exactas de pdfmake y Node/navegador, el sistema operativo, una definición mínima que se pueda ejecutar, la configuración de fuentes, el comportamiento esperado y el real, y el seguimiento de pila relevante completo. Elimina el contenido privado y los secretos. Para errores de paginación, incluye la entrada más pequeña que todavía reproduce el salto de página.\n"
+ },
+ {
+ "id": "fr/guides/troubleshooting",
+ "language": "fr",
+ "translationKey": "guides/troubleshooting",
+ "path": "/docs/0.3/fr/guides/troubleshooting/",
+ "title": "Dépannage",
+ "description": "Diagnostiquez les problèmes fréquents de pdfmake 0.3 liés aux imports, polices, tableaux, Promises, fenêtres du navigateur et accès aux ressources.",
+ "version": "0.3",
+ "sourceDigest": "5159bc06095c71b8ab0b613c4df51b538e163232b5543aa4bb809f90b91021bb",
+ "source": "guides/troubleshooting.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/guides/troubleshooting/",
+ "uri": "pdfmake://docs/0.3/fr/guides/troubleshooting",
+ "markdown": "# Dépannage\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/guides/troubleshooting/\n\n## Vérifier la version et l’environnement d’exécution\n\nExécutez `npm ls pdfmake` et comparez votre import au guide de démarrage adapté. Un bundle de navigateur et le point d’entrée Node proposent des fonctions de sortie différentes. Les exemples 0.1/0.2 utilisant `new PdfPrinter(...)` ou des callbacks ne décrivent pas l’API 0.3.\n\n| Symptôme | Vérification | Correction |\n| --- | --- | --- |\n| Famille ou variante de police non définie | Nom de la famille, correspondance gras/italique, police par défaut | Enregistrez toutes les variantes utilisées et sélectionnez la famille dans `defaultStyle` |\n| Fichier introuvable ou accès refusé | Chemin réel de la police ou de l’image et règle d’accès | Utilisez des chemins existants gérés par l’application et une règle synchrone correspondante |\n| Glyphes manquants ou incorrects | Couverture de glyphes de la police sélectionnée | Incorporez une police couvrant la langue ; testez aussi le gras et l’italique |\n| Tableau vide ou mal formé | `body`, longueurs des lignes et cellules fusionnées | Fournissez des lignes non vides de longueur cohérente et des espaces réservés pour les cellules fusionnées |\n| `download` n’est pas une fonction dans Node | Environnement importé | Utilisez `write` ou `getBuffer` avec le point d’entrée Node |\n| Aucune fenêtre ne s’ouvre dans le navigateur | Geste utilisateur et bloqueur de fenêtres contextuelles | Ouvrez une fenêtre directement au clic, avant le chargement asynchrone des données |\n| URL refusée malgré une fonction d’autorisation | Type de valeur de retour | Renvoyez le booléen littéral `true` de manière synchrone ; supprimez `async` |\n| Échec de la requête HTTP d’une image | URL, règle, CORS, statut et redirections | Vérifiez l’accès dans l’environnement cible ; les navigateurs appliquent CORS |\n| Fichier incomplet ou manquant | Promise rejetée et erreurs d’écriture | Attendez `write()` et gérez son rejet avant d’annoncer la réussite |\n| La sortie change après une mise à niveau | Version, polices, entrées et valeurs par défaut | Reproduisez avec une version épinglée et comparez le texte extrait, le nombre de pages et les pages rendues |\n\n## Réduire la définition\n\nCommencez par un paragraphe simple et des polices connues comme fonctionnelles. Ajoutez les styles, les lignes de tableau et les ressources un par un. Créez une définition neuve à chaque tentative. Distinguez les erreurs de requête et de ressource des erreurs de mise en page.\n\n## Signaler un bogue utile\n\nIndiquez les versions exactes de pdfmake et de Node ou du navigateur, le système d’exploitation, une définition minimale exécutable, la configuration des polices, le comportement attendu et le comportement observé, ainsi que la trace complète pertinente. Supprimez le contenu privé et les secrets. Pour les défauts de pagination, fournissez le plus petit exemple qui reproduit encore le saut de page.\n"
+ },
+ {
+ "id": "guides/troubleshooting",
+ "language": "en",
+ "translationKey": "guides/troubleshooting",
+ "path": "/docs/0.3/guides/troubleshooting/",
+ "title": "Troubleshooting",
+ "description": "Diagnose common pdfmake 0.3 failures involving imports, fonts, tables, promises, browser windows and resource access.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "guides/troubleshooting.md",
+ "url": "https://pdfmake.github.io/docs/0.3/guides/troubleshooting/",
+ "uri": "pdfmake://docs/0.3/guides/troubleshooting",
+ "markdown": "# Troubleshooting\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/guides/troubleshooting/\n\n## Start with version and runtime\n\nRun `npm ls pdfmake` and compare your import to the appropriate quickstart. A browser bundle and the Node entry expose different output helpers. Version 0.1/0.2 examples using `new PdfPrinter(...)` or callbacks do not describe the 0.3 API.\n\n| Symptom | Check | Fix |\n| --- | --- | --- |\n| Font family or variant is not defined | Family name, bold/italic mapping, default font | Register all used variants and select the family in `defaultStyle` |\n| File not found or access denied | Actual resolved font/image path and policy | Use existing application-owned paths and a matching synchronous policy |\n| Missing or incorrect glyphs | Selected font's glyph coverage | Embed a font covering the language; test bold and italic too |\n| Empty or malformed table | `body`, row lengths and spans | Supply nonempty consistent rows and placeholders for spanned cells |\n| `download` is not a function on Node | Imported runtime | Use `write` or `getBuffer` on the Node entry |\n| Browser opens no window | User gesture and popup blocker | Open a window directly on click before asynchronous data loading |\n| URL is denied despite an allow callback | Callback return type | Return literal boolean `true` synchronously; remove `async` |\n| HTTP image request fails | URL, policy, CORS, status and redirects | Check access in the target runtime; browsers enforce CORS |\n| File is incomplete or missing | Rejected Promise and writable errors | Await `write()` and handle its rejection before reporting success |\n| Output changes after an upgrade | Version, fonts, inputs and defaults | Reproduce with a pinned version and compare extracted text, page counts and rendered pages |\n\n## Reduce the definition\n\nStart with one plain paragraph and known-good fonts. Add your styles, table rows and resources one at a time. Construct a fresh definition per attempt. Keep request and resource errors separate from layout errors.\n\n## Report a useful bug\n\nInclude the exact pdfmake and Node/browser versions, operating system, a minimal runnable definition, font setup, expected versus actual behavior and the full relevant stack trace. Remove private content and secrets. For pagination defects include the smallest input that still reproduces the page break.\n"
+ },
+ {
+ "id": "pt-br/guides/troubleshooting",
+ "language": "pt-br",
+ "translationKey": "guides/troubleshooting",
+ "path": "/docs/0.3/pt-br/guides/troubleshooting/",
+ "title": "Solução de problemas",
+ "description": "Diagnostique falhas comuns do pdfmake 0.3 relacionadas a imports, fontes, tabelas, Promises, janelas do navegador e acesso a recursos.",
+ "version": "0.3",
+ "sourceDigest": "5159bc06095c71b8ab0b613c4df51b538e163232b5543aa4bb809f90b91021bb",
+ "source": "guides/troubleshooting.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/guides/troubleshooting/",
+ "uri": "pdfmake://docs/0.3/pt-br/guides/troubleshooting",
+ "markdown": "# Solução de problemas\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/guides/troubleshooting/\n\n## Comece pela versão e pelo ambiente\n\nExecute `npm ls pdfmake` e compare seu import com o início rápido adequado. Um bundle de navegador e a entrada do Node expõem funções de saída diferentes. Exemplos das versões 0.1/0.2 que usam `new PdfPrinter(...)` ou callbacks não descrevem a API 0.3.\n\n| Sintoma | Verifique | Correção |\n| --- | --- | --- |\n| Família ou variante de fonte não definida | Nome da família, mapeamento de negrito/itálico e fonte padrão | Registre todas as variantes usadas e selecione a família em `defaultStyle` |\n| Arquivo não encontrado ou acesso negado | Caminho realmente resolvido da fonte/imagem e política | Use caminhos existentes pertencentes à aplicação e uma política síncrona correspondente |\n| Glifos ausentes ou incorretos | Cobertura de glifos da fonte selecionada | Incorpore uma fonte que cubra o idioma; teste também negrito e itálico |\n| Tabela vazia ou malformada | `body`, comprimento das linhas e spans | Forneça linhas não vazias e consistentes, com células substitutas para células mescladas |\n| `download` não é função no Node | Ambiente importado | Use `write` ou `getBuffer` na entrada do Node |\n| Navegador não abre janela | Gesto do usuário e bloqueador de pop-ups | Abra a janela diretamente no clique, antes de carregar dados de forma assíncrona |\n| URL negada apesar do callback de permissão | Tipo de retorno do callback | Retorne o booleano literal `true` de forma síncrona; remova `async` |\n| Falha na solicitação HTTP da imagem | URL, política, CORS, status e redirecionamentos | Verifique o acesso no ambiente de destino; navegadores aplicam CORS |\n| Arquivo incompleto ou ausente | Promise rejeitada e erros de escrita | Aguarde `write()` e trate sua rejeição antes de informar sucesso |\n| Saída mudou após atualização | Versão, fontes, entradas e padrões | Reproduza com uma versão fixada e compare texto extraído, número de páginas e páginas renderizadas |\n\n## Reduza a definição\n\nComece com um parágrafo simples e fontes conhecidas como válidas. Adicione estilos, linhas da tabela e recursos um de cada vez. Monte uma definição nova a cada tentativa. Mantenha separados os erros de solicitação e de recursos dos erros de layout.\n\n## Relate um bug útil\n\nInclua as versões exatas do pdfmake e do Node/navegador, o sistema operacional, uma definição mínima executável, a configuração de fontes, o comportamento esperado e o observado, e o stack trace completo relevante. Remova conteúdo privado e segredos. Para falhas de paginação, inclua a menor entrada que ainda reproduz a quebra de página.\n"
+ },
+ {
+ "id": "de/learn",
+ "language": "de",
+ "translationKey": "learn",
+ "path": "/docs/0.3/de/learn/",
+ "title": "Hier anfangen",
+ "description": "Ein kurzer Lernpfad von der Laufzeitwahl bis zum Erstellen, Formatieren und zur Fehlerbehebung deiner ersten PDF.",
+ "version": "0.3",
+ "sourceDigest": "a8635fe5b8817a5c2f610b634abb0689d9672e42eef5a1b0bc6d01f52ba73dbe",
+ "source": "learn/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/learn/",
+ "uri": "pdfmake://docs/0.3/de/learn",
+ "markdown": "# Hier anfangen\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/learn/\n\n## Mit einem funktionierenden Dokument beginnen\n\nDu musst nicht erst die gesamte Dokumentreferenz kennen. Folge diesen drei Schritten:\n\n\n\n- [1. Deine erste PDF erstellen](/docs/0.3/de/learn/first-pdf/): Verstehe die Definition, lade Schriften und führe ein vollständiges Beispiel aus.\n\n\n- [2. Das Dokumentmodell kennenlernen](/docs/0.3/de/learn/document-model/): Erfahre, wann Absätze, Inline-Text, Stapel, Spalten oder Tabellen sinnvoll sind.\n\n\n- [3. Fehler lesen und gezielt beheben](/docs/0.3/de/guides/errors/): Unterscheide zwischen JavaScript-Syntax, Dokumentstruktur, Ressourcen und Ausgabe.\n\n\n\n## Welche Laufzeit brauche ich?\n\n| Auswahl | Wann | Ausgabe |\n| --- | --- | --- |\n| [Node.js](/docs/0.3/de/getting-started/server-side/) | Deine API oder ein Hintergrundauftrag erstellt die Datei | `write()` für Dateien; `getBuffer()` für HTTP-Antworten |\n| [Browser](/docs/0.3/de/getting-started/client-side/) | Benutzer erstellen das Dokument auf ihrem Gerät | `download()`, `open()`, `print()` oder `getBlob()` |\n\nDie Dokumentdefinition wird gemeinsam verwendet. Das Laden der Schriften und die Ausgabemethoden hängen von der Laufzeit ab. Diese Seiten beziehen sich auf **0.3.x**; ältere Beispiele mit `new PdfPrinter(...)` und Callback-Ausgabe gehören zu [0.1/0.2](/docs/0.3/de/migration-from-0.1/).\n\n## Durch sichtbare Ergebnisse lernen\n\nDie Beispiele dieses Lernpfads zeigen den exakten JavaScript-Code neben einer tatsächlich erzeugten PDF. Öffne sie im Playground und bearbeite sie. Der vollständige Quellcode ist außerdem im [Markdown-Korpus](/docs/0.3/de/llms-full.txt) enthalten, auch der Code, der sonst von interaktiven Beispielkomponenten erzeugt wird.\n"
+ },
+ {
+ "id": "es/learn",
+ "language": "es",
+ "translationKey": "learn",
+ "path": "/docs/0.3/es/learn/",
+ "title": "Empieza aquí",
+ "description": "Sigue un breve recorrido desde la elección del entorno hasta la generación, los estilos y la solución de problemas de tu primer PDF.",
+ "version": "0.3",
+ "sourceDigest": "a8635fe5b8817a5c2f610b634abb0689d9672e42eef5a1b0bc6d01f52ba73dbe",
+ "source": "learn/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/learn/",
+ "uri": "pdfmake://docs/0.3/es/learn",
+ "markdown": "# Empieza aquí\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/learn/\n\n## Empieza con un documento funcional\n\nNo hace falta que leas toda la referencia del documento desde el principio. Sigue estos tres pasos:\n\n\n\n- [1. Crea tu primer PDF](/docs/0.3/es/learn/first-pdf/): Comprende la definición, carga las fuentes y ejecuta un ejemplo completo.\n\n\n- [2. Aprende el modelo de documento](/docs/0.3/es/learn/document-model/): Descubre cuándo usar un párrafo, texto en línea, una pila, columnas o una tabla.\n\n\n- [3. Lee los errores y corrige el problema adecuado](/docs/0.3/es/guides/errors/): Distingue entre sintaxis JavaScript, estructura del documento, recursos y salida.\n\n\n\n## ¿Qué entorno de ejecución necesito?\n\n| Elige | Cuándo | Salida |\n| --- | --- | --- |\n| [Node.js](/docs/0.3/es/getting-started/server-side/) | Tu API o trabajo en segundo plano crea el archivo | `write()` para archivos; `getBuffer()` para respuestas HTTP |\n| [Navegador](/docs/0.3/es/getting-started/client-side/) | El usuario crea el documento en su dispositivo | `download()`, `open()`, `print()` o `getBlob()` |\n\nLa definición del documento es compartida. La carga de fuentes y los métodos de salida dependen del entorno. Estas páginas corresponden a la versión **0.3.x**; los ejemplos antiguos que usan `new PdfPrinter(...)` y salida con callbacks pertenecen a [0.1/0.2](/docs/0.3/es/migration-from-0.1/).\n\n## Aprende viendo el resultado\n\nLos ejemplos de este recorrido muestran la definición exacta de JavaScript junto a un PDF generado real. Ábrelos en el entorno de pruebas para editarlos. Su código completo también aparece en el [corpus Markdown](/docs/0.3/es/llms-full.txt), incluido el código que generan los componentes de ejemplo interactivos.\n"
+ },
+ {
+ "id": "fr/learn",
+ "language": "fr",
+ "translationKey": "learn",
+ "path": "/docs/0.3/fr/learn/",
+ "title": "Commencer ici",
+ "description": "Un parcours d’apprentissage concis, du choix de l’environnement à la génération, la mise en forme et le dépannage de votre premier PDF.",
+ "version": "0.3",
+ "sourceDigest": "a8635fe5b8817a5c2f610b634abb0689d9672e42eef5a1b0bc6d01f52ba73dbe",
+ "source": "learn/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/learn/",
+ "uri": "pdfmake://docs/0.3/fr/learn",
+ "markdown": "# Commencer ici\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/learn/\n\n## Commencer par un document fonctionnel\n\nVous n’avez pas besoin de connaître toute la référence du document dès le départ. Suivez ces trois étapes :\n\n\n\n- [1. Créer votre premier PDF](/docs/0.3/fr/learn/first-pdf/): Comprenez la définition, chargez les polices et exécutez un exemple complet.\n\n\n- [2. Comprendre le modèle de document](/docs/0.3/fr/learn/document-model/): Apprenez quand utiliser un paragraphe, du texte en ligne, une pile, des colonnes ou un tableau.\n\n\n- [3. Lire les erreurs et corriger le bon élément](/docs/0.3/fr/guides/errors/): Distinguez la syntaxe JavaScript, la structure du document, les ressources et la sortie.\n\n\n\n## De quel environnement ai-je besoin ?\n\n| Choisir | Quand | Sortie |\n| --- | --- | --- |\n| [Node.js](/docs/0.3/fr/getting-started/server-side/) | Votre API ou tâche en arrière-plan crée le fichier | `write()` pour les fichiers ; `getBuffer()` pour les réponses HTTP |\n| [Navigateur](/docs/0.3/fr/getting-started/client-side/) | L’utilisateur crée le document sur son appareil | `download()`, `open()`, `print()` ou `getBlob()` |\n\nLa définition de document est commune. Le chargement des polices et les méthodes de sortie dépendent de l’environnement d’exécution. Ces pages concernent **0.3.x** ; les anciens exemples utilisant `new PdfPrinter(...)` et des sorties par callback se rapportent à [0.1/0.2](/docs/0.3/fr/migration-from-0.1/).\n\n## Apprendre en observant le résultat\n\nLes exemples de ce parcours montrent la définition JavaScript exacte à côté d’un PDF réellement généré. Ouvrez-les dans le playground pour les modifier. Leur source complète figure également dans le [corpus Markdown](/docs/0.3/fr/llms-full.txt), y compris le code qui serait autrement généré par les composants d’exemples interactifs.\n"
+ },
+ {
+ "id": "learn",
+ "language": "en",
+ "translationKey": "learn",
+ "path": "/docs/0.3/learn/",
+ "title": "Start here",
+ "description": "A short learning path from choosing a runtime to generating, styling and troubleshooting your first PDF.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "learn/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/learn/",
+ "uri": "pdfmake://docs/0.3/learn",
+ "markdown": "# Start here\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/learn/\n\n## Start with one working document\n\nYou do not need to learn the whole document reference first. Follow these three steps:\n\n\n\n- [1. Make your first PDF](/docs/0.3/learn/first-pdf/): Understand the definition, load fonts and run one complete example.\n\n\n- [2. Learn the document model](/docs/0.3/learn/document-model/): Know when to use a paragraph, inline text, a stack, columns or a table.\n\n\n- [3. Read errors and fix the right thing](/docs/0.3/guides/errors/): Separate JavaScript syntax, document structure, resources and output.\n\n\n\n## Which runtime do I need?\n\n| Choose | When | Output |\n| --- | --- | --- |\n| [Node.js](/docs/0.3/getting-started/server-side/) | Your API or background job creates the file | `write()` for files; `getBuffer()` for HTTP responses |\n| [Browser](/docs/0.3/getting-started/client-side/) | The user creates the document on their device | `download()`, `open()`, `print()` or `getBlob()` |\n\nThe document definition is shared. Font loading and output helpers depend on the runtime.\nThese pages target **0.3.x**; older examples using `new PdfPrinter(...)` and callback\noutput belong to [0.1/0.2](/docs/0.3/migration-from-0.1/).\n\n## Learn by seeing the result\n\nExamples in this learning path show the exact JavaScript definition beside a real\ngenerated PDF. Open them in the playground to edit them. Their complete source is\nalso included in the [Markdown corpus](/docs/0.3/llms-full.txt), including the code\notherwise generated by the interactive example components.\n"
+ },
+ {
+ "id": "pt-br/learn",
+ "language": "pt-br",
+ "translationKey": "learn",
+ "path": "/docs/0.3/pt-br/learn/",
+ "title": "Comece por aqui",
+ "description": "Um caminho curto de aprendizado: escolha um ambiente, gere e estilize seu primeiro PDF e resolva problemas.",
+ "version": "0.3",
+ "sourceDigest": "a8635fe5b8817a5c2f610b634abb0689d9672e42eef5a1b0bc6d01f52ba73dbe",
+ "source": "learn/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/learn/",
+ "uri": "pdfmake://docs/0.3/pt-br/learn",
+ "markdown": "# Comece por aqui\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/learn/\n\n## Comece com um documento funcional\n\nVocê não precisa aprender toda a referência do documento primeiro. Siga estes três passos:\n\n\n\n- [1. Crie seu primeiro PDF](/docs/0.3/pt-br/learn/first-pdf/): Entenda a definição, carregue fontes e execute um exemplo completo.\n\n\n- [2. Aprenda o modelo do documento](/docs/0.3/pt-br/learn/document-model/): Saiba quando usar parágrafo, texto em linha, pilha, colunas ou tabela.\n\n\n- [3. Leia os erros e corrija o problema certo](/docs/0.3/pt-br/guides/errors/): Diferencie sintaxe JavaScript, estrutura do documento, recursos e saída.\n\n\n\n## De qual ambiente preciso?\n\n| Escolha | Quando usar | Saída |\n| --- | --- | --- |\n| [Node.js](/docs/0.3/pt-br/getting-started/server-side/) | Sua API ou tarefa em segundo plano cria o arquivo | `write()` para arquivos; `getBuffer()` para respostas HTTP |\n| [Navegador](/docs/0.3/pt-br/getting-started/client-side/) | O usuário cria o documento no próprio dispositivo | `download()`, `open()`, `print()` ou `getBlob()` |\n\nA definição do documento é compartilhada. O carregamento de fontes e as funções de saída dependem do ambiente. Estas páginas são para **0.3.x**; exemplos antigos que usam `new PdfPrinter(...)` e saída por callbacks pertencem ao [0.1/0.2](/docs/0.3/pt-br/migration-from-0.1/).\n\n## Aprenda vendo o resultado\n\nOs exemplos deste caminho mostram a definição JavaScript exata ao lado de um PDF realmente gerado. Abra-os no playground para editá-los. O código-fonte completo também está incluído no [corpus Markdown](/docs/0.3/pt-br/llms-full.txt), inclusive o código normalmente gerado pelos componentes interativos de exemplo.\n"
+ },
+ {
+ "id": "de/learn/document-model",
+ "language": "de",
+ "translationKey": "learn/document-model",
+ "path": "/docs/0.3/de/learn/document-model/",
+ "title": "Das Dokumentmodell",
+ "description": "Wähle zwischen Absätzen, Inline-Text, Stapeln, Spalten und Tabellen und erfahre, auf welcher Ebene die Konfiguration hingehört.",
+ "version": "0.3",
+ "sourceDigest": "7e8645b7aacec49012239058169490a59be9441a27c94823fc6aa528cef81064",
+ "source": "learn/document-model.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/learn/document-model/",
+ "uri": "pdfmake://docs/0.3/de/learn/document-model",
+ "markdown": "# Das Dokumentmodell\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/learn/document-model/\n\n## Mit dem Inhalt beginnen\n\n`content` beschreibt den Hauptinhalt des PDFs. Eine einfache Zeichenfolge ist ein Absatz. Ein `content`-Array ist eine vertikale Folge von Blöcken. Ein Objekt beschreibt einen Knoten mit zusätzlichen Eigenschaften. pdfmake berechnet die Positionen; normalerweise musst du keine Koordinaten angeben.\n\n**JavaScript**\n\n```js\nconst dd = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst dd: TDocumentDefinitions = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};\n```\n\nDas verschachtelte `text`-Array erzeugt **Inline-Segmente im selben Absatz**. Ein `content`-Array oder `stack` erzeugt **getrennte Blöcke**. Dieser Unterschied erklärt viele unerwartete Zeilenumbrüche bei den ersten Dokumentdefinitionen.\n\n## Container auswählen\n\n| Bedarf | Knoten | Häufiger Fehler |\n| --- | --- | --- |\n| Mehrere Absätze mit gemeinsamem Stil | `{ stack: [...] }` | Stil-Eigenschaften direkt einem Array zuweisen wollen |\n| Unabhängige Blöcke nebeneinander | `{ columns: [...] }` | Annehmen, dass Zeilen wie in einer Tabelle ausgerichtet werden |\n| Ausgerichtete Zeilen und Zellen | `{ table: { body: [...] } }` | Platzhalterzellen nach `colSpan` oder `rowSpan` auslassen |\n| Aufzählungs- oder nummerierte Elemente | `{ ul: [...] }` oder `{ ol: [...] }` | Eine Zeichenfolge einsetzen, obwohl ein Array mit Elementen erwartet wird |\n| Unterschiedliche Stile innerhalb einer Zeile | `{ text: [...] }` | Einen Stapel verwenden, der getrennte Blöcke erzeugt |\n\n\n\n### Runnable example: 05 · Columns & stacks\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/de/playground/?example=columns)\n\n\n\n## Einstellungen auf der passenden Ebene festlegen\n\n| Ebene | Beispiele | Zweck |\n| --- | --- | --- |\n| Anwendungskonfiguration | `addFonts`, `addTableLayouts`, Ressourcenrichtlinien | Wiederverwendbare Ressourcen vor dem Start von Aufträgen registrieren |\n| Dokumentdefinition | `content`, `styles`, `defaultStyle`, `pageMargins`, `footer` | Ein PDF beschreiben |\n| Einzelner Knoten | `text`, `fontSize`, `bold`, `margin`, `pageBreak` | Ein Inhaltselement beschreiben |\n| Zweites Argument von `createPdf` | `fontLayoutCache`, `bufferPages` | Engine-Optionen anpassen |\n\nRegistriere gemeinsam genutzte Schriften und Richtlinien einmal in einem Node.js-Dienst. Erzeuge für jeden Auftrag eine neue Definition: Das Layout fügt Knoten Messwerte und Positionen hinzu und verändert sie damit. Ändere die Konfiguration des gemeinsam genutzten pdfmake-Singletons nicht während paralleler Anfragen.\n\n## Einheiten und Breiten verstehen\n\nMaße werden in Punkten angegeben. Ein Rand mit vier Werten hat die Reihenfolge `[links, oben, rechts, unten]`. Eine numerische Breite ist eine feste Breite in Punkten; `'auto'` richtet sich nach dem Inhalt und `'*'` teilt den verbleibenden Platz mit anderen Sternspalten. Verwende zunächst feste Breiten oder Sternbreiten und ergänze inhaltsabhängige Breiten nur dann, wenn sie ein konkretes Layoutproblem lösen.\n\n## In der Referenz weiterlesen\n\n[Stile](/docs/0.3/de/document-definition-object/styling/) · [Tabellen](/docs/0.3/de/document-definition-object/tables/) · [Bilder](/docs/0.3/de/document-definition-object/images/) · [Seitenlayout](/docs/0.3/de/document-definition-object/page/)\n"
+ },
+ {
+ "id": "es/learn/document-model",
+ "language": "es",
+ "translationKey": "learn/document-model",
+ "path": "/docs/0.3/es/learn/document-model/",
+ "title": "El modelo de documento",
+ "description": "Elige entre párrafos, texto en línea, pilas, columnas y tablas, y descubre dónde corresponde cada configuración.",
+ "version": "0.3",
+ "sourceDigest": "7e8645b7aacec49012239058169490a59be9441a27c94823fc6aa528cef81064",
+ "source": "learn/document-model.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/learn/document-model/",
+ "uri": "pdfmake://docs/0.3/es/learn/document-model",
+ "markdown": "# El modelo de documento\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/learn/document-model/\n\n## Empezar por el contenido\n\n`content` describe el cuerpo del PDF. Una cadena sencilla es un párrafo. Una matriz de contenido es una secuencia vertical de bloques. Un objeto describe un nodo con propiedades adicionales. pdfmake calcula las posiciones; por lo general, no hace falta especificar coordenadas.\n\n**JavaScript**\n\n```js\nconst dd = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst dd: TDocumentDefinitions = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};\n```\n\nLa matriz `text` anidada crea **segmentos en línea dentro del mismo párrafo**. Una matriz `content` o un `stack` crea **bloques independientes**. Esta distinción explica muchos saltos de línea inesperados al empezar a crear definiciones.\n\n## Elegir un contenedor\n\n| Necesidad | Nodo | Error habitual |\n| --- | --- | --- |\n| Varios párrafos que comparten un estilo | `{ stack: [...] }` | Intentar asignar propiedades de estilo directamente a una matriz |\n| Bloques independientes uno junto a otro | `{ columns: [...] }` | Esperar que las filas queden alineadas como en una tabla |\n| Filas y celdas alineadas | `{ table: { body: [...] } }` | Omitir las celdas de marcador de posición tras `colSpan` o `rowSpan` |\n| Elementos con viñetas o numerados | `{ ul: [...] }` o `{ ol: [...] }` | Incrustar una cadena donde se espera una matriz de elementos |\n| Varios estilos dentro de una línea | `{ text: [...] }` | Usar una pila, que crea bloques independientes |\n\n\n\n### Runnable example: 05 · Columns & stacks\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/es/playground/?example=columns)\n\n\n\n## Colocar la configuración en el nivel correcto\n\n| Nivel | Ejemplos | Propósito |\n| --- | --- | --- |\n| Configuración de la aplicación | `addFonts`, `addTableLayouts`, políticas de recursos | Registra recursos reutilizables antes de iniciar los trabajos |\n| Definición del documento | `content`, `styles`, `defaultStyle`, `pageMargins`, `footer` | Describe un PDF |\n| Nodo individual | `text`, `fontSize`, `bold`, `margin`, `pageBreak` | Describe una parte del contenido |\n| Segundo argumento de `createPdf` | `fontLayoutCache`, `bufferPages` | Ajusta las opciones del motor |\n\nEn un servicio Node, registra una vez las fuentes compartidas y las políticas. Crea una definición nueva para cada trabajo: la maquetación modifica los nodos con medidas y posiciones. Evita modificar la configuración del singleton compartido de pdfmake durante solicitudes simultáneas.\n\n## Comprender las unidades y los anchos\n\nLas dimensiones se expresan en puntos. Un margen de cuatro valores sigue el orden `[left, top, right, bottom]` (izquierda, arriba, derecha, abajo). Un ancho numérico es un ancho fijo en puntos; `'auto'` se ajusta al contenido y `'*'` comparte el espacio restante con las demás columnas de asterisco. Empieza con anchos fijos o con asteriscos e introduce el ajuste al contenido cuando resuelva una necesidad real de distribución.\n\n## Continuar con la referencia\n\n[Estilos](/docs/0.3/es/document-definition-object/styling/) · [Tablas](/docs/0.3/es/document-definition-object/tables/) · [Imágenes](/docs/0.3/es/document-definition-object/images/) · [Distribución de páginas](/docs/0.3/es/document-definition-object/page/)\n"
+ },
+ {
+ "id": "fr/learn/document-model",
+ "language": "fr",
+ "translationKey": "learn/document-model",
+ "path": "/docs/0.3/fr/learn/document-model/",
+ "title": "Le modèle de document",
+ "description": "Choisissez entre paragraphes, texte en ligne, piles, colonnes et tableaux, et comprenez où placer la configuration.",
+ "version": "0.3",
+ "sourceDigest": "7e8645b7aacec49012239058169490a59be9441a27c94823fc6aa528cef81064",
+ "source": "learn/document-model.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/learn/document-model/",
+ "uri": "pdfmake://docs/0.3/fr/learn/document-model",
+ "markdown": "# Le modèle de document\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/learn/document-model/\n\n## Partir du contenu\n\n`content` décrit le corps du PDF. Une chaîne simple est un paragraphe. Un tableau `content` est une séquence verticale de blocs. Un objet décrit un nœud avec des propriétés supplémentaires. pdfmake calcule les positions ; en général, vous n’avez pas à indiquer de coordonnées.\n\n**JavaScript**\n\n```js\nconst dd = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst dd: TDocumentDefinitions = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};\n```\n\nLe tableau `text` imbriqué crée des **segments en ligne dans le même paragraphe**. Un tableau `content` ou une `stack` crée des **blocs distincts**. Cette différence explique de nombreux retours à la ligne surprenants lorsque l’on commence à construire des définitions.\n\n## Choisir un conteneur\n\n| Besoin | Nœud | Erreur courante |\n| --- | --- | --- |\n| Plusieurs paragraphes partageant un style | `{ stack: [...] }` | Essayer d’affecter directement des propriétés de style à un tableau |\n| Blocs indépendants côte à côte | `{ columns: [...] }` | S’attendre à l’alignement des lignes d’un tableau |\n| Lignes et cellules alignées | `{ table: { body: [...] } }` | Omettre les cellules de remplacement après `colSpan` ou `rowSpan` |\n| Éléments à puces ou numérotés | `{ ul: [...] }` ou `{ ol: [...] }` | Fournir une chaîne là où un tableau d’éléments est attendu |\n| Styles mélangés sur une même ligne | `{ text: [...] }` | Utiliser une pile, qui crée des blocs distincts |\n\n\n\n### Runnable example: 05 · Columns & stacks\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/fr/playground/?example=columns)\n\n\n\n## Placer les paramètres au bon niveau\n\n| Niveau | Exemples | Rôle |\n| --- | --- | --- |\n| Configuration de l’application | `addFonts`, `addTableLayouts`, règles d’accès aux ressources | Enregistrer des ressources réutilisables avant le démarrage des tâches |\n| Définition du document | `content`, `styles`, `defaultStyle`, `pageMargins`, `footer` | Décrire un PDF |\n| Nœud individuel | `text`, `fontSize`, `bold`, `margin`, `pageBreak` | Décrire un élément de contenu |\n| Deuxième argument de `createPdf` | `fontLayoutCache`, `bufferPages` | Régler les options du moteur |\n\nDans un service Node, enregistrez une fois les polices et règles partagées. Construisez une définition neuve pour chaque tâche : la mise en page ajoute des mesures et positions aux nœuds. Évitez de modifier la configuration de l’instance pdfmake partagée pendant des requêtes concurrentes.\n\n## Comprendre unités et largeurs\n\nLes dimensions sont exprimées en points. Une marge à quatre valeurs suit l’ordre `[gauche, haut, droite, bas]`. Une valeur numérique de largeur est fixe et exprimée en points ; `'auto'` suit le contenu ; `'*'` partage l’espace restant avec les autres colonnes étoilées. Commencez par des largeurs fixes ou étoilées, puis utilisez le dimensionnement selon le contenu lorsqu’il répond à un besoin réel.\n\n## Poursuivre avec la référence\n\n[Styles](/docs/0.3/fr/document-definition-object/styling/) · [Tableaux](/docs/0.3/fr/document-definition-object/tables/) · [Images](/docs/0.3/fr/document-definition-object/images/) · [Mise en page](/docs/0.3/fr/document-definition-object/page/)\n"
+ },
+ {
+ "id": "learn/document-model",
+ "language": "en",
+ "translationKey": "learn/document-model",
+ "path": "/docs/0.3/learn/document-model/",
+ "title": "The document model",
+ "description": "Choose between paragraphs, inline text, stacks, columns and tables, and understand where configuration belongs.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "learn/document-model.md",
+ "url": "https://pdfmake.github.io/docs/0.3/learn/document-model/",
+ "uri": "pdfmake://docs/0.3/learn/document-model",
+ "markdown": "# The document model\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/learn/document-model/\n\n## Start from content\n\n`content` describes the body of the PDF. A plain string is a paragraph. A content\narray is a vertical sequence of blocks. An object describes a node with additional\nproperties. pdfmake calculates positions; you usually do not specify coordinates.\n\n**JavaScript**\n\n```js\nconst dd = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst dd: TDocumentDefinitions = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};\n```\n\nThe nested `text` array creates **inline runs in the same paragraph**. A `content`\narray or `stack` creates **separate blocks**. This distinction explains many\nsurprising line breaks when you first build definitions.\n\n## Choose a container\n\n| Need | Node | Common mistake |\n| --- | --- | --- |\n| Several paragraphs sharing a style | `{ stack: [...] }` | Trying to assign style properties directly to an array |\n| Independent blocks side by side | `{ columns: [...] }` | Expecting rows to line up as in a table |\n| Aligned rows and cells | `{ table: { body: [...] } }` | Omitting placeholder cells after `colSpan` or `rowSpan` |\n| Bullet or numbered items | `{ ul: [...] }` or `{ ol: [...] }` | Embedding a string where an item array is expected |\n| Mixed styles within one line | `{ text: [...] }` | Using a stack, which creates separate blocks |\n\n\n\n### Runnable example: 05 · Columns & stacks\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/playground/?example=columns)\n\n\n\n## Put settings at the right level\n\n| Level | Examples | Purpose |\n| --- | --- | --- |\n| Application configuration | `addFonts`, `addTableLayouts`, resource policies | Register reusable resources before jobs start |\n| Document definition | `content`, `styles`, `defaultStyle`, `pageMargins`, `footer` | Describe one PDF |\n| Individual node | `text`, `fontSize`, `bold`, `margin`, `pageBreak` | Describe one piece of content |\n| Second `createPdf` argument | `fontLayoutCache`, `bufferPages` | Adjust engine options |\n\nRegister shared fonts and policies once in a Node service. Build a fresh definition\nfor every job: layout mutates nodes with measurements and positions. Avoid modifying\nthe shared pdfmake singleton's configuration during concurrent requests.\n\n## Learn the units and widths\n\nDimensions use points. A four-value margin is `[left, top, right, bottom]`.\nA width number is a fixed point width; `'auto'` follows content; `'*'` shares\nremaining space with other star columns. Use fixed or star widths first, then\nintroduce content-driven sizing when it solves a real layout need.\n\n## Continue with the reference\n\n[Styling](/docs/0.3/document-definition-object/styling/) · [Tables](/docs/0.3/document-definition-object/tables/)\n· [Images](/docs/0.3/document-definition-object/images/) · [Page layout](/docs/0.3/document-definition-object/page/)\n"
+ },
+ {
+ "id": "pt-br/learn/document-model",
+ "language": "pt-br",
+ "translationKey": "learn/document-model",
+ "path": "/docs/0.3/pt-br/learn/document-model/",
+ "title": "O modelo de documento",
+ "description": "Escolha entre parágrafos, texto em linha, pilhas, colunas e tabelas e entenda onde cada configuração deve ficar.",
+ "version": "0.3",
+ "sourceDigest": "7e8645b7aacec49012239058169490a59be9441a27c94823fc6aa528cef81064",
+ "source": "learn/document-model.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/learn/document-model/",
+ "uri": "pdfmake://docs/0.3/pt-br/learn/document-model",
+ "markdown": "# O modelo de documento\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/learn/document-model/\n\n## Comece pelo conteúdo\n\n`content` descreve o corpo do PDF. Uma string simples é um parágrafo. Um array `content` é uma sequência vertical de blocos. Um objeto descreve um nó com propriedades adicionais. O pdfmake calcula as posições; normalmente você não informa coordenadas.\n\n**JavaScript**\n\n```js\nconst dd = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nconst dd: TDocumentDefinitions = {\n content: [\n 'One paragraph.',\n { text: 'Another paragraph.', bold: true },\n { text: ['One paragraph with ', { text: 'an emphasized part', italics: true }] }\n ]\n};\n```\n\nO array `text` aninhado cria **trechos em linha dentro do mesmo parágrafo**. Um array `content` ou `stack` cria **blocos separados**. Essa diferença explica muitas quebras de linha inesperadas quando você começa a criar definições.\n\n## Escolha um contêiner\n\n| Necessidade | Nó | Erro comum |\n| --- | --- | --- |\n| Vários parágrafos que compartilham um estilo | `{ stack: [...] }` | Tentar atribuir propriedades de estilo diretamente a um array |\n| Blocos independentes lado a lado | `{ columns: [...] }` | Esperar que as linhas se alinhem como numa tabela |\n| Linhas e células alinhadas | `{ table: { body: [...] } }` | Omitir células substitutas depois de `colSpan` ou `rowSpan` |\n| Itens com marcadores ou numerados | `{ ul: [...] }` ou `{ ol: [...] }` | Inserir uma string onde se espera um array de itens |\n| Estilos mistos na mesma linha | `{ text: [...] }` | Usar uma pilha, que cria blocos separados |\n\n\n\n### Runnable example: 05 · Columns & stacks\n\n**JavaScript**\n\n```js\nvar dd = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/pt-br/playground/?example=columns)\n\n\n\n## Coloque as configurações no nível certo\n\n| Nível | Exemplos | Finalidade |\n| --- | --- | --- |\n| Configuração da aplicação | `addFonts`, `addTableLayouts`, políticas de recursos | Registrar recursos reutilizáveis antes de iniciar os trabalhos |\n| Definição do documento | `content`, `styles`, `defaultStyle`, `pageMargins`, `footer` | Descrever um PDF |\n| Nó individual | `text`, `fontSize`, `bold`, `margin`, `pageBreak` | Descrever uma parte do conteúdo |\n| Segundo argumento de `createPdf` | `fontLayoutCache`, `bufferPages` | Ajustar opções do motor |\n\nRegistre fontes compartilhadas e políticas uma vez em um serviço Node. Crie uma definição nova para cada trabalho: o layout modifica os nós com medidas e posições. Evite alterar a configuração do singleton compartilhado do pdfmake enquanto houver solicitações simultâneas.\n\n## Entenda unidades e larguras\n\nAs dimensões usam pontos. Uma margem com quatro valores segue `[esquerda, acima, direita, abaixo]`. Um número de largura representa uma largura fixa em pontos; `'auto'` acompanha o conteúdo; `'*'` compartilha o espaço restante com outras colunas com asterisco. Comece com larguras fixas ou com asterisco e depois introduza dimensionamento baseado no conteúdo quando ele resolver uma necessidade real de layout.\n\n## Continue pela referência\n\n[Estilos](/docs/0.3/pt-br/document-definition-object/styling/) · [Tabelas](/docs/0.3/pt-br/document-definition-object/tables/) · [Imagens](/docs/0.3/pt-br/document-definition-object/images/) · [Layout da página](/docs/0.3/pt-br/document-definition-object/page/)\n"
+ },
+ {
+ "id": "de/learn/first-pdf",
+ "language": "de",
+ "translationKey": "learn/first-pdf",
+ "path": "/docs/0.3/de/learn/first-pdf/",
+ "title": "Deine erste PDF",
+ "description": "Erstelle in fünf kleinen Schritten ein funktionierendes pdfmake-0.3-Dokument mit Quellcode und tatsächlich gerenderter PDF.",
+ "version": "0.3",
+ "sourceDigest": "cc22460fa895f9043a3b91fedd495c215fe7096cedc48fdf33cf5800f1a7ea7c",
+ "source": "learn/first-pdf.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/learn/first-pdf/",
+ "uri": "pdfmake://docs/0.3/de/learn/first-pdf",
+ "markdown": "# Deine erste PDF\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/learn/first-pdf/\n\n## 1. Die zwei Zutaten verstehen\n\npdfmake benötigt eine **Engine mit Schriften** und eine **Dokumentdefinition**. Die Definition ist ein JavaScript-Objekt, das den zu druckenden Inhalt beschreibt. Sie ist kein HTML und erzeugt erst dann etwas, wenn du sie an `createPdf` übergibst und eine Ausgabe anforderst.\n\nProbiere zunächst das folgende Beispiel im Browser aus. Engine und Roboto-Schrift sind bereits eingerichtet. Richte anschließend in Schritt 3 deine Laufzeit ein.\n\n## 2. Eine vollständige Definition ansehen\n\nDas folgende Ergebnis wird exakt mit diesem Code erzeugt. Drei Einträge in `content` ergeben drei Blöcke untereinander. Text wird automatisch umgebrochen; Ränder und Schriftgrößen werden in PDF-Punkten gemessen (72 Punkte = 1 Zoll).\n\n\n\n### Runnable example: 01 · First document\n\n**JavaScript**\n\n```js\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/de/playground/?example=welcome)\n\n\n\nÄndere im Playground die Überschrift oder Schriftgröße. Bei aktivierter **Live-Vorschau** erscheint die neue PDF, wenn du mit dem Tippen pausierst. Änderungen lassen sich rückgängig machen; du kannst benannte Dokumente im Browser speichern oder eine JavaScript-Datei exportieren.\n\n## 3. Deine Anwendung einrichten\n\nWähle **eine** Einrichtung. Kombiniere den Node.js-Einstieg nicht mit Browser-Ausgabemethoden.\n\n| Laufzeit | Einrichtung | Warum Schriften wichtig sind |\n| --- | --- | --- |\n| Node.js-API | [Vollständiger Node.js-Schnellstart](/docs/0.3/de/getting-started/server-side/) | Registriere echte Schriftdateien oder eine Standardschriftfamilie vor dem Rendern |\n| Browseranwendung | [Vollständiger Browser-Schnellstart](/docs/0.3/de/getting-started/client-side/) | Lade `pdfmake.min.js` und anschließend ein Schrift-VFS oder registriere es im Bundler |\n\nDas Beispiel verwendet `Roboto`, die Standardschrift im Browser. Wenn du die Definition mit der Helvetica-Einrichtung aus dem Node.js-Schnellstart verwendest, ergänze `defaultStyle: { font: 'Helvetica' }` oder registriere Roboto-Dateien. Unicode-Text benötigt außerdem eine Schrift, die die verwendeten Zeichen enthält; eine gültige Zeichenfolge liefert keine fehlenden Glyphen mit.\n\n## 4. Ausgabe anfordern und Fehler behandeln\n\nIn einer eingerichteten Browseranwendung:\n\n**JavaScript**\n\n```js\ntry {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}\n```\n\nHier ist `dd` die oben gezeigte Definition und `#status` ein Element deiner Anwendung. Verwende in Node.js stattdessen `await pdfmake.createPdf(dd).write('first-document.pdf')`. `createPdf` gibt einen Ausgabe-Wrapper zurück; die Ausgabemethode liefert das Promise, auf das du warten musst. Ohne `await` oder `.catch(...)` erreicht ein Generierungsfehler möglicherweise nie deine Benutzeroberfläche.\n\n## 5. Jeweils ein Konzept ergänzen\n\nBehalte das erste funktionierende Dokument. Ergänze anschließend [benannte Stile](/docs/0.3/de/document-definition-object/styling/) und danach [Tabellen](/docs/0.3/de/document-definition-object/tables/), wenn du Zeilen brauchst. Verwende das [Dokumentmodell](/docs/0.3/de/learn/document-model/), um den passenden Knotentyp auszuwählen. Wenn ein Fehler auftritt, [ordne ihn zunächst einer Fehlerklasse zu](/docs/0.3/de/guides/errors/), bevor du gleichzeitig Schriften, Layout und Ressourcen änderst.\n"
+ },
+ {
+ "id": "es/learn/first-pdf",
+ "language": "es",
+ "translationKey": "learn/first-pdf",
+ "path": "/docs/0.3/es/learn/first-pdf/",
+ "title": "Tu primer PDF",
+ "description": "Crea un documento pdfmake 0.3 funcional en cinco pasos pequeños, con el código fuente y su PDF renderizado real.",
+ "version": "0.3",
+ "sourceDigest": "cc22460fa895f9043a3b91fedd495c215fe7096cedc48fdf33cf5800f1a7ea7c",
+ "source": "learn/first-pdf.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/learn/first-pdf/",
+ "uri": "pdfmake://docs/0.3/es/learn/first-pdf",
+ "markdown": "# Tu primer PDF\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/learn/first-pdf/\n\n## 1. Comprender los dos ingredientes\n\npdfmake necesita un **motor con fuentes** y una **definición del documento**. La definición es un objeto JavaScript que describe lo que se va a imprimir. No es HTML y no dibuja nada hasta que se pasa a `createPdf` y se solicita una salida.\n\nPara el primer intento, usa el ejemplo del navegador que aparece abajo. Ya tiene configurados el motor y la fuente Roboto. Después, usa la configuración del entorno de ejecución del paso 3.\n\n## 2. Ver una definición completa\n\nEl resultado que aparece abajo se genera exactamente con este código. Las tres entradas de `content` se convierten en tres bloques verticales. El texto se ajusta automáticamente; los márgenes y los tamaños de fuente se miden en puntos PDF (72 puntos = 1 pulgada).\n\n\n\n### Runnable example: 01 · First document\n\n**JavaScript**\n\n```js\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/es/playground/?example=welcome)\n\n\n\nCambia el encabezado o el tamaño de fuente en el entorno de pruebas. Con **Live preview** activada, el PDF nuevo aparece después de dejar de escribir. Puedes deshacer cambios, guardar documentos con nombre en el navegador o exportar un archivo JavaScript.\n\n## 3. Configurar tu propia aplicación\n\nElige **una** configuración. No combines la entrada de Node con métodos de salida exclusivos del navegador.\n\n| Entorno | Configuración | Por qué importan las fuentes |\n| --- | --- | --- |\n| API de Node.js | [Inicio rápido completo con Node](/docs/0.3/es/getting-started/server-side/) | Registra archivos de fuentes reales o una familia estándar antes del renderizado |\n| Aplicación de navegador | [Inicio rápido completo en el navegador](/docs/0.3/es/getting-started/client-side/) | Carga `pdfmake.min.js` y luego un VFS de fuentes, o regístralo en el empaquetador |\n\nEl ejemplo usa `Roboto`, la fuente predeterminada del navegador. Si lo usas con la configuración de Helvetica estándar de la guía de Node, añade `defaultStyle: { font: 'Helvetica' }` a la definición o registra los archivos Roboto. El texto Unicode también necesita una fuente que cubra los caracteres usados; una cadena válida no aporta los glifos que falten.\n\n## 4. Solicitar una salida y gestionar errores\n\nEn una aplicación de navegador configurada:\n\n**JavaScript**\n\n```js\ntry {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}\n```\n\nAquí `dd` es la definición anterior y `#status` es un elemento de la aplicación. En Node.js, usa en su lugar `await pdfmake.createPdf(dd).write('first-document.pdf')`. `createPdf` devuelve un contenedor de salida; el método de salida devuelve la Promise que hay que esperar. Si no usas `await` ni `.catch(...)`, es posible que el error de generación nunca llegue a la interfaz.\n\n## 5. Añadir un concepto a la vez\n\nConserva el primer documento funcional. A continuación, añade [estilos con nombre](/docs/0.3/es/document-definition-object/styling/) y después [tablas](/docs/0.3/es/document-definition-object/tables/) cuando necesites filas. Usa el [modelo de documento](/docs/0.3/es/learn/document-model/) para elegir el tipo de nodo. Si algo falla, [clasifica el error](/docs/0.3/es/guides/errors/) antes de cambiar de golpe las fuentes, la distribución y los recursos.\n"
+ },
+ {
+ "id": "fr/learn/first-pdf",
+ "language": "fr",
+ "translationKey": "learn/first-pdf",
+ "path": "/docs/0.3/fr/learn/first-pdf/",
+ "title": "Votre premier PDF",
+ "description": "Créez un document pdfmake 0.3 fonctionnel en cinq étapes simples, avec son code source et le PDF réellement généré.",
+ "version": "0.3",
+ "sourceDigest": "cc22460fa895f9043a3b91fedd495c215fe7096cedc48fdf33cf5800f1a7ea7c",
+ "source": "learn/first-pdf.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/learn/first-pdf/",
+ "uri": "pdfmake://docs/0.3/fr/learn/first-pdf",
+ "markdown": "# Votre premier PDF\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/learn/first-pdf/\n\n## 1. Comprendre les deux éléments nécessaires\n\npdfmake a besoin d’un **moteur avec des polices** et d’une **définition de document**. Cette définition est un objet JavaScript qui décrit ce qu’il faut imprimer. Ce n’est pas du HTML et elle ne dessine rien tant que vous ne la transmettez pas à `createPdf` et ne demandez pas une sortie.\n\nPour votre premier essai, utilisez dans le navigateur l’exemple ci-dessous. Le moteur et la police Roboto y sont déjà configurés. Suivez ensuite à l’étape 3 les instructions de configuration de votre environnement.\n\n## 2. Examiner une définition complète\n\nLe résultat ci-dessous est généré exactement à partir de ce code. Les trois éléments `content` deviennent trois blocs verticaux. Le texte revient automatiquement à la ligne ; les marges et tailles de police sont mesurées en points PDF (72 points = 1 pouce).\n\n\n\n### Runnable example: 01 · First document\n\n**JavaScript**\n\n```js\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/fr/playground/?example=welcome)\n\n\n\nModifiez le titre ou la taille de police dans le playground. Si l’aperçu en direct est activé, le PDF apparaît après une pause de saisie. Vous pouvez annuler des modifications, enregistrer des documents nommés dans le navigateur ou exporter un fichier JavaScript.\n\n## 3. Configurer votre application\n\nChoisissez **une** configuration. Ne combinez pas l’entrée Node avec des méthodes de sortie réservées au navigateur.\n\n| Environnement | Configuration | Pourquoi les polices comptent |\n| --- | --- | --- |\n| API Node.js | [Démarrage rapide complet avec Node](/docs/0.3/fr/getting-started/server-side/) | Enregistrez des fichiers de police réels ou une famille standard avant le rendu |\n| Application navigateur | [Démarrage rapide complet dans le navigateur](/docs/0.3/fr/getting-started/client-side/) | Chargez `pdfmake.min.js`, puis un VFS de polices, ou enregistrez-le dans votre bundler |\n\nL’exemple utilise `Roboto`, la police par défaut du navigateur. Si vous l’utilisez avec la configuration Helvetica standard du guide Node, ajoutez `defaultStyle: { font: 'Helvetica' }` à la définition ou enregistrez les fichiers Roboto. Le texte Unicode exige également une police couvrant les caractères utilisés ; une chaîne valide ne fournit pas les glyphes manquants.\n\n## 4. Demander une sortie et gérer les erreurs\n\nDans une application navigateur configurée :\n\n**JavaScript**\n\n```js\ntry {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}\n```\n\nIci, `dd` est la définition ci-dessus et `#status` est un élément de votre application. Dans Node.js, utilisez plutôt `await pdfmake.createPdf(dd).write('first-document.pdf')`. `createPdf` renvoie un objet de sortie ; la méthode de sortie renvoie la Promise à attendre. Sans `await` ou `.catch(...)`, un échec de génération peut ne jamais remonter jusqu’à votre interface.\n\n## 5. Ajouter les notions une à une\n\nConservez le premier document fonctionnel. Ajoutez ensuite des [styles nommés](/docs/0.3/fr/document-definition-object/styling/), puis des [tableaux](/docs/0.3/fr/document-definition-object/tables/) lorsque vous avez besoin de lignes. Utilisez le [modèle de document](/docs/0.3/fr/learn/document-model/) pour choisir un type de nœud. En cas d’échec, [classez l’erreur](/docs/0.3/fr/guides/errors/) avant de modifier en même temps les polices, la mise en page et les ressources.\n"
+ },
+ {
+ "id": "learn/first-pdf",
+ "language": "en",
+ "translationKey": "learn/first-pdf",
+ "path": "/docs/0.3/learn/first-pdf/",
+ "title": "Your first PDF",
+ "description": "Build one working pdfmake 0.3 document in five small steps, with the source and its actual rendered PDF.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "learn/first-pdf.md",
+ "url": "https://pdfmake.github.io/docs/0.3/learn/first-pdf/",
+ "uri": "pdfmake://docs/0.3/learn/first-pdf",
+ "markdown": "# Your first PDF\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/learn/first-pdf/\n\n## 1. Understand the two ingredients\n\npdfmake needs an **engine with fonts** and a **document definition**. The definition\nis a JavaScript object describing what to print. It is not HTML and does not draw\nanything until you pass it to `createPdf` and request an output.\n\nFor your first attempt, use the example below in the browser. It already has the\nengine and Roboto font configured. Then use the runtime setup in step 3.\n\n## 2. Look at a complete definition\n\nThe result below is generated from exactly this code. Three `content` entries\nbecome three vertical blocks. Text wraps automatically; margins and font sizes\nare measured in PDF points (72 points = 1 inch).\n\n\n\n### Runnable example: 01 · First document\n\n**JavaScript**\n\n```js\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/playground/?example=welcome)\n\n\n\nChange the heading or font size in the playground. With **Live preview** enabled,\nthe next PDF appears after you pause typing. You can undo changes, save named\ndocuments in your browser, or export a JavaScript file.\n\n## 3. Configure your own application\n\nChoose **one** setup. Do not combine the Node entry with browser-only output methods.\n\n| Runtime | Setup | Why fonts matter |\n| --- | --- | --- |\n| Node.js API | [Complete Node quickstart](/docs/0.3/getting-started/server-side/) | Register real font files or a standard family before rendering |\n| Browser application | [Complete browser quickstart](/docs/0.3/getting-started/client-side/) | Load `pdfmake.min.js`, then a font VFS, or register it in your bundler |\n\nThe example uses `Roboto`, the browser default. If you use it with the Node\nquickstart's standard Helvetica setup, add `defaultStyle: { font: 'Helvetica' }`\nto the definition or register Roboto files. Unicode text also needs a font covering\nthe characters you use; a valid string alone does not supply missing glyphs.\n\n## 4. Request an output and handle errors\n\nIn a configured browser application:\n\n**JavaScript**\n\n```js\ntry {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}\n```\n\nHere `dd` is the definition above and `#status` is an element in your application.\nFor Node.js, use `await pdfmake.createPdf(dd).write('first-document.pdf')` instead.\n`createPdf` returns an output wrapper; the output method returns the Promise to\nawait. Without `await` or `.catch(...)`, a generation failure may never reach your UI.\n\n## 5. Add one concept at a time\n\nKeep the first working document. Add [named styles](/docs/0.3/document-definition-object/styling/)\nnext, then [tables](/docs/0.3/document-definition-object/tables/) when you need rows.\nUse [the document model](/docs/0.3/learn/document-model/) to choose a node type.\nIf something fails, [classify the error](/docs/0.3/guides/errors/) before changing fonts,\nlayout and resources all at once.\n"
+ },
+ {
+ "id": "pt-br/learn/first-pdf",
+ "language": "pt-br",
+ "translationKey": "learn/first-pdf",
+ "path": "/docs/0.3/pt-br/learn/first-pdf/",
+ "title": "Seu primeiro PDF",
+ "description": "Monte um documento funcional com pdfmake 0.3 em cinco passos curtos, com o código-fonte e o PDF realmente renderizado.",
+ "version": "0.3",
+ "sourceDigest": "cc22460fa895f9043a3b91fedd495c215fe7096cedc48fdf33cf5800f1a7ea7c",
+ "source": "learn/first-pdf.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/learn/first-pdf/",
+ "uri": "pdfmake://docs/0.3/pt-br/learn/first-pdf",
+ "markdown": "# Seu primeiro PDF\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/learn/first-pdf/\n\n## 1. Entenda os dois elementos\n\nO pdfmake precisa de um **motor com fontes** e de uma **definição do documento**. A definição é um objeto JavaScript que descreve o que será impresso. Ela não é HTML e não desenha nada até ser passada a `createPdf` e uma saída ser solicitada.\n\nNa primeira tentativa, use no navegador o exemplo abaixo. O motor e a fonte Roboto já estão configurados. Depois, configure seu ambiente seguindo o passo 3.\n\n## 2. Examine uma definição completa\n\nO resultado abaixo é gerado exatamente a partir deste código. As três entradas de `content` viram três blocos verticais. O texto quebra linhas automaticamente; margens e tamanhos de fonte são medidos em pontos PDF (72 pontos = 1 polegada).\n\n\n\n### Runnable example: 01 · First document\n\n**JavaScript**\n\n```js\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\n// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd: TDocumentDefinitions = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};\n```\n\n[See the rendered PDF and edit this example](https://pdfmake.github.io/docs/0.3/pt-br/playground/?example=welcome)\n\n\n\nAltere o título ou o tamanho da fonte no playground. Com **Live preview** ativada, o PDF atualizado aparece quando você pausa a digitação. Você pode desfazer alterações, salvar documentos nomeados no navegador ou exportar um arquivo JavaScript.\n\n## 3. Configure sua aplicação\n\nEscolha **uma** configuração. Não combine a entrada do Node com métodos de saída exclusivos do navegador.\n\n| Ambiente | Configuração | Por que as fontes importam |\n| --- | --- | --- |\n| API Node.js | [Início rápido completo para Node](/docs/0.3/pt-br/getting-started/server-side/) | Registre arquivos de fontes reais ou uma família padrão antes de renderizar |\n| Aplicação no navegador | [Início rápido completo para navegador](/docs/0.3/pt-br/getting-started/client-side/) | Carregue `pdfmake.min.js` e depois um VFS de fontes, ou registre-o no bundler |\n\nO exemplo usa `Roboto`, a fonte padrão do navegador. Se você o usar com a configuração de Helvetica padrão do início rápido para Node, adicione `defaultStyle: { font: 'Helvetica' }` à definição ou registre os arquivos Roboto. Texto Unicode também precisa de uma fonte que cubra os caracteres usados; uma string válida, por si só, não fornece glifos ausentes.\n\n## 4. Solicite uma saída e trate erros\n\nEm uma aplicação de navegador configurada:\n\n**JavaScript**\n\n```js\ntry {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}\n```\n\n**TypeScript**\n\n```ts\ntry {\n await pdfMake.createPdf(dd).download('first-document.pdf');\n} catch (error) {\n document.querySelector('#status').textContent = error.message;\n}\n```\n\nAqui, `dd` é a definição acima e `#status` é um elemento da aplicação. No Node.js, use `await pdfmake.createPdf(dd).write('first-document.pdf')`. `createPdf` retorna um invólucro de saída; o método de saída retorna a Promise que deve ser aguardada. Sem `await` ou `.catch(...)`, uma falha de geração talvez nunca chegue à interface.\n\n## 5. Adicione um conceito por vez\n\nMantenha o primeiro documento funcional. Em seguida, adicione [estilos nomeados](/docs/0.3/pt-br/document-definition-object/styling/) e depois [tabelas](/docs/0.3/pt-br/document-definition-object/tables/) quando precisar de linhas. Use [o modelo do documento](/docs/0.3/pt-br/learn/document-model/) para escolher um tipo de nó. Se algo falhar, [classifique o erro](/docs/0.3/pt-br/guides/errors/) antes de alterar fontes, layout e recursos todos de uma vez.\n"
+ },
+ {
+ "id": "de/migration-from-0.1",
+ "language": "de",
+ "translationKey": "migration-from-0.1",
+ "path": "/docs/0.3/de/migration-from-0.1/",
+ "title": "Migration von 0.1/0.2",
+ "description": "Migriere ältere pdfmake-Integrationen zur Singleton-API von 0.3, Promise-Ausgabemethoden, Schriftregistrierung und Seitenumbruch-Callbacks.",
+ "version": "0.3",
+ "sourceDigest": "693d722f104238aae8b671cfceb90abdfddb531f13ae71ca10f39c9f018bb4bf",
+ "source": "migration-from-0.1/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/migration-from-0.1/",
+ "uri": "pdfmake://docs/0.3/de/migration-from-0.1",
+ "markdown": "# Migration von 0.1/0.2\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/migration-from-0.1/\n\n## Geplant aktualisieren\n\nFixiere die Version, die du prüfst. Bewahre repräsentative bestehende PDFs und die Eingaben und Schriften auf, mit denen sie erzeugt wurden. Vergleiche vor dem Upgrade in der Produktion den extrahierten Text, die Seitenzahl und gerenderte Seiten. Bytegenau identische Ausgaben sind oft ungeeignet, weil sich PDF-Metadaten und Kennungen unterscheiden können.\n\n## Node-Konstruktor-API ersetzen\n\nÄltere Node.js-Beispiele erstellen `PdfPrinter` und rufen `createPdfKitDocument` auf. Verwende in 0.3 das Singleton:\n\n**JavaScript**\n\n```js\nconst pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from \"pdfmake\";\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');\n```\n\n`fonts` muss eine gültige Zuordnung von Schriftfamilien sein, wie in der [Node.js-Schnellstartanleitung](/docs/0.3/de/getting-started/server-side/) und im [Schriftenleitfaden](/docs/0.3/de/fonts/) gezeigt. Konfiguriere Richtlinien und Layouts beim Start und vermeide Änderungen am gemeinsam genutzten Singleton pro Anfrage.\n\n## Auf Ausgabemethoden warten\n\nErsetze callbackbasierte Browserausgabe durch Promises:\n\n**JavaScript**\n\n```js\nconst data = await pdfMake.createPdf(docDefinition).getBase64();\n```\n\n**TypeScript**\n\n```ts\nconst data = await pdfMake.createPdf(docDefinition).getBase64();\n```\n\nBehandle Ablehnungen der Ausgabemethoden. Verwende die [Node.js-Methoden](/docs/0.3/de/getting-started/server-side/methods/) oder [Browsermethoden](/docs/0.3/de/getting-started/client-side/methods/) für die jeweilige Zielumgebung.\n\n## Browser-Schriftdateien neu erzeugen\n\nErzeuge benutzerdefinierte VFS-Dateien neu und passe die Registrierung auf `addVirtualFileSystem` an. Nimm nicht an, dass das Format einer älteren generierten Schriftdatei mit dem aktuellen Bundle übereinstimmt. Siehe [VFS-Schriften](/docs/0.3/de/fonts/custom-fonts-client-side/vfs/).\n\n## `pageBreakBefore` aktualisieren\n\nVersion 0.1/0.2 übergab separate Knoten-Arrays. Version 0.3 übergibt einen Knotenkontainer:\n\n**JavaScript**\n\n```js\nvar dd = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};\n```\n\nDer Kontainer bietet außerdem `getNodesOnNextPage()` und `getPreviousNodesOnPage()`. Dieses Snippet ist eine Eigenschaft innerhalb einer Definition, kein eigenständiges JavaScript. Siehe [Seitenumbrüche](/docs/0.3/de/document-definition-object/page/).\n\n## Ressourcenzugriff konfigurieren\n\nKonfiguriere für **0.3.6+** eine synchrone URL-Zugriffsrichtlinie und für **0.3.8+** eine Richtlinie für lokale Dateien. Prüfe sowohl erlaubte als auch abgelehnte Ressourcen. Siehe [Ressourcensicherheit](/docs/0.3/de/guides/resource-security/).\n"
+ },
+ {
+ "id": "es/migration-from-0.1",
+ "language": "es",
+ "translationKey": "migration-from-0.1",
+ "path": "/docs/0.3/es/migration-from-0.1/",
+ "title": "Migrar desde 0.1/0.2",
+ "description": "Migra integraciones antiguas de pdfmake a la API singleton 0.3, los métodos de salida basados en Promise, el registro de fuentes y los callbacks de salto de página.",
+ "version": "0.3",
+ "sourceDigest": "693d722f104238aae8b671cfceb90abdfddb531f13ae71ca10f39c9f018bb4bf",
+ "source": "migration-from-0.1/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/migration-from-0.1/",
+ "uri": "pdfmake://docs/0.3/es/migration-from-0.1",
+ "markdown": "# Migrar desde 0.1/0.2\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/migration-from-0.1/\n\n## Actualizar de forma deliberada\n\nFija la versión que estés evaluando. Conserva algunos PDF representativos existentes y las entradas y fuentes usadas para generarlos. Antes de actualizar producción, compara el texto extraído, el número de páginas y las páginas renderizadas. La igualdad byte a byte suele ser inadecuada porque los metadatos y los identificadores del PDF pueden variar.\n\n## Sustituir la API constructora de Node\n\nLos ejemplos antiguos de Node crean una instancia de `PdfPrinter` y llaman a `createPdfKitDocument`. En 0.3, usa el singleton:\n\n**JavaScript**\n\n```js\nconst pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from \"pdfmake\";\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');\n```\n\n`fonts` debe ser un mapa de familias válido, como se muestra en el [inicio rápido de Node](/docs/0.3/es/getting-started/server-side/) y en la [guía de fuentes](/docs/0.3/es/fonts/). Configura las políticas y distribuciones durante el inicio, y evita cambiar por solicitud el estado compartido del singleton.\n\n## Esperar los métodos de salida\n\nSustituye la salida del navegador basada en callbacks por Promises:\n\n**JavaScript**\n\n```js\nconst data = await pdfMake.createPdf(docDefinition).getBase64();\n```\n\n**TypeScript**\n\n```ts\nconst data = await pdfMake.createPdf(docDefinition).getBase64();\n```\n\nGestiona los rechazos de los métodos de salida. Consulta los [métodos de Node](/docs/0.3/es/getting-started/server-side/methods/) o los [métodos del navegador](/docs/0.3/es/getting-started/client-side/methods/) según el entorno de ejecución de destino.\n\n## Volver a generar el almacenamiento de fuentes del navegador\n\nVuelve a generar los archivos VFS personalizados y actualiza el registro para usar `addVirtualFileSystem`. No des por sentado que el formato de un archivo de fuentes generado antiguo coincida con el paquete actual. Consulta [fuentes VFS](/docs/0.3/es/fonts/custom-fonts-client-side/vfs/).\n\n## Actualizar pageBreakBefore\n\nLas versiones 0.1/0.2 pasaban matrices de nodos separadas. La versión 0.3 pasa un contenedor de nodos:\n\n**JavaScript**\n\n```js\nvar dd = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};\n```\n\nEl contenedor también ofrece `getNodesOnNextPage()` y `getPreviousNodesOnPage()`. Este fragmento es una propiedad de una definición, no código JavaScript independiente. Consulta [saltos de página](/docs/0.3/es/document-definition-object/page/).\n\n## Configurar el acceso a recursos\n\nPara la versión **0.3.6 o posterior**, configura una política síncrona de acceso a URL; para la **0.3.8 o posterior**, configura una política de archivos locales. Prueba tanto los recursos permitidos como los rechazados. Consulta [seguridad de recursos](/docs/0.3/es/guides/resource-security/).\n"
+ },
+ {
+ "id": "fr/migration-from-0.1",
+ "language": "fr",
+ "translationKey": "migration-from-0.1",
+ "path": "/docs/0.3/fr/migration-from-0.1/",
+ "title": "Migration depuis 0.1/0.2",
+ "description": "Migrez les anciennes intégrations pdfmake vers l’API singleton 0.3, les sorties par Promise, l’enregistrement des polices et les callbacks de saut de page.",
+ "version": "0.3",
+ "sourceDigest": "693d722f104238aae8b671cfceb90abdfddb531f13ae71ca10f39c9f018bb4bf",
+ "source": "migration-from-0.1/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/migration-from-0.1/",
+ "uri": "pdfmake://docs/0.3/fr/migration-from-0.1",
+ "markdown": "# Migration depuis 0.1/0.2\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/migration-from-0.1/\n\n## Mettre à niveau avec précaution\n\nÉpinglez la version que vous évaluez. Conservez des PDF représentatifs et les entrées et polices qui les génèrent. Avant une mise à niveau en production, comparez le texte extrait, le nombre de pages et les pages rendues. Une égalité octet par octet est souvent inadaptée, car les métadonnées et identifiants PDF peuvent varier.\n\n## Remplacer l’API de constructeur Node\n\nLes anciens exemples Node instancient `PdfPrinter` et appellent `createPdfKitDocument`. Dans 0.3, utilisez le singleton :\n\n**JavaScript**\n\n```js\nconst pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from \"pdfmake\";\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');\n```\n\n`fonts` doit être une table de familles valide, comme dans le [démarrage Node](/docs/0.3/fr/getting-started/server-side/) et le [guide des polices](/docs/0.3/fr/fonts/). Configurez les règles d’accès et les mises en page au démarrage ; évitez de modifier l’état partagé du singleton à chaque requête.\n\n## Attendre les fonctions de sortie\n\nRemplacez les sorties navigateur basées sur des callbacks par des Promises :\n\n**JavaScript**\n\n```js\nconst data = await pdfMake.createPdf(docDefinition).getBase64();\n```\n\n**TypeScript**\n\n```ts\nconst data = await pdfMake.createPdf(docDefinition).getBase64();\n```\n\nGérez les rejets des fonctions de sortie. Consultez les [méthodes Node](/docs/0.3/fr/getting-started/server-side/methods/) ou les [méthodes navigateur](/docs/0.3/fr/getting-started/client-side/methods/) selon l’environnement visé.\n\n## Régénérer le stockage des polices du navigateur\n\nRégénérez les fichiers VFS personnalisés et utilisez `addVirtualFileSystem` pour les enregistrer. Ne supposez pas qu’un ancien fichier de polices généré a la même structure que le bundle actuel. Consultez les [polices VFS](/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/).\n\n## Mettre à jour pageBreakBefore\n\nLa version 0.1/0.2 transmettait des tableaux de nœuds distincts. La version 0.3 transmet un conteneur de nœuds :\n\n**JavaScript**\n\n```js\nvar dd = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};\n```\n\nLe conteneur propose aussi `getNodesOnNextPage()` et `getPreviousNodesOnPage()`. Cet extrait est une propriété d’une définition, pas du JavaScript autonome. Voir les [sauts de page](/docs/0.3/fr/document-definition-object/page/).\n\n## Configurer l’accès aux ressources\n\nÀ partir de **0.3.6**, configurez une règle d’accès URL synchrone ; à partir de **0.3.8**, configurez une règle pour les fichiers locaux. Testez les ressources autorisées et refusées. Voir la [sécurité des ressources](/docs/0.3/fr/guides/resource-security/).\n"
+ },
+ {
+ "id": "migration-from-0.1",
+ "language": "en",
+ "translationKey": "migration-from-0.1",
+ "path": "/docs/0.3/migration-from-0.1/",
+ "title": "Migration from 0.1/0.2",
+ "description": "Migrate older pdfmake integrations to the 0.3 singleton API, Promise output methods, font registration and page-break callbacks.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "migration-from-0.1/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/migration-from-0.1/",
+ "uri": "pdfmake://docs/0.3/migration-from-0.1",
+ "markdown": "# Migration from 0.1/0.2\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/migration-from-0.1/\n\n## Upgrade deliberately\n\nPin the version you are evaluating. Keep representative existing PDFs and the inputs/fonts used to generate them. Compare extracted text, page counts and rendered pages before upgrading production. Byte equality is often unsuitable because PDF metadata and identifiers can vary.\n\n## Replace the Node constructor API\n\nOlder Node examples construct `PdfPrinter` and call `createPdfKitDocument`. In 0.3 use the singleton:\n\n**JavaScript**\n\n```js\nconst pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from \"pdfmake\";\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');\n```\n\n`fonts` must be a valid family map, as shown in the [Node quickstart](/docs/0.3/getting-started/server-side/) and [fonts guide](/docs/0.3/fonts/). Configure policies and layouts during startup, and avoid per-request changes to shared singleton state.\n\n## Await output helpers\n\nReplace callback-based browser output with Promises:\n\n**JavaScript**\n\n```js\nconst data = await pdfMake.createPdf(docDefinition).getBase64();\n```\n\n**TypeScript**\n\n```ts\nconst data = await pdfMake.createPdf(docDefinition).getBase64();\n```\n\nHandle rejections from output methods. Use [Node methods](/docs/0.3/getting-started/server-side/methods/) or [browser methods](/docs/0.3/getting-started/client-side/methods/) for the runtime you target.\n\n## Regenerate browser font storage\n\nRegenerate custom VFS files and update registration to `addVirtualFileSystem`. Do not assume the shape of an older generated font file matches the current bundle. See [VFS fonts](/docs/0.3/fonts/custom-fonts-client-side/vfs/).\n\n## Update pageBreakBefore\n\nVersion 0.1/0.2 passed separate node arrays. Version 0.3 passes a node container:\n\n**JavaScript**\n\n```js\nvar dd = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};\n```\n\nThe container also offers `getNodesOnNextPage()` and `getPreviousNodesOnPage()`. This snippet is a property inside a definition, not standalone JavaScript. See [page breaks](/docs/0.3/document-definition-object/page/).\n\n## Configure resource access\n\nFor **0.3.6+**, configure a synchronous URL access policy; for **0.3.8+**, configure a local file policy. Test both permitted and rejected resources. See [resource security](/docs/0.3/guides/resource-security/).\n"
+ },
+ {
+ "id": "pt-br/migration-from-0.1",
+ "language": "pt-br",
+ "translationKey": "migration-from-0.1",
+ "path": "/docs/0.3/pt-br/migration-from-0.1/",
+ "title": "Migração do 0.1/0.2",
+ "description": "Migre integrações antigas do pdfmake para a API singleton 0.3, métodos de saída com Promise, registro de fontes e callbacks de quebra de página.",
+ "version": "0.3",
+ "sourceDigest": "693d722f104238aae8b671cfceb90abdfddb531f13ae71ca10f39c9f018bb4bf",
+ "source": "migration-from-0.1/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/migration-from-0.1/",
+ "uri": "pdfmake://docs/0.3/pt-br/migration-from-0.1",
+ "markdown": "# Migração do 0.1/0.2\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/migration-from-0.1/\n\n## Faça a atualização com cuidado\n\nFixe a versão que está avaliando. Mantenha PDFs existentes representativos e as entradas e fontes usadas para gerá-los. Compare texto extraído, número de páginas e páginas renderizadas antes de atualizar a produção. Igualdade byte a byte costuma ser inadequada, pois metadados e identificadores do PDF podem variar.\n\n## Substitua a API de construtor do Node\n\nExemplos antigos para Node criam `PdfPrinter` e chamam `createPdfKitDocument`. Na versão 0.3, use o singleton:\n\n**JavaScript**\n\n```js\nconst pdfmake = require('pdfmake');\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');\n```\n\n**TypeScript**\n\n```ts\nimport pdfmake from \"pdfmake\";\npdfmake.addFonts(fonts);\nawait pdfmake.createPdf(docDefinition).write('document.pdf');\n```\n\n`fonts` precisa ser um mapa válido de famílias, como mostrado no [início rápido para Node](/docs/0.3/pt-br/getting-started/server-side/) e no [guia de fontes](/docs/0.3/pt-br/fonts/). Configure políticas e layouts durante a inicialização e evite alterações por solicitação no estado compartilhado do singleton.\n\n## Aguarde as funções de saída\n\nSubstitua a saída do navegador baseada em callbacks por Promises:\n\n**JavaScript**\n\n```js\nconst data = await pdfMake.createPdf(docDefinition).getBase64();\n```\n\n**TypeScript**\n\n```ts\nconst data = await pdfMake.createPdf(docDefinition).getBase64();\n```\n\nTrate as rejeições dos métodos de saída. Consulte [métodos do Node](/docs/0.3/pt-br/getting-started/server-side/methods/) ou [métodos do navegador](/docs/0.3/pt-br/getting-started/client-side/methods/) para o ambiente escolhido.\n\n## Gere novamente o armazenamento de fontes do navegador\n\nGere novamente os arquivos VFS personalizados e atualize o registro para `addVirtualFileSystem`. Não presuma que o formato de um arquivo de fonte gerado por uma versão antiga seja igual ao do bundle atual. Consulte [fontes VFS](/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/).\n\n## Atualize `pageBreakBefore`\n\nAs versões 0.1/0.2 passavam arrays de nós separados. A versão 0.3 passa um contêiner de nós:\n\n**JavaScript**\n\n```js\nvar dd = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};\n```\n\n**TypeScript**\n\n```ts\nimport type { TDocumentDefinitions } from \"pdfmake/interfaces\";\n\nvar dd: TDocumentDefinitions = { content: ['Example document'],\npageBreakBefore: function (currentNode, nodeContainer) {\n return currentNode.headlineLevel === 1 &&\n nodeContainer.getFollowingNodesOnPage().length === 0;\n}\n};\n```\n\nO contêiner também oferece `getNodesOnNextPage()` e `getPreviousNodesOnPage()`. Este trecho é uma propriedade dentro de uma definição, não JavaScript independente. Consulte [quebras de página](/docs/0.3/pt-br/document-definition-object/page/).\n\n## Configure o acesso a recursos\n\nPara **0.3.6 ou superior**, configure uma política síncrona de acesso a URLs; para **0.3.8 ou superior**, configure uma política de arquivos locais. Teste recursos permitidos e negados. Consulte [segurança de recursos](/docs/0.3/pt-br/guides/resource-security/).\n"
+ },
+ {
+ "id": "de/options",
+ "language": "de",
+ "translationKey": "options",
+ "path": "/docs/0.3/de/options/",
+ "title": "Rendering-Optionen",
+ "description": "Steuere den Font-Layout-Cache und die Seitenausgabe von PDFKit über das zweite Argument von createPdf.",
+ "version": "0.3",
+ "sourceDigest": "fa3eacf7dfb3dc985a1eb6cf541fdccb9dae9648d423d3d758d78b70eabb4882",
+ "source": "options/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/options/",
+ "uri": "pdfmake://docs/0.3/de/options",
+ "markdown": "# Rendering-Optionen\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/options/\n\n## Optionen an `createPdf` übergeben\n\n**JavaScript**\n\n```js\nconst output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});\n```\n\nDas Optionsobjekt ist getrennt von der [Dokumentdefinition](/docs/0.3/de/document-definition-object/).\n\n| Option | Typ | Standard | Bedeutung |\n| --- | --- | --- | --- |\n| `fontLayoutCache` | boolean | `true` | Font-Layout-Cache von PDFKit aktivieren |\n| `bufferPages` | boolean | `false` | PDFKit-Seiten puffern, statt sie sofort auszugeben |\n\nBehalte die Standardwerte bei, sofern dein Anwendungsfall keine Änderung erfordert. Das Puffern von Seiten kann den Speicherverbrauch erhöhen. Es macht das Layout von pdfmake nicht verzögert oder inkrementell. Siehe [Leistung](/docs/0.3/de/guides/performance/) und die [Dokumentation zur Seitenausgabe von PDFKit](https://pdfkit.org/docs/getting_started.html).\n\nSchriften, benannte Tabellenlayouts und Ressourcenrichtlinien werden über die [öffentliche API](/docs/0.3/de/guides/api-reference/) konfiguriert. Papierformat, Ränder und Inhalt gehören in die Definition.\n"
+ },
+ {
+ "id": "es/options",
+ "language": "es",
+ "translationKey": "options",
+ "path": "/docs/0.3/es/options/",
+ "title": "Opciones de renderizado",
+ "description": "Configura la caché de maquetación de fuentes y el almacenamiento en búfer de páginas de PDFKit mediante el segundo argumento de createPdf.",
+ "version": "0.3",
+ "sourceDigest": "fa3eacf7dfb3dc985a1eb6cf541fdccb9dae9648d423d3d758d78b70eabb4882",
+ "source": "options/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/options/",
+ "uri": "pdfmake://docs/0.3/es/options",
+ "markdown": "# Opciones de renderizado\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/options/\n\n## Pasar opciones a createPdf\n\n**JavaScript**\n\n```js\nconst output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});\n```\n\nEl objeto de opciones es independiente de la [definición del documento](/docs/0.3/es/document-definition-object/).\n\n| Opción | Tipo | Valor predeterminado | Significado |\n| --- | --- | --- | --- |\n| `fontLayoutCache` | boolean | `true` | Activa la caché de maquetación de fuentes de PDFKit |\n| `bufferPages` | boolean | `false` | Mantiene las páginas de PDFKit en el búfer en lugar de vaciarlo inmediatamente |\n\nConserva los valores predeterminados salvo que tu caso de uso requiera un cambio. El almacenamiento de páginas en búfer puede aumentar el uso de memoria. No hace que la maquetación propia de pdfmake sea diferida ni incremental. Consulta [rendimiento](/docs/0.3/es/guides/performance/) y la [documentación de almacenamiento en búfer de páginas de PDFKit](https://pdfkit.org/docs/getting_started.html).\n\nLas fuentes, las distribuciones de tablas con nombre y las políticas de recursos se configuran en la [API pública](/docs/0.3/es/guides/api-reference/). El tamaño de papel, los márgenes y el contenido pertenecen a la definición.\n"
+ },
+ {
+ "id": "fr/options",
+ "language": "fr",
+ "translationKey": "options",
+ "path": "/docs/0.3/fr/options/",
+ "title": "Options de rendu",
+ "description": "Configurez le cache de mise en page des polices et la mise en mémoire tampon des pages PDFKit via le second argument de createPdf.",
+ "version": "0.3",
+ "sourceDigest": "fa3eacf7dfb3dc985a1eb6cf541fdccb9dae9648d423d3d758d78b70eabb4882",
+ "source": "options/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/options/",
+ "uri": "pdfmake://docs/0.3/fr/options",
+ "markdown": "# Options de rendu\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/options/\n\n## Transmettre des options à createPdf\n\n**JavaScript**\n\n```js\nconst output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});\n```\n\nL’objet d’options est distinct de la [définition du document](/docs/0.3/fr/document-definition-object/).\n\n| Option | Type | Valeur par défaut | Signification |\n| --- | --- | --- | --- |\n| `fontLayoutCache` | boolean | `true` | Active le cache de mise en page des polices de PDFKit |\n| `bufferPages` | boolean | `false` | Conserve les pages de PDFKit en mémoire tampon au lieu de les vider immédiatement |\n\nConservez les valeurs par défaut sauf si votre cas d’usage exige un changement. La mise en mémoire tampon des pages peut augmenter l’utilisation de la mémoire. Elle ne rend pas la mise en page propre à pdfmake différée ou incrémentale. Consultez [les performances](/docs/0.3/fr/guides/performance/) et [la documentation de PDFKit sur la mise en mémoire tampon des pages](https://pdfkit.org/docs/getting_started.html).\n\nLes polices, les mises en page de tableaux nommées et les règles d’accès aux ressources se configurent via l’[API publique](/docs/0.3/fr/guides/api-reference/). Le format du papier, les marges et le contenu appartiennent à la définition.\n"
+ },
+ {
+ "id": "options",
+ "language": "en",
+ "translationKey": "options",
+ "path": "/docs/0.3/options/",
+ "title": "Rendering options",
+ "description": "Configure font layout caching and PDFKit page buffering through the second createPdf argument.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "options/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/options/",
+ "uri": "pdfmake://docs/0.3/options",
+ "markdown": "# Rendering options\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/options/\n\n## Pass options to createPdf\n\n**JavaScript**\n\n```js\nconst output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});\n```\n\nThe options object is separate from the [document definition](/docs/0.3/document-definition-object/).\n\n| Option | Type | Default | Meaning |\n| --- | --- | --- | --- |\n| `fontLayoutCache` | boolean | `true` | Enable PDFKit's font layout cache |\n| `bufferPages` | boolean | `false` | Keep PDFKit pages buffered rather than flushing them immediately |\n\nKeep defaults unless your use case requires a change. Page buffering can increase memory use. It does not make pdfmake's own layout lazy or incremental. See [performance](/docs/0.3/guides/performance/) and [PDFKit's page buffering documentation](https://pdfkit.org/docs/getting_started.html).\n\nFonts, named table layouts and resource policies are configured on the [public API](/docs/0.3/guides/api-reference/). Paper size, margins and content belong in the definition.\n"
+ },
+ {
+ "id": "pt-br/options",
+ "language": "pt-br",
+ "translationKey": "options",
+ "path": "/docs/0.3/pt-br/options/",
+ "title": "Opções de renderização",
+ "description": "Configure o cache de layout de fontes e o armazenamento temporário de páginas do PDFKit pelo segundo argumento de createPdf.",
+ "version": "0.3",
+ "sourceDigest": "fa3eacf7dfb3dc985a1eb6cf541fdccb9dae9648d423d3d758d78b70eabb4882",
+ "source": "options/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/options/",
+ "uri": "pdfmake://docs/0.3/pt-br/options",
+ "markdown": "# Opções de renderização\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/options/\n\n## Passe opções para createPdf\n\n**JavaScript**\n\n```js\nconst output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});\n```\n\n**TypeScript**\n\n```ts\nconst output = pdfmake.createPdf(docDefinition, {\n fontLayoutCache: true,\n bufferPages: false\n});\n```\n\nO objeto de opções é separado da [definição do documento](/docs/0.3/pt-br/document-definition-object/).\n\n| Opção | Tipo | Padrão | Significado |\n| --- | --- | --- | --- |\n| `fontLayoutCache` | boolean | `true` | Ativa o cache de layout de fontes do PDFKit |\n| `bufferPages` | boolean | `false` | Mantém as páginas do PDFKit em buffer em vez de descarregá-las imediatamente |\n\nMantenha os padrões, a menos que seu caso de uso exija uma alteração. O armazenamento de páginas em buffer pode aumentar o uso de memória. Ele não torna o layout do próprio pdfmake preguiçoso ou incremental. Consulte [desempenho](/docs/0.3/pt-br/guides/performance/) e a [documentação de armazenamento de páginas em buffer do PDFKit](https://pdfkit.org/docs/getting_started.html).\n\nFontes, layouts de tabela nomeados e políticas de recursos são configurados na [API pública](/docs/0.3/pt-br/guides/api-reference/). Tamanho do papel, margens e conteúdo pertencem à definição.\n"
+ },
+ {
+ "id": "de/playground",
+ "language": "de",
+ "translationKey": "playground",
+ "path": "/docs/0.3/de/playground/",
+ "title": "Playground",
+ "description": "Bearbeite deine Dokumentdefinition und sieh dir das Ergebnis an. Dein Arbeitsbereich bleibt beim Navigieren erhalten.",
+ "version": "0.3",
+ "sourceDigest": "ed2dd49083b941d64363a1d15bce73210d644f055b742e90c21f85226e5ee75f",
+ "source": "playground/_index.de.md",
+ "url": "https://pdfmake.github.io/docs/0.3/de/playground/",
+ "uri": "pdfmake://docs/0.3/de/playground",
+ "markdown": "# Playground\n\nVersion: pdfmake 0.3.x\nLanguage: de\nSource: https://pdfmake.github.io/docs/0.3/de/playground/\n\nProbiere das Beispiel aus und lies anschließend weiter.\n"
+ },
+ {
+ "id": "es/playground",
+ "language": "es",
+ "translationKey": "playground",
+ "path": "/docs/0.3/es/playground/",
+ "title": "Playground",
+ "description": "Edita la definición y mira el resultado. Tu espacio de trabajo se conserva mientras consultas la documentación.",
+ "version": "0.3",
+ "sourceDigest": "ed2dd49083b941d64363a1d15bce73210d644f055b742e90c21f85226e5ee75f",
+ "source": "playground/_index.es.md",
+ "url": "https://pdfmake.github.io/docs/0.3/es/playground/",
+ "uri": "pdfmake://docs/0.3/es/playground",
+ "markdown": "# Playground\n\nVersion: pdfmake 0.3.x\nLanguage: es\nSource: https://pdfmake.github.io/docs/0.3/es/playground/\n\nPrueba el ejemplo y después sigue leyendo.\n"
+ },
+ {
+ "id": "fr/playground",
+ "language": "fr",
+ "translationKey": "playground",
+ "path": "/docs/0.3/fr/playground/",
+ "title": "Playground",
+ "description": "Modifiez votre définition et observez le résultat. Votre espace de travail vous accompagne pendant la navigation.",
+ "version": "0.3",
+ "sourceDigest": "ed2dd49083b941d64363a1d15bce73210d644f055b742e90c21f85226e5ee75f",
+ "source": "playground/_index.fr.md",
+ "url": "https://pdfmake.github.io/docs/0.3/fr/playground/",
+ "uri": "pdfmake://docs/0.3/fr/playground",
+ "markdown": "# Playground\n\nVersion: pdfmake 0.3.x\nLanguage: fr\nSource: https://pdfmake.github.io/docs/0.3/fr/playground/\n\nEssayez l’exemple, puis poursuivez votre lecture.\n"
+ },
+ {
+ "id": "playground",
+ "language": "en",
+ "translationKey": "playground",
+ "path": "/docs/0.3/playground/",
+ "title": "Playground",
+ "description": "Edit your definition and see the result. Your workspace stays with you as you browse.",
+ "version": "0.3",
+ "sourceDigest": null,
+ "source": "playground/_index.md",
+ "url": "https://pdfmake.github.io/docs/0.3/playground/",
+ "uri": "pdfmake://docs/0.3/playground",
+ "markdown": "# Playground\n\nVersion: pdfmake 0.3.x\nLanguage: en\nSource: https://pdfmake.github.io/docs/0.3/playground/\n\nTry the example, then continue reading.\n"
+ },
+ {
+ "id": "pt-br/playground",
+ "language": "pt-br",
+ "translationKey": "playground",
+ "path": "/docs/0.3/pt-br/playground/",
+ "title": "Playground",
+ "description": "Edite a definição e veja o resultado. Seu espaço de trabalho é preservado enquanto você consulta a documentação.",
+ "version": "0.3",
+ "sourceDigest": "ed2dd49083b941d64363a1d15bce73210d644f055b742e90c21f85226e5ee75f",
+ "source": "playground/_index.pt-br.md",
+ "url": "https://pdfmake.github.io/docs/0.3/pt-br/playground/",
+ "uri": "pdfmake://docs/0.3/pt-br/playground",
+ "markdown": "# Playground\n\nVersion: pdfmake 0.3.x\nLanguage: pt-br\nSource: https://pdfmake.github.io/docs/0.3/pt-br/playground/\n\nExperimente o exemplo e continue a leitura.\n"
+ }
+ ]
+}
diff --git a/data/docsVersion.json b/data/docsVersion.json
new file mode 100644
index 00000000..f3b6ed1c
--- /dev/null
+++ b/data/docsVersion.json
@@ -0,0 +1,28 @@
+{
+ "id": "0.3",
+ "label": "0.3.x",
+ "ref": "master",
+ "libraryVersion": "0.3.12",
+ "status": "current",
+ "managed": true,
+ "basePath": "/docs/0.3/",
+ "baseURL": "https://pdfmake.github.io/docs/0.3/",
+ "sourceBasePath": "/docs/0.3/",
+ "releases": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "ref": "master",
+ "libraryVersion": "0.3.12",
+ "status": "current",
+ "managed": true
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "ref": "0.1",
+ "status": "legacy",
+ "managed": false
+ }
+ ]
+}
diff --git a/data/navigation.json b/data/navigation.json
new file mode 100644
index 00000000..44092770
--- /dev/null
+++ b/data/navigation.json
@@ -0,0 +1,99 @@
+[
+ {
+ "title": "navStart",
+ "pages": [
+ "index",
+ "learn/first-pdf",
+ "getting-started/server-side",
+ "getting-started/client-side",
+ "learn/document-model",
+ "fonts",
+ "getting-started",
+ "learn"
+ ]
+ },
+ {
+ "title": "navContent",
+ "pages": [
+ "document-definition-object",
+ "document-definition-object/styling",
+ "document-definition-object/stack",
+ "document-definition-object/columns",
+ "document-definition-object/tables",
+ "document-definition-object/lists",
+ "document-definition-object/links"
+ ]
+ },
+ {
+ "title": "navLayout",
+ "pages": [
+ "document-definition-object/page",
+ "document-definition-object/margins",
+ "document-definition-object/headers-footers",
+ "document-definition-object/sections",
+ "document-definition-object/background-layer",
+ "document-definition-object/watermark",
+ "document-definition-object/toc",
+ "document-definition-object/outlines",
+ "document-definition-object/snaking-columns"
+ ]
+ },
+ {
+ "title": "navAssets",
+ "pages": [
+ "document-definition-object/images",
+ "document-definition-object/svgs",
+ "document-definition-object/qr",
+ "fonts/custom-fonts-client-side",
+ "fonts/custom-fonts-client-side/vfs",
+ "fonts/custom-fonts-client-side/url",
+ "fonts/standard-14-fonts",
+ "fonts/icons"
+ ]
+ },
+ {
+ "title": "navOutput",
+ "pages": [
+ "guides/api-reference",
+ "getting-started/server-side/methods",
+ "getting-started/client-side/methods",
+ "options",
+ "getting-started/server-side/supported-nodejs-versions",
+ "getting-started/client-side/supported-browsers"
+ ]
+ },
+ {
+ "title": "navRecipes",
+ "pages": [
+ "guides",
+ "guides/invoice",
+ "guides/errors",
+ "guides/troubleshooting",
+ "guides/playground",
+ "getting-started/server-side/examples",
+ "getting-started/client-side/examples",
+ "getting-started/examples-from-comunity"
+ ]
+ },
+ {
+ "title": "navAdvanced",
+ "pages": [
+ "guides/resource-security",
+ "guides/performance",
+ "document-definition-object/security",
+ "document-definition-object/pdfa",
+ "document-definition-object/compression",
+ "document-definition-object/patterns",
+ "document-definition-object/attachments",
+ "document-definition-object/document-medatadata",
+ "migration-from-0.1"
+ ]
+ },
+ {
+ "title": "navTools",
+ "pages": [
+ "guides/llm-and-mcp",
+ "guides/contributing"
+ ]
+ }
+]
diff --git a/data/playground.json b/data/playground.json
new file mode 100644
index 00000000..d26ae6cb
--- /dev/null
+++ b/data/playground.json
@@ -0,0 +1,62 @@
+[
+ {
+ "id": "welcome",
+ "title": "01 · First document",
+ "docs": "getting-started/client-side/",
+ "source": "// Define a fresh document in dd. Ctrl/⌘ + Enter to run.\nvar dd = {\n content: [\n { text: 'Make something clear.', fontSize: 30, bold: true, color: '#08786b', margin: [0, 0, 0, 16] },\n 'A paragraph, a table, a report. Start here and make it yours.',\n { text: 'Built with pdfmake', italics: true, color: '#667d73', margin: [0, 20, 0, 0] }\n ]\n};"
+ },
+ {
+ "id": "invoice",
+ "title": "02 · Invoice",
+ "docs": "guides/invoice/",
+ "source": "var items = [\n ['Design services', 2, 125],\n ['Document review', 1, 75]\n];\nvar total = items.reduce((sum, row) => sum + row[1] * row[2], 0);\nvar dd = {\n info: { title: 'Invoice INV-001' },\n footer: (page, pages) => ({ text: 'Page ' + page + ' of ' + pages, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'INVOICE', style: 'title' },\n { columns: ['Example Studio', { text: 'INV-001', alignment: 'right' }], margin: [0, 0, 0, 24] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: ['*', 'auto', 'auto'],\n body: [['Service', 'Qty', 'EUR'], ...items.map(row => [row[0], row[1], row[2].toFixed(2)])]\n } },\n { text: 'Total: ' + total.toFixed(2) + ' EUR', bold: true, alignment: 'right', margin: [0, 20, 0, 0] }\n ],\n styles: { title: { fontSize: 28, bold: true, color: '#08786b', margin: [0, 0, 0, 12] } }\n};"
+ },
+ {
+ "id": "tables",
+ "title": "03 · Tables & repeating headers",
+ "docs": "document-definition-object/tables/",
+ "source": "var rows = Array.from({ length: 65 }, (_, i) => [\n 'Item ' + (i + 1), 'A row that can continue across pages', String(i + 1)\n]);\nvar dd = {\n content: [\n { text: 'A longer table', fontSize: 24, bold: true, margin: [0, 0, 0, 16] },\n { layout: 'lightHorizontalLines', table: {\n headerRows: 1, widths: [70, '*', 40],\n body: [[{ text: 'Item', bold: true }, { text: 'Description', bold: true }, { text: 'Qty', bold: true }], ...rows]\n } }\n ]\n};"
+ },
+ {
+ "id": "styles",
+ "title": "04 · Text & named styles",
+ "docs": "document-definition-object/styling/",
+ "source": "var dd = {\n content: [\n { text: 'Style with intent', style: 'heading' },\n { text: ['One paragraph with ', { text: 'bold', bold: true }, ' and ', { text: 'italic', italics: true }, ' inline text.'] },\n { text: 'A reusable note style.', style: 'note' },\n { ul: ['Readable defaults', 'Small style dictionaries', 'Consistent spacing'], margin: [0, 12, 0, 0] }\n ],\n defaultStyle: { fontSize: 12, lineHeight: 1.3 },\n styles: {\n heading: { fontSize: 26, bold: true, color: '#08786b', margin: [0, 0, 0, 18] },\n note: { fontSize: 10, color: '#536771', margin: [0, 12, 0, 0] }\n }\n};"
+ },
+ {
+ "id": "columns",
+ "title": "05 · Columns & stacks",
+ "docs": "document-definition-object/columns/",
+ "source": "var dd = {\n content: [\n { text: 'Two perspectives', fontSize: 26, bold: true, margin: [0, 0, 0, 20] },\n { columnGap: 24, columns: [\n { width: '*', stack: [{ text: 'The essentials', bold: true }, 'This column takes an equal share of the available width.', { ul: ['Text', 'Lists', 'Nested blocks'] }] },\n { width: '*', stack: [{ text: 'The details', bold: true }, 'Use fixed widths, auto widths or star widths to describe your layout.'] }\n ] }\n ]\n};"
+ },
+ {
+ "id": "spans",
+ "title": "06 · Merged table cells",
+ "docs": "document-definition-object/tables/",
+ "source": "var dd = {\n content: [{ table: {\n widths: ['*', '*', '*'],\n body: [\n [{ text: 'A shared heading', colSpan: 3, bold: true, fillColor: '#e4f2eb' }, {}, {}],\n [{ text: 'Two rows', rowSpan: 2 }, 'A', 'B'],\n [{}, 'C', 'D']\n ]\n } }]\n};"
+ },
+ {
+ "id": "pages",
+ "title": "07 · Headers, footers & page breaks",
+ "docs": "document-definition-object/headers-footers/",
+ "source": "var dd = {\n pageSize: 'A4', pageMargins: [40, 60, 40, 60],\n header: { text: 'EXAMPLE REPORT', margin: [40, 20, 0, 0], color: '#536771', fontSize: 9 },\n footer: (page, pages) => ({ text: page + ' / ' + pages, alignment: 'center', fontSize: 9 }),\n content: [\n { text: 'Chapter one', fontSize: 26, bold: true },\n 'Start on the first page.',\n { text: 'Chapter two', pageBreak: 'before', fontSize: 26, bold: true },\n 'This block begins on a new page.'\n ]\n};"
+ },
+ {
+ "id": "vectors",
+ "title": "08 · SVG & QR codes",
+ "docs": "document-definition-object/svgs/",
+ "source": "var dd = {\n content: [\n { text: 'Small vectors. Sharp output.', fontSize: 24, bold: true, margin: [0, 0, 0, 20] },\n { svg: '', width: 240 },\n { qr: 'https://pdfmake.github.io/docs/0.3/', fit: 110, margin: [0, 24, 0, 12] },\n 'The QR code encodes a URL; it does not fetch it.'\n ]\n};"
+ },
+ {
+ "id": "images",
+ "title": "09 · Embedded images",
+ "docs": "document-definition-object/images/",
+ "source": "var dd = {\n images: { pixel: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAF0lEQVR4nGPgqMgmCTGMahjVkD1sNQAAjRnrAVbW+rcAAAAASUVORK5CYII=' },\n content: [\n { text: 'One resource, several uses', fontSize: 24, bold: true, margin: [0, 0, 0, 18] },\n 'Use the images dictionary to reuse embedded PNG or JPEG data.',\n { image: 'pixel', width: 30, margin: [0, 15, 0, 15] },\n { image: 'pixel', fit: [60, 60] }\n ]\n};"
+ },
+ {
+ "id": "lists",
+ "title": "10 · Lists & links",
+ "docs": "document-definition-object/lists/",
+ "source": "var dd = {\n content: [\n { text: 'A clear sequence', fontSize: 26, bold: true },\n { ol: ['Configure fonts', 'Build a fresh definition', 'Await the output'], margin: [0, 16, 0, 20] },\n { ul: ['No manual text positioning', { stack: ['Nested choices', { ul: ['Tables', 'Columns', 'Stacks'] }] }] },\n { text: 'Read the reference', link: 'https://pdfmake.github.io/docs/0.3/', color: '#08786b', margin: [0, 20, 0, 0] }\n ]\n};"
+ }
+]
diff --git a/data/versionLinks.json b/data/versionLinks.json
new file mode 100644
index 00000000..2dcfb2bd
--- /dev/null
+++ b/data/versionLinks.json
@@ -0,0 +1,4642 @@
+{
+ "de/index": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/index": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/index": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "index": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/index": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/attachments": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/attachments/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/attachments": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/attachments/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/attachments": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/attachments/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/attachments": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/attachments/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/attachments": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/attachments/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/background-layer": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/background-layer/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/background-layer": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/background-layer/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/background-layer": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/background-layer/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/background-layer": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/background-layer/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/background-layer": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/background-layer/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/columns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/columns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/columns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/columns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/columns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/columns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/columns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/columns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/columns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/columns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/compression": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/compression/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/compression": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/compression/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/compression": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/compression/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/compression": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/compression/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/compression": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/compression/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/document-medatadata": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/document-medatadata/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/document-medatadata": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/document-medatadata/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/document-medatadata": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/document-medatadata/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/document-medatadata": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/document-medatadata/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/document-medatadata": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/document-medatadata/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/headers-footers": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/headers-footers/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/headers-footers": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/headers-footers/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/headers-footers": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/headers-footers/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/headers-footers": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/headers-footers/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/headers-footers": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/headers-footers/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/images": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/images/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/images": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/images/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/images": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/images/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/images": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/images/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/images": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/images/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/links": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/links/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/links": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/links/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/links": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/links/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/links": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/links/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/links": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/links/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/lists": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/lists/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/lists": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/lists/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/lists": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/lists/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/lists": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/lists/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/lists": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/lists/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/margins": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/margins/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/margins": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/margins/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/margins": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/margins/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/margins": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/margins/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/margins": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/margins/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/outlines": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/outlines/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/outlines": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/outlines/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/outlines": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/outlines/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/outlines": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/outlines/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/outlines": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/outlines/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/page": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/page/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/page": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/page/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/page": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/page/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/page": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/page/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/page": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/page/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/patterns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/patterns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/patterns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/patterns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/patterns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/patterns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/patterns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/patterns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/patterns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/patterns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/pdfa": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/pdfa/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/pdfa": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/pdfa/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/pdfa": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/pdfa/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/pdfa": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/pdfa/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/pdfa": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/pdfa/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/qr": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/qr/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/qr": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/qr/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/qr": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/qr/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/qr": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/qr/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/qr": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/qr/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/sections": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/sections/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/sections": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/sections/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/sections": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/sections/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/sections": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/sections/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/sections": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/sections/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/security": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/security/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/security": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/security/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/security": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/security/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/security": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/security/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/security": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/security/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/snaking-columns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/snaking-columns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/snaking-columns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/snaking-columns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/snaking-columns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/snaking-columns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/snaking-columns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/snaking-columns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/snaking-columns": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/snaking-columns/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/stack": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/stack/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/stack": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/stack/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/stack": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/stack/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/stack": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/stack/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/stack": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/stack/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/styling": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/styling/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/styling": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/styling/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/styling": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/styling/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/styling": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/styling/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/styling": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/styling/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/svgs": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/svgs/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/svgs": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/svgs/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/svgs": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/svgs/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/svgs": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/svgs/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/svgs": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/svgs/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/tables": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/tables/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/tables": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/tables/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/tables": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/tables/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/tables": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/tables/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/tables": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/tables/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/toc": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/toc/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/toc": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/toc/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/toc": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/toc/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/toc": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/toc/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/toc": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/toc/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/document-definition-object/watermark": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/document-definition-object/watermark/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/document-definition-object/watermark": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/document-definition-object/watermark/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/document-definition-object/watermark": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/document-definition-object/watermark/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "document-definition-object/watermark": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/document-definition-object/watermark/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/document-definition-object/watermark": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/document-definition-object/watermark/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/fonts": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/fonts/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/fonts": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/fonts/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/fonts": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/fonts/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fonts": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fonts/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/fonts": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/fonts/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/fonts/custom-fonts-client-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/fonts/custom-fonts-client-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/fonts/custom-fonts-client-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/fonts/custom-fonts-client-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/fonts/custom-fonts-client-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/fonts/custom-fonts-client-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fonts/custom-fonts-client-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fonts/custom-fonts-client-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/fonts/custom-fonts-client-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/fonts/custom-fonts-client-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/fonts/custom-fonts-client-side/url": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/fonts/custom-fonts-client-side/url/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/fonts/custom-fonts-client-side/url": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/fonts/custom-fonts-client-side/url/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/fonts/custom-fonts-client-side/url": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/fonts/custom-fonts-client-side/url/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fonts/custom-fonts-client-side/url": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fonts/custom-fonts-client-side/url/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/fonts/custom-fonts-client-side/url": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/fonts/custom-fonts-client-side/url/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/fonts/custom-fonts-client-side/vfs": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/fonts/custom-fonts-client-side/vfs/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/fonts/custom-fonts-client-side/vfs": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/fonts/custom-fonts-client-side/vfs/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/fonts/custom-fonts-client-side/vfs": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/fonts/custom-fonts-client-side/vfs/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fonts/custom-fonts-client-side/vfs": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fonts/custom-fonts-client-side/vfs/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/fonts/custom-fonts-client-side/vfs": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/fonts/custom-fonts-client-side/vfs/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/fonts/icons": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/fonts/icons/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/fonts/icons": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/fonts/icons/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/fonts/icons": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/fonts/icons/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fonts/icons": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fonts/icons/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/fonts/icons": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/fonts/icons/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/fonts/standard-14-fonts": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/fonts/standard-14-fonts/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/fonts/standard-14-fonts": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/fonts/standard-14-fonts/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/fonts/standard-14-fonts": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/fonts/standard-14-fonts/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fonts/standard-14-fonts": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fonts/standard-14-fonts/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/fonts/standard-14-fonts": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/fonts/standard-14-fonts/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/getting-started": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/getting-started/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/getting-started": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/getting-started/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/getting-started": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/getting-started/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "getting-started": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/getting-started/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/getting-started": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/getting-started/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/getting-started/client-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/getting-started/client-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/getting-started/client-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/getting-started/client-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/getting-started/client-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/getting-started/client-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "getting-started/client-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/getting-started/client-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/getting-started/client-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/getting-started/client-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/getting-started/client-side/examples": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/getting-started/client-side/examples/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/getting-started/client-side/examples": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/getting-started/client-side/examples/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/getting-started/client-side/examples": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/getting-started/client-side/examples/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "getting-started/client-side/examples": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/getting-started/client-side/examples/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/getting-started/client-side/examples": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/getting-started/client-side/examples/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/getting-started/client-side/methods": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/getting-started/client-side/methods/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/getting-started/client-side/methods": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/getting-started/client-side/methods/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/getting-started/client-side/methods": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/getting-started/client-side/methods/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "getting-started/client-side/methods": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/getting-started/client-side/methods/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/getting-started/client-side/methods": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/getting-started/client-side/methods/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/getting-started/client-side/supported-browsers": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/getting-started/client-side/supported-browsers/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/getting-started/client-side/supported-browsers": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/getting-started/client-side/supported-browsers/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/getting-started/client-side/supported-browsers": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/getting-started/client-side/supported-browsers/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "getting-started/client-side/supported-browsers": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/getting-started/client-side/supported-browsers/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/getting-started/client-side/supported-browsers": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/getting-started/client-side/supported-browsers/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/getting-started/examples-from-comunity": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/getting-started/examples-from-comunity/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/getting-started/examples-from-comunity": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/getting-started/examples-from-comunity/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/getting-started/examples-from-comunity": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/getting-started/examples-from-comunity/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "getting-started/examples-from-comunity": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/getting-started/examples-from-comunity/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/getting-started/examples-from-comunity": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/getting-started/examples-from-comunity/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/getting-started/server-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/getting-started/server-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/getting-started/server-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/getting-started/server-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/getting-started/server-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/getting-started/server-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "getting-started/server-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/getting-started/server-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/getting-started/server-side": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/getting-started/server-side/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/getting-started/server-side/examples": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/getting-started/server-side/examples/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/getting-started/server-side/examples": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/getting-started/server-side/examples/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/getting-started/server-side/examples": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/getting-started/server-side/examples/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "getting-started/server-side/examples": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/getting-started/server-side/examples/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/getting-started/server-side/examples": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/getting-started/server-side/examples/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/getting-started/server-side/methods": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/getting-started/server-side/methods/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/getting-started/server-side/methods": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/getting-started/server-side/methods/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/getting-started/server-side/methods": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/getting-started/server-side/methods/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "getting-started/server-side/methods": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/getting-started/server-side/methods/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/getting-started/server-side/methods": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/getting-started/server-side/methods/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/getting-started/server-side/supported-nodejs-versions": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/getting-started/server-side/supported-nodejs-versions/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/getting-started/server-side/supported-nodejs-versions": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/getting-started/server-side/supported-nodejs-versions/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/getting-started/server-side/supported-nodejs-versions": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/getting-started/server-side/supported-nodejs-versions/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "getting-started/server-side/supported-nodejs-versions": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/getting-started/server-side/supported-nodejs-versions/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/getting-started/server-side/supported-nodejs-versions": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/getting-started/server-side/supported-nodejs-versions/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/guides": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/guides/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/guides": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/guides/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/guides": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/guides/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "guides": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/guides/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/guides": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/guides/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/guides/api-reference": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/guides/api-reference/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/guides/api-reference": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/guides/api-reference/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/guides/api-reference": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/guides/api-reference/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "guides/api-reference": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/guides/api-reference/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/guides/api-reference": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/guides/api-reference/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/guides/contributing": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/guides/contributing/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/guides/contributing": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/guides/contributing/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/guides/contributing": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/guides/contributing/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "guides/contributing": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/guides/contributing/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/guides/contributing": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/guides/contributing/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/guides/errors": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/guides/errors/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/guides/errors": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/guides/errors/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/guides/errors": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/guides/errors/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "guides/errors": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/guides/errors/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/guides/errors": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/guides/errors/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/guides/invoice": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/guides/invoice/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/guides/invoice": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/guides/invoice/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/guides/invoice": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/guides/invoice/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "guides/invoice": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/guides/invoice/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/guides/invoice": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/guides/invoice/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/guides/llm-and-mcp": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/guides/llm-and-mcp/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/guides/llm-and-mcp": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/guides/llm-and-mcp/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/guides/llm-and-mcp": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/guides/llm-and-mcp/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "guides/llm-and-mcp": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/guides/llm-and-mcp/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/guides/llm-and-mcp": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/guides/llm-and-mcp/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/guides/performance": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/guides/performance/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/guides/performance": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/guides/performance/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/guides/performance": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/guides/performance/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "guides/performance": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/guides/performance/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/guides/performance": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/guides/performance/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/guides/playground": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/guides/playground/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/guides/playground": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/guides/playground/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/guides/playground": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/guides/playground/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "guides/playground": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/guides/playground/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/guides/playground": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/guides/playground/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/guides/resource-security": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/guides/resource-security/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/guides/resource-security": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/guides/resource-security/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/guides/resource-security": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/guides/resource-security/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "guides/resource-security": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/guides/resource-security/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/guides/resource-security": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/guides/resource-security/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/guides/troubleshooting": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/guides/troubleshooting/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/guides/troubleshooting": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/guides/troubleshooting/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/guides/troubleshooting": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/guides/troubleshooting/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "guides/troubleshooting": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/guides/troubleshooting/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/guides/troubleshooting": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/guides/troubleshooting/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/learn": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/learn/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/learn": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/learn/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/learn": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/learn/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "learn": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/learn/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/learn": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/learn/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/learn/document-model": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/learn/document-model/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/learn/document-model": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/learn/document-model/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/learn/document-model": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/learn/document-model/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "learn/document-model": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/learn/document-model/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/learn/document-model": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/learn/document-model/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/learn/first-pdf": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/learn/first-pdf/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/learn/first-pdf": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/learn/first-pdf/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/learn/first-pdf": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/learn/first-pdf/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "learn/first-pdf": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/learn/first-pdf/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/learn/first-pdf": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/learn/first-pdf/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/migration-from-0.1": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/migration-from-0.1/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/migration-from-0.1": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/migration-from-0.1/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/migration-from-0.1": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/migration-from-0.1/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "migration-from-0.1": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/migration-from-0.1/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/migration-from-0.1": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/migration-from-0.1/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/options": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/options/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/options": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/options/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/options": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/options/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "options": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/options/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/options": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/options/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "de/playground": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/de/playground/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "es/playground": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/es/playground/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "fr/playground": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/fr/playground/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "playground": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/playground/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ],
+ "pt-br/playground": [
+ {
+ "id": "0.3",
+ "label": "0.3.x",
+ "current": true,
+ "sameChapter": true,
+ "url": "/docs/0.3/pt-br/playground/"
+ },
+ {
+ "id": "0.1",
+ "label": "0.1 / 0.2",
+ "current": false,
+ "sameChapter": false,
+ "url": "https://pdfmake.github.io/docs/0.1/"
+ }
+ ]
+}
diff --git a/i18n/de.json b/i18n/de.json
new file mode 100644
index 00000000..fab95739
--- /dev/null
+++ b/i18n/de.json
@@ -0,0 +1,257 @@
+{
+ "docs": {
+ "other": "ENTWICKLERDOKU"
+ },
+ "skip": {
+ "other": "Zum Inhalt"
+ },
+ "appearance": {
+ "other": "Darstellung"
+ },
+ "system": {
+ "other": "System"
+ },
+ "light": {
+ "other": "Hell"
+ },
+ "dark": {
+ "other": "Dunkel"
+ },
+ "language": {
+ "other": "Sprache"
+ },
+ "homeLink": {
+ "other": "Startseite"
+ },
+ "search": {
+ "other": "Dokumentation durchsuchen"
+ },
+ "placeholder": {
+ "other": "Tabellen, Schriften, Node.js…"
+ },
+ "nojs": {
+ "other": "Die Suche benötigt JavaScript. Alle Kapitel bleiben unten erreichbar."
+ },
+ "chapters": {
+ "other": "Kapitel"
+ },
+ "overview": {
+ "other": "Übersicht"
+ },
+ "tools": {
+ "other": "MCP & KI-Werkzeuge"
+ },
+ "versionNote": {
+ "other": "Du liest die 0.3.x-API. Beispiele für 0.1/0.2 können andere Imports und Callbacks verwenden."
+ },
+ "onPage": {
+ "other": "Auf dieser Seite"
+ },
+ "edit": {
+ "other": "Seite bearbeiten"
+ },
+ "markdown": {
+ "other": "Diese Seite als Markdown"
+ },
+ "corpus": {
+ "other": "Gesamter Markdown-Korpus"
+ },
+ "hero1": {
+ "other": "Deine erste PDF."
+ },
+ "hero2": {
+ "other": "Schritt für Schritt."
+ },
+ "heroLead": {
+ "other": "Starte mit einem funktionierenden Beispiel. Sieh dir das Ergebnis an, lerne die Bausteine kennen und entwickle daraus das Dokument für deine Anwendung."
+ },
+ "copy": {
+ "other": "Kopieren"
+ },
+ "copied": {
+ "other": "Kopiert"
+ },
+ "copyFailed": {
+ "other": "Code zum Kopieren auswählen"
+ },
+ "searchFailed": {
+ "other": "Die Suche ist nicht verfügbar. Nutze die Kapitelübersicht."
+ },
+ "noResults": {
+ "other": "Keine Ergebnisse. Versuche einen anderen Suchbegriff."
+ },
+ "results": {
+ "other": "{count} Ergebnisse"
+ },
+ "exampleEdit": {
+ "other": "Im Playground bearbeiten"
+ },
+ "exampleCode": {
+ "other": "JavaScript · Dokumentdefinition"
+ },
+ "examplePdf": {
+ "other": "Erzeugte PDF · genau diese Definition"
+ },
+ "reference": {
+ "other": "Vollständige Referenz (Englisch)"
+ },
+ "coverage": {
+ "other": "Alle Kapitel der Dokumentation sind in dieser Sprache verfügbar."
+ },
+ "homeFallback": {
+ "other": "Startseite; dieses Kapitel ist nicht übersetzt"
+ },
+ "navStart": {
+ "other": "Erste Schritte"
+ },
+ "navContent": {
+ "other": "Dokumentinhalt"
+ },
+ "navLayout": {
+ "other": "Seitenlayout"
+ },
+ "navAssets": {
+ "other": "Bilder & Schriften"
+ },
+ "navOutput": {
+ "other": "Ausgabe & API"
+ },
+ "navRecipes": {
+ "other": "Anleitungen & Beispiele"
+ },
+ "navAdvanced": {
+ "other": "Fortgeschritten"
+ },
+ "navTools": {
+ "other": "Entwicklerwerkzeuge"
+ },
+ "previous": {
+ "other": "Zurück"
+ },
+ "next": {
+ "other": "Weiter"
+ },
+ "menu": {
+ "other": "Navigation"
+ },
+ "closeMenu": {
+ "other": "Navigation schließen"
+ },
+ "documentation": {
+ "other": "Dokumentation"
+ },
+ "playgroundTitle": {
+ "other": "Playground"
+ },
+ "playgroundLead": {
+ "other": "Bearbeite deine Definition und sieh das Ergebnis. Dein Arbeitsbereich bleibt beim Lesen erhalten."
+ },
+ "openPlayground": {
+ "other": "Playground"
+ },
+ "workspaceBack": {
+ "other": "Zurück zur Dokumentation"
+ },
+ "runtimeNode": {
+ "other": "Node.js / API"
+ },
+ "runtimeBrowser": {
+ "other": "Browser"
+ },
+ "steps": {
+ "other": "Dein Weg zur PDF"
+ },
+ "editHint": {
+ "other": "Probiere das Beispiel aus und lies anschließend weiter."
+ },
+ "navSetup": {
+ "other": "Laufzeit einrichten"
+ },
+ "navLearning": {
+ "other": "Lernpfad"
+ },
+ "navReference": {
+ "other": "Referenzübersicht"
+ },
+ "navPageSettings": {
+ "other": "Seitengröße & Ränder"
+ },
+ "navParagraphs": {
+ "other": "Absätze & Stapel"
+ },
+ "versionLabel": {
+ "other": "Dokumentationsversion"
+ },
+ "versionHomeFallback": {
+ "other": "Versionsstart (Kapitel nicht verfügbar)"
+ },
+ "codeLanguage": {
+ "other": "Beispielsprache"
+ },
+ "editCode": {
+ "other": "Beispiel bearbeiten"
+ },
+ "codeUndo": {
+ "other": "Rückgängig"
+ },
+ "codeRedo": {
+ "other": "Wiederholen"
+ },
+ "codeReset": {
+ "other": "Zurücksetzen"
+ },
+ "codeRun": {
+ "other": "Ausführen"
+ },
+ "codeLive": {
+ "other": "Live-Vorschau"
+ },
+ "codePrevious": {
+ "other": "Vorherige PDF-Seite"
+ },
+ "codeNext": {
+ "other": "Nächste PDF-Seite"
+ },
+ "codeDownload": {
+ "other": "PDF herunterladen"
+ },
+ "codePdfText": {
+ "other": "PDF-Text"
+ },
+ "codeNoJs": {
+ "other": "Beide Sprachvarianten sind ohne JavaScript lesbar. Aktiviere JavaScript zum Bearbeiten und für die Vorschau."
+ },
+ "codeFailed": {
+ "other": "Der aktuelle Code enthält Fehler. Die letzte erfolgreiche Vorschau bleibt sichtbar."
+ },
+ "codeWaiting": {
+ "other": "Warte auf eine Tipp-Pause…"
+ },
+ "codeNodeContext": {
+ "other": "Node.js-Beispiel: Hier bearbeiten und kopieren; im eigenen Node.js-Projekt ausführen."
+ },
+ "codeContext": {
+ "other": "Codeausschnitt: Hier bearbeiten und kopieren; benötigt den beschriebenen Anwendungskontext oder eigene Ressourcen."
+ },
+ "codePdf": {
+ "other": "PDF-Vorschau Seite"
+ },
+ "codeReady": {
+ "other": "PDF aktualisiert."
+ },
+ "codeTooLarge": {
+ "other": "Code ist auf 500 KB begrenzt."
+ },
+ "codeRendering": {
+ "other": "Code wird geprüft und PDF erzeugt…"
+ },
+ "codeChecked": {
+ "other": "Syntax geprüft. Führe den Ausschnitt in seiner beschriebenen Umgebung aus."
+ },
+ "codeTimeout": {
+ "other": "Nach 15 Sekunden angehalten. Prüfe Schleifen oder verkleinere das Dokument."
+ },
+ "codeCheck": {
+ "other": "Syntax prüfen"
+ }
+}
diff --git a/i18n/en.json b/i18n/en.json
new file mode 100644
index 00000000..1c3f3299
--- /dev/null
+++ b/i18n/en.json
@@ -0,0 +1,257 @@
+{
+ "docs": {
+ "other": "DEVELOPER DOCS"
+ },
+ "skip": {
+ "other": "Skip to content"
+ },
+ "appearance": {
+ "other": "Appearance"
+ },
+ "system": {
+ "other": "System"
+ },
+ "light": {
+ "other": "Light"
+ },
+ "dark": {
+ "other": "Dark"
+ },
+ "language": {
+ "other": "Language"
+ },
+ "homeLink": {
+ "other": "Start page"
+ },
+ "search": {
+ "other": "Search documentation"
+ },
+ "placeholder": {
+ "other": "Tables, fonts, Node.js…"
+ },
+ "nojs": {
+ "other": "Search needs JavaScript. All chapters remain available below."
+ },
+ "chapters": {
+ "other": "Chapters"
+ },
+ "overview": {
+ "other": "Overview"
+ },
+ "tools": {
+ "other": "MCP & AI tools"
+ },
+ "versionNote": {
+ "other": "You are reading the 0.3.x API. Examples for 0.1/0.2 may use different imports and callbacks."
+ },
+ "onPage": {
+ "other": "On this page"
+ },
+ "edit": {
+ "other": "Edit this page"
+ },
+ "markdown": {
+ "other": "Read this page as Markdown"
+ },
+ "corpus": {
+ "other": "Full Markdown corpus"
+ },
+ "hero1": {
+ "other": "Your first PDF."
+ },
+ "hero2": {
+ "other": "One step at a time."
+ },
+ "heroLead": {
+ "other": "Start with a working example. See the result, understand the building blocks, and grow it into the document your application needs."
+ },
+ "copy": {
+ "other": "Copy"
+ },
+ "copied": {
+ "other": "Copied"
+ },
+ "copyFailed": {
+ "other": "Select code to copy"
+ },
+ "searchFailed": {
+ "other": "Search is unavailable. Browse the chapters below."
+ },
+ "noResults": {
+ "other": "No results. Try a different keyword."
+ },
+ "results": {
+ "other": "{count} results"
+ },
+ "exampleEdit": {
+ "other": "Edit in playground"
+ },
+ "exampleCode": {
+ "other": "JavaScript · document definition"
+ },
+ "examplePdf": {
+ "other": "Generated PDF · this exact definition"
+ },
+ "reference": {
+ "other": "Complete reference (English)"
+ },
+ "coverage": {
+ "other": "All documentation chapters are available in this language."
+ },
+ "homeFallback": {
+ "other": "Start page; this chapter is not translated"
+ },
+ "navStart": {
+ "other": "Getting started"
+ },
+ "navContent": {
+ "other": "Document content"
+ },
+ "navLayout": {
+ "other": "Page layout"
+ },
+ "navAssets": {
+ "other": "Images & fonts"
+ },
+ "navOutput": {
+ "other": "Output & API"
+ },
+ "navRecipes": {
+ "other": "Guides & examples"
+ },
+ "navAdvanced": {
+ "other": "Advanced"
+ },
+ "navTools": {
+ "other": "Developer tools"
+ },
+ "previous": {
+ "other": "Previous"
+ },
+ "next": {
+ "other": "Next"
+ },
+ "menu": {
+ "other": "Navigation"
+ },
+ "closeMenu": {
+ "other": "Close navigation"
+ },
+ "documentation": {
+ "other": "Documentation"
+ },
+ "playgroundTitle": {
+ "other": "Playground"
+ },
+ "playgroundLead": {
+ "other": "Edit your definition and see the result. Your workspace stays with you as you browse."
+ },
+ "openPlayground": {
+ "other": "Playground"
+ },
+ "workspaceBack": {
+ "other": "Back to documentation"
+ },
+ "runtimeNode": {
+ "other": "Node.js / API"
+ },
+ "runtimeBrowser": {
+ "other": "Browser"
+ },
+ "steps": {
+ "other": "Your path to a PDF"
+ },
+ "editHint": {
+ "other": "Try the example, then continue reading."
+ },
+ "navSetup": {
+ "other": "Runtime setup"
+ },
+ "navLearning": {
+ "other": "Learning path"
+ },
+ "navReference": {
+ "other": "Reference overview"
+ },
+ "navPageSettings": {
+ "other": "Page size & margins"
+ },
+ "navParagraphs": {
+ "other": "Paragraphs & stacks"
+ },
+ "versionLabel": {
+ "other": "Documentation version"
+ },
+ "versionHomeFallback": {
+ "other": "Version home (chapter unavailable)"
+ },
+ "codeLanguage": {
+ "other": "Example language"
+ },
+ "editCode": {
+ "other": "Edit example"
+ },
+ "codeUndo": {
+ "other": "Undo"
+ },
+ "codeRedo": {
+ "other": "Redo"
+ },
+ "codeReset": {
+ "other": "Reset"
+ },
+ "codeRun": {
+ "other": "Run"
+ },
+ "codeLive": {
+ "other": "Live preview"
+ },
+ "codePrevious": {
+ "other": "Previous PDF page"
+ },
+ "codeNext": {
+ "other": "Next PDF page"
+ },
+ "codeDownload": {
+ "other": "Download PDF"
+ },
+ "codePdfText": {
+ "other": "PDF text"
+ },
+ "codeNoJs": {
+ "other": "Both language variants are readable without JavaScript. Enable JavaScript to edit and preview."
+ },
+ "codeFailed": {
+ "other": "Current code has errors. The last successful preview is kept."
+ },
+ "codeWaiting": {
+ "other": "Waiting for typing to pause…"
+ },
+ "codeNodeContext": {
+ "other": "Node.js example: edit and copy the code here; execute it in your Node.js project."
+ },
+ "codeContext": {
+ "other": "Context snippet: edit and copy it here; surrounding application code or resources are required."
+ },
+ "codePdf": {
+ "other": "PDF preview page"
+ },
+ "codeReady": {
+ "other": "PDF updated."
+ },
+ "codeTooLarge": {
+ "other": "Code is limited to 500 KB."
+ },
+ "codeRendering": {
+ "other": "Checking code and rendering…"
+ },
+ "codeChecked": {
+ "other": "Syntax checked. Run this snippet in its documented environment."
+ },
+ "codeTimeout": {
+ "other": "Stopped after 15 seconds. Check loops or reduce the document."
+ },
+ "codeCheck": {
+ "other": "Check syntax"
+ }
+}
diff --git a/i18n/es.json b/i18n/es.json
new file mode 100644
index 00000000..ece706d4
--- /dev/null
+++ b/i18n/es.json
@@ -0,0 +1,257 @@
+{
+ "docs": {
+ "other": "DOCUMENTACIÓN"
+ },
+ "skip": {
+ "other": "Ir al contenido"
+ },
+ "appearance": {
+ "other": "Apariencia"
+ },
+ "system": {
+ "other": "Sistema"
+ },
+ "light": {
+ "other": "Claro"
+ },
+ "dark": {
+ "other": "Oscuro"
+ },
+ "language": {
+ "other": "Idioma"
+ },
+ "homeLink": {
+ "other": "Página de inicio"
+ },
+ "search": {
+ "other": "Buscar en la documentación"
+ },
+ "placeholder": {
+ "other": "Tablas, fuentes, Node.js…"
+ },
+ "nojs": {
+ "other": "La búsqueda requiere JavaScript. Los capítulos siguen disponibles abajo."
+ },
+ "chapters": {
+ "other": "Capítulos"
+ },
+ "overview": {
+ "other": "Resumen"
+ },
+ "tools": {
+ "other": "MCP y herramientas de IA"
+ },
+ "versionNote": {
+ "other": "Estás leyendo la API 0.3.x. Los ejemplos de 0.1/0.2 pueden usar otras importaciones y callbacks."
+ },
+ "onPage": {
+ "other": "En esta página"
+ },
+ "edit": {
+ "other": "Editar esta página"
+ },
+ "markdown": {
+ "other": "Leer esta página en Markdown"
+ },
+ "corpus": {
+ "other": "Corpus Markdown completo"
+ },
+ "hero1": {
+ "other": "Tu primer PDF."
+ },
+ "hero2": {
+ "other": "Paso a paso."
+ },
+ "heroLead": {
+ "other": "Empieza con un ejemplo que funcione. Mira el resultado, conoce los elementos básicos y adapta el documento a tu aplicación."
+ },
+ "copy": {
+ "other": "Copiar"
+ },
+ "copied": {
+ "other": "Copiado"
+ },
+ "copyFailed": {
+ "other": "Selecciona el código para copiarlo"
+ },
+ "searchFailed": {
+ "other": "La búsqueda no está disponible. Consulta los capítulos."
+ },
+ "noResults": {
+ "other": "Sin resultados. Prueba otra palabra."
+ },
+ "results": {
+ "other": "{count} resultados"
+ },
+ "exampleEdit": {
+ "other": "Editar en el playground"
+ },
+ "exampleCode": {
+ "other": "JavaScript · definición del documento"
+ },
+ "examplePdf": {
+ "other": "PDF generado · esta definición exacta"
+ },
+ "reference": {
+ "other": "Referencia completa (inglés)"
+ },
+ "coverage": {
+ "other": "Todos los capítulos de la documentación están disponibles en este idioma."
+ },
+ "homeFallback": {
+ "other": "Inicio; este capítulo no está traducido"
+ },
+ "navStart": {
+ "other": "Primeros pasos"
+ },
+ "navContent": {
+ "other": "Contenido del documento"
+ },
+ "navLayout": {
+ "other": "Diseño de página"
+ },
+ "navAssets": {
+ "other": "Imágenes y fuentes"
+ },
+ "navOutput": {
+ "other": "Salida y API"
+ },
+ "navRecipes": {
+ "other": "Guías y ejemplos"
+ },
+ "navAdvanced": {
+ "other": "Avanzado"
+ },
+ "navTools": {
+ "other": "Herramientas de desarrollo"
+ },
+ "previous": {
+ "other": "Anterior"
+ },
+ "next": {
+ "other": "Siguiente"
+ },
+ "menu": {
+ "other": "Navegación"
+ },
+ "closeMenu": {
+ "other": "Cerrar navegación"
+ },
+ "documentation": {
+ "other": "Documentación"
+ },
+ "playgroundTitle": {
+ "other": "Playground"
+ },
+ "playgroundLead": {
+ "other": "Edita la definición y mira el resultado. Tu espacio de trabajo se conserva mientras consultas la documentación."
+ },
+ "openPlayground": {
+ "other": "Playground"
+ },
+ "workspaceBack": {
+ "other": "Volver a la documentación"
+ },
+ "runtimeNode": {
+ "other": "Node.js / API"
+ },
+ "runtimeBrowser": {
+ "other": "Navegador"
+ },
+ "steps": {
+ "other": "Tu camino al PDF"
+ },
+ "editHint": {
+ "other": "Prueba el ejemplo y después sigue leyendo."
+ },
+ "navSetup": {
+ "other": "Configurar el entorno"
+ },
+ "navLearning": {
+ "other": "Ruta de aprendizaje"
+ },
+ "navReference": {
+ "other": "Resumen de referencia"
+ },
+ "navPageSettings": {
+ "other": "Tamaño y márgenes"
+ },
+ "navParagraphs": {
+ "other": "Párrafos y pilas"
+ },
+ "versionLabel": {
+ "other": "Versión de la documentación"
+ },
+ "versionHomeFallback": {
+ "other": "Inicio de la versión (capítulo no disponible)"
+ },
+ "codeLanguage": {
+ "other": "Lenguaje del ejemplo"
+ },
+ "editCode": {
+ "other": "Editar ejemplo"
+ },
+ "codeUndo": {
+ "other": "Deshacer"
+ },
+ "codeRedo": {
+ "other": "Rehacer"
+ },
+ "codeReset": {
+ "other": "Restablecer"
+ },
+ "codeRun": {
+ "other": "Ejecutar"
+ },
+ "codeLive": {
+ "other": "Vista previa automática"
+ },
+ "codePrevious": {
+ "other": "Página PDF anterior"
+ },
+ "codeNext": {
+ "other": "Página PDF siguiente"
+ },
+ "codeDownload": {
+ "other": "Descargar PDF"
+ },
+ "codePdfText": {
+ "other": "Texto del PDF"
+ },
+ "codeNoJs": {
+ "other": "Ambas variantes se pueden leer sin JavaScript. Activa JavaScript para editar y previsualizar."
+ },
+ "codeFailed": {
+ "other": "El código contiene errores. Se conserva la última vista previa correcta."
+ },
+ "codeWaiting": {
+ "other": "Esperando una pausa al escribir…"
+ },
+ "codeNodeContext": {
+ "other": "Ejemplo de Node.js: edita y copia el código aquí; ejecútalo en tu proyecto Node.js."
+ },
+ "codeContext": {
+ "other": "Fragmento de código: edítalo y cópialo aquí; requiere el contexto de aplicación o los recursos descritos."
+ },
+ "codePdf": {
+ "other": "Vista previa PDF, página"
+ },
+ "codeReady": {
+ "other": "PDF actualizado."
+ },
+ "codeTooLarge": {
+ "other": "El código está limitado a 500 KB."
+ },
+ "codeRendering": {
+ "other": "Comprobando el código y generando…"
+ },
+ "codeChecked": {
+ "other": "Sintaxis comprobada. Ejecuta el fragmento en su entorno documentado."
+ },
+ "codeTimeout": {
+ "other": "Detenido tras 15 segundos. Revisa los bucles o reduce el documento."
+ },
+ "codeCheck": {
+ "other": "Comprobar sintaxis"
+ }
+}
diff --git a/i18n/fr.json b/i18n/fr.json
new file mode 100644
index 00000000..55494c7e
--- /dev/null
+++ b/i18n/fr.json
@@ -0,0 +1,257 @@
+{
+ "docs": {
+ "other": "DOCUMENTATION"
+ },
+ "skip": {
+ "other": "Aller au contenu"
+ },
+ "appearance": {
+ "other": "Apparence"
+ },
+ "system": {
+ "other": "Système"
+ },
+ "light": {
+ "other": "Clair"
+ },
+ "dark": {
+ "other": "Sombre"
+ },
+ "language": {
+ "other": "Langue"
+ },
+ "homeLink": {
+ "other": "Page d’accueil"
+ },
+ "search": {
+ "other": "Rechercher dans la documentation"
+ },
+ "placeholder": {
+ "other": "Tableaux, polices, Node.js…"
+ },
+ "nojs": {
+ "other": "La recherche nécessite JavaScript. Les chapitres restent accessibles ci-dessous."
+ },
+ "chapters": {
+ "other": "Chapitres"
+ },
+ "overview": {
+ "other": "Vue d’ensemble"
+ },
+ "tools": {
+ "other": "MCP et outils IA"
+ },
+ "versionNote": {
+ "other": "Vous consultez l’API 0.3.x. Les exemples 0.1/0.2 peuvent utiliser des imports et des callbacks différents."
+ },
+ "onPage": {
+ "other": "Sur cette page"
+ },
+ "edit": {
+ "other": "Modifier cette page"
+ },
+ "markdown": {
+ "other": "Lire cette page en Markdown"
+ },
+ "corpus": {
+ "other": "Corpus Markdown complet"
+ },
+ "hero1": {
+ "other": "Votre premier PDF."
+ },
+ "hero2": {
+ "other": "Pas à pas."
+ },
+ "heroLead": {
+ "other": "Partez d’un exemple fonctionnel. Observez le résultat, découvrez les éléments de base, puis adaptez le document à votre application."
+ },
+ "copy": {
+ "other": "Copier"
+ },
+ "copied": {
+ "other": "Copié"
+ },
+ "copyFailed": {
+ "other": "Sélectionnez le code à copier"
+ },
+ "searchFailed": {
+ "other": "La recherche est indisponible. Parcourez les chapitres."
+ },
+ "noResults": {
+ "other": "Aucun résultat. Essayez un autre terme."
+ },
+ "results": {
+ "other": "{count} résultats"
+ },
+ "exampleEdit": {
+ "other": "Modifier dans le playground"
+ },
+ "exampleCode": {
+ "other": "JavaScript · définition du document"
+ },
+ "examplePdf": {
+ "other": "PDF généré · cette définition exacte"
+ },
+ "reference": {
+ "other": "Référence complète (anglais)"
+ },
+ "coverage": {
+ "other": "Tous les chapitres de la documentation sont disponibles dans cette langue."
+ },
+ "homeFallback": {
+ "other": "Accueil ; ce chapitre n’est pas traduit"
+ },
+ "navStart": {
+ "other": "Premiers pas"
+ },
+ "navContent": {
+ "other": "Contenu du document"
+ },
+ "navLayout": {
+ "other": "Mise en page"
+ },
+ "navAssets": {
+ "other": "Images et polices"
+ },
+ "navOutput": {
+ "other": "Sortie et API"
+ },
+ "navRecipes": {
+ "other": "Guides et exemples"
+ },
+ "navAdvanced": {
+ "other": "Avancé"
+ },
+ "navTools": {
+ "other": "Outils de développement"
+ },
+ "previous": {
+ "other": "Précédent"
+ },
+ "next": {
+ "other": "Suivant"
+ },
+ "menu": {
+ "other": "Navigation"
+ },
+ "closeMenu": {
+ "other": "Fermer la navigation"
+ },
+ "documentation": {
+ "other": "Documentation"
+ },
+ "playgroundTitle": {
+ "other": "Playground"
+ },
+ "playgroundLead": {
+ "other": "Modifiez la définition et observez le résultat. Votre espace de travail reste disponible pendant la lecture."
+ },
+ "openPlayground": {
+ "other": "Playground"
+ },
+ "workspaceBack": {
+ "other": "Retour à la documentation"
+ },
+ "runtimeNode": {
+ "other": "Node.js / API"
+ },
+ "runtimeBrowser": {
+ "other": "Navigateur"
+ },
+ "steps": {
+ "other": "Votre parcours vers le PDF"
+ },
+ "editHint": {
+ "other": "Essayez l’exemple, puis poursuivez votre lecture."
+ },
+ "navSetup": {
+ "other": "Configurer l’environnement"
+ },
+ "navLearning": {
+ "other": "Parcours guidé"
+ },
+ "navReference": {
+ "other": "Vue de la référence"
+ },
+ "navPageSettings": {
+ "other": "Format et marges"
+ },
+ "navParagraphs": {
+ "other": "Paragraphes et piles"
+ },
+ "versionLabel": {
+ "other": "Version de la documentation"
+ },
+ "versionHomeFallback": {
+ "other": "Accueil de la version (chapitre indisponible)"
+ },
+ "codeLanguage": {
+ "other": "Langage de l’exemple"
+ },
+ "editCode": {
+ "other": "Modifier l’exemple"
+ },
+ "codeUndo": {
+ "other": "Annuler"
+ },
+ "codeRedo": {
+ "other": "Rétablir"
+ },
+ "codeReset": {
+ "other": "Réinitialiser"
+ },
+ "codeRun": {
+ "other": "Exécuter"
+ },
+ "codeLive": {
+ "other": "Aperçu automatique"
+ },
+ "codePrevious": {
+ "other": "Page PDF précédente"
+ },
+ "codeNext": {
+ "other": "Page PDF suivante"
+ },
+ "codeDownload": {
+ "other": "Télécharger le PDF"
+ },
+ "codePdfText": {
+ "other": "Texte du PDF"
+ },
+ "codeNoJs": {
+ "other": "Les deux variantes sont lisibles sans JavaScript. Activez JavaScript pour modifier et prévisualiser."
+ },
+ "codeFailed": {
+ "other": "Le code contient des erreurs. Le dernier aperçu réussi est conservé."
+ },
+ "codeWaiting": {
+ "other": "En attente de la fin de saisie…"
+ },
+ "codeNodeContext": {
+ "other": "Exemple Node.js : modifiez et copiez le code ici ; exécutez-le dans votre projet Node.js."
+ },
+ "codeContext": {
+ "other": "Extrait de code : modifiez et copiez-le ici ; le contexte applicatif ou les ressources décrits sont nécessaires."
+ },
+ "codePdf": {
+ "other": "Aperçu PDF, page"
+ },
+ "codeReady": {
+ "other": "PDF mis à jour."
+ },
+ "codeTooLarge": {
+ "other": "Le code est limité à 500 Ko."
+ },
+ "codeRendering": {
+ "other": "Vérification du code et génération…"
+ },
+ "codeChecked": {
+ "other": "Syntaxe vérifiée. Exécutez cet extrait dans son environnement documenté."
+ },
+ "codeTimeout": {
+ "other": "Arrêt après 15 secondes. Vérifiez les boucles ou réduisez le document."
+ },
+ "codeCheck": {
+ "other": "Vérifier la syntaxe"
+ }
+}
diff --git a/i18n/pt-br.json b/i18n/pt-br.json
new file mode 100644
index 00000000..83ad6041
--- /dev/null
+++ b/i18n/pt-br.json
@@ -0,0 +1,257 @@
+{
+ "docs": {
+ "other": "DOCUMENTAÇÃO"
+ },
+ "skip": {
+ "other": "Ir para o conteúdo"
+ },
+ "appearance": {
+ "other": "Aparência"
+ },
+ "system": {
+ "other": "Sistema"
+ },
+ "light": {
+ "other": "Claro"
+ },
+ "dark": {
+ "other": "Escuro"
+ },
+ "language": {
+ "other": "Idioma"
+ },
+ "homeLink": {
+ "other": "Página inicial"
+ },
+ "search": {
+ "other": "Pesquisar na documentação"
+ },
+ "placeholder": {
+ "other": "Tabelas, fontes, Node.js…"
+ },
+ "nojs": {
+ "other": "A pesquisa precisa de JavaScript. Os capítulos continuam disponíveis abaixo."
+ },
+ "chapters": {
+ "other": "Capítulos"
+ },
+ "overview": {
+ "other": "Visão geral"
+ },
+ "tools": {
+ "other": "MCP e ferramentas de IA"
+ },
+ "versionNote": {
+ "other": "Você está lendo a API 0.3.x. Exemplos para 0.1/0.2 podem usar outras importações e callbacks."
+ },
+ "onPage": {
+ "other": "Nesta página"
+ },
+ "edit": {
+ "other": "Editar esta página"
+ },
+ "markdown": {
+ "other": "Ler esta página em Markdown"
+ },
+ "corpus": {
+ "other": "Corpus Markdown completo"
+ },
+ "hero1": {
+ "other": "Seu primeiro PDF."
+ },
+ "hero2": {
+ "other": "Um passo de cada vez."
+ },
+ "heroLead": {
+ "other": "Comece com um exemplo que funciona. Veja o resultado, conheça os elementos básicos e adapte o documento à sua aplicação."
+ },
+ "copy": {
+ "other": "Copiar"
+ },
+ "copied": {
+ "other": "Copiado"
+ },
+ "copyFailed": {
+ "other": "Selecione o código para copiar"
+ },
+ "searchFailed": {
+ "other": "A pesquisa está indisponível. Navegue pelos capítulos."
+ },
+ "noResults": {
+ "other": "Nenhum resultado. Tente outra palavra."
+ },
+ "results": {
+ "other": "{count} resultados"
+ },
+ "exampleEdit": {
+ "other": "Editar no playground"
+ },
+ "exampleCode": {
+ "other": "JavaScript · definição do documento"
+ },
+ "examplePdf": {
+ "other": "PDF gerado · esta definição exata"
+ },
+ "reference": {
+ "other": "Referência completa (inglês)"
+ },
+ "coverage": {
+ "other": "Todos os capítulos da documentação estão disponíveis neste idioma."
+ },
+ "homeFallback": {
+ "other": "Início; este capítulo não está traduzido"
+ },
+ "navStart": {
+ "other": "Primeiros passos"
+ },
+ "navContent": {
+ "other": "Conteúdo do documento"
+ },
+ "navLayout": {
+ "other": "Layout de página"
+ },
+ "navAssets": {
+ "other": "Imagens e fontes"
+ },
+ "navOutput": {
+ "other": "Saída e API"
+ },
+ "navRecipes": {
+ "other": "Guias e exemplos"
+ },
+ "navAdvanced": {
+ "other": "Avançado"
+ },
+ "navTools": {
+ "other": "Ferramentas de desenvolvimento"
+ },
+ "previous": {
+ "other": "Anterior"
+ },
+ "next": {
+ "other": "Próximo"
+ },
+ "menu": {
+ "other": "Navegação"
+ },
+ "closeMenu": {
+ "other": "Fechar navegação"
+ },
+ "documentation": {
+ "other": "Documentação"
+ },
+ "playgroundTitle": {
+ "other": "Playground"
+ },
+ "playgroundLead": {
+ "other": "Edite a definição e veja o resultado. Seu espaço de trabalho é preservado enquanto você consulta a documentação."
+ },
+ "openPlayground": {
+ "other": "Playground"
+ },
+ "workspaceBack": {
+ "other": "Voltar à documentação"
+ },
+ "runtimeNode": {
+ "other": "Node.js / API"
+ },
+ "runtimeBrowser": {
+ "other": "Navegador"
+ },
+ "steps": {
+ "other": "Seu caminho até o PDF"
+ },
+ "editHint": {
+ "other": "Experimente o exemplo e continue a leitura."
+ },
+ "navSetup": {
+ "other": "Configurar o ambiente"
+ },
+ "navLearning": {
+ "other": "Trilha de aprendizado"
+ },
+ "navReference": {
+ "other": "Visão da referência"
+ },
+ "navPageSettings": {
+ "other": "Tamanho e margens"
+ },
+ "navParagraphs": {
+ "other": "Parágrafos e pilhas"
+ },
+ "versionLabel": {
+ "other": "Versão da documentação"
+ },
+ "versionHomeFallback": {
+ "other": "Início da versão (capítulo indisponível)"
+ },
+ "codeLanguage": {
+ "other": "Linguagem do exemplo"
+ },
+ "editCode": {
+ "other": "Editar exemplo"
+ },
+ "codeUndo": {
+ "other": "Desfazer"
+ },
+ "codeRedo": {
+ "other": "Refazer"
+ },
+ "codeReset": {
+ "other": "Restaurar"
+ },
+ "codeRun": {
+ "other": "Executar"
+ },
+ "codeLive": {
+ "other": "Prévia automática"
+ },
+ "codePrevious": {
+ "other": "Página PDF anterior"
+ },
+ "codeNext": {
+ "other": "Próxima página PDF"
+ },
+ "codeDownload": {
+ "other": "Baixar PDF"
+ },
+ "codePdfText": {
+ "other": "Texto do PDF"
+ },
+ "codeNoJs": {
+ "other": "As duas variantes podem ser lidas sem JavaScript. Ative o JavaScript para editar e visualizar."
+ },
+ "codeFailed": {
+ "other": "O código contém erros. A última prévia bem-sucedida é mantida."
+ },
+ "codeWaiting": {
+ "other": "Aguardando uma pausa na digitação…"
+ },
+ "codeNodeContext": {
+ "other": "Exemplo Node.js: edite e copie o código aqui; execute-o no seu projeto Node.js."
+ },
+ "codeContext": {
+ "other": "Trecho de código: edite e copie aqui; exige o contexto da aplicação ou os recursos descritos."
+ },
+ "codePdf": {
+ "other": "Prévia do PDF, página"
+ },
+ "codeReady": {
+ "other": "PDF atualizado."
+ },
+ "codeTooLarge": {
+ "other": "O código é limitado a 500 KB."
+ },
+ "codeRendering": {
+ "other": "Verificando o código e gerando…"
+ },
+ "codeChecked": {
+ "other": "Sintaxe verificada. Execute este trecho no ambiente documentado."
+ },
+ "codeTimeout": {
+ "other": "Interrompido após 15 segundos. Verifique os loops ou reduza o documento."
+ },
+ "codeCheck": {
+ "other": "Verificar sintaxe"
+ }
+}
diff --git a/layouts/404.html b/layouts/404.html
new file mode 100644
index 00000000..57bc9324
--- /dev/null
+++ b/layouts/404.html
@@ -0,0 +1 @@
+{{ define "main" }}
This documentation page could not be found. Use navigation or search to find a topic.
Back to documentation{{ end }}
diff --git a/layouts/_default/_markup/render-codeblock.html b/layouts/_default/_markup/render-codeblock.html
new file mode 100644
index 00000000..f9fd70f8
--- /dev/null
+++ b/layouts/_default/_markup/render-codeblock.html
@@ -0,0 +1 @@
+{{ $key := crypto.SHA256 (strings.TrimSpace (replace .Inner "\r\n" "\n")) }}{{ if or (in (slice "js" "javascript" "ts" "typescript") .Type) (index hugo.Data.codeExamples $key) }}{{ partial "code-example.html" (dict "source" .Inner) }}{{ else }}
{{ if eq .Type "sh" }}Terminal{{ else }}{{ .Type | default "Text" }}{{ end }}
Your document will appear here. Choose an example and select Run.
Page text
+
+
Ready. Run an example to begin.
10 s render limit · Embedded resources only
+
+ How it works & keyboard shortcuts
Define var dd = { content: [...] };. Use Ctrl/⌘ + Enter to run, Tab to indent, and Ctrl + Space for completions. The engine runs in a disposable worker so Cancel and the time limit can stop a blocked render. PDF.js renders the preview directly, including page navigation, zoom and extracted page text. Open PDF and Download PDF are also available.
Run only JavaScript you trust. Custom code executes in your browser and is not a security sandbox. Live preview updates imports and restored documents automatically when enabled. Turn it off before importing code you want to inspect first. Your current workspace, selection and undo history are autosaved in this browser. Named documents and quick drafts are separate local saves. Clear workspace autosave removes the last workspace until you type again. No code or PDF is uploaded by this playground. URL resources are disabled in the PDF API; use embedded images and bundled fonts.
+
+
\ No newline at end of file
diff --git a/layouts/shortcodes/alert.html b/layouts/shortcodes/alert.html
new file mode 100644
index 00000000..cd5a0fb5
--- /dev/null
+++ b/layouts/shortcodes/alert.html
@@ -0,0 +1 @@
+
diff --git a/layouts/shortcodes/example.html b/layouts/shortcodes/example.html
new file mode 100644
index 00000000..514d853e
--- /dev/null
+++ b/layouts/shortcodes/example.html
@@ -0,0 +1,3 @@
+{{ $prefix := "" }}{{ if ne .Page.Language.Lang "en" }}{{ $prefix = printf "%s/" .Page.Language.Lang }}{{ end }}
+{{ $id := .Get "id" }}{{ $matches := where hugo.Data.playground "id" $id }}{{ if not $matches }}{{ errorf "Unknown playground example %s" $id }}{{ end }}
+{{ range $matches }}