Pdfreader
Easy Radix-Style PDF Viewer for React.
Install / Use
/learn @OnedocLabs/PdfreaderREADME
PDFReader
A dead simple, stylable, React PDF reader component.
Docs: https://pdfreader.fileforge.com
Important: This component is still in development and not ready for production use.
Features
- [x] Zoom in and out
- [x] Text layer
- [x] Annotation layer
- [x] Canvas layer
- [x] Page navigation
- [x] Outline view
- [x] Thumbnail view
- [ ] Two-sided view
- [ ] Search and highlight
- [ ] Annotation placement
Installation
npm i @fileforge/pdfreader
Usage
You can add and remove parts of the reader by adding or removing the related components. NB: the Viewport component always needs to have Pages and Page as direct children.

import React from 'react';
import { Root, CurrentPage, ZoomOut, Zoom, ZoomIn, Outline, OutlineItem, OutlineChildItems, Viewport, Pages, Page, CanvasLayer, TextLayer, AnnotationLayer } from '@fileforge/pdfreader';
export const Reader = ({ fileURL }: { fileURL: string }) => {
return (
<Root fileURL={fileURL} className="m-4 border rounded-xl overflow-hidden">
<div className="border-b p-3 flex gap-4">
<CurrentPage className="border bg-white rounded-md text-center py-1" />
<div className="flex border rounded-md">
<ZoomOut className="aspect-square block h-8 w-8">-</ZoomOut>
<Zoom className="py-1 px-2 bg-white" />
<ZoomIn className="aspect-square block h-8 w-8">+</ZoomIn>
</div>
</div>
<div className="grid grid-cols-[24rem,1fr] h-[500px] overflow-hidden">
<Outline className="border-r overflow-auto p-3">
<OutlineItem className="block">
<OutlineChildItems className="pl-4" />
</OutlineItem>
</Outline>
<Viewport className="bg-gray-100 py-4">
<Pages>
<Page className="shadow-xl m-8 my-4 first:mt-8 outline outline-black/5 rounded-md overflow-hidden">
<CanvasLayer />
<TextLayer />
<AnnotationLayer />
</Page>
</Pages>
</Viewport>
</div>
</Root>
);
};
Sponsors
This project is sponsored by Fileforge.
Related Skills
bluebubbles
342.0kUse when you need to send or manage iMessages via BlueBubbles (recommended iMessage integration). Calls go through the generic message tool with channel="bluebubbles".
node-connect
342.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
slack
342.0kUse when you need to control Slack from OpenClaw via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
frontend-design
84.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.

