pdf.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // @ts-ignore
  2. import pdfjs from 'pdfjs-dist';
  3. // @ts-ignore
  4. import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.entry';
  5. import { ProgressType, ViewportType } from '../constants/type';
  6. import { objIsEmpty } from './utility';
  7. const CMAP_URL = '../../node_modules/pdfjs-dist/cmaps/';
  8. const CMAP_PACKED = true;
  9. pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;
  10. export const fetchPdf = async (src: string, cb: (progress: ProgressType) => void) => {
  11. const loadingTask = pdfjs.getDocument({
  12. url: src,
  13. cMapUrl: CMAP_URL,
  14. cMapPacked: CMAP_PACKED,
  15. });
  16. if (cb) {
  17. loadingTask.onProgress = (progress: ProgressType) => {
  18. cb(progress);
  19. };
  20. }
  21. const pdf = await loadingTask.promise;
  22. return pdf;
  23. };
  24. export const renderPdfPage = async ({
  25. rootEle,
  26. page,
  27. viewport,
  28. }: {
  29. rootEle: HTMLDivElement;
  30. page: any;
  31. viewport: ViewportType;
  32. }) => {
  33. if (rootEle) {
  34. const canvas: HTMLCanvasElement = rootEle.querySelectorAll('canvas')[0] as HTMLCanvasElement;
  35. if (canvas) {
  36. const context: CanvasRenderingContext2D = canvas.getContext('2d')!;
  37. canvas.height = viewport.height;
  38. canvas.width = viewport.width;
  39. const renderContext = {
  40. canvasContext: context,
  41. viewport,
  42. };
  43. if (!objIsEmpty(page)) {
  44. const renderTask = page.render(renderContext);
  45. await renderTask.promise;
  46. }
  47. }
  48. }
  49. };