---
title: "Handling non-Latin fonts, standard fonts, and JPEG 2000 in react-pdf"
canonical_url: "https://www.nutrient.io/blog/react-pdf-non-latin-fonts-special-pdfs/"
md_url: "https://www.nutrient.io/blog/react-pdf-non-latin-fonts-special-pdfs.md"
last_updated: "2026-09-15T10:47:28.616Z"
description: "Learn how to configure react-pdf for CJK character maps, standard PDF fonts, JPEG 2000 WASM decoding, and authenticated PDF endpoints using the options prop."
---

**TL;DR**

- Pass extra PDF.js resources through the `options` prop on `<Document>` — `cMapUrl` (CJK text), `standardFontDataUrl` (non-embedded fonts), `wasmUrl` (JPEG 2000 images), and `httpHeaders`/`withCredentials` (authentication).

- Self-host the files in production. Content delivery network (CDN) URLs are fine for prototyping but introduce CSP and supply-chain risk.

- Memoize the `options` object — `<Document>` compares it with `===`, so a fresh object on every render kicks off a reload.

- `wasmUrl` is a PDF.js v5+ option; older versions fall back to the bundled JavaScript decoder.

Some PDFs require additional resources to render correctly: character maps for CJK text, standard font data for older PDFs, and WebAssembly (WASM) decoders for JPEG 2000 images. `react-pdf` passes these through to PDF.js via the `options` prop.

## CMap support (non-Latin characters)

PDFs with Chinese, Japanese, Korean, or other non-Latin characters need Character Map (CMap) files for correct text rendering.

### Option A: Copy CMaps to public directory

Copy the CMap files from `pdfjs-dist` into your build output:

```bash

cp -r node_modules/pdfjs-dist/cmaps public/cmaps

```

Then configure:

```tsx

const options = {
  cMapUrl: "/cmaps/",
  cMapPacked: true,
};

<Document file={file} options={options}>
  <Page pageNumber={1} />
</Document>

```

`cMapPacked` defaults to `true` in current PDF.js versions, but older versions defaulted to `false`. Setting it explicitly avoids surprises across upgrades.

### Option B: Use CDN

Skip the copy step and load the CMap files directly from a CDN instead:

```tsx

import { pdfjs } from "react-pdf";

const options = {
  cMapUrl: `https://unpkg.com/pdfjs-dist@${pdfjs.version}/cmaps/`,
  cMapPacked: true,
};

```

CDN URLs (`unpkg.com`, `jsdelivr.net`) are convenient for prototyping but risky in production — they introduce supply-chain attack surface, can be blocked by strict CSP policies, and add a third-party dependency to your uptime. Self-host the files from `node_modules/pdfjs-dist/` for anything user-facing.

### Build tool integration

These bundlers support copy plugins:

**Vite:**

```js

// vite.config.js
import { viteStaticCopy } from "vite-plugin-static-copy";

export default {
  plugins: [
    viteStaticCopy({
      targets: [
        {
          src: "node_modules/pdfjs-dist/cmaps/*",
          dest: "cmaps",
        },
      ],
    }),
  ],
};

```

**webpack (`CopyPlugin`):**

```js

const CopyPlugin = require("copy-webpack-plugin");

module.exports = {
  plugins: [
    new CopyPlugin({
      patterns: [
        { from: "node_modules/pdfjs-dist/cmaps", to: "cmaps" },
      ],
    }),
  ],
};

```

## Standard fonts

Older or non-PDF/A PDFs may reference the 14 “standard fonts” (Helvetica, Times-Roman, Courier, etc.) by name instead of embedding them. PDF 2.0 (2017) requires fonts to be embedded, and PDF/A has required it since 2005 — but plenty of in-the-wild files still skip embedding. Without `standardFontDataUrl`, PDF.js can’t substitute and the text renders incorrectly.

### Setup

Copy the standard fonts directory:

```bash

cp -r node_modules/pdfjs-dist/standard_fonts public/standard_fonts

