Code Monkey home page Code Monkey logo

react-read-pdf's Introduction

React-read-pdf

Chinese Document

a mobile-friendly PDF Reader in browser for React 16.x

Features

  • Simple: It is very easy to use
  • Mobile-friendly: Support all mobile terminal devices including mobile,pad and others

Browser Support

  • IE 10+
  • Firefox 3.6+
  • Chrome 6+
  • Safari 6+
  • Opera 11.5+
  • iOS Safari 6.1+
  • Android Browser 3+

Quick Start

1. Import react-read-pdf into your react.js project.

(You should import react firt,The version of react must be more than 16.x)

Using build tools:

npm install --save react-read-pdf

Using PDFReader in PC:

import React from 'react';
import { PDFReader } from 'react-read-pdf';

Using MobilePDFReader in mobile terminal devices:

import React from 'react';
import { MobilePDFReader } from 'react-read-pdf';

2. Now you have it. The simplest usage:

import { MobilePDFReader } from 'react-read-pdf';
export default class Test extends Component{
  render(){
    return <div style={{overflow:'scroll',height:600}}>
            <MobilePDFReader url="http://localhost:3000/test.pdf"/>
           </div>
  }
}
import ReactDOM from 'react-dom';
import Test from './test'
ReactDOM.render(<Test />, document.getElementById('root'));

It supports all mobile terminal devices including mobile,pad and others,the next image is a lively example in iphoneX

Documentation

react-read-pdf mainly consists of two different components. PDFReader and MobilePDFReader.

🌱 PDFReader

import { PDFReader } from 'react-read-pdf'

...
<PDFReader url={"http://localhost:3000/test.pdf"} ...>

Props in PDFReader Component

Props name Type Description
url string | object if url is a string, it represents absolute address or relative address of PDF files. if url is a object, you can see this url object type for details
data string binary-like data of PDF.For example,in javascript, you can use the method "atob" to convert base64 encoded PDF to binary-like data.
page number default value is 1 ,decides that which page to show in PDF file.
scale number decides the viewport in render
width number decides the width of viewport
showAllPage boolean default value is false , if it is true , it will render all pages of the pdf file. if it is false ,it will only show the "currentPage" according to the page props's value.
onDocumentComplete function after load the PDF file, in this function ,you can get some informations of the PDF file you can see this function type for details

url the url property of PDFReader

Type:

  • string : it represents absolute address or relative address of PDF files
  • object :

Properties:

Property Name type Description
url string it represents absolute address or relative address of PDF files
withCredentials boolean is allow requests to carry cookie or not

onDocumentComplete the onDocumentComplete property of PDFReader

Type:

  • function(totalPage)

onDocumentComplete's type is a function, the fisrt default parameter is totalPage of the PDF file

Notes

The url of props can be string or object.

The following two ways are the same.

One is :

 <MobilePDFReader url="http://localhost:3000/test.pdf"/>

the other is :

 <MobilePDFReader url={url:"http://localhost:3000/test.pdf"}/>

🌱 MobilePDFReader

import { MobilePDFReader } from 'react-read-pdf'

...
<MobilePDFReader url={"http://localhost:3000/test.pdf"} ...>

Props in MobilePDFReader Component

Props name Type Description
url string | object it represents absolute address or relative address of PDF files.
page number default value is 1 ,decides that which page to show in PDF file.
scale 'auto' | number defaut value is 'auto', react-react-pdf use pdfjs-viewer,so if the scale is 'auto' , it can Adaptive mobile device .This property decides the viewport in render
minScale number defaut value is 0.25, decides the minimum value of scale
maxScale number defaut value is 10, decides the max value of scale
isShowHeader boolean defaut value is true, in order to show lively example.'react-react-pdf' added default style to special header, you can remove this style ,if you change this value to false
isShowFooter boolean defaut value is true, in order to show lively example.'react-react-pdf' added default style to special footer, you can remove this style ,if you change this value to false
onDocumentComplete function after load the PDF file, in this function ,you can get some informations of the PDF file you can see this function type for details

onDocumentComplete the onDocumentComplete property of MobilePDFReader

Type:

  • function(totalPage,title,otherObj)

Properties:

Property Name type Description
totalPage number the totalPage of the PDF file
title title the title of the PDF file
otherObj object other coding information of the PDF file

Notes

