
์ฑ์ ๋ง๋ค๋ค ๋ณด๋ฉด PDF ํ์ผ์ด๋ ๋ฌธ์๋ฅผ ์ฑ ์์์ ๋ณด์ฌ์ค์ผ ํ๋ ์ํฉ์ด ์์ฃผ ์๊ธด๋ค.
์๋ฅผ ๋ค์ด ์๋น์ค ์ด์ฉ์ฝ๊ด, ์ ์๋ช
์ธ์, ๊ณ์ฝ์, ์ ์ฑ
๋ณ๊ฒฝ ์๋ด ๊ฐ์ ๊ฒ๋ค์ด๋ค.
์ฒ์์๋ ๊ทธ๋ฅ ๋งํฌ๋ก ์น์ ์ฐ๊ฒฐํ๋ฉด ๋์ง ์์๊น ์ถ์๋๋ฐ,
๋ง์ ๊ทธ๋ ๊ฒ ํ๋ฉด UX๋ ์ ์ข๊ณ , ์ธ๋ถ ๋ธ๋ผ์ฐ์ ๋ก ๋น ์ ธ๋๊ฐ์ ํ๋ฆ๋ ๋๊ธฐ๊ฒ ๋๋ค.
๊ทธ๋์ React Native์์ ์ฑ ์์์ ์ง์ PDF๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ ์ ๋ฆฌํด๋ดค๋ค.
| ํญ๋ชฉ | ์ด์ |
|---|---|
| UX ์ ์ง | ๋ฌธ์๋ฅผ ๋ณด๋๋ผ๋ ์ฑ ์์์ ์ ์ฒด ํ๋ฆ์ ์ ์งํ ์ ์๋ค |
| ์คํ๋ผ์ธ ๋์ | ๋ค์ด๋ก๋ ๊ธฐ๋ฅ์ ๋ถ์ด๋ฉด ๋คํธ์ํฌ ์์ด๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค |
| ์ฌ์ฉ์ ์ ๋ขฐ | ์น ์ฐ๊ฒฐ๋ณด๋ค ์ฑ ๋ด ๋ทฐ์ด๋ ์ ๋ขฐ๋๋ฅผ ๋์ฌ์ค๋ค |
| ๋ค์์ฑ | ์ฝ๊ด, ๊ณต์ง, ๋ณด๊ณ ์, ๊ณ์ฝ์ ๋ฑ ๋ฌธ์ ํํ๋ ๋ค์ํ๊ฒ ์กด์ฌํ๋ค |
๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ react-native-pdf๋ค.
PDF ํ์ผ์ ์ฑ ์์์ ๋ก๋ฉํ๊ณ , ํ๋/์ถ์, ํ์ด์ง ๋๊น ๋ฑ์ ์ง์ํ๋ค.
npm install react-native-pdf react-native-webview
npx pod-install
import Pdf from 'react-native-pdf';
<Pdf
source={{ uri: 'https://example.com/sample.pdf', cache: true }}
onLoadComplete={(pages) => console.log(`์ด ${pages} ํ์ด์ง ๋ก๋๋จ`)}
onError={(error) => console.log('PDF ์๋ฌ:', error)}
style={{ flex: 1 }}
/>
uri, base64, file:// ๋ฑ ๋ค์ํ ์์ค๋ฅผ ์ง์ํ๋ค.cache: true ์ต์
์ผ๋ก ์บ์ฑ ๊ฐ๋ฅPDF ์ธ์๋ HTML, Word, Excel ๊ฐ์ ๋ฌธ์๋ฅผ ๋ณด์ฌ์ฃผ๋ ค๋ฉด WebView๋ฅผ ํ์ฉํ๋ ๊ฒ ๋ซ๋ค.
Google Docs ๋ทฐ์ด๋ฅผ ์ด์ฉํด์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์๋ ์๋ค.
import { WebView } from 'react-native-webview';
<WebView
source={{ uri: 'https://docs.google.com/gview?embedded=true&url=https://example.com/doc.pdf' }}
style={{ flex: 1 }}
/>
WKWebView ์ค์ ์ ๋ฐ๋ก ํ ์๋ ์๋ค.PDF๋ฅผ ๋ณด์ฌ์ค ๋ฟ ์๋๋ผ ์ ์ฅ ๊ธฐ๋ฅ๊น์ง ์ ๊ณตํ๋ฉด ๋ ํธ๋ฆฌํ๋ค.
์ฌ์ฉ์๋ ๋์ค์ ๋ค์ ๋ณด๊ธฐ ์ํด ์ ์ฅํด๋๊ฑฐ๋ ๊ณต์ ํ๊ณ ์ถ์ดํ๊ธฐ ๋๋ฌธ์ด๋ค.
import * as FileSystem from 'expo-file-system';
import * as Sharing from 'expo-sharing';
const downloadAndShare = async (url: string) => {
const fileUri = FileSystem.documentDirectory + 'sample.pdf';
const downloaded = await FileSystem.downloadAsync(url, fileUri);
await Sharing.shareAsync(downloaded.uri);
};
expo-file-system, expo-sharing์ ์ฐ๋ฉด ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค.| ๊ธฐ๋ฅ | ์ด์ |
|---|---|
| ๋ก๋ฉ ์คํผ๋ | PDF๊ฐ ํด ๊ฒฝ์ฐ ๋น ํ๋ฉด์ด ๋ณด์ผ ์ ์์ด์ ๋ถ์๊ฐ์ ์ค์ฌ์ผ ํ๋ค |
| ํ์ด์ง ์ ํ์ | ํ์ฌ ํ์ด์ง์ ์ ์ฒด ํ์ด์ง ์๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ UX์ ์ข๋ค |
| ํ๋/์ถ์ ์ ํ | ๋๋ฌด ํ๋๋๊ฑฐ๋ ์ถ์๋๋ฉด ๋ทฐ๊ฐ ๊นจ์ง ์ ์๋ค |
| ์๋ฌ ๋ฉ์์ง | ๋ก๋ฉ ์คํจ ์ ์๋ด ๋ฉ์์ง๋ฅผ ๋ช ํํ ๋ฃ์ด์ผ ํ๋ค |
์ด์ฉ์ฝ๊ด์ PDF๋ก ๋ง๋ค์ด์ ๋ณด์ฌ์ค์ผ ํ๋ ์ผ์ด ์์๋ค.
์ฒ์์ ๊ทธ๋ฅ ์นํ์ด์ง ๋งํฌ๋ก ์ด์๋๋ฐ,
๊ทธ๋์ react-native-pdf๋ฅผ ๋์
ํด์ ๋ทฐ์ด๋ฅผ ๋ง๋ค๊ณ ,
๋ฌธ์ ๋งํฌ๋ฅผ ์ ๋ฌ๋ฐ์ ๋ค์ด๋ก๋ ํ ๋ฐ๋ก ๋ณด์ฌ์ฃผ๋ ํ๋ฆ์ผ๋ก ๋ฐ๊ฟจ๋ค.
์บ์ฑ๋ ์ ์ฉํ๊ณ , ์ ์ฅํด์ ๊ณต์ ํ ์ ์๊ฒ ๋ง๋ค์๋ค.
๊ทธ๋ ๊ฒ ๋ฐ๊พธ๊ณ ๋๋ ์ฌ์ฉ์ ๋ง์กฑ๋๋ ์ฌ๋ผ๊ฐ๊ณ ,
UX ํผ๋๋ฐฑ๋ โ์์ฐ์ค๋ฝ๋คโ, โ๋ณด๊ธฐ ํธํ๋คโ๋ผ๋ ๋ง์ด ๋์๋ค.
๐งพ ๋ฌธ์๋ ๋จ์ํ ํ์ผ์ด ์๋๋ผ ์ฌ์ฉ์์์ ์ ๋ขฐ๋ฅผ ๋ง๋๋ ์๋จ์ด๊ธฐ๋ ํ๋ค.