```

Configure:

```tsx

const options = {
  standardFontDataUrl: "/standard_fonts/",
};

<Document file={file} options={options} />

```

Or use CDN:

```tsx

const options = {
  standardFontDataUrl: `https://unpkg.com/pdfjs-dist@${pdfjs.version}/standard_fonts/`,
};

```

## JPEG 2000 support (WASM)

Some PDFs use JPEG 2000 compression for images. PDF.js can decode these using a WebAssembly module.

`wasmUrl` is a PDF.js v5+ option. On v4 and earlier, JPEG 2000 falls back to the bundled JavaScript decoder — the option is silently ignored, so don’t expect a speedup unless you’ve upgraded.

### Setup

Copy the WASM files:

```bash

cp -r node_modules/pdfjs-dist/wasm public/wasm

```

Configure:

```tsx

const options = {
  wasmUrl: "/wasm/",
};

<Document file={file} options={options} />

```

## Combined configuration

A production setup typically includes all three:

```tsx

import { pdfjs } from "react-pdf";

// Define outside component to avoid re-creation.
const options = {
  cMapUrl: `https://unpkg.com/pdfjs-dist@${pdfjs.version}/cmaps/`,
  standardFontDataUrl: `https://unpkg.com/pdfjs-dist@${pdfjs.version}/standard_fonts/`,
  wasmUrl: "/wasm/",
};

function PDFViewer({ file }) {
  return (
    <Document file={file} options={options}>
      <Page pageNumber={1} />
    </Document>
  );
}

```

**Remember:** The `options` object must be defined outside the component or memoized with `useMemo`. It uses `===` equality like the `file` prop.

## Custom HTTP headers

For authenticated PDF endpoints, pass headers via `options`:

```tsx

const options = useMemo(
  () => ({
    httpHeaders: {
      Authorization: `Bearer ${token}`,
    },
    withCredentials: true,
  }),
  [token],
);

<Document file={{ url: protectedUrl }} options={options} />

```

## When do you need these?

| Resource       | When needed                 | Symptom without it                    |
| -------------- | --------------------------- | ------------------------------------- |
| CMaps          | PDF has CJK text            | Characters render as blank/garbled    |
| Standard fonts | PDF doesn’t embed all fonts | Text appears in wrong font or missing |
| WASM           | PDF has JPEG 2000 images    | Images don’t render (PDF.js v5+ only) |
| HTTP headers   | Authenticated endpoints     | 401/403 errors                        |

Most modern PDFs embed everything they need. You can start without these and add them when you encounter rendering issues.

## Key points

- All special resource paths go through the `options` prop on `Document`.

- CDN paths are the easiest setup — no build tool configuration needed.

- For production, self-host the files for reliability and CSP compliance.

- Memoize the `options` object to avoid unnecessary rerenders.

- `httpHeaders` and `withCredentials` also go in `options`.

- Most PDFs work without any of these — add them when you see rendering issues.

## How Nutrient Web SDK handles this

All the CMap configuration, standard font paths, WASM decoder setup, and build tool plugins shown above are unnecessary with Nutrient Web SDK:

```js

// No CMap files, no standard fonts, no WASM decoder, no HTTP headers config.
const instance = await NutrientViewer.load({
  container: "#pdf-container",

  document: "document.pdf",
  // CJK fonts, standard fonts, JPEG 2000 — all handled internally.
});

