---
title: "React file viewer: Display PDFs, images, and Office documents in your app"
canonical_url: "https://www.nutrient.io/blog/how-to-build-a-reactjs-file-viewer/"
md_url: "https://www.nutrient.io/blog/how-to-build-a-reactjs-file-viewer.md"
last_updated: "2026-08-11T15:30:23.825Z"
description: "Learn how to build a React file viewer that opens PDFs, images, and Office docs client side with Nutrient Web SDK. Full code, Vite setup, and demo."
---

**TL;DR**

Build a React file viewer with [Nutrient Web SDK](https://www.nutrient.io/sdk/web/) to display PDF documents, images, and Office files entirely in the browser — no server or Microsoft Office required. After creating a Vite-powered React project, you’ll install the SDK, copy its WebAssembly assets, and load any `.pdf`, `.docx`, `.pptx`, or image file with a single `NutrientViewer.load()` call. The same viewer unlocks text editing, page manipulation, annotations, and eSignatures out of the box.

## React file viewer libraries compared

The two most-installed open source options haven’t kept up. Before you pick a library, here’s how the common choices line up:

| Library                     | Formats supported                                            | Maintenance                                                           | License    | Rendering                                                 |
| --------------------------- | ------------------------------------------------------------ | --------------------------------------------------------------------- | ---------- | --------------------------------------------------------- |
| `react-file-viewer`         | PDF, images, CSV, XLSX, DOCX (limited)                       | Last npm release Nov 2019                                             | Apache-2.0 | Basic; Office formats are a thin wrapper                  |
| `@cyntler/react-doc-viewer` | PDF, images, DOCX, CSV, XLSX                                 | No longer maintained (last release Sep 2025; maintainer stepped away) | Apache-2.0 | Basic; relies on per-format renderers                     |
| Nutrient Web SDK            | PDF, PDF/A, DOCX, DOC, XLSX, XLS, PPTX, PPT, TIFF, PNG, JPEG | Actively maintained                                                   | Commercial | High-fidelity, WebAssembly-based, no MS Office on backend |

If your app only ever needs a quick PDF preview, the open source options will work. If you need DOCX, XLSX, and PPTX rendered the way users expect — and a maintained library — read on.

## Using Nutrient as a React document viewer

“React file viewer” and “React document viewer” are often used interchangeably. Nutrient Web SDK serves both: a single `NutrientViewer.load()` call renders any supported file by URL or buffer, and the same viewer instance handles PDFs and Office documents without switching renderers. The setup below gives you a production-ready React document viewer in a Vite project.

## Why choose a React file viewer — And what it lets you do

A dedicated React file viewer lets users preview documents without extra downloads, keeps files entirely on the client side for better security, and cuts server costs. When you integrate Nutrient Web SDK, you unlock even more:

- **Universal format coverage** — PDF/A plus Office (DOCX, XLSX, PPTX) and images.

- **Zero heavyweight dependencies** — All conversion happens in the browser via WebAssembly.

- **Deep document tooling**
  - [Text editing](https://www.nutrient.io/guides/web/editor/edit-text.md) directly inside Office files
  - [Page manipulation](https://www.nutrient.io/guides/web/editor/page-manipulation/move-or-copy.md) (reorder, add, or delete pages)
  - Rich [annotations](https://www.nutrient.io/guides/web/annotations.md) (highlights, comments, stamps)
  - [eSignatures](https://www.nutrient.io/guides/web/signatures/adding-an-electronic-signature.md) and [form filling](https://www.nutrient.io/guides/web/forms.md)
  - [Redaction](https://www.nutrient.io/guides/web/redaction.md) and [document security](https://www.nutrient.io/guides/web/document-security.md) features

[Explore Demo](https://www.nutrient.io/demo/office-viewer/)

## Opening and rendering multiple file formats in the browser

Nutrient Web SDK brings support for PDF, image, and Office formats to your application, without you or your users needing any MS Office software, MS Office licenses, or third-party open source software. The technology works by converting an image (JPG, PNG, and TIFF) or Office document (Word, Excel, and PowerPoint) to PDF directly in the browser using our [Office-to-PDF conversion](https://www.nutrient.io/sdk/office-conversion/) engine. The resulting PDF is then rendered in our JavaScript viewer.

## Requirements to get started

To get started, you’ll need:

- The [latest version of Node.js](https://nodejs.org/en/).

- A package manager compatible with npm. This post contains usage examples for [Yarn](https://yarnpkg.com/) and the [npm](https://docs.npmjs.com/cli/v7/commands/npm) client (installed with Node.js by default).

## Setting up a new React project with Vite

1. To get started, create a new React project using Vite:

   ```bash

   # Using Yarn

   yarn create vite nutrient-react-example --template react

   # Using npm

   npm create vite@latest nutrient-react-example -- --template react
   ```

2. Change to the created project directory:

   ```

   cd nutrient-react-example
   ```

## Adding Nutrient to your project

1. Add the Nutrient dependency:

   ```txt

   yarn add @nutrient-sdk/viewer
   ```

   ```txt

   npm install --save @nutrient-sdk/viewer
   ```

2. Nutrient Web SDK loads its WebAssembly and supporting files from a local path, so you need to copy them to the `public` folder. Start by installing the required copy plugin:

   ```shell

   npm install -D rollup-plugin-copy
   ```

   Then, update your Vite configuration (`vite.config.ts`) to copy the SDK’s asset files during build:

   ```ts

   import { defineConfig } from "vite";
   import react from "@vitejs/plugin-react";
   import copy from "rollup-plugin-copy";

   export default defineConfig({
     plugins: [
       copy({
         targets: [
           {
             src: "node_modules/@nutrient-sdk/viewer/dist/nutrient-viewer-lib",
             dest: "public/",
           },
         ],
         hook: "buildStart",
       }),
       react(),
     ],
   });
   ```

**Need DOCX, XLSX, and PPTX in your React app?** Start a [30-day Nutrient trial](https://www.nutrient.io/try/). Render any supported format with one `NutrientViewer.load()` call.

## Displaying a document

Nutrient supports the following file formats:

- PDF, PDF/A (1, 2, 3, 4)

- DOCX, DOC, DOTX, DOCM

- XLSX, XLS, XLSM

- PPTX, PPT, PPTM

- TIFF, TIF (including multipage)

- PNG, JPEG, JPG

1. Add your document to the `public` directory. You can use our [demo PowerPoint document](https://www.nutrient.io/downloads/slides.pptx) as an example.

2. Now that everything is set up, you’ll render a PDF using the Nutrient SDK.

   Basic usage in `App.tsx`:

   ```tsx

   import { useEffect, useRef } from "react";

   function App() {
     const containerRef = useRef(null);

     useEffect(() => {
       const container = containerRef.current;
       if (!container) return;

       let cancelled = false;
       let viewer: typeof import("@nutrient-sdk/viewer").default | null = null;

       (async () => {
         const NutrientViewer = (await import("@nutrient-sdk/viewer")).default;
         if (cancelled) return;
         viewer = NutrientViewer;

         // Unload any previous instance bound to this container.
         NutrientViewer.unload(container);

         try {
           await NutrientViewer.load({
             container,
             document: "slides.pptx", // The document to load.
             baseUrl: `${window.location.protocol}//${
               window.location.host
             }/${import.meta.env.PUBLIC_URL?? ""}`,
           });
           // If the component unmounted while loading, unload immediately.
           if (cancelled) NutrientViewer.unload(container);
         } catch (error) {
           if (!cancelled) console.error("Failed to load document:", error);
         }
       })();

       return () => {
         cancelled = true;
         viewer?.unload(container);
       };
     }, []);

     return (
       <div ref={containerRef} style={{ height: "100vh", width: "100vw" }} />
     );
   }

   export default App;
   ```

3. Start the app and run it in your default browser:

   ```bash

   # Using Yarn

   yarn dev

   # Using npm

   npm run dev
   ```

### Live demo

Interact with the sandbox by clicking the left rectangle icon and selecting **Editor** > **Show Default Layout**. To edit, sign in with GitHub — click the rectangle icon again and choose **Sign in**. To preview the result, click the rectangle icon once more and choose **Editor** > **Embed Preview**. For the full example, click the **Open Editor** button.

## Viewing different file formats in React

The same `NutrientViewer.load()` call handles every supported format — only the `document` value changes. Each section below has the format-specific notes worth knowing before you ship.

### Viewing DOCX files in React

DOCX (and DOC, DOTX, DOCM) is converted to PDF in the browser via WebAssembly, so you don’t need MS Word on the server. Pass the `.docx` URL straight to `document`:

```ts

NutrientViewer.load({ container, document: "contract.docx", baseUrl });

```

For a deeper walkthrough, see the [Nutrient Web SDK Word viewer](https://www.nutrient.io/blog/how-to-build-a-react-word-viewer/) guide.

### Viewing XLSX files in React

XLSX (and XLS, XLSM) is converted to PDF in the browser using the same WebAssembly pipeline. Pass the file URL directly:

```ts

NutrientViewer.load({ container, document: "report.xlsx", baseUrl });

```

For multisheet workbooks, set `splitExcelSheetsIntoPages: true` in the [Office-to-PDF conversion options](https://www.nutrient.io/sdk/office-conversion/) so each sheet becomes its own PDF page. See the [Excel in the browser walkthrough](https://www.nutrient.io/blog/how-to-open-excel-file-using-javascript/) for layout tips.

### Viewing PPTX files in React

PPTX (and PPT, PPTM) loads directly — the example above already uses a slide deck. See the [PowerPoint viewer](https://www.nutrient.io/blog/how-to-build-a-powerpoint-viewer-using-javascript.md) guide for deck-specific options.

### Viewing PDF and image files in React

PDFs (including PDF/A 1, 2, 3, 4) and images (PNG, JPEG, TIFF — multipage TIFFs supported) load with the same call. Images are converted to PDF on load, so annotation, redaction, and page manipulation work uniformly across formats:

```ts

NutrientViewer.load({ container, document: "scan.tiff", baseUrl });

```

## A note about fonts

In client-side web applications for Microsoft Office-to-PDF conversion, Nutrient addresses font licensing constraints through font substitutions, typically replacing unavailable fonts with their equivalents — like Arial with Noto. For precise font matching, you can provide your own fonts, embed them into source files, or designate paths to your `.ttf` fonts for custom solutions.

## Adding even more capabilities

Once you’ve deployed your viewer, you can start customizing it to meet your specific requirements or easily add more capabilities. To help you get started, here are some of our most popular React guides:

- [Instant synchronization](https://www.nutrient.io/guides/web/instant-synchronization.md)

- [Document assembly](https://www.nutrient.io/guides/web/editor/merge-or-combine.md)

- [Page manipulation](https://www.nutrient.io/guides/web/editor/page-manipulation/rotate.md)

- [Editor](https://www.nutrient.io/guides/web/editor.md)

- [Forms](https://www.nutrient.io/guides/web/forms.md)

- [Signatures](https://www.nutrient.io/guides/web/signatures.md)

- [Redaction](https://www.nutrient.io/guides/web/redaction.md)

Embedded viewers also serve as the human-review surface in AI document workflows: A reviewer verifies extracted values against the rendered source page before anything reaches a downstream system. The [extraction-to-action guide](https://www.nutrient.io/blog/ai-document-automation-extraction-to-action.md) covers that architecture.

## Conclusion

In this blog post, you learned how to create a [React file viewer](https://www.nutrient.io/guides/web/viewer/office-documents.md) using Nutrient Web SDK. It enables opening and viewing PDF, image, and Office files directly in the browser using client-side processing. No server is required.

If you’re looking for a way to render your documents in your web application, then Nutrient Web SDK is a great option. It’s a powerful and flexible library that can help you provide your users with a seamless and enjoyable experience.

To get started, you can either:

- Start your [free trial](https://www.nutrient.io/try/) to test the library and see how it works in your application.

- [Launch our demo](https://www.nutrient.io/demo/office-viewer/) to see the viewer in action.

## Related reading

- [How to build a PowerPoint viewer in JavaScript](https://www.nutrient.io/blog/how-to-build-a-powerpoint-viewer-using-javascript.md) — Display PPT/PPTX files in the browser with Nutrient

- [Open Excel files in the browser using JavaScript](https://www.nutrient.io/blog/how-to-open-excel-file-using-javascript/) — Handle XLS and XLSX files without MS Office

- [How to build a React Word viewer](https://www.nutrient.io/blog/how-to-build-a-react-word-viewer/) — Display DOC/DOCX files in React applications

- [How to build a React PDF viewer](https://www.nutrient.io/blog/how-to-build-a-reactjs-pdf-viewer.md) — A PDF-only viewer built with Nutrient Web SDK

- [react-pdf library tutorial](https://www.nutrient.io/blog/how-to-build-a-reactjs-pdf-viewer-with-react-pdf.md) — Render PDFs in React with the open source react-pdf library

- [Render PDFs in React with PDF.js](https://www.nutrient.io/blog/how-to-build-a-reactjs-viewer-with-pdfjs.md) — A lower-level approach using pdfjs-dist

- [Top five document viewers for developers](https://www.nutrient.io/blog/top-doc-viewers/) — Compare DOCX and PDF viewer libraries side by side

- [AI document automation workflows: From extraction to action](https://www.nutrient.io/blog/ai-document-automation-extraction-to-action.md) — Use an embedded viewer as the human-review surface for extracted data

## FAQ

#### How can I build a React.js file viewer for PDF, image, and Office files?

You can build a React.js file viewer using [Nutrient Web SDK], which supports viewing PDFs, images, and Office files directly in the browser without requiring server-side processing.

#### What file formats does the Nutrient Web SDK viewer support?

Nutrient Web SDK supports PDF, PDF/A, DOCX, DOC, DOTX, DOCM, XLSX, XLS, XLSM, PPTX, PPT, PPTM, TIFF, PNG, JPEG, and JPG formats.

#### How can I set up a React project to use Nutrient Web SDK?

Create a new React app using Vite. Then add the Nutrient dependency via `npm` or `yarn`. Finally, copy the Nutrient library assets to your project’s `public` directory.

#### Can I manipulate documents within the viewer?

Yes, you can edit text, manipulate pages, add annotations, and include signatures in the documents displayed within the viewer.

#### Is it possible to customize the viewer’s capabilities?

Yes. You can customize the viewer to meet specific requirements by adding features like Instant synchronization, document assembly, page manipulation, forms, signatures, redaction, and document security.

#### Do I need a server to use Nutrient Web SDK in a React app?

No. Nutrient Web SDK enables client-side processing, so you don’t need a server to render documents in your React app.

#### What should I do if a font is missing when converting Office documents?

Nutrient substitutes missing fonts with similar ones, like replacing Arial with Noto. For exact font matching, you can provide custom fonts by embedding them or setting paths to `.ttf` files.
---

## 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)
- [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)
- [Best Document Ai Platforms](/blog/best-document-ai-platforms.md)
- [Best Document Viewers](/blog/best-document-viewers.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)
- [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)
- [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 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)
- [Open an image.](/blog/how-to-use-tesseract-ocr-in-python.md)
- [From an HTML string.](/blog/html-in-pdf-format.md)
- [Javascript Pdf Editors](/blog/javascript-pdf-editors.md)
- [Javascript Pdf Libraries](/blog/javascript-pdf-libraries.md)
- [Linearized Pdf](/blog/linearized-pdf.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 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)
- [Pdf Data Extraction Developer Guide](/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)
- [Using Yarn](/blog/react-pdf-editor.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)

