POST /generate-pdf
HTML binnen.
PDF terug.
Headless Chromium opent de URL, wacht tot de pagina stilstaat, en rastert naar PDF. Adobe zet die om naar DOCX. Beide bestanden komen terug als base64.
01 navigate 02 fonts.ready 03 paged.js 04 page.pdf() 05 exportpdf 06 base64
CV-URLs voor ng-front
instance · omgeving · uid · output
Angular bouwt alleen de URL en opent die. Geen X-API-Key,
geen POST /generate-pdf. De pagina op deze host haalt de
HTML op bij Talentpool, rendert PDF of Word, en toont of downloadt het bestand.
instance en uid mogen alleen letters, cijfers,
punten, underscores en streepjes bevatten.
Formule
https://documents.eazycv.com/{output}/{instance}/{uid}?environment={omgeving}&filename={naam}| Deel | Verplicht | Waarde |
|---|---|---|
| host | ja | https://documents.eazycv.com in productie. Lokaal de origin van deze pagina. |
| output | ja | pdf-view voor PDF, docx-view voor Word. |
| instance | ja | Tenant/template, bijvoorbeeld ict-nl. |
| uid | ja | CV-uid van het document. |
| environment | ja in acc | acc haalt HTML van tp.acc.eazycv.com. Weglaten of elke andere waarde gebruikt tp.eazycv.com. |
| filename | nee | Downloadnaam. Zonder extensie wordt .pdf of .docx toegevoegd. Fallback: {instance}-{uid}.{ext}. |
| debug | nee | 1 toont frames, klok en debugrapport. Zonder debug alleen de viewer of download-UI. |
| beta | nee | PDF en Word. true zet ?beta=true op de bron-HTML bij Talentpool. |
| plainmode | nee | PDF en Word. true of alleen plainmode zet ?plainmode=true op de bron-HTML. |
Outputtypes
PDF · iframe of nieuw tabblad
/pdf-view/{instance}/{uid}
Toont de PDF met PDF.js (zoom, pagina’s, print, download).
Intern: {tp}/pdf/{instance}/{uid}, plus beta en plainmode als die op deze URL staan.
In ng-front: zet deze URL als iframe src of open in een nieuw tabblad.
Word · download + Open
/docx-view/{instance}/{uid}
Bouwt een .docx via Adobe, start de download en biedt Open in Word.
Intern: {tp}/pdf/{instance}/{uid}?word=true, plus beta en plainmode als die op deze URL staan.
In ng-front: window.open, niet in een iframe.
Voorbeelden
| Aanbod | URL |
|---|---|
| PDF · productie | https://documents.eazycv.com/pdf-view/{instance}/{uid}?filename=Jan-Jansen.pdf |
| PDF · acceptatie | https://documents.eazycv.com/pdf-view/{instance}/{uid}?environment=acc&filename=Jan-Jansen.pdf |
| Word · productie | https://documents.eazycv.com/docx-view/{instance}/{uid}?filename=Jan-Jansen.docx |
| Word · acceptatie | https://documents.eazycv.com/docx-view/{instance}/{uid}?environment=acc&filename=Jan-Jansen.docx |
| Query-fallback | /pdf-view?instance={instance}&uid={uid}&environment=acc |
Path en query altijd met encodeURIComponent.
De bron-HTML zelf (https://tp.eazycv.com/pdf/{instance}/{uid})
is geen eindgebruikers-URL; die is alleen de input voor deze service.
Endpoints
HTTP · JSONGET
/health
Liveness. Geen auth. Antwoordt status, timestamp en adobeConfigured.
POST · application/json · max 15 MB
/generate-pdf
Render de opgegeven HTML-URL naar PDF. Vereist X-API-Key als de server een sleutel heeft gezet.
POST · application/json · max 15 MB
/generate-docx
PDF of HTML-URL naar DOCX via Adobe PDF Services. 503 zonder Adobe-credentials.
GET
/pdf-view/{instance}/{uid}
Bouwt {source}/pdf/{instance}/{uid} en toont de PDF met PDF.js. Optioneel ?beta=true en ?plainmode=true gaan mee naar de bron-HTML. Zie CV-URLs voor instance, omgeving, uid en filename. Geen API-key.
GET
/docx-view/{instance}/{uid}
Zelfde parameters als PDF-view. Bouwt {source}/pdf/{instance}/{uid}?word=true, exporteert naar Word en start de download. Optioneel ?beta=true en ?plainmode=true. Geen API-key.
Authenticatie
header
Stuur de sleutel in X-API-Key. Staat PDF_API_KEY
leeg, dan is de route open. Een mismatch geeft 401 Unauthorized.
De benchmark gebruikt Basic Auth: gebruikersnaam
BENCHMARK_USER (standaard benchmark) en wachtwoord
BENCHMARK_PASSWORD, met PDF_API_KEY als fallback.
Header
X-API-Key: <PDF_API_KEY>POST /generate-pdf Content-Type: application/json X-API-Key: <your-key>
Request body
application/json
Voor /generate-pdf is alleen url verplicht.
Puppeteer-opties mogen plat blijven (width, marginTop)
of nested binnenkomen als data.pdf_settings.
Layout-CSS en -JS horen onder data.layout.
Zonder formaat valt de compositor terug op A4.
preferCSSPageSize blijft staan: CSS @page wint dan van width/height.
| Veld | Type | Default | Rol |
|---|---|---|---|
| url | string | — | Bronpagina die Chromium opent. |
| format | string | A4 | Papierformaat als width/height ontbreken. |
| width / height | string | 210mm / 297mm | Exacte trim. Zet preferCSSPageSize uit. |
| landscape | bool | false | Liggend vel. |
| printBackground | bool | true | Achtergrondkleuren en -beelden meenemen. |
| omitBackground | bool | false | Witte pagina-achtergrond weglaten (transparant waar mogelijk). |
| preferCSSPageSize | bool | false | Laat @page de maat bepalen, tenzij width+height gezet zijn. |
| scale | number | 1 | Render-schaal van de pagina. |
| marginTop…Left | string | 0mm | Marges, met eenheid (mm, cm, px). |
| displayHeaderFooter | bool | false | Chromium header/footer-templates tonen. |
| headerTemplate / footerTemplate | string | "" | HTML voor kop- en voettekst. |
pdf_settings & layout
data · toegepast
De compositor leest data.pdf_settings en data.layout
(of dezelfde objecten op het topniveau). Na de render komt in
data.applied terug wat er écht is gebruikt: bronpad, PDF-opties,
geïnjecteerde CSS/JS, paged.js-status en eventuele waarschuwingen.
| Veld | Verwerking |
|---|---|
| pdf_settings.page.width/height | Chromium-velmaat. Kale getallen worden mm. |
| pdf_settings.margins.* | Puppeteer-marges rond het vel. Los van CSS @page-marges. |
| other.landscape / scale / printBackground / omitBackground | Direct naar page.pdf(). true/1/"yes" tellen als aan. |
| other.preferCSSPageSize | Niet meer geforceerd uit. Bij true wint CSS @page; width/height blijven fallback. |
| other.displayHeaderFooter + templates | Chromium kop/voet. Lege templates blijven leeg. |
| layout.version / use_version2 | Kiest *_beta CSS/JS. Lege beta valt terug op de stabiele variant. |
| css_html, css_pdf (+ _beta) | Na navigatie geïnjecteerd, html eerst, daarna pdf. <style>-wrappers gaan eraf. |
| css_word (+ _beta) | Alleen bij HTML→DOCX. Bij PDF-output bewust overgeslagen. |
| custom_javascript (+ _beta) | Draait ná CSS, vóór paged.js, zodat de DOM al styled is. |
| use_pagedjs | true: wacht op previewDone (max 30 s). false: overslaan. Zonder layout: zelfde wacht, geen tweede preview(). Headers/footers via Paged.js CSS; zet displayHeaderFooter op false. |
| layout.settings | Paginaformaat en marges → @page. Kleuren, typografie en structuur → CSS-variabelen --layout-…. |
| custom_template_name | Alleen gelogd. Het sjabloon zit in de bron-URL, niet in Chromium. |
DOCX
Adobe PDF Services
POST /generate-docx heeft twee bronnen. Default is een bestaande PDF.
Met source: "html" rendert Chromium eerst, daarna exporteert Adobe naar Word
(ocrLang default nl-NL).
| Veld | Type | Default | Rol |
|---|---|---|---|
| source | string | pdf of html. |
|
| url | string | — | PDF-URL bij source=pdf, HTML-URL bij source=html. |
| pdfBase64 | string | — | Ruwe PDF als base64. Alternatief voor url bij source=pdf. |
| ocrLang | string | nl-NL | Adobe OCR-taal voor de export. |
Bij source=html gelden dezelfde render-velden als /generate-pdf.
Credentials: ADOBE_CLIENT_ID, ADOBE_CLIENT_SECRET,
optioneel ADOBE_API_URL (default https://pdf-services.adobe.io).
Response
200 · 400 · 401 · 500 · 503{
"status": "success",
"data": {
"base64file": "JVBERi0xLjc...",
"duration": 1.42,
"requestId": "a1b2c3d4e5f6",
"applied": { /* pdf + layout feedback */ },
"timings": { /* navigateMs, fontsMs, pagedjsMs, pdfMs, pages, localAssets */ }
}
}
base64file is het ruwe PDF of DOCX.
duration is seconden wall-clock.
requestId koppelt logs en eventuele error-screenshots.
applied zegt per veld of het is geïnjecteerd, overgeslagen of als fallback gebruikt.
timings splitst navigatie, fonts, paged.js en page.pdf().
400 zonder bron. 503 als Adobe niet geconfigureerd is.
500 bij navigatie-, raster- of exportfout, met error
en dezelfde requestId. Navigatie 45 s; PDF-write 30 s;
Adobe-poll max 90 s.
Voorbeeld
curl · postman
Importeer de collectie in Postman (Collection v2.1).
Variables: baseUrl en apiKey.
curl -sS /generate-pdf \
-H 'Content-Type: application/json' \
-H 'X-API-Key: $PDF_API_KEY' \
-d '{
"url": "https://example.com/document",
"width": "210mm",
"height": "297mm",
"printBackground": true
}'
curl -sS /generate-docx \
-H 'Content-Type: application/json' \
-H 'X-API-Key: $PDF_API_KEY' \
-d '{
"source": "html",
"url": "https://example.com/document",
"width": "210mm",
"height": "297mm",
"ocrLang": "nl-NL"
}'