React 및 Puppeteer: PDF 생성(프로젝트 설정)
요약
서버와 React를 템플릿 엔진으로 사용하여 PDF 문서를 생성하는 방법을 자세히 설명하는 실험입니다.
왜
나는 과거에
@react-pdf/renderer
를 사용했으며 이것은 내가 가진 몇 가지 문제를 해결하는 것을 목표로 합니다.문제
목표
사용자의 브라우저/클라이언트에서만 수행하면 안 되는 이유는 무엇입니까?
참고: 실험에 사용된 목표, 라이브러리 및 특정 데이터 흐름은 모든 사용 사례가 이러한 모든 단계를 수행할 필요가 없기 때문에 순전히 주관적입니다. 주로 PDF가 생성되는 방법에 중점을 둡니다.
기술
반응: 템플릿 엔진으로 사용합니다. 다른 템플릿 엔진을 사용할 수 있습니다.
chakra ui: ui 라이브러리로 사용됩니다. 필요하지는 않지만 데모를 위해 사용하기 쉬운 구성 요소가 많이 있습니다. 대안을 사용할 수 있음
storybook: UI 개발 보조 라이브러리로 사용됩니다. 필요하지는 않지만 보기/pdf를 시각적으로 개발하는 데 사용하기에 좋습니다
Puppeteer: 인플레이스 html 렌더러 및 오케스트레이터로 사용: 대안도 사용할 수 있음
nx: 프로젝트 관리에 사용됩니다. 동일한 저장소에 여러 프로젝트를 생성합니다. Nx를 사용하면 모든 프로젝트를 쉽게 연결할 수 있습니다. 대안을 사용할 수 있음
TL;DR;
github에서 전체 프로젝트 보기:
https://github.com/lwhiteley/pdf-generation-experiment
git clone https://github.com/lwhiteley/pdf-generation-experiment
cd pdf-generation-experiment
pnpm i
pnpm nx run-many --target=serve --projects=pdf-server,ui-app
이러한 명령을 실행한 후 앱을 사용하여 전체 솔루션을 경험할 수 있습니다.
설정
프로젝트 생성 + 의존성 설치
npx create-nx-workspace --pm pnpm pdf-generation
# ? Enable distributed caching to make your CI faste: No
cd pdf-generation
pnpm add -D @nrwl/react @nrwl/nest @nrwl/storybook @nrwl/node
pnpm add pdf-lib puppeteer utf-8-validate sharp
pnpm add @chakra-ui/react @emotion/react @emotion/styled framer-motion @chakra-ui/icons @chakra-ui/styled-system use-debounce axios
pnpm add -D @chakra-ui/storybook-addon
pnpm add interweave interweave-ssr
작업할 프로젝트 생성
pnpm nx g @nrwl/react:application ui-app
# Choose: emotion
# use router: Yes
pnpm nx g @nrwl/nest:application pdf-server
pnpm nx g @nrwl/node:library constants
pnpm nx g @nrwl/react:library pdf-doc
pnpm nx g @nrwl/storybook:configuration pdf-doc
# Choose: @storybook/react
메모:
React 및 배포를 위한 pdf-server 구성
@babel/core
에서 dependencies
로 package.json
이동apps/pdf-server/project.json
targets.build.options.generatePackageJson: true
"generatePackageJson": true
json 파일.babelrc
에서 ui-app
파일을 복사하여 pdf-server
루트 폴더"jsx": "react-jsx"
inapps/pdf-server/src/main.ts
와 같은 수준의 파일을 만듭니다.// file: dependencies.register.ts
/**
* We import dependencies that are missed by nx auto package.json creation
*/
import '@babel/core';
import '@emotion/styled';
import '@chakra-ui/styled-system';
import 'utf-8-validate';
import { polyfill } from 'interweave-ssr';
// view this file for environment config
import { environment } from './environments/environment';
polyfill();
// this could be moved to a helper library
export const createDirectory = (directory: string) => {
if (existsSync(directory)) return false;
mkdirSync(directory, { recursive: true });
return true;
};
createDirectory(environment.tmpFolder);
그런 다음 가져옵니다
main.ts
.import './dependencies.register.ts'
nestjs pdf 모듈 만들기
pnpm nx g @nrwl/nest:module pdf --project=pdf-server
pnpm nx g @nrwl/nest:controller pdf --project=pdf-server
pnpm nx g @nrwl/nest:service pdf --project=pdf-server
pdf-server를 ui-app에 프록시
파일 만들기
apps/ui-app/proxy.config.json
{
"/api": {
"target": "http://localhost:3333/api",
"pathRewrite": { "^/api": "" },
"secure": false,
"logLevel": "debug"
}
}
그런 다음
apps/ui-app/project.json
targets.serve.configurations.development
에 다음을 추가합니다."proxyConfig": "apps/ui-app/proxy.config.json",
"open": true
이제 설정이 완료되었으므로 일부 코드를 작성할 시간입니다.
Reference
이 문제에 관하여(React 및 Puppeteer: PDF 생성(프로젝트 설정)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lwhiteley/react-and-puppeteer-pdf-generation-project-setup-1he2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)