Github每日精选(第85期):PDF 文档的 React 组件react-pdf-viewer

react-pdf-viewer

react-pdf-viewer 用于查看 PDF 文档的 React 组件。它是用 TypeScript 编写的,完全由 React hooks 提供支持。

在这里插入图片描述

github 的地址在这里

使用实例

添加水印

默认情况下,每个页面由画布、文本和注释层构成。在此示例中,我们将在页面中心添加一个简单的水印。

const renderPage: RenderPage = (props: RenderPageProps) => (
    <>
        {props.canvasLayer.children}
        <div
            style={{
                alignItems: 'center',
                display: 'flex',
                height: '100%',
                justifyContent: 'center',
                left: 0,
                position: 'absolute',
                top: 0,
                width: '100%',
            }}
        >
            <div
                style={{
                    color: 'rgba(0, 0, 0, 0.2)',
                    fontSize: `${8 * props.scale}rem`,
                    fontWeight: 'bold',
                    textTransform: 'uppercase',
                    transform: 'rotate(-45deg)',
                    userSelect: 'none',
                }}
            >
                Draft
            </div>
        </div>
        {props.annotationLayer.children}
        {props.textLayer.children}
    </>
);

<Viewer fileUrl="/assets/pdf-open-parameters.pdf" renderPage={renderPage} />;

在这里插入图片描述

为每个页面添加按钮以旋转目标页面

让我们考虑一个允许用户旋转特定页面的情况。每个页面都可以有两个按钮,用于在不同方向上旋转页面。
Viewer组件使我们能够通过renderPage属性向每个页面添加自定义组件:

const renderPage: RenderPage = (props: RenderPageProps) => (
    // Our custom page renderer
);

<Viewer renderPage={renderPage} />;

每个页面由不同的层构成,包括画布、文本和注释。以下是默认渲染器:

const defaultPageRenderer: RenderPage = (props: RenderPageProps) => (
    <>
        {props.canvasLayer.children}
        {props.textLayer.children}
        {props.annotationLayer.children}
    </>
);

我们可以在每个页面的右侧添加旋转按钮。由于每个页面都有相对位置,因此可以将按钮放置在绝对定位的容器内:

const renderPage: RenderPage = (props: RenderPageProps) => (
    <>
        {props.canvasLayer.children}
        <div
            style={{
                padding: '0.25rem',
                position: 'absolute',
                right: 0,
                top: 0,
                transform: 'translate(100%, 0)',
                zIndex: 1,
            }}
        >
            {/* Buttons go here */}
        </div>
        {props.annotationLayer.children}
        {props.textLayer.children}
    </>
);

转换将translate(100%, 0)容器移动到页面的右侧,而zIndex: 1样式将按钮显示在其他图层的顶部。否则,我们无法单击按钮。
现在按钮位于所需位置。下一个问题是我们如何旋转关联的页面?幸运的是,该RenderPageProps属性具有onRotatePage我们想要的属性。
它是一个只接受一个参数的函数:

onRotatePage(direction: RotateDirection)

onClick处理我们的按钮事件变得很容易:

<button onClick={() => props.onRotatePage(RotateDirection.Forward)}>
    Rotate clockwise
</button>
<button onClick={() => props.onRotatePage(RotateDirection.Backward)}>
    Rotate counterclockwise
</button>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值