26 KiB
Guide för självhosting
BentoPDF kan självhostas på din egen infrastruktur. Den här guiden går igenom olika distributionsalternativ.
Snabbstart med Docker / Podman
Det snabbaste sättet att självhosta BentoPDF:
Tip
BentoPDF levereras i två byggen:
- Självhostat bygge:
ghcr.io/alam00000/bentopdf-simple:latest. Alla PDF-verktyg, utan marknadsföringsdelarna (ingen hero, FAQ, omdömen eller sidfot). Använd detta för interna distributioner i team och organisationer. Det är inte en funktionsbegränsad "lite"-version.- Kommersiellt bygge:
ghcr.io/alam00000/bentopdf:latest. Hela marknadsföringswebbplatsen, som används av bentopdf.com själv och av innehavare av kommersiell licens med publika distributioner.Om du är osäker: hämta det självhostade bygget.
Important
Konvertering av Office-filer kräver
SharedArrayBuffer, vilket innebär att appen måste vara både cross-origin-isolerad och levereras från en säker kontext. Den officiella avbildningen skickar redan de nödvändiga COOP/COEP-huvudena, men webbläsare inaktiverar ändåSharedArrayBufferpå vanliga HTTP-ursprung i lokala nätverk, somhttp://192.168.x.x.Använd
http://localhostbara för tester på samma enhet. Om användare når BentoPDF via en LAN-IP eller ett värdnamn ska du avsluta anslutningen med HTTPS.
# Docker
docker run -d -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
# Podman
podman run -d -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
Eller med Docker Compose / Podman Compose:
# docker-compose.yml
services:
bentopdf:
image: ghcr.io/alam00000/bentopdf-simple:latest
ports:
- '3000:8080'
restart: unless-stopped
# Docker Compose
docker compose up -d
# Podman Compose
podman-compose up -d
Podman Quadlet (Linux Systemd)
Kör BentoPDF som en systemd-tjänst. Skapa ~/.config/containers/systemd/bentopdf.container:
[Container]
Image=ghcr.io/alam00000/bentopdf-simple:latest
ContainerName=bentopdf
PublishPort=3000:8080
AutoUpdate=registry
[Service]
Restart=always
[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now bentopdf
Se Docker-distributionsguiden för fullständig dokumentation om Quadlet.
Bygga från källkod
# Clone and build
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
npm install
npm run build
# The built files are in the `dist` folder
Konfigurationsalternativ
Självhostat bygge (Simple Mode)
Det självhostade bygget (avbildningen bentopdf-simple, även kallat Simple Mode) är funktionellt identiskt med det kommersiella bygget: alla PDF-verktyg finns med och beter sig likadant. Det döljer bara marknadsföringsdelarna som bara är rimliga på bentopdf.com självt eller i en kommersiell publik distribution. Det är inte en funktionsbegränsad eller "lite"-version.
Vad det självhostade bygget döljer (enbart kosmetiskt, inga PDF-funktioner tas bort):
- Navigeringsfält, hero-sektion, funktionssektion, FAQ, omdömen, sidfot
- Uppdaterar sidtiteln till "PDF-verktyg"
Vad det självhostade bygget behåller (allt som faktiskt hanterar PDF-arbete):
- Alla PDF-verktyg (slå ihop, dela, redigera, signera, OCR, Office-konvertering m.m.)
- Stöd för eget varumärke, all konfiguration vid bygge och körning
Det kommersiella bygget (ghcr.io/alam00000/bentopdf:latest) driver bentopdf.com självt och används av innehavare av kommersiell licens med publika distributioner. Det lägger till hero, FAQ, omdömen och sidfot, som inte vore rimliga i ett internt verktyg.
Om du självhostar BentoPDF för ditt team, din organisation eller som ett internt verktyg hämtar du det självhostade bygget:
# Use the pre-built image (recommended)
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf-simple:latest
# Or build it yourself
SIMPLE_MODE=true npm run build
Se SIMPLE_MODE.md för fullständig information.
Kommersiellt bygge (publika distributioner med eget varumärke)
Det kommersiella bygget (avbildningen bentopdf, utan suffixet -simple) driver bentopdf.com självt. Det innehåller hela marknadsföringswebbplatsen (hero, funktioner, FAQ, omdömen, sidfot) ovanpå alla PDF-verktyg. Använd det här bygget när du vill distribuera BentoPDF som en publik PDF-tjänst under ditt eget varumärke, till exempel:
- Du kör BentoPDF som en hostad SaaS för slutanvändare på din egen domän
- Du vill ha upplevelsen med målsida (marknadsföringssektioner + verktyg), inte bara själva verktygsytan
- Du är innehavare av kommersiell licens och bäddar in BentoPDF i en kommersiell produkt
Kör det som det är (med BentoPDF-varumärke, användbart för att förhandsgranska bygget):
docker run -p 3000:8080 ghcr.io/alam00000/bentopdf:latest
Bygg med ditt eget varumärke (det typiska kommersiella arbetsflödet):
docker build \
--build-arg VITE_BRAND_NAME="AcmePDF" \
--build-arg VITE_BRAND_LOGO="images/acme-logo.svg" \
--build-arg VITE_FOOTER_TEXT="© 2026 Acme Corp. All rights reserved." \
-t acmepdf .
docker run -p 3000:8080 acmepdf
Alla andra alternativ vid bygget (BASE_URL, VITE_DEFAULT_LANGUAGE, DISABLE_TOOLS, åsidosättning av WASM-URL:er m.m.) fungerar på samma sätt som i det självhostade bygget.
::: warning Licensiering Det är tillåtet att köra det kommersiella bygget under något av BentoPDF:s två licensalternativ:
- AGPL-3.0 (gratis): tillåtet om din distribution publicerar hela sin källkod under AGPL, inklusive varumärkesändringar och omgivande affärslogik.
- Kommersiell licens (79 USD engångsavgift): krävs för distributioner med sluten källkod eller proprietära distributioner där du inte öppnar källkoden för din varumärkesfork eller affärskod.
Se licenssidan för en fullständig jämförelse. AGPL-licensierade WASM-moduler (PyMuPDF, Ghostscript, CoherentPDF) laddas från ett CDN vid körning, så de hamnar inte i din avbildning och påverkar inte din licenssituation. :::
Bas-URL
Distribuera till en underkatalog:
BASE_URL=/pdf-tools/ npm run build
Eget varumärke
Ersätt BentoPDF:s standardlogotyp, namn och sidfotstext med dina egna vid bygget:
| Variabel | Beskrivning | Standard |
|---|---|---|
VITE_BRAND_NAME |
Varumärkesnamn som visas i sidhuvud och sidfot | BentoPDF |
VITE_BRAND_LOGO |
Logotypsökväg relativt public/ |
images/favicon-no-bg.svg |
VITE_FOOTER_TEXT |
Egen sidfots-/upphovsrättstext | © 2026 BentoPDF. All rights reserved. |
# Place your logo in public/, then build
VITE_BRAND_NAME="AcmePDF" \
VITE_BRAND_LOGO="images/acme-logo.svg" \
VITE_FOOTER_TEXT="© 2026 Acme Corp. Internal use only." \
npm run build
Eller via Docker:
docker build \
--build-arg VITE_BRAND_NAME="AcmePDF" \
--build-arg VITE_BRAND_LOGO="images/acme-logo.svg" \
--build-arg VITE_FOOTER_TEXT="© 2026 Acme Corp. Internal use only." \
-t acmepdf .
Varumärkesanpassning fungerar i både fullt läge och Simple Mode och kan kombineras med alla andra alternativ vid bygget (BASE_URL, SIMPLE_MODE, VITE_DEFAULT_LANGUAGE).
Inaktivera specifika verktyg
Dölj enskilda verktyg av efterlevnads- eller säkerhetsskäl. Inaktiverade verktyg tas bort från startsidan, sökningen, genvägarna, arbetsflödesbyggaren och direkt URL-åtkomst.
Verktygs-ID:n är sidans URL utan .html: öppna ett verktyg och titta på URL:en (t.ex. edit-pdf, sign-pdf, encrypt-pdf).
Vid bygget (inbakat i paketet):
DISABLE_TOOLS="edit-pdf,sign-pdf" npm run build
Vid körning (ingen ombyggnad behövs, montera en config.json):
{
"disabledTools": ["edit-pdf", "sign-pdf"]
}
docker run -d -p 3000:8080 \
-v ./config.json:/usr/share/nginx/html/config.json:ro \
ghcr.io/alam00000/bentopdf-simple:latest
Båda metoderna kan kombineras: listorna slås ihop.
Du kan också inaktivera specifika funktioner i PDF-redigeraren (t.ex. maskering) utan att inaktivera hela verktyget genom att lägga till editorDisabledCategories i config.json. Se Docker-guiden för en fullständig lista över kategorier.
Distributionsguider
Välj din plattform:
- Vercel
- Netlify
- Cloudflare Pages
- AWS S3 + CloudFront
- Hostinger
- Nginx
- Apache
- Docker
- Kubernetes
- CORS-proxy - Krävs för digitala signaturer
Vanliga problem
Word / ODT / Excel / PowerPoint till PDF hänger sig (SharedArrayBuffer otillgängligt)
Symptom: LibreOffice-baserade dokumentkonverteringar (Word, ODT, Excel, PowerPoint till PDF) hänger sig vid ca 55 % eller startar inte. Webbläsarkonsolen kan visa:
ReferenceError: SharedArrayBuffer is not defined
…eller så rapporterar window.crossOriginIsolated false, eller så rapporterar WASM-kompileringen expected magic word 00 61 73 6d, found 1f 8b 08 08.
Orsak: LibreOffice WASM kräver SharedArrayBuffer, som webbläsaren bara aktiverar när sidan är cross-origin-isolerad OCH levereras från en säker kontext. Det innebär att två saker måste stämma:
- Varje svar innehåller båda huvudena:
Cross-Origin-Embedder-Policy: require-corpCross-Origin-Opener-Policy: same-origin
- Sidan levereras från
https://...ellerhttp://localhost. Vanlig HTTP på en LAN-IP (t.ex.http://192.168.x.x) räknas INTE som säker: webbläsare inaktiverarSharedArrayBufferdär.
Skillnaden mellan 00 61 73 6d och 1f 8b 08 08 är ett separat delsymptom: de förkomprimerade filerna .wasm.gz / .data.gz saknar svarshuvudet Content-Encoding: gzip, så webbläsaren får rå gzip-data i stället för uppackad WASM.
Lösning: se din plattformsspecifika distributionsguide för exakt konfiguration:
- Nginx →
- Apache →
- AWS S3 + CloudFront →
- Cloudflare Pages → (filen
_headers) - Netlify → (
netlify.toml) - Vercel → (
vercel.json) - Hostinger → (
.htaccess) - Kubernetes →
- Docker: hanteras automatiskt av den medföljande nginx-konfigurationen, ingen åtgärd behövs.
Verifiera: öppna DevTools Console på valfri BentoPDF-sida och kör:
console.log(window.crossOriginIsolated); // should be true
console.log(typeof SharedArrayBuffer); // should be "function"
Om sidan levereras via HTTPS eller http://localhost OCH båda COEP/COOP-huvudena finns på varje svar klarar båda kontrollerna. Om du använder http://192.168.x.x eller ett annat HTTP-ursprung som inte är loopback avslutar du anslutningen med HTTPS: det finns ingen lösning enbart med huvuden.
.mjs-filer levereras som application/octet-stream
Symptom: Signera PDF / Formulärifyllare / vissa andra verktyg visar en tom läsare eller laddas inte. Webbläsarkonsolen rapporterar:
Failed to load module script: The server responded with a non-JavaScript MIME type of "application/octet-stream". Strict MIME type checking is enforced for module scripts per HTML spec.
Orsak: Din webbserver eller omvända proxy saknar en MIME-typsmappning för .mjs-filer (den medföljande PDF-läsaren levereras med ES-moduler med den filändelsen). Många standardkonfigurationer av servrar använder application/octet-stream för okända filändelser, och webbläsare vägrar köra sådana som ES-moduler.
Lösning: se din plattformsspecifika distributionsguide för exakt kodsnutt:
- Nginx →
- Apache →
- AWS S3 + CloudFront → (se
aws s3 cp ... --include "*.mjs") - Kubernetes →
- Docker, Vercel, Netlify, Cloudflare Pages, Hostinger: hanteras automatiskt, ingen åtgärd behövs.
Verifiera: öppna DevTools → fliken Network, hitta den misslyckade .mjs-begäran och kontrollera svarshuvudet Content-Type. Det ska vara application/javascript. Om det fortfarande är application/octet-stream kan en yttre omvänd proxy eller ett CDN avläsa typen på nytt: kontrollera varje lager i din leveranskedja.
WASM-konfiguration (AGPL-komponenter)
BentoPDF bundlar inte AGPL-licensierade bearbetningsbibliotek i sin källkod, men förkonfigurerar CDN-URL:er så att alla funktioner fungerar direkt, utan manuell konfiguration.
::: tip Nollkonfiguration som standard Från och med v2.0.0 är WASM-modulerna förkonfigurerade att laddas från jsDelivr CDN via miljövariabler. Alla avancerade funktioner fungerar direkt utan någon konfiguration från användaren. :::
| Komponent | Licens | Funktioner |
|---|---|---|
| PyMuPDF | AGPL-3.0 | EPUB/MOBI/FB2/XPS-konvertering, bildextrahering, tabellextrahering |
| Ghostscript | AGPL-3.0 | PDF/A-konvertering, komprimering, rakning av snedskanning, rastrering |
| CoherentPDF | AGPL-3.0 | Innehållsförteckning, bilagor, PDF-sammanslagning med bokmärken |
Standardmiljövariabler
Dessa är satta i .env.production och inbakade i bygget:
VITE_WASM_PYMUPDF_URL=https://cdn.jsdelivr.net/npm/@bentopdf/[email protected]/
VITE_WASM_GS_URL=https://cdn.jsdelivr.net/npm/@bentopdf/[email protected]/assets/
VITE_WASM_CPDF_URL=https://cdn.jsdelivr.net/npm/[email protected]/dist/
VITE_TESSERACT_WORKER_URL=
VITE_TESSERACT_CORE_URL=
VITE_TESSERACT_LANG_URL=
VITE_TESSERACT_AVAILABLE_LANGUAGES=
VITE_OCR_FONT_BASE_URL=
Åsidosätta WASM-URL:er
Du kan åsidosätta standardvärdena vid bygget för anpassade distributioner:
# Via Docker build args
docker build \
--build-arg VITE_WASM_PYMUPDF_URL=https://your-server.com/pymupdf/ \
--build-arg VITE_WASM_GS_URL=https://your-server.com/gs/ \
--build-arg VITE_WASM_CPDF_URL=https://your-server.com/cpdf/ \
--build-arg VITE_TESSERACT_WORKER_URL=https://your-server.com/ocr/worker.min.js \
--build-arg VITE_TESSERACT_CORE_URL=https://your-server.com/ocr/core \
--build-arg VITE_TESSERACT_LANG_URL=https://your-server.com/ocr/lang-data \
--build-arg VITE_TESSERACT_AVAILABLE_LANGUAGES=eng,deu \
--build-arg VITE_OCR_FONT_BASE_URL=https://your-server.com/ocr/fonts \
-t bentopdf .
# Or via .env.production before building from source
VITE_WASM_PYMUPDF_URL=https://your-server.com/pymupdf/ npm run build
För att inaktivera en modul helt (kräver manuell konfiguration av användaren i Avancerade inställningar) sätter du dess variabel till en tom sträng.
För OCR låter du antingen alla VITE_TESSERACT_*-variabler vara tomma och behåller de förvalda onlinetillgångarna, eller sätter URL:erna för worker, core och språkdata tillsammans för självhostad/offline OCR. Om du bara bundlar specifika OCR-språk sätter du också VITE_TESSERACT_AVAILABLE_LANGUAGES till samma kommaseparerade koder så att gränssnittet bara erbjuder installerade språk och ej stödda val ger ett beskrivande fel. För helt offline sökbar PDF-utdata sätter du också VITE_OCR_FONT_BASE_URL till den interna katalog som levererar de medföljande OCR-teckensnitten.
Användare kan också när som helst åsidosätta dessa standardvärden via Avancerade inställningar i gränssnittet: användarens åsidosättningar som lagras i webbläsaren har företräde framför miljövärdena.
Distribution utan internet (air-gapped / offline)
För nätverk utan internetåtkomst (myndigheter, sjukvård, finans m.fl.). WASM-URL:erna bakas in i JavaScript vid bygget: själva WASM-filerna laddas ner av användarens webbläsare vid körning. Du behöver därför förbereda allt på en dator med internet och sedan överföra det till det isolerade nätverket.
Automatiskt skript (rekommenderas)
Det medföljande skriptet prepare-airgap.sh automatiserar hela processen: det laddar ner WASM-paketen, bygger Docker-avbildningen och skapar ett fristående paket med ett installationsskript.
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
# Show supported OCR language codes (for --ocr-languages)
bash scripts/prepare-airgap.sh --list-ocr-languages
# Search OCR language codes by name or abbreviation
bash scripts/prepare-airgap.sh --search-ocr-language german
# Interactive mode — prompts for all options
bash scripts/prepare-airgap.sh
# Or fully automated
bash scripts/prepare-airgap.sh --wasm-base-url https://internal.example.com/wasm
Detta skapar en paketkatalog:
bentopdf-airgap-bundle/
bentopdf.tar # Docker image
*.tgz # WASM packages (PyMuPDF, Ghostscript, CoherentPDF, Tesseract)
tesseract-langdata/ # OCR traineddata files
ocr-fonts/ # OCR text-layer font files
setup.sh # Setup script for the air-gapped side
README.md # Instructions
Överför paketet till det isolerade nätverket via USB, internt artefaktarkiv eller någon godkänd metod. Kör sedan det medföljande installationsskriptet:
cd bentopdf-airgap-bundle
bash setup.sh
Installationsskriptet läser in Docker-avbildningen, packar upp WASM-filerna och startar på begäran containern.
Skriptalternativ:
| Flagga | Beskrivning | Standard |
|---|---|---|
--wasm-base-url <url> |
Var WASM-filerna hostas internt | (obligatorisk, efterfrågas om den saknas) |
--image-name <name> |
Docker-avbildningens tagg | bentopdf |
--output-dir <path> |
Utdatakatalog för paketet | ./bentopdf-airgap-bundle |
--simple-mode |
Aktivera Simple Mode | av |
--base-url <path> |
Bas-URL för underkatalog (t.ex. /pdf/) |
/ |
--language <code> |
Standardspråk för gränssnittet (t.ex. fr, de) |
(ingen) |
--brand-name <name> |
Eget varumärkesnamn | (ingen) |
--brand-logo <path> |
Logotypsökväg relativt public/ |
(ingen) |
--footer-text <text> |
Egen sidfotstext | (ingen) |
--ocr-languages <list> |
Kommaseparerade OCR-språk att bundla | eng |
--list-ocr-languages |
Skriv ut stödda OCR-koder och namn, avsluta sedan | av |
--search-ocr-language <term> |
Sök OCR-koder efter namn eller förkortning | av |
--dockerfile <path> |
Dockerfile som ska användas | Dockerfile |
--skip-docker |
Hoppa över Docker-bygge och export | av |
--skip-wasm |
Hoppa över WASM-nedladdning (återanvänd befintliga .tgz-filer) |
av |
Den interaktiva prompten accepterar också list för att skriva ut hela listan över stödda Tesseract-koder och search <term> för att hitta träffar som search german eller search chi.
::: warning Krav på samma ursprung
WASM-filer måste levereras från samma ursprung som BentoPDF-appen. Web Workers använder importScripts(), som inte kan ladda skript mellan olika ursprung. Om BentoPDF till exempel körs på https://internal.example.com bör WASM-bas-URL:en också vara https://internal.example.com/wasm.
:::
Manuella steg
Om du föredrar att göra det manuellt utan skriptet
Steg 1: Ladda ner WASM- och OCR-paketen (på en dator med internet)
npm pack @bentopdf/[email protected]
npm pack @bentopdf/gs-wasm
npm pack coherentpdf
npm pack [email protected]
npm pack [email protected]
mkdir -p tesseract-langdata
curl -fsSL https://cdn.jsdelivr.net/npm/@tesseract.js-data/eng/4.0.0_best_int/eng.traineddata.gz -o tesseract-langdata/eng.traineddata.gz
mkdir -p ocr-fonts
curl -fsSL https://raw.githack.com/googlefonts/noto-fonts/main/hinted/ttf/NotoSans/NotoSans-Regular.ttf -o ocr-fonts/NotoSans-Regular.ttf
Steg 2: Bygg Docker-avbildningen med interna URL:er
git clone https://github.com/alam00000/bentopdf.git
cd bentopdf
docker build \
--build-arg VITE_WASM_PYMUPDF_URL=https://internal-server.example.com/wasm/pymupdf/ \
--build-arg VITE_WASM_GS_URL=https://internal-server.example.com/wasm/gs/ \
--build-arg VITE_WASM_CPDF_URL=https://internal-server.example.com/wasm/cpdf/ \
--build-arg VITE_TESSERACT_WORKER_URL=https://internal-server.example.com/wasm/ocr/worker.min.js \
--build-arg VITE_TESSERACT_CORE_URL=https://internal-server.example.com/wasm/ocr/core \
--build-arg VITE_TESSERACT_LANG_URL=https://internal-server.example.com/wasm/ocr/lang-data \
--build-arg VITE_OCR_FONT_BASE_URL=https://internal-server.example.com/wasm/ocr/fonts \
-t bentopdf .
Steg 3: Exportera Docker-avbildningen
docker save bentopdf -o bentopdf.tar
Steg 4: Överför till det isolerade nätverket
Kopiera via USB, internt artefaktarkiv eller annan godkänd överföringsmetod:
bentopdf.tar: Docker-avbildningen- De fem
.tgz-paketen för WASM/OCR från steg 1 - Katalogen
tesseract-langdata/från steg 1 - Katalogen
ocr-fonts/från steg 1
Steg 5: Konfigurera inne i det isolerade nätverket
# Load the Docker image
docker load -i bentopdf.tar
# Extract WASM packages
mkdir -p ./wasm/pymupdf ./wasm/gs ./wasm/cpdf ./wasm/ocr/core ./wasm/ocr/lang-data ./wasm/ocr/fonts
tar xzf bentopdf-pymupdf-wasm-0.11.14.tgz -C ./wasm/pymupdf --strip-components=1
tar xzf bentopdf-gs-wasm-*.tgz -C ./wasm/gs --strip-components=1
tar xzf coherentpdf-*.tgz -C ./wasm/cpdf --strip-components=1
TEMP_TESS=$(mktemp -d)
tar xzf tesseract.js-7.0.0.tgz -C "$TEMP_TESS"
cp "$TEMP_TESS/package/dist/worker.min.js" ./wasm/ocr/worker.min.js
rm -rf "$TEMP_TESS"
tar xzf tesseract.js-core-7.0.0.tgz -C ./wasm/ocr/core --strip-components=1
cp ./tesseract-langdata/*.traineddata.gz ./wasm/ocr/lang-data/
cp ./ocr-fonts/* ./wasm/ocr/fonts/
# Run BentoPDF
docker run -d -p 3000:8080 --restart unless-stopped bentopdf
Se till att filerna är åtkomliga på de URL:er som du konfigurerade i steg 2, inklusive .../ocr/worker.min.js, .../ocr/core, .../ocr/lang-data och .../ocr/fonts.
::: info Bygger du från källkod i stället för Docker?
Sätt variablerna i .env.production innan du kör npm run build:
VITE_WASM_PYMUPDF_URL=https://internal-server.example.com/wasm/pymupdf/
VITE_WASM_GS_URL=https://internal-server.example.com/wasm/gs/
VITE_WASM_CPDF_URL=https://internal-server.example.com/wasm/cpdf/
VITE_TESSERACT_WORKER_URL=https://internal-server.example.com/wasm/ocr/worker.min.js
VITE_TESSERACT_CORE_URL=https://internal-server.example.com/wasm/ocr/core
VITE_TESSERACT_LANG_URL=https://internal-server.example.com/wasm/ocr/lang-data
VITE_OCR_FONT_BASE_URL=https://internal-server.example.com/wasm/ocr/fonts
:::
Hosta din egen WASM-proxy
Om du behöver leverera AGPL-WASM-filer med rätt CORS-huvuden kan du distribuera en enkel proxy. Se guiden för Cloudflare WASM-proxy för ett exempel på implementation.
::: tip Varför separat? Denna separation säkerställer:
- Tydlig laglig efterlevnad för kommersiella användare
- BentoPDF:s kärna förblir under sin dubbla licens (AGPL-3.0 / kommersiell)
- WASM-filer laddas vid körning och bundlas inte i källkoden :::
Systemkrav
| Krav | Minimum |
|---|---|
| Lagring | ~100 MB (kärna utan AGPL-moduler) |
| RAM | 512 MB |
| CPU | Valfri modern processor |
::: tip BentoPDF är en statisk webbplats, så ingen databas eller backend-server behövs! :::