I strongly recommend you to set initial value of scale is 'auto',the default is 'auto' too

Development

Installation

  1. Clone/download repo
  2. yarn install (or npm install for npm)

Usage

Development

yarn run start-dev

  • Build app continuously (HMR enabled)
  • App served @ http://localhost:8080

Production

yarn run start-prod

  • Build app once (HMR disabled)
  • App served @ http://localhost:3000

All commands

Command Description
yarn run start-dev Build app continuously (HMR enabled) and serve @ http://localhost:8080
yarn run start-prod Build app once (HMR disabled) and serve @ http://localhost:3000
yarn run build Build app to /dist/
yarn run test Run tests
yarn run lint Run Typescript and SASS linter
yarn run lint:ts Run Typescript linter
yarn run lint:sass Run SASS linter
yarn run start (alias of yarn run start-dev)

Note: replace yarn with npm if you use npm.

License

MIT License

react-read-pdf's People

Contributors

forthealllight avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

react-read-pdf's Issues

按流程引入 浏览器打开时会报Uncaught Error: addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component's `render` method, or you have multiple copies of React loaded

Uncaught Error: addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component's render method, or you have multiple copies of React loaded

使用页面会报这个错误,我看到CSDN上也有个人有同样的问题.
同样问题地址: https://blog.csdn.net/liwusen/article/details/83381284

react16.4.2,无法引入 MobilePDFReader

环境为umi2.0,react16.4.2,安装完成后,无法引入 MobilePDFReader,查看node_modeles,没有看到lib文件夹,请问下如何正确引入还是我需要执行真么操作,

更新:已经解决,需要自己安装后 run lib

Crash when rendering without url..

So when using the MobilePDFReader, I'm getting the following crash when I just provide the "data" parameter with the raw binary data for the PDF.

Uncaught TypeError: Cannot read property 'indexOf' of undefined
at Object.getFilenameFromUrl (pdf.js:9332)
at WrappedComponent.MobilePDFReader.setTitleUsingUrl (index.tsx:167)
at WrappedComponent.MobilePDFReader.open (index.tsx:122)
at WrappedComponent.MobilePDFReader.componentDidMount (index.tsx:264)
at commitLifeCycles (react-dom.development.js:19847)
at commitLayoutEffects (react-dom.development.js:22834)
at HTMLUnknownElement.callCallback (react-dom.development.js:188)
at Object.invokeGuardedCallbackDev (react-dom.development.js:237)
at invokeGuardedCallback (react-dom.development.js:292)
at commitRootImpl (react-dom.development.js:22572)
at unstable_runWithPriority (scheduler.development.js:653)
at runWithPriority$1 (react-dom.development.js:11061)
at commitRoot (react-dom.development.js:22412)
at finishSyncRender (react-dom.development.js:21838)
at performSyncWorkOnRoot (react-dom.development.js:21824)
at react-dom.development.js:11111
at unstable_runWithPriority (scheduler.development.js:653)
at runWithPriority$1 (react-dom.development.js:11061)
at flushSyncCallbackQueueImpl (react-dom.development.js:11106)
at flushSyncCallbackQueue (react-dom.development.js:11094)
at scheduleUpdateOnFiber (react-dom.development.js:21230)
at Object.enqueueSetState (react-dom.development.js:12661)
at ReportView../node_modules/react/cjs/react.development.js.Component.setState (react.development.js:471)

If I try to provide the url property, then the pdf doesn't display at all, because I assume the url is overriding the use of the data property. This problem doesn't occur with the PDFReader, only with the mobile version of the reader.

PDFViewer._setCurrentPageNumber: "0" is out of bounds.

to avoid those errors in console, the following code should be changed :
_this.pageAdd = function () {
if (_this.pdfViewer.currentPageNumber > _this.pdfDocument.numPages) {
return;
}
_this.pdfViewer.currentPageNumber++;
};
_this.pageDelete = function () {
if (_this.pdfViewer.currentPageNumber < 1) {
return;
}
_this.pdfViewer.currentPageNumber--;
};

should be >=
and
< should be <=

regards,
Naama

重复第一页

请问一下,PDFReader showAllPage=true 只会重复显示第一页是什么原因?

MobilePDFReader 报错

It looks like MobilePDFReader is reassigning its own this.props while rendering. This is not supported and can lead to confusing bugs.
有遇到的吗

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.