Rasterex APINPM Package/docs/components/navigation/tools
Tools Interaction
Control Canvas navigation tools such as zoom, fit, rotate, search, text selection, markup visibility, and display modes using the SDK.
Use viewer.tools.navigation to control Canvas navigation tools such as zoom, fit, rotate, search, text selection, markup visibility, and display modes.
Navigation tools are available after the viewer is mounted, Canvas is ready, and a document is open.
typescript
import { createViewer } from "@rasterex/viewer";
const viewer = createViewer({
container: "#viewer"
});
await viewer.mount();
await viewer.ready();
await viewer.documents.open({
url: "https://files.example.com/floor-plan.pdf",
displayName: "Floor Plan.pdf"
});Overview
Perform navigation transforms and resets programmatically:
viewer.tools.navigation.set(...)sends the Canvas broker commandnavigationToolControland waits fornavigationToolControlResult.clear()sendsnavigationToolControlwithcommand: "clear"and waits fornavigationToolControlResult.
typescript
// Zoom fit width
const result = await viewer.tools.navigation.set({
action: "FIT_WIDTH",
enabled: true
});
// Clear active navigation tools
await viewer.tools.navigation.clear();Using a Navigation Tool
Standard viewport actions supported by the SDK:
MAGNIFY: Magnifier glass tool.VECTORINFO: Retrieve vector metadata details.BLOCKINFO: View CAD block details.ZOOM_IN: Zoom in by one increment (one-shot command).ZOOM_OUT: Zoom out by one increment (one-shot command).FIT_WIDTH: Fit document boundaries to viewport width.FIT_HEIGHT: Fit document boundaries to viewport height.ZOOM_WINDOW: Rectangular selection zoom tool.FIT_TO_WINDOW: Fit full document page inside viewer bounds.ROTATE: Rotate canvas counter-clockwise by 90 degrees.HIDE_MARKUPS: Toggle markup drawings visibility.BACKGROUND: Toggle background display colors.MONOCHROME: Toggle black & white filter rendering.BIRDSEYE: Toggle birdseye navigator overlay window.SEARCH_TEXT: Find text sequences in document text.SELECT_TEXT: Interactive mouse text selector tool.TOGGLECYCLE: CAD overlapping entities selector.GRAYSCALE: Apply explicit grayscale color values.
typescript
// Toggle monochrome mode
await viewer.tools.navigation.set({
action: "MONOCHROME",
enabled: true
});Supported Actions
Query text sequences inside searchable documents:
typescript
await viewer.tools.navigation.set({
action: "SEARCH_TEXT",
enabled: true,
searchText: "pump",
searchForward: true,
searchCaseSensitive: false
});
// To clear search
await viewer.tools.navigation.set({
action: "SEARCH_TEXT",
enabled: false
});Search Text
Control visibility and grayscale filters:
typescript
await viewer.tools.navigation.set({
action: "HIDE_MARKUPS",
enabled: true
});
await viewer.tools.navigation.set({
action: "GRAYSCALE",
value: 50
});Grayscale & Display Modes
Complete integration code setup for Vanilla HTML/JS environments:
<div id="viewer" style="height: 640px"></div> <div> <button type="button" data-action="ZOOM_IN">Zoom In</button> <button type="button" data-action="ZOOM_OUT">Zoom Out</button> <button type="button" data-action="FIT_WIDTH">Fit Width</button> <button type="button" data-action="FIT_TO_WINDOW">Fit Window</button> <button type="button" data-action="HIDE_MARKUPS">Markups</button> <input id="search-text" type="search" placeholder="Search text" /> <button type="button" id="search">Search</button> <button type="button" id="clear-navigation">Clear</button> </div> <p id="status"></p>
Vanilla Example
Complete React Component implementation details:
tsx
import { useEffect, useRef, useState } from "react";
import {
createViewer,
type NavigationToolAction,
type RasterexViewer
} from "@rasterex/viewer";
const navigationTools: Array<{ label: string; action: NavigationToolAction }> = [
{ label: "Zoom In", action: "ZOOM_IN" },
{ label: "Zoom Out", action: "ZOOM_OUT" },
{ label: "Fit Width", action: "FIT_WIDTH" },
{ label: "Fit Window", action: "FIT_TO_WINDOW" },
{ label: "Markups", action: "HIDE_MARKUPS" }
];
export function NavigationTools() {
const hostRef = useRef<HTMLDivElement | null>(null);
const viewerRef = useRef<RasterexViewer | null>(null);
const [searchText, setSearchText] = useState("");
const [status, setStatus] = useState("Loading viewer");
useEffect(() => {
let disposed = false;
const viewer = createViewer({
container: hostRef.current!
});
viewerRef.current = viewer;
async function start() {
await viewer.mount();
await viewer.ready();
await viewer.documents.open({
url: "https://files.example.com/floor-plan.pdf",
displayName: "Floor Plan.pdf"
});
if (!disposed) setStatus("Ready");
}
void start().catch((error) => {
if (!disposed) setStatus(error instanceof Error ? error.message : "Viewer failed");
});
return () => {
disposed = true;
viewer.destroy();
viewerRef.current = null;
};
}, []);
async function runNavigation(action: NavigationToolAction) {
const result = await viewerRef.current?.tools.navigation.set({
action,
enabled: true
});
setStatus(result?.success ? `${action} complete` : result?.error ?? "Navigation failed");
}
async function search() {
const result = await viewerRef.current?.tools.navigation.set({
action: "SEARCH_TEXT",
enabled: true,
searchText,
searchForward: true,
searchCaseSensitive: false
});
setStatus(result?.success ? "Search started" : result?.error ?? "Search failed");
}
async function clearNavigation() {
const result = await viewerRef.current?.tools.navigation.clear();
setStatus(result?.success ? "Navigation cleared" : result?.error ?? "Clear failed");
}
return (
<section>
<div ref={hostRef} style={{ height: 640 }} />
<div>
{navigationTools.map((tool) => (
<button
key={tool.action}
type="button"
onClick={() => void runNavigation(tool.action)}
>
{tool.label}
</button>
))}
<input
type="search"
value={searchText}
onChange={(event) => setSearchText(event.currentTarget.value)}
placeholder="Search text"
/>
<button type="button" onClick={() => void search()}>
Search
</button>
<button type="button" onClick={() => void clearNavigation()}>
Clear
</button>
</div>
<p>{status}</p>
</section>
);
}React Integration
Broker message mapping for navigation tools:
viewer.tools.navigation.set(...)maps tonavigationToolControl/navigationToolControlResult.viewer.tools.navigation.clear()maps tonavigationToolControl/navigationToolControlResult.
