支持 PDF、Word、Excel、CSV、PPT、OFD、CAD(DXF)、图片、Markdown、TXT、视频等多种格式
Vue3、React、原生 HTML 无缝切换,轻量高效,开箱即用
为开发者提供完整的文档预览解决方案
只需引入2个文件,即可在您的应用中运行功能完整的文档预览器。无需复杂的配置,开箱即用。
支持 PDF、DOCX、XLSX、CSV、PPTX、OFD、CAD(DXF)、图片、音频、代码、TXT、Markdown、视频等多种常见格式,满足各种预览需求。
提供缩放、旋转、翻页、全屏、下载等完整的控制 API,支持自定义工具栏配置。
内置浅色和深色主题,支持动态切换,适配不同的应用场景和用户偏好。
支持响应式布局,完美适配移动端设备,提供流畅的触摸操作体验。
支持 URL、File 对象、Blob、ArrayBuffer 等多种文件源,灵活满足各种业务场景。
支持 Vue3、React、原生 HTML 无缝切换,提供对应框架的组件和 Hooks。
打包所有依赖,无需额外安装,按需加载,性能优化,轻量高效。
内置中文、英文语言包,支持动态切换,可扩展更多语言。
实时体验 JitViewer 的文档预览能力
现在可直接上传并测试本地 CSV、DXF 等文件,以及 MP4 / MOV / WebM 视频、MP3 / WAV 音频、JS / CSS / JSON 代码文件。
正在预览 PDF 示例文档。您可以尝试缩放、旋转等操作,或上传自己的 DXF、CSV、视频与其他本地文件进行预览。
支持 npm 安装和 CDN 引入,Vue3/React/原生 HTML 均可使用
# npm
npm install jit-viewer
# yarn
yarn add jit-viewer
# pnpm
pnpm add jit-viewer
<template>
<div class="viewer-container">
<div ref="viewerRef" style="width: 100%; height: 600px;"></div>
</div>
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue'
import { createViewer } from 'jit-viewer'
import 'jit-viewer/style.css'
const viewerRef = ref(null)
let viewerInstance = null
onMounted(() => {
if (!viewerRef.value) return
// 创建 Viewer 实例
viewerInstance = createViewer({
target: viewerRef.value,
file: 'https://example.com/document.pdf',
theme: 'light',
toolbar: true,
width: '100%',
height: '600px',
onReady: () => console.log('Viewer ready'),
onLoad: () => console.log('File loaded'),
onError: (err) => console.error('Error:', err)
})
viewerInstance.mount()
})
onUnmounted(() => {
// 销毁实例
viewerInstance?.destroy()
})
</script>
import { useEffect, useRef, useState } from 'react'
import { createViewer, type ViewerInstance } from 'jit-viewer'
import 'jit-viewer/style.css'
function DocumentViewer() {
const containerRef = useRef<HTMLDivElement>(null)
const [viewer, setViewer] = useState<ViewerInstance | null>(null)
useEffect(() => {
if (containerRef.current) {
const instance = createViewer({
target: containerRef.current,
theme: 'light',
toolbar: true
})
instance.mount()
setViewer(instance)
}
return () => viewer?.destroy()
}, [])
return <div ref={containerRef} style={{ width: '100%', height: '600px' }} />
}
完整的 API 参考,助力深度定制
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
target |
HTMLElement | string | - | 挂载目标元素 |
file |
FileSource | - | 文件源(本地文件、远程 URL、Blob、ArrayBuffer 等) |
type |
FileType | 自动识别 | 手动指定文件类型 |
filename |
string | - | 文件名 |
toolbar |
boolean | ToolbarConfig | true | 工具栏配置 |
theme |
'light' | 'dark' | ThemeConfig | 'light' | 主题 |
locale |
'zh-CN' | 'en' | LocaleConfig | 'zh-CN' | 语言 |
width |
string|number | '100%' | 宽度 |
height |
string|number | '100%' | 高度 |
className |
string | - | 自定义类名 |
style |
Record<string, string> | - | 自定义样式 |
pdfRender |
'native' | 'inset' | 'inset' | PDF 预览方式 |
watermark |
WatermarkConfig | null | null | 文档水印配置,支持文本水印和图片水印 |
proxyUrl |
string | - | 自定义代理地址 |
requestAdapter |
RequestAdapter | - | 自定义请求适配器 |
renderOptions |
object | - | 初始缩放、旋转、页码等渲染配置 |
onReady |
function | - | 准备就绪回调 |
onLoad |
function | - | 加载完成回调 |
onError |
function | - | 错误回调 |
onDestroy |
function | - | 销毁回调 |
renderOptions.zoom |
number | 1 | 初始缩放比例 |
renderOptions.rotate |
number | 0 | 初始旋转角度 |
水印通过 ViewerOptions.watermark 配置,只作用于预览层,不会修改原始文件内容。
支持文本水印和图片水印,并可控制透明度、旋转角度、平铺间距以及顶层 / 底层显示。
| 参数 | 类型 | 说明 |
|---|---|---|
type |
'text' | 'image' | 水印类型 |
content |
string | 文本水印内容,type: 'text' 时使用 |
image |
string | 图片地址,type: 'image' 时使用 |
fontSize |
number | 文字字号,单位 px |
color |
string | 文字颜色 |
fontFamily |
string | 文字字体 |
fontWeight |
string | number | 字重 |
imageWidth |
number | 图片水印宽度,单位 px |
imageHeight |
number | 图片水印高度,单位 px |
opacity |
number | 透明度,建议范围 0 ~ 1 |
rotate |
number | 旋转角度,单位 deg |
gapX |
number | 水平平铺间距 |
gapY |
number | 垂直平铺间距 |
position |
'top' | 'bottom' | 显示在文档上方或下方 |
width |
string | number | 水印容器宽度 |
height |
string | number | 水印容器高度 |
const viewer = createViewer({
target: '#viewer',
file: '/demo/confidential.pdf',
watermark: {
type: 'text',
content: '内部资料 严禁外传',
fontSize: 20,
color: '#bfbfbf',
opacity: 0.22,
rotate: -25,
gapX: 140,
gapY: 90,
position: 'top'
}
})
const viewer = createViewer({
target: '#viewer',
file: '/demo/report.pdf',
watermark: {
type: 'image',
image: '/assets/company-logo.png',
imageWidth: 96,
imageHeight: 96,
opacity: 0.16,
rotate: -20,
gapX: 180,
gapY: 120,
position: 'bottom'
}
})
全面覆盖常见文档格式
多种使用场景的完整示例代码
通过 URL 地址预览远程文档
const viewer = JitViewer.createViewer({
file: 'https://example.com/doc.pdf',
filename: '文档.pdf',
toolbar: true
});
viewer.mount('#viewer');
通过文件选择器预览本地文件
document.getElementById('fileInput')
.addEventListener('change', (e) => {
const file = e.target.files[0];
const viewer = JitViewer.createViewer({
file: file,
filename: file.name
});
viewer.mount('#viewer');
});
程序化控制文档缩放和旋转
// 放大
function zoomIn() {
const state = viewer.getState();
viewer.zoom(state.zoom + 0.1);
}
// 旋转
function rotate() {
const state = viewer.getState();
viewer.rotate((state.rotate + 90) % 360);
}
在浅色和深色主题间切换
// 切换到深色主题
function switchToDark() {
viewer.setTheme('dark');
}
// 切换到浅色主题
function switchToLight() {
viewer.setTheme('light');
}