```

You don’t need `cMapUrl`, `standardFontDataUrl`, or `wasmUrl` in `options`, and no Vite/webpack copy plugins are required. Nutrient bundles all font rendering, CMap support, and image decoders internally. CJK text, legacy PDFs, and JPEG 2000 images render correctly out of the box — in any framework, with zero configuration.

[Learn more about Nutrient Web SDK](https://www.nutrient.io/sdk/web-overview/) | [Migration guide](https://www.nutrient.io/guides/web/about/migration-guides/migrating-from-react-pdf.md) | [Contact Sales](https://www.nutrient.io/contact-sales/?=sdk)

## FAQ

#### Why is my Chinese/Japanese/Korean PDF rendering as blank squares?

PDF.js needs CMap files to map CJK character codes to glyphs. Set `cMapUrl` in the `options` prop — either pointing at a self-hosted `/cmaps/` directory or, for prototyping, a CDN URL. Also set `cMapPacked: true` for binary `.bcmap` files (the default in current PDF.js).

#### Do I need <code>standardFontDataUrl</code> for every PDF?

No — it’s only needed for PDFs that don’t embed their fonts. PDF/A and PDF 2.0 require embedding, so compliant files don’t need it. Older or non-compliant files that reference the 14 base fonts (Helvetica, Times-Roman, Courier, etc.) by name do.

#### Does setting <code>wasmUrl</code> improve performance?

It only improves performance on PDF.js v5 or later, and only for PDFs containing JPEG 2000 images. On older versions, the option is silently ignored and decoding falls back to the bundled JavaScript decoder. If you’ve set `wasmUrl` and see no difference, check your PDF.js version first.

#### Should I use the unpkg CDN URLs in production?

No. CDN URLs add a third-party dependency, expand your supply-chain attack surface, and may be blocked by strict CSP policies. Use them for prototyping or internal tools. For production, copy the files out of `node_modules/pdfjs-dist/` at build time with `vite-plugin-static-copy` or `copy-webpack-plugin`.

#### Why does my PDF reload every render even though the file hasn’t changed?

The `options` prop is compared by reference (`===`). If you inline it as `<Document options={{ cMapUrl:... }}>`, every render produces a fresh object and `react-pdf` reloads the document. Hoist `options` outside the component, or wrap it in `useMemo`.

#### How do I pass an authentication token that changes over time?

Wrap the `options` object in `useMemo` keyed on the token, as shown in the [custom HTTP headers](#custom-http-headers) section. When the token rotates, the memo recomputes, `react-pdf` sees a new `options` reference, and `react-pdf` refetches with the updated `Authorization` header.
---

## Related pages

- [The business case for accessibility: Five ways it drives enterprise value](/blog/5-ways-accessibility-drives-enterprise-value.md)
- [Accessibility Untangled Why It Matters Guide](/blog/accessibility-untangled-why-it-matters-guide.md)
- [Advanced Techniques For React Native Ui Components](/blog/advanced-techniques-for-react-native-ui-components.md)
- [`vector_store` holds your indexed documents (see the multimodal RAG post](/blog/agentic-rag.md)
- [How to build an AI agent for contract redlining against a compliance playbook](/blog/ai-contract-redlining-compliance-playbook.md)
- [Ai Document Automation Extraction To Action](/blog/ai-document-automation-extraction-to-action.md)
- [Ai Legal Assistant Document Authoring](/blog/ai-legal-assistant-document-authoring.md)
- [Amazon Textract Alternatives](/blog/amazon-textract-alternatives.md)
- [Start (clears any prior buffer), navigate the document, then stop into a file.](/blog/android-faster-pdf-rendering.md)
- [Android Pdf Out Of Memory Handling](/blog/android-pdf-out-of-memory-handling.md)
- [Angular File Viewer Pdf Image Office Files](/blog/angular-file-viewer-pdf-image-office-files.md)
- [Approval Workflow Software](/blog/approval-workflow-software.md)
- [Approvals Matrix](/blog/approvals-matrix.md)
- [Auto Tagging And Document Accessibility In Dotnet Sdk](/blog/auto-tagging-and-document-accessibility-in-dotnet-sdk.md)
- [Simple PII redaction.](/blog/automated-pii-removal.md)
- [Best Ai Document Workflow Platforms](/blog/best-ai-document-workflow-platforms.md)
- [Best Document Ai Platforms](/blog/best-document-ai-platforms.md)
- [Best Document Classification Platforms](/blog/best-document-classification-platforms.md)
- [Best document parser for RAG: LlamaParse vs. Unstructured vs. Reducto vs. Nutrient](/blog/best-document-parser-llamaparse-unstructured-reducto.md)
- [Best Document Parsing Apis](/blog/best-document-parsing-apis.md)
- [Best Document Viewers](/blog/best-document-viewers.md)
- [Best Multilingual Ocr Software](/blog/best-multilingual-ocr-software.md)
- [Best Secure Document Collaboration Platforms](/blog/best-secure-document-collaboration-platforms.md)
- [Bpm Guide](/blog/bpm-guide.md)
- [Bpm Tools](/blog/bpm-tools.md)
- [Build Vs Buy Document Extraction](/blog/build-vs-buy-document-extraction.md)
- [Business Automation](/blog/business-automation.md)
- [Capex Vs Opex](/blog/capex-vs-opex.md)
- [The CEO’s AI playbook: Why decision architecture beats model selection](/blog/ceo-ai-playbook-decision-architecture.md)
- [1. Extract and chunk the PDF.](/blog/chat-with-pdf.md)
- [Complete Guide To Pdfjs](/blog/complete-guide-to-pdfjs.md)
- [Construction Document Data Extraction](/blog/construction-document-data-extraction.md)
- [Convert One Drive Files To Pdf In Sharepoint](/blog/convert-one-drive-files-to-pdf-in-sharepoint.md)
- [Create And Edit Pdfs In Flutter](/blog/create-and-edit-pdfs-in-flutter.md)
- [Create Pdfs With React](/blog/create-pdfs-with-react.md)
- [Creating A Document Scanner With Ocr In Python](/blog/creating-a-document-scanner-with-ocr-in-python.md)
- [Creating And Filling Pdf Forms Programmatically In Javascript](/blog/creating-and-filling-pdf-forms-programmatically-in-javascript.md)
- [The CTO’s AI playbook: Why accountability architecture beats orchestration](/blog/cto-ai-playbook-accountability-architecture.md)
- [Digital Signatures](/blog/digital-signatures.md)
- [Digital Workflow Automation](/blog/digital-workflow-automation.md)
- [Document Ai Vs Ocr](/blog/document-ai-vs-ocr.md)
- [Document Extraction Confidence Scores](/blog/document-extraction-confidence-scores.md)
- [Document Viewer](/blog/document-viewer.md)
- [Document Watermarking](/blog/document-watermarking.md)
- [Emerging threats: Your logging system may be an agentic threat vector](/blog/emerging-threats-your-logging-system.md)
- [Extend Alternatives](/blog/extend-alternatives.md)
- [Extract Patient Data On Premises](/blog/extract-patient-data-on-premises.md)
- [app.py](/blog/extract-text-from-pdf-using-python.md)
- [Fillable Pdf](/blog/fillable-pdf.md)
- [How To Add Digital Signature To Pdf Using React](/blog/how-to-add-digital-signature-to-pdf-using-react.md)
- [How To Build A Dotnet Maui Pdf Viewer](/blog/how-to-build-a-dotnet-maui-pdf-viewer.md)
- [How To Build A Flutter Pdf Viewer](/blog/how-to-build-a-flutter-pdf-viewer.md)
- [or](/blog/how-to-build-a-javascript-pdf-viewer-with-pdfjs.md)
- [or](/blog/how-to-build-a-javascript-pdf-viewer.md)
- [or](/blog/how-to-build-a-nextjs-pdf-viewer.md)
- [How To Build A Powerpoint Viewer Using Javascript](/blog/how-to-build-a-powerpoint-viewer-using-javascript.md)
- [Using Yarn](/blog/how-to-build-a-react-excel-viewer.md)
- [How To Build A React Native Pdf Viewer](/blog/how-to-build-a-react-native-pdf-viewer.md)
- [How To Build A React Powerpoint Viewer](/blog/how-to-build-a-react-powerpoint-viewer.md)
- [How To Build A Reactjs File Viewer](/blog/how-to-build-a-reactjs-file-viewer.md)
- [or](/blog/how-to-build-a-reactjs-pdf-viewer-with-react-pdf.md)
- [or](/blog/how-to-build-a-reactjs-pdf-viewer.md)
- [How To Build A Reactjs Viewer With Pdfjs](/blog/how-to-build-a-reactjs-viewer-with-pdfjs.md)
- [How To Build A Vuejs Pdf Viewer With Pdfjs](/blog/how-to-build-a-vuejs-pdf-viewer-with-pdfjs.md)
- [How To Build A Vuejs Pdf Viewer](/blog/how-to-build-a-vuejs-pdf-viewer.md)
- [How To Build An Android Pdf Viewer](/blog/how-to-build-an-android-pdf-viewer.md)
- [How To Build An Angular Pdf Viewer With Ng2 Pdf Viewer](/blog/how-to-build-an-angular-pdf-viewer-with-ng2-pdf-viewer.md)
- [How To Build An Angular Pdf Viewer With Pdfjs](/blog/how-to-build-an-angular-pdf-viewer-with-pdfjs.md)
- [How To Convert Docx To Pdf Using Javascript](/blog/how-to-convert-docx-to-pdf-using-javascript.md)
- [How To Convert Docx To Pdf Using Python](/blog/how-to-convert-docx-to-pdf-using-python.md)
- [How To Convert Html To Pdf Using Html2pdf](/blog/how-to-convert-html-to-pdf-using-html2pdf.md)
- [or](/blog/how-to-convert-html-to-pdf-using-react.md)
- [How To Convert Html To Pdf Using Wkhtmltopdf And Csharp](/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-csharp.md)
- [or](/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-python.md)
- [How To Convert Html To Pptx](/blog/how-to-convert-html-to-pptx.md)
- [Quarterly report](/blog/how-to-convert-pdf-to-markdown-using-python.md)
- [How To Convert Word To Pdf In Nodejs](/blog/how-to-convert-word-to-pdf-in-nodejs.md)
- [or](/blog/how-to-create-a-react-js-signature-pad.md)
- [How To Create Pdfs With React To Pdf](/blog/how-to-create-pdfs-with-react-to-pdf.md)
- [How To Edit Pdfs Using Ios Pdf Library](/blog/how-to-edit-pdfs-using-ios-pdf-library.md)
- [How To Embed A Pdf Viewer In Your Website](/blog/how-to-embed-a-pdf-viewer-in-your-website.md)
- [How To Extract Tables From Pdf And Images](/blog/how-to-extract-tables-from-pdf-and-images.md)
- [How To Generate Pdf From Html With Nodejs](/blog/how-to-generate-pdf-from-html-with-nodejs.md)
- [base_url tells WeasyPrint where to resolve relative asset paths](/blog/how-to-generate-pdf-reports-from-html-in-python.md)
- [How To Merge Pdfs Using Javascript](/blog/how-to-merge-pdfs-using-javascript.md)
- [How To Ocr Pdfs In Linux](/blog/how-to-ocr-pdfs-in-linux.md)
- [How To Print Pdf In Csharp](/blog/how-to-print-pdf-in-csharp.md)
- [How To Programmatically Create And Fill Pdf Form In Angular](/blog/how-to-programmatically-create-and-fill-pdf-form-in-angular.md)
- [Open an image.](/blog/how-to-use-tesseract-ocr-in-python.md)
- [From an HTML string.](/blog/html-in-pdf-format.md)
- [Html To Pdf In Javascript](/blog/html-to-pdf-in-javascript.md)
- [Invoice Approval Software](/blog/invoice-approval-software.md)
- [Javascript Document Editor](/blog/javascript-document-editor.md)
- [Javascript Pdf Editors](/blog/javascript-pdf-editors.md)
- [Javascript Pdf Libraries](/blog/javascript-pdf-libraries.md)
- [Langextract Vs Llamaindex Extraction Comparison](/blog/langextract-vs-llamaindex-extraction-comparison.md)
- [Linearized Pdf](/blog/linearized-pdf.md)
- [Uses OpenAI by default — set OPENAI_API_KEY.](/blog/llamaindex-vs-langchain-rag.md)
- [Llamaindex Workflows Vs Langgraph](/blog/llamaindex-workflows-vs-langgraph.md)
- [Llamaparse Alternatives](/blog/llamaparse-alternatives.md)
- [Low Code No Code Document Integrations](/blog/low-code-no-code-document-integrations.md)
- [Material Requisition](/blog/material-requisition.md)
- [or](/blog/merge-pdfs.md)
- [Swift Package Manager](/blog/mobile-pdf-sdk.md)
- [`elements` come from your document parser — each has a type and content.](/blog/multimodal-rag.md)
- [Nutrient Flutter 6 Bindings Api](/blog/nutrient-flutter-6-bindings-api.md)
- [Nutrient Flutter Bindings Architecture](/blog/nutrient-flutter-bindings-architecture.md)
- [Nutrient Vs Conga Composer](/blog/nutrient-vs-conga-composer.md)
- [Online Document Viewer](/blog/online-document-viewer.md)
- [Open Pdf In Your Web App](/blog/open-pdf-in-your-web-app.md)
- [PDF accessibility for developers: Meeting WCAG 2.2, Section 508, and PDF/UA with an SDK](/blog/pdf-accessibility.md)
- [Extract data from PDF files: A developer guide to structured data from PDFs and scans](/blog/pdf-data-extraction-developer-guide.md)
- [Pdf Extraction Benchmark Opendataloader Bench](/blog/pdf-extraction-benchmark-opendataloader-bench.md)
- [Pdf Extraction Document Case Studies](/blog/pdf-extraction-document-case-studies.md)
- [Pdf Page Labels](/blog/pdf-page-labels.md)
- [Pdf Sdk Compliance Security Checklist](/blog/pdf-sdk-compliance-security-checklist.md)
- [Pdf Sdk Performance Benchmark](/blog/pdf-sdk-performance-benchmark.md)
- [Pdf Ua Compliance Guide](/blog/pdf-ua-compliance-guide.md)
- [Pdf Ua Validation](/blog/pdf-ua-validation.md)
- [Pdfjs Accessibility Structtree Printing](/blog/pdfjs-accessibility-structtree-printing.md)
- [Pdfjs Advanced Loading Streaming Workers](/blog/pdfjs-advanced-loading-streaming-workers.md)
- [Pdfjs Annotation Editor Layer](/blog/pdfjs-annotation-editor-layer.md)
- [Pdfjs Area Annotations Canvas Capture](/blog/pdfjs-area-annotations-canvas-capture.md)
- [Pdfjs Coordinate Systems Pdf To Screen](/blog/pdfjs-coordinate-systems-pdf-to-screen.md)
- [Pdfjs Document Outline Bookmarks Metadata](/blog/pdfjs-document-outline-bookmarks-metadata.md)
- [Pdfjs Eventbus Guide](/blog/pdfjs-eventbus-guide.md)
- [macOS](/blog/pdfjs-file-format-conversion-to-pdf.md)
- [macOS](/blog/pdfjs-generating-pdf-thumbnails-pdf2pic.md)
- [Pdfjs Limitations Commercial Upgrade](/blog/pdfjs-limitations-commercial-upgrade.md)
- [Pdfjs Native Annotation Layer Forms](/blog/pdfjs-native-annotation-layer-forms.md)
- [Pdfjs Navigation Zoom Rotation](/blog/pdfjs-navigation-zoom-rotation.md)
- [Pdfjs Pdf Page Manipulation Pdf Lib](/blog/pdfjs-pdf-page-manipulation-pdf-lib.md)
- [Pdfjs React Viewer Setup](/blog/pdfjs-react-viewer-setup.md)
- [Pdfjs Rendering Overlays React Portals](/blog/pdfjs-rendering-overlays-react-portals.md)
- [Pdfjs Server Side Text Extraction](/blog/pdfjs-server-side-text-extraction.md)
- [Pdfjs Sticky Note Annotations](/blog/pdfjs-sticky-note-annotations.md)
- [Pdfjs Text Highlight Annotations](/blog/pdfjs-text-highlight-annotations.md)
- [Pdfjs Text Search Pdffindcontroller](/blog/pdfjs-text-search-pdffindcontroller.md)
- [Pdfjs Thumbnail Sidebar](/blog/pdfjs-thumbnail-sidebar.md)
- [People Process Tools](/blog/people-process-tools.md)
- [Process Flows](/blog/process-flows.md)
- [React Native Pdf Annotation](/blog/react-native-pdf-annotation.md)
- [React Pdf Annotation Layer Forms](/blog/react-pdf-annotation-layer-forms.md)
- [React Pdf Custom Rendering Hooks](/blog/react-pdf-custom-rendering-hooks.md)
- [Using Yarn](/blog/react-pdf-editor.md)
- [React Pdf Loading States Errors Passwords](/blog/react-pdf-loading-states-errors-passwords.md)
- [React Pdf Outline Table Of Contents](/blog/react-pdf-outline-table-of-contents.md)
- [React Pdf Performance Optimization](/blog/react-pdf-performance-optimization.md)
- [React Pdf Setup Basic Rendering](/blog/react-pdf-setup-basic-rendering.md)
- [React Pdf Text Layer Custom Renderer](/blog/react-pdf-text-layer-custom-renderer.md)
- [React Pdf Thumbnails Page Navigation](/blog/react-pdf-thumbnails-page-navigation.md)
- [Reducto Alternatives](/blog/reducto-alternatives.md)
- [Requisition System](/blog/requisition-system.md)
- [labels.py](/blog/route-documents-automatically-classify-api.md)
- [or](/blog/sample-blog-updated.md)
- [Sdk Product Updates Q2 2026](/blog/sdk-product-updates-q2-2026.md)
- [System Of Record Vs Source Of Truth](/blog/system-of-record-vs-source-of-truth.md)
- [Add DWS MCP Server to your Claude Code project.](/blog/teaching-llms-to-read-pdfs.md)
- [Open an image file.](/blog/tesseract-python-guide.md)
- [The Six Best Pdf Generator Apis](/blog/the-six-best-pdf-generator-apis.md)
- [Define the HTML part of the document.](/blog/top-10-ways-to-generate-pdfs-in-python.md)
- [Top 5 Javascript Pdf Viewers](/blog/top-5-javascript-pdf-viewers.md)
- [or](/blog/top-js-pdf-libraries.md)
- [Convert an HTML file to PDF.](/blog/top-ten-ways-to-convert-html-to-pdf.md)
- [Vector Pdf](/blog/vector-pdf.md)
- [Wcag2 Accessibility Requirements Documents](/blog/wcag2-accessibility-requirements-documents.md)
- [Web Sdk Is Now Headless](/blog/web-sdk-is-now-headless.md)
- [What Are Annotations](/blog/what-are-annotations.md)
- [What Is A Vpat](/blog/what-is-a-vpat.md)
- [What Is Business Logic](/blog/what-is-business-logic.md)
- [What Is Document Processing](/blog/what-is-document-processing.md)
- [What Is Intelligent Document Processing](/blog/what-is-intelligent-document-processing.md)
- [What Is Ocr Invoice Processing](/blog/what-is-ocr-invoice-processing.md)
- [What Is Pdf Ua](/blog/what-is-pdf-ua.md)
- [Why Pdfium Is A Trusted Platform For Pdf Rendering](/blog/why-pdfium-is-a-trusted-platform-for-pdf-rendering.md)
- [Why Your Ai Agent Hallucinates Pdf Table Data](/blog/why-your-ai-agent-hallucinates-pdf-table-data.md)

