React에서 PDF 뷰어 만들기

react로 웹을 개발하면서 서버에 올려놓은 PDF를 브라우저에서

바로 볼 수 있도록 처리하기 위해서 뷰어가 필요한 상태라서..

(물론 다운받아서 acrobat reader로 읽어도 되긴 하죠.. 그런데 조금 불편하겠지요)

뷰어를 직접 개발할 수 있는건 아니구 ㅎㅎ

만들어져 있는것을 조금 포장했을 뿐입니다.

리액트는 18.2.0 버전에서 진행하였습니다.

노드 모듈중에서 react-pdf 를 활용하였습니다.

버전은 7.3.3 최신 버전(2023.08.22일 기준)

아래 링크를 통해서 버전 및 기능에대해서 확인하실 수 있습니다.

뷰어는 모달로 띄우고 모달닫기 버튼과 페이징 버튼을 추가하였습니다.

css는 정렬 뿐이 할줄 모르는데 작업하느라고

고생좀 했습니다.

Test.js

PdfViewer.js

문제 해결

최신 브라우저를 위한 import 정의(공식 문서 참조)

pdfjs.GlobalWorkerOptions.workerSrc = new URL(

"pdfjs-dist/build/pdf.worker.min.js",

import.meta.url

).toString();

아래 부분을 요 윗 부분으로 변경하고나서는 에러는 없었습니다.

레거시(ie 11 같은 브라우저) 지원을 위해서 사용하는 것 같은데

이게 크롬에서 여러번 새로고침 랜더링을 해보면 에러가 터지면서 안됩니다.

렌더링 이슈라고 하는데

간혹 해결책으로

PdfViewer.js 에서

const [isRender, setIsRender] = useState(false);

useEffect(() => {

setTimeout(() => setIsRender(true), 500)

}, []);

return (

isRender && (

<Document>

...

</Document

)

)

이런식으로 해결 하는 방법으로 소개되고 있으나,

100% 해결책으로는 활용할 수 없더라구요.

//pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/legacy/build/pdf.worker.min.js`;

최종 결과

이상 하루 하루 성장하는 에단버드였습니다.

감사합니다.