如何授权使用react-pdf?

问题描述 投票:0回答:1

我必须在我的应用程序中显示一些 pdf 内容,但 pdf 源来自后端,用户必须经过身份验证才能查看 pdf。
如果我使用 iframe 标签,pdf 渲染没有问题,但如果我尝试使用react-pdf,则会收到 401 未经授权的错误。
我认为 iframe 标记会自动处理请求的令牌。
我如何使用react-pdf来管理这个?
我无权访问前端的cookie/令牌(全部由后端处理)。

我的用于显示pdf文件的代码:

import { Box, Button } from "@mui/material";
import { useState } from "react";
import { Document, Page, pdfjs } from "react-pdf";

pdfjs.GlobalWorkerOptions.workerSrc = new URL(
  "pdfjs-dist/build/pdf.worker.min.js",
  import.meta.url,
).toString();

interface IPdfViewerProps {
  url: string;
}

const PdfViewer = ({ url }: IPdfViewerProps) => {
  const [totalPages, setTotalPages] = useState(0);
  const [pageNumber, setPageNumber] = useState(1);
  const [pageScale, setPageScale] = useState(1);

  function onDocumentLoadSuccess({ numPages }) {
    setTotalPages(numPages);
  }

  function handleZoomIn() {
    if (pageScale < 3) {
      setPageScale(pageScale + 0.2);
    }
  }

  function handleZoomOut() {
    if (pageScale > 0.3) {
      setPageScale(pageScale - 0.2);
    }
  }

  function handleNext() {
    if (pageNumber < totalPages) {
      setPageNumber(pageNumber + 1);
    }
  }
  function handlePrevious() {
    if (pageNumber > 0) {
      setPageNumber(pageNumber - 1);
    }
  }

  return (
    <Box className="App">
      <Box className="page-container">
        <Document file={url} onLoadSuccess={onDocumentLoadSuccess}>
          <Page pageNumber={pageNumber} scale={pageScale} />
        </Document>
      </Box>
      <Box className="footer">
        <Box className="button-container">
          <Button onClick={handleZoomIn} disabled={pageScale >= 3}>
            Zoom +
          </Button>
          <Button onClick={handleZoomOut} disabled={pageScale <= 0.3}>
            Zoom -
          </Button>
        </Box>
        <Box className="page-text">
          Page {pageNumber} of {totalPages}
        </Box>
        <Box className="button-container">
          <Button onClick={handlePrevious} disabled={pageNumber === 1}>
            ‹ Previous
          </Button>
          <Button onClick={handleNext} disabled={pageNumber === totalPages}>
            Next ›
          </Button>
        </Box>
      </Box>
    </Box>
  );
};

export default PdfViewer;

仍然可以使用react-pdf还是我需要保留iframe标签?
使用 iframe 标签显示 pdf 文件是一个好习惯吗?
所有 pdf 文件都来自 API,而不是来自用户。

reactjs pdf display
1个回答
0
投票

我弄清楚了如何在授权下使用react-pdf。
我在文档中错过了它。

我必须添加 withCredentials 选项,默认情况下为 false。

   <Document file={url} onLoadSuccess={onDocumentLoadSuccess} options={{ withCredentials: true }}>
       <Page pageNumber={pageNumber} scale={pageScale} renderTextLayer={false} />
    </Document>

我现在面临的问题是每次页面更改时都会重新获取pdf。

pdf处于某种状态,所以我不知道为什么它重新获取文档。

© www.soinside.com 2019 - 2024. All rights reserved.