---
title: "react-pdf thumbnails and page navigation"
canonical_url: "https://www.nutrient.io/blog/react-pdf-thumbnails-page-navigation/"
md_url: "https://www.nutrient.io/blog/react-pdf-thumbnails-page-navigation.md"
last_updated: "2026-09-02T04:39:37.236Z"
description: "Use the react-pdf thumbnail component for page previews, build a sidebar with labels, add navigation controls, and optimize thumbnail performance."
---

**TL;DR**

`react-pdf` ships a dedicated `Thumbnail` component for rendering page previews. It’s lighter than `Page` (no text layer, no annotation layer) and exposes an `onItemClick` callback for click-to-navigate. The full sidebar pattern has four parts:

- **Wrap everything in `<Document>`** — both `Thumbnail` and `Page` need to live inside it.

- **Render one `Thumbnail` per page** with `pageNumber`, `width`, and an `onItemClick` handler that sets your active page state.

- **Render the active page with `<Page pageNumber={currentPage} />`** in the main area.

- **Cap `devicePixelRatio={1}`** on thumbnails so a 100-page document doesn’t allocate 100× retina-resolution canvases.

If you’d rather not build this, [Nutrient Web SDK](https://www.nutrient.io/sdk/web-overview/) has a built-in thumbnail sidebar (`SidebarMode.THUMBNAILS`) with lazy loading, scroll sync, and page labels. For page reordering, rotation, and deletion, switch to [Document Editor mode](https://www.nutrient.io/guides/web/features/document-editor-ui.md) (`InteractionMode.DOCUMENT_EDITOR`).

`react-pdf` provides a dedicated `Thumbnail` component for rendering small page previews. Combined with page navigation state, you can build a full sidebar-based PDF viewer.

## The Thumbnail component

`Thumbnail` renders a simplified version of a page — no text layer, no annotation layer, just the visual content:

```tsx

import { useState } from "react";
import { Document, Page, Thumbnail } from "react-pdf";

function PDFWithThumbnails({ file }) {
  const [numPages, setNumPages] = useState(null);
  const [currentPage, setCurrentPage] = useState(1);

  return (
    <Document
      file={file}
      onLoadSuccess={({ numPages }) => setNumPages(numPages)}
    >
      <div style={{ display: "flex" }}>
        <aside className="thumbnail-sidebar">
          {numPages &&
            Array.from({ length: numPages }, (_, i) => (
              <Thumbnail
                key={`thumb-${i + 1}`}
                pageNumber={i + 1}
                width={150}
                onItemClick={({ pageNumber }) => setCurrentPage(pageNumber)}
                className={currentPage === i + 1? "active" : ""}
              />
            ))}
        </aside>
        <main>
          <Page pageNumber={currentPage} />
        </main>
      </div>
    </Document>
  );
}

```

## Thumbnail props

`Thumbnail` shares most props with `Page`, except it does **not** support:

- `customTextRenderer`

- `renderAnnotationLayer`/`renderForms`/`renderTextLayer`

- Text layer callbacks (`onGetTextSuccess`, `onRenderTextLayerSuccess`, etc.)

- Annotation layer callbacks (`onGetAnnotationsSuccess`, `onRenderAnnotationLayerSuccess`, etc.)

### Supported Thumbnail props

| Prop               | Type            | Description                                       |
| ------------------ | --------------- | ------------------------------------------------- |
| `pageNumber`       | number          | Page to thumbnail (1-indexed)                     |
| `pageIndex`        | number          | Page to thumbnail (0-indexed)                     |
| `width`            | number          | Thumbnail width in pixels                         |
| `height`           | number          | Thumbnail height (ignored if `width` is set)      |
| `scale`            | number          | Scale factor                                      |
| `rotate`           | number          | Rotation (0, 90, 180, 270)                        |
| `className`        | string/string[] | CSS class(es)                                     |
| `canvasBackground` | string          | Canvas background color                           |
| `canvasRef`        | ref             | Ref to the canvas element                         |
| `inputRef`         | ref             | Ref to the root div                               |
| `devicePixelRatio` | number          | Pixel ratio override                              |
| `renderMode`       | string          | `"canvas"`, `"custom"`, or `"none"`               |
| `onItemClick`      | function        | Click handler `({ dest, pageIndex, pageNumber })` |
| `onLoadSuccess`    | function        | Page data loaded                                  |
| `onLoadError`      | function        | Page load failed                                  |
| `onRenderSuccess`  | function        | Canvas rendered                                   |
| `onRenderError`    | function        | Canvas render failed                              |

## Thumbnail click handling

`Thumbnail` has a built-in `onItemClick` prop:

```tsx

<Thumbnail
  pageNumber={3}
  onItemClick={({ pageNumber, pageIndex }) => {
    setCurrentPage(pageNumber); // 1-indexed.
  }}
/>

```

## Styling thumbnails

These styles cover the sidebar layout, thumbnail hover and active states, and the page-number label:

```css.thumbnail-sidebar {
  width: 180px;
  height: 100vh;
  overflow-y: auto;
  background: #2a2a2e;

  padding: 8px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
}.react-pdf__Thumbnail {
  cursor: pointer;
  border: 2px solid transparent;
  border-radius: 4px;
  transition: border-color 0.15s;
}.react-pdf__Thumbnail:hover {
  border-color: rgba(255, 255, 255, 0.3);
}.react-pdf__Thumbnail.active {
  border-color: #4A90D9;

}

/* Add page number labels */.thumbnail-wrapper {
  text-align: center;
}.thumbnail-label {
  color: #999;

  font-size: 12px;
  margin-top: 2px;
}

```

## Thumbnail with page labels

Wrap each `Thumbnail` in a small component that renders the page number underneath it:

```tsx

function LabeledThumbnail({ pageNumber, isActive, onClick }) {
  return (
    <div className="thumbnail-wrapper">
      <Thumbnail
        pageNumber={pageNumber}
        width={140}
        onItemClick={onClick}
        className={isActive? "active" : ""}
      />
      <span className="thumbnail-label">{pageNumber}</span>
    </div>
  );
}

```

## Page navigation

This section covers two navigation patterns: paginated controls for jumping between individual pages, and continuous scroll for rendering every page in one scrollable container.

### Simple page controls

Wire up a previous/next button pair with a page-number input:

```tsx

function PageNav({ currentPage, numPages, onPageChange }) {
  return (
    <div className="page-nav">
      <button
        disabled={currentPage <= 1}
        onClick={() => onPageChange(currentPage - 1)}
      >
        Previous
      </button>
      <input
        type="number"
        min={1}
        max={numPages}
        value={currentPage}
        onChange={(e) => {
          const page = parseInt(e.target.value, 10);
          if (page >= 1 && page <= numPages) onPageChange(page);
        }}
      />
      <span>/ {numPages}</span>
      <button
        disabled={currentPage >= numPages}
        onClick={() => onPageChange(currentPage + 1)}
      >
        Next
      </button>
    </div>
  );
}

```

### Continuous scroll (all pages)

Render every page in a scrollable container instead of paginating:

```tsx

function ContinuousScroll() {
  const [numPages, setNumPages] = useState(null);

  return (
    <Document
      file={file}
      onLoadSuccess={({ numPages }) => setNumPages(numPages)}
    >
      <div className="scroll-container">
        {numPages &&
          Array.from({ length: numPages }, (_, i) => (
            <Page
              key={`page-${i + 1}`}
              pageNumber={i + 1}
              width={800}
            />
          ))}
      </div>
    </Document>
  );
}

```

## Performance: Thumbnail resolution

For thumbnails, cap the device pixel ratio to reduce memory usage:

```tsx

<Thumbnail
  pageNumber={1}
  width={150}
  devicePixelRatio={1}  // Render at 1×, not 2×/3×.
/>

```

This is especially important when rendering many thumbnails for a large document.

## Key points

- `Thumbnail` is a dedicated component — lighter than `Page` (no text/annotation layers).

- Use `width` to control thumbnail size (height scales proportionally).

- `onItemClick` provides `pageNumber` for navigation.

- Cap `devicePixelRatio` on thumbnails for better performance.

- For large documents, consider only rendering visible thumbnails (virtualization).

- `Thumbnail` must be inside a `Document` component.

## FAQ

#### Why use <code>Thumbnail</code> instead of just rendering a small <code>Page</code>?

`Thumbnail` skips the text layer, annotation layer, and form rendering — it only paints the canvas. PDF.js’s text layer creates one `<span>` per text item, so skipping it on a text-heavy 100-page document typically saves thousands of DOM nodes and several megabytes of memory. If you render `Page` at a small width, you still pay for layers nobody can see.

#### Why cap <code>devicePixelRatio</code> on thumbnails?

By default `react-pdf` paints the canvas at the device’s pixel ratio (typically 2× on retina laptops, 3× on phones). For a 150-pixel-wide thumbnail of a US Letter page at 3×, that’s a ~450×583 canvas — about 1 MB of backing store per page (`width × height × 4` bytes for RGBA). A 100-page document allocates ~105 MB just for thumbnail pixels. Setting `devicePixelRatio={1}` brings each thumbnail down to ~117 KB and the document total to roughly 12 MB.

#### How do I virtualize thumbnails for very large documents?

`react-pdf` doesn’t include built-in virtualization. Wrap the thumbnail list in `react-window` or `react-virtuoso` and only render the slice in view. Each `Thumbnail` will still trigger its own canvas render, but you’ll have at most ~20 active at a time instead of all `numPages`.

#### Why is <code>onItemClick</code> called instead of just <code>onClick</code>?

`react-pdf` reuses the same callback signature for `Thumbnail`, `Outline`, and `Link` annotations — all three pass `{ dest, pageIndex, pageNumber }`. Using `onItemClick` makes the contract consistent across click sources, so a single navigation handler can drive every clickable surface in the viewer.

#### Can I show page labels instead of page numbers?

PDF documents can carry custom page labels (e.g. Roman numerals for a table of contents, then Arabic numerals for chapters). `react-pdf` doesn’t expose these through `Thumbnail`’s callbacks. To get them, call `pdfDocument.getPageLabels()` on the loaded `PDFDocumentProxy` and map page index to label in your sidebar component.

#### How does Nutrient Web SDK compare?

Nutrient ships a thumbnail sidebar as a viewer mode — `SidebarMode.THUMBNAILS` — with lazy loading, scroll sync, and page labels. For page reordering, rotation, and deletion, switch to [Document Editor mode](https://www.nutrient.io/guides/web/features/document-editor-ui.md) (`InteractionMode.DOCUMENT_EDITOR`), which uses toolbar buttons for those operations. There’s no `Thumbnail` rendering loop, no manual click wiring, and no virtualization layer. See the [migration guide](https://www.nutrient.io/guides/web/about/migration-guides/migrating-from-react-pdf.md) for switching from `react-pdf`.

## How Nutrient Web SDK handles this

All the custom thumbnail rendering, DPI capping, and page navigation logic above is built into Nutrient Web SDK:

```js

// Built-in thumbnail sidebar with lazy loading — one line.
instance.setViewState((v) =>
  v.set("sidebarMode", NutrientViewer.SidebarMode.THUMBNAILS),
);

// Page navigation.
instance.setViewState((v) => v.set("currentPageIndex", 4));

```

Nutrient’s thumbnail sidebar handles lazy loading, scroll sync, active-page highlighting, and page labels — no manual `<Thumbnail>` rendering or `devicePixelRatio` tuning. For page reordering, rotation, and deletion, switch to [Document Editor mode](https://www.nutrient.io/guides/web/features/document-editor-ui.md).

---

_See [Nutrient Web SDK](https://www.nutrient.io/sdk/web-overview/) for a built-in thumbnail sidebar, or follow the [migration guide](https://www.nutrient.io/guides/web/about/migration-guides/migrating-from-react-pdf.md) to switch from `react-pdf`. [Talk to Sales](https://www.nutrient.io/contact-sales/?=sdk) about your requirements._
---

## 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)
- [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)
- [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)
- [Build Vs Buy Document Extraction](/blog/build-vs-buy-document-extraction.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)
- [How To Build A Javascript Pdf Viewer](/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)
- [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)
- [Llamaparse Alternatives](/blog/llamaparse-alternatives.md)
- [Low Code No Code Document Integrations](/blog/low-code-no-code-document-integrations.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)
- [Building WCAG 2.2, Section 508, and PDF/UA-compliant PDFs 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)
- [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)
- [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)
- [Using Yarn](/blog/react-pdf-editor.md)
- [React Pdf Loading States Errors Passwords](/blog/react-pdf-loading-states-errors-passwords.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)
- [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)
- [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)
- [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 Document Processing](/blog/what-is-document-processing.md)
- [What Is Intelligent Document Processing](/blog/what-is-intelligent-document-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)

