Extension | MIME Type | Available |
---|---|---|
bmp | image/bmp | ✓ |
doc | application/msword | ✓ |
docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document | ✓ |
htm | text/htm | ✓ |
html | text/html | ✓ |
jpg | image/jpg | ✓ |
jpeg | image/jpeg | ✓ |
application/pdf | ✓ |
|
png | image/png | ✓ |
ppt | application/vnd.ms-powerpoint | ✓ |
pptx | applicatiapplication/vnd.openxmlformats-officedocument.presentationml.presentation | ✓ |
tiff | image/tiff | ✓ |
txt | text/plain | ✓ |
xls | application/vnd.ms-excel | ✓ |
xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | ✓ |
video | mp3 、mp4、audio/x-m4a、 flac、 wma、 aiff、 ape、 dsd | ✓ |
|
npm i polaris-file-viewer
# or
yarn add polaris-file-viewer
# or
pnpm add polaris-file-viewer
Warning - 默认情况下,组件高度将根据当前加载的文件展开和收缩。宽度将扩展以填充 parent
>
DocViewer 至少需要一个文档对象数组才能起作用。 每个文档对象必须有一个指向文件的 uri,可以是返回文件的 url,也可以是返回本地文件的 url
import DocViewer from 'polaris-file-viewer';
function App() {
const docs = [
{ uri: 'https://url-to-my-pdf.pdf', suffix: 'pdf' },
{ uri: require('./example-files/pdf.pdf'), suffix: 'pdf' }, // Local File
];
return <DocViewer documents={docs} />;
}
DocViewerRenderers
插入所有渲染器的数组
import DocViewer, { DocViewerRenderers } from "polaris-file-viewer";
<DocViewer
pluginRenderers={DocViewerRenderers}
{/* ... */}
/>;
或者插入单个渲染器
import DocViewer, { PDFRenderer, PNGRenderer } from "polaris-file-viewer";
<DocViewer
pluginRenderers={[PDFRenderer, PNGRenderer]}
{/* ... */}
/>;
要创建一个自定义渲染器,它将只存在于您的项目中。
import React from 'react';
import DocViewer from 'polaris-file-viewer';
const MyCustomPNGRenderer: DocRenderer = ({ mainState: { currentDocument } }) => {
if (!currentDocument) return null;
return (
<div id="my-png-renderer">
<img id="png-img" src={currentDocument.fileData as string} />
</div>
);
};
MyCustomPNGRenderer.fileTypes = ['png', 'image/png'];
并将渲染器放入 pluginRenderers 里面 Array
.
import DocViewer, { DocViewerRenderers } from 'polaris-file-viewer';
<DocViewer
pluginRenderers={[MyCustomPNGRenderer]}
documents={
[
// ...
]
}
/>;
如果您需要阻止 polaris-file-viewer
实际加载文件。
你可以用一个回调来装饰你的自定义渲染器。你自己在 iFrame 中加载文件。
MyCustomPNGRenderer.fileLoader = ({ documentURI, signal, fileLoaderComplete }) => {
myCustomFileLoaderCode().then(() => {
// Whenever you have finished you must call fileLoaderComplete() to remove the loading animation
fileLoaderComplete();
});
};
您可以为主题对象提供一个或所有可用属性。
<DocViewer
documents={docs}
theme={{
primary: "#5296d8",
secondary: "#ffffff",
tertiary: "#5296d899",
text_primary: "#ffffff",
text_secondary: "#5296d8",
text_tertiary: "#00000099",
disableThemeScrollbar: false,
}}
/>
Each component / div already has a DOM id that can be used to style any part of the document viewer.
#react-doc-viewer #header-bar {
background-color: #faf;
}
<DocViewer documents={docs} style={{width: 500, height: 500}} />
import styled from 'styled-components';
//...
<MyDocViewer documents={docs} />;
//...
const MyDocViewer = styled(DocViewer)`
border-radius: 10px;
`;
您可以提供一个配置对象,它根据需要配置组件的各个部分
<DocViewer documents={docs} config={{
header: {
disableHeader: false,
disableFileName: false,
retainURLParams: false
}
}} />
Step 1 -在里面创建一个新文件夹 src/plugins
.
e.g.
src/plugins/jpg
在这个文件夹中,创建一个 Renderer React Typescript 文件
e.g.
index.tsx
Step 2 - 在 JPGRenderer 中,导出类型为 DocRenderer
import React from 'react';
import { DocRenderer } from '../../types';
// Be sure that Renderer correctly uses type DocRenderer
const JPGRenderer: DocRenderer = ({ mainState: { currentDocument } }) => {
if (!currentDocument) return null;
return (
<div id="jpg-renderer">
<img id="jpg-img" src={currentDocument.fileData as string} />
</div>
);
};
export default JPGRenderer;
// List the MIME types that this renderer will respond to
JPGRenderer.fileTypes = ['jpg', 'jpeg', 'image/jpg', 'image/jpeg'];
//如果同一个MIME类型有多个渲染器,使用weight。越高越好。
//包含的渲染器的权重为0
JPGRenderer.weight = 1;
你可以给 config.header 传递一个回调函数。overricomponent '返回一个 React 元素。函数的参数将被填充并可用,这个函数也将在 mainState 更新时被重新调用。 参数包括来自主组件的状态对象,以及' previousDocument '和' nextDocument '的文档导航函数。
Example:
const myHeader: IHeaderOverride = (state, previousDocument, nextDocument) => {
if (!state.currentDocument || state.config?.header?.disableFileName) {
return null;
}
return (
<>
<div>{state.currentDocument.uri || ""}</div>
<div>
<button
onClick={previousDocument}
disabled={state.currentFileNo === 0}
>
Previous Document
</button>
<button
onClick={nextDocument}
disabled={state.currentFileNo >= state.documents.length - 1}
>
Next Document
</button>
</div>
</>
);
};
<DocViewer
pluginRenderers={DocViewerRenderers}
documents={
{
/**/
}
}
config={{
header: {
overrideComponent: myHeader;
},
},
}
/>
name | type |
---|---|
documents | IDocument[] |
className? | string |
style? | React.CSSProperties |
config? | IConfig |
theme? | ITheme |
pluginRenderers? | DocRenderer[] |
| name | type |
| --------- | -------- | ----------------------------------------------------------------- |
| uri | string
|
| fileType? | string
|
| fileData? | string | ArrayBuffer
- Used Internally - Ignored if passed into props |
name | type |
---|---|
header? | IHeaderConfig |
name | type |
---|---|
disableHeader? | boolean |
disableFileName? | boolean |
retainURLParams? | boolean |
overrideComponent? | IHeaderOverride |
| name | type |
| ---------------- | --------------------------- | ----- |
| state | IMainState
|
| previousDocument | () => void
|
| nextDocument | () => void
|
| returns
| ReactElement<any, any> | null
|
name | type |
---|---|
primary? | string |
secondary? | string |
tertiary? | string |
text_primary? | string |
text_secondary? | string |
text_tertiary? | string |
disableThemeScrollbar? | boolean |
DocRenderer
extends React.FC<DocRendererProps
>
| name | type |
| ----------- | --------------------------------------------- | ---- | ---------- |
| fileTypes | string[]
|
| weight | number
|
| fileLoader? | FileLoaderFunction
| null | undefined
|
(props: FileLoaderFuncProps
) => void
name | type |
---|---|
documentURI | string |
signal | AbortSignal |
fileLoaderComplete | FileLoaderComplete |
name | type |
---|---|
fileReader | FileReader |
name | type |
---|---|
mainState | IMainState |
name | type |
---|---|
currentFileNo | number |
documents | IDocument[] |
documentLoading? | boolean |
currentDocument? | IDocument |
rendererRect? | DOMRect |
config? | IConfig |