PDF.js 很强,但 PDFSlick 可能更适合你!

boyanx3个月前技术教程10

家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

什么是 PDFSlick

PDFSlick is a library that enables viewing of and interaction with PDF documents in React, SolidJS, Svelte and JavaScript apps. It's build on top of Mozilla's PDF.js, and utilises Zustand to provide a reactive store for the loaded documents.

PDFSlick 是一个库,可以在 React、SolidJS、Svelte 和 JavaScript 应用程序中查看 PDF 文档并与之交互。PDFSlick 构建在 Mozilla 的 PDF.js 之上,并利用 Zustand 为加载的文档提供反应式存储。


PDF.js 虽然很优秀而且非常稳定和成熟,其也是 Mozilla Firefox 中的 PDF 查看器,自 2011 年以来一直存在。然而,其完全是 Vanilla JavaScript,当涉及到在现代 JS 库(如 React 和 SolidJS)中使用时仍然有诸多不足。

PDFSlick 试图将所有这些有用的功能包装成一个更容易适应 React 和 SolidJS 世界的功能,最终作为组件和反应存储。

目前 PDFSlick 在 Github 通过 MIT 协议开源,是一个值得关注的前端开源项目。

如何使用 PDFSlick

首先需要安装依赖:

npm install @pdfslick/react
//  yarn add @pdfslick/react
//  pnpm add @pdfslick/react

开发者可以通过 usePDFSlick() Hooks 开始使用 PDFSlick,如以下基本示例所示:

import {usePDFSlick} from "@pdfslick/react";
import PDFNavigation from "./yourcomponents/PDFNavigation";
import "@pdfslick/react/dist/pdf_viewer.css";

type PDFViewerComponentProps = {
  pdfFilePath: string,
};
const PDFViewerComponent = ({pdfFilePath}: PDFViewerComponent) => {
  const {viewerRef, usePDFSlickStore, PDFSlickViewer} = usePDFSlick(
    pdfFilePath,
    {
      scaleValue: "page-fit",
    }
  );
  const scale = usePDFSlickStore((s) => s.scale);
  const numPages = usePDFSlickStore((s) => s.numPages);
  const pageNumber = usePDFSlickStore((s) => s.pageNumber);

  return (
    

Current scale: {scale}

Current page number: {pageNumber}

Total number of pages: {numPages}

); }; export default PDFViewerComponent;

提供 PDF 文档路径和 PDFSlick 选项对象后,usePDFSlick() Hooks 将返回一个对象,该对象由以下各项组成(除其他内容外):

  • PDFSlickViewer 是用于查看 PDF 文档的 PDF 查看器组件
  • viewerRef 是作为 组件的 prop 提供的 ref 回调
  • usePDFSlickStore 允许在 React 组件中使用 PDFSlick 存储

同时,在 SolidJS 中使用也非常简单,比如下面的示例:

import {Component, createSignal} from "solid-js";
import {usePDFSlick} from "@pdfslick/solid";

type PDFViewerAppProps = {
  pdfFilePath: string,
};
const PDFViewerApp: Component = ({ pdfFilePath }) => {
  const {
    viewerRef,
    pdfSlickStore: store,
    PDFSlickViewer,
  } = usePDFSlick(pdfFilePath);

  return (
    
); }; export default PDFViewerApp;

更多关于 PDFSlick 的用法和示例可以参考文末资料,本文不再过多展开

参考资料

https://github.com/pdfslick/pdfslick

https://pdfslick.dev/docs/solid

https://pdfslick.dev/examples

标签: pdfobject.js

相关文章

php生成pdf电子签名

要在 PHP 中生成带有签名的 PDF 文件,可以使用一些流行的库,如 **TCPDF** 或 **FPDF**。以下是使用 **TCPDF** 库生成带有签名的 PDF 的步骤和示例代码。### 步...

PDF文件处理:PDFPlumberLoader 对象和 PyPDFLoader对象

pdfplumber包中的 PDFPlumberLoader 对象和 langchain_community 包中的 PyPDFLoader 对象都用于加载和处理 PDF 文档,但它们有不同的实现和功...

如何用Python程序将几十个PDF文件合并成一个PDF?其实只要这四步

假定你有一个很无聊的任务,需要将几十个PDF文件合并成一个PDF文件。每一个文件都有一个封面作为第一页,但你不希望合并后的文件中重复出现这些封面。即使有许多免费的程序可以合并PDF,很多也只是简单的将...

破解机器人抓取透明物体难题,地瓜机器人 &CASIA新方案发布

IT之家 3 月 5 日消息,全球机器人领域顶会 ICRA 2025(IEEE 机器人与自动化国际会议)日前公布了论文录用结果,地瓜机器人主导研发的 DOSOD 开放词汇目标检测算法与 MODEST...

文档在线预览(三)使用前端实现word、excel、pdf、ppt 在线预览

文档在线预览(三)使用前端实现word、excel、pdf、ppt 在线预览

关于实现文档在线预览的做法,之前文章提到了的两种实现方式:1、通过将文档转成图片:详见《文档在线预览(一)通过将txt、word、pdf转成图片实现在线预览功能》;2、将文档转成html:详见《文档在...

优于o1预览版,推理阶段KV缓存减一半,LightTransfer降本还能增效

LLM 在生成 long CoT 方面展现出惊人的能力,例如 o1 已能生成长度高达 100K tokens 的序列。然而,这也给 KV cache 的存储带来了严峻挑战。为应对这一难题,“hybri...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。