728x90
react-pdf 패키지를 활용하면 리액트에서 PDF 파일 미리보기 기능을 쉽게 구현할 수 있다. 온라인 데모는 여기에서 확인할 수 있다.
1. 프로젝트에 react-pdf 패키지를 설치한다.
npm install react-pdf
2. PDF.js worker를 활성화한다.
create-react-app 프로젝트의 경우 아래 코드를 소스 파일에 추가한다.
import { pdfjs } from 'react-pdf';
pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;
create-react-app 프로젝트가 아닌 경우 npm react-pdf Readme enable PDF.js worker를 참고하여 활성화한다.
3. 소스 파일에 코드를 추가한다.
클래스 컴포넌트 예제
import React, { Component } from 'react';
import { Document, Page } from 'react-pdf';
class MyApp extends Component {
state = {
numPages: null,
pageNumber: 1,
}
onDocumentLoadSuccess = ({ numPages }) => {
this.setState({ numPages });
}
render() {
const { pageNumber, numPages } = this.state;
return (
<div>
<Document
file="somefile.pdf"
onLoadSuccess={this.onDocumentLoadSuccess}>
<Page pageNumber={pageNumber} />
</Document>
<p>
//이전 페이지 보기
<span onClick={() => this.state.pageNumber > 1 ?
this.setState({numPages : this.state.numPages,
pageNumber : this.state.pageNumber-1}) : null}>
<
</span>
<span>Page {pageNumber} of {numPages}</span>
//다음 페이지 보기
<span onClick={() => this.state.ppageNumber < numPages ?
this.setState({numPages : this.state.numPages,
pageNumber : this.state.pageNumber+1}) : null}>
>
</span>
</p>
</div>
);
}
}
함수형 컴포넌트 예제
import React, { useState } from 'react';
import { Document, Page } from 'react-pdf';
function MyApp() {
const [numPages, setNumPages] = useState(null);
const [pageNumber, setPageNumber] = useState(1);
function onDocumentLoadSuccess({ numPages }) {
setNumPages(numPages);
}
return (
<div>
<Document
file="somefile.pdf"
onLoadSuccess={onDocumentLoadSuccess}>
<Page pageNumber={pageNumber} />
</Document>
<p>
//이전 페이지 보기
<span onClick={()=> pageNumber > 1 ? setPageNumber(pageNumber-1):null}>
<
</span>
<span>Page {pageNumber} of {numPages}</span>
//다음 페이지 보기
<span onClick={()=> pageNumber < numPages ? setPageNumber(pageNumber+1):null}>
>
</span>
</p>
</div>
);
}
(추가) 4. s3 객체에 적용하기
s3 버킷의 CORS 규칙을 설정한다.
Document 태그의 file 속성을 s3 객체 퍼블릭 링크로 설정한다.
<Document
file="s3-uploaded-file-path"
onLoadSuccess={onDocumentLoadSuccess}>
<Page pageNumber={pageNumber} />
</Document>
728x90
'프로그래밍' 카테고리의 다른 글
[자료구조] Python 파이썬으로 이중연결 정렬 리스트 구현하기 코드 설명 (0) | 2020.06.02 |
---|---|
[React.js] create-react-app에서 img 태그에 이미지 소스 넣기 (0) | 2020.06.01 |
[React.js] Expected an assignment or function call and instead saw an expression 오류 해결법 (0) | 2020.05.29 |
[React.js] 'React' must be in scope when using JSX error 오류 해결법 (0) | 2020.05.29 |
[컴퓨터 구조] 논리 연산과 불 대수 (0) | 2020.05.13 |