iOS 原生加载PDF文档(主要功能:跳转指定的页码)

iOS 原生加载PDF文档(主要功能:跳转指定的页码),第1张

在实际的开发过程中,我们会遇到一些需要显示PDF的场景,比如官方文件(为了保证原有的格式显示正常,通常会做成PDF来展示),同时也会要求跳转到指定的PDF的页码中,这里我们来讨论一个展示PDF并且调整指定的页码的方式。

简单的介绍下加载PDF的几种方式(PDF可能是网络加载的,也可能是本地的)

在这里我使用CGContext加上UICollectionView来实现加载PDF和跳转指定页码,(其他方法暂时不提及)

在自定义的cell中对showView重写set方法,重写cell视图

在RiderPDFViewm文件中绘制视图

在PDFReadViewControllerm文件中collectionView的代理方法中加载RiderPDFView视图

pdf阅读器已经开源了框架,具体使用方法如下

CocoaPods 导入

在文件 Podfile 中加入以下内容:

然后在终端中运行以下命令:

或者这个命令:

完成后,CocoaPods 会在您的工程根目录下生成一个 xcworkspace 文件。您需要通过此文件打开您的工程,而不是之前的 xcodeproj。

首先,画册扉页的效用有两个:一是美观、二是传递信息;其次,中国人讲究曲径通幽,犹抱琵琶搬这边,所有在连接封面和正文之间会有扉页的设计,可空白可设计,如果扉页过多,可能会造成头重脚轻和烦躁之感;再次,扉页多为两页,如果正文页数过多,则可适当增加,一般二十多页的画册扉页不过一张或者两张。

分页方法:

打开网络pdf 思路整体还是来源与的加载。

android中加载网络的框架有很多个。如image-laoder, fresco、glide等,首先都是从内存中找,如果内存中没有,接着从本地找,本地没有在从网络下载。

android中加载pdf也是类似,首先从本地找pdf文件,如果本地存在该pdf文件,直接打开,如果本地不存在,将该pdf文件下载到本地在打开。

下载文件用到了retrofit2的库,已经封装到android_pdf中了。

2依赖android_pdf库方法

21 在项目的gradle中增加如下代码:

compile 'comlidongpdf:android_pdf:101'

22 一句代码就可以加载网络pdf。

```

pdfViewfileFromLocalStorage(this,this,this,fileUrl,fileName);   //设置pdf文件地址

```

23对fileFromLocalStorage(this,this,this,fileUrl,fileName)的解析

/

```

 加载pdf文件

@param onPageChangeListener

@param onLoadCompleteListener

@param onDrawListener

@param fileUrl

@param fileName

/

public  void  fileFromLocalStorage(

final OnPageChangeListener onPageChangeListener,

final OnLoadCompleteListener onLoadCompleteListener,

final OnDrawListener onDrawListener,

String fileUrl,

final String fileName)

```

1 OnPageChangeListener onPageChangeListener  :翻页回调

2 OnLoadCompleteListener onLoadCompleteListener:加载完成的回调

3 OnDrawListener:页面绘制的回调

4 String fileUrl  : 文件的网络地址

5  String fileName 文件名称

3使用android_pdf库方法

31写一个布局文件

```

<xml version="10" encoding="utf-8">

<RelativeLayout xmlns:android=">

xmlns:tools=">

android:id="@+id/activity_main"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="comlidongpdfandroidpdfMainActivity">

<comlidongpdfPDFView

android:id="@+id/pdfView"

android:layout_width="match_parent"

android:layout_height="match_parent"

/>

</RelativeLayout>

```

32在MainActivity中加载

```

import androidgraphicsCanvas;

import androidosEnvironment;

import androidsupportv7appAppCompatActivity;

import androidosBundle;

import androidutilLog;

import androidwidgetToast;

import comlidongpdfPDFView;

import comlidongpdfapiApiManager;

import comlidongpdflistenerOnDrawListener;

import comlidongpdflistenerOnLoadCompleteListener;

import comlidongpdflistenerOnPageChangeListener;

import comlidongpdfutilFileUtils;

import javaioFile;

import javaioFileOutputStream;

import javaioIOException;

import javaioInputStream;

import ok>

import rxandroidschedulersAndroidSchedulers;

import rxfunctionsAction1;

import rxschedulersSchedulers;

public class MainActivity extends AppCompatActivity implements OnPageChangeListener

,OnLoadCompleteListener, OnDrawListener {

private PDFView pdfView ;

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_main);

pdfView = (PDFView) findViewById( RidpdfView );

displayFromFile1(">

}

/

获取打开网络的pdf文件

@param fileUrl

@param fileName

/

private void displayFromFile1( String fileUrl ,String fileName) {

pdfViewfileFromLocalStorage(this,this,this,fileUrl,fileName);   //设置pdf文件地址

}

/

翻页回调

@param page

@param pageCount

/

@Override

public void onPageChanged(int page, int pageCount) {

ToastmakeText( MainActivitythis , "page= " + page +

" pageCount= " + pageCount , ToastLENGTH_SHORT)show();

}

/

加载完成回调

@param nbPages  总共的页数

/

@Override

public void loadComplete(int nbPages) {

ToastmakeText( MainActivitythis ,  "加载完成" + nbPages  , ToastLENGTH_SHORT)show();

}

@Override

public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {

// ToastmakeText( MainActivitythis ,  "pageWidth= " + pageWidth + "

// pageHeight= " + pageHeight + " displayedPage="  + displayedPage , ToastLENGTH_SHORT)show();

}

```

2017年夏天,在苹果全球开发者大会(WWDC)上,苹果公司终于推出了针对于 iOS 的 PDFKit 支持。PDFKit 自从 MacOS 104 以来一直在 AppKit for MacOS 中。但 UIKit 却迟迟得不到支持,尽管苹果公司之前在 iBooks 和 Mail 中使用过 PDFKit , 但是该框架并未向开发人员开房。

PDFKit 包含了大量关于 PDF 相关的功能,例如,打开,修改,绘图和保存 PDF ,也包含了搜索文本。在 iOS 11 后,苹果终于开放了 PDFKit 。目前(虽然离 PDFKit 发布已经过了一年多),但是目前中文资料和 Demo 确实比较少,下面笔者就带着大家简单的了解一下 PDFKit。

主要核心功能如下:

PDFView

PDFDocument

PDFPage

PDFAnnotation

让我看到你们的双手, put your hands up!

引入 #import <PDFKit/PDFKith> ,创建 PDFView ,创建之前,首先要创建 PDFDocument ,这里通过文件路径 URl 进行创建。

创建 PDFView ,将 PDFDucument 对象赋给 PDFView。

至此,就实现了 PDF 的读取及显示。

首先获取 PDFDocument 的属性 PDFPage :

通过 PDFPage 的对象方法,可以获取 PDF 的缩略图,这里需传入的 size:

创建 collectionViewCell ,通过 collectionView 就可以实现一个大致的功能。

点击跳转

获取 cell 的点击事件,取出所点击的 PDFPage 对象,用下述方法进行跳转:

PDFOutline 是一个层级关系的对象,他表示 PDF 的大纲(也就是我们常用的书签)。每个 PDFOutline 对象都可通过 childAtIndex: 方法获取出他的孩子对象, 注意 ,这里需要先判断 numberOfChildren ,以确定该 outline 对象存在多少个孩子节点,避免下标超界引发的崩溃。

实现大纲功能

从 PDFDocument 中获取 PDFOutline

遍历 outline 孩子节点(默认只遍历一层)

当点击节点时,判断有无孩子节点,进行当前数组的新增或删除。

这里搜索功能主要靠下述方法实现

调用此方法之前,首先需将 PDFDocument 设置代理,通过 PDFDocument 的代理进行回调。获取 PDFSelection 对象,

再根据 selection 对象显示搜索内容。

调用下述方法即可对 PDFView 进行缩放,

实现双击缩放或还原:

这里通过设置 pdfView 的 scaleFactor 属性即可实现, 注意 : scaleFactorForSizeToFit 属性是当前 PDF 充满屏幕的比例。

GitHub : >

可以加封面。

是因为你可以讲PDF转换为jpg格式上传到微信图文页面上进行推送,如果你不是指公众平台只是说微信发送给单个朋友,那是可以的,但大小有限制。

另外或者你讲PDF文件上传之云盘,复制上传后文件所在网址,将链接填入阅读原文那一栏,这样也可以变相实现。

pdfview怎么保存方法如下:

1、打开一个AdobeAcrobat的软件,进入界面当中;

2、进行点击AdobeAcrobat的菜单中的文件菜单;

3、点击文件之后,d出了下一级菜单选中为另存为的选项;

4、点击另存为的选项之后,d出了的一个的另存为的窗口的界面,进行输入文件名;

5、输入文件名之后,进行点击保存的按钮;

6、保存成功即可。

PDFView是一个开源的PDF文件查看器,允许用户以图形用户界面(GUI)的方式查看,浏览和编辑PDF文件。

打开pdf文档,查找到指定字符串,然后插入书签

以下代码先设置一个待查找字符串,用findtext方法查找,然后用createchild方法插入书签。代码的运行环境为Win81,Word2010 VBA,Acrobat Pro DC,在本机测试成功。

使用到的主要方法为AVDocFindText和BookMarkcreateChild。

AVDocFindText有4个参数:

szText,要查找的字符串

bCaseSensitive,是否区分大小写,正数为区分,0为不区分

bWholeWordsOnly,是否匹配整个单词,正数为匹配,0为不匹配

bReset,查找开始的位置,正数则从第一页开始,0则从当前页开始

BookMarkcreateChild有3个参数

cName,用户在导航面板中看到的书签的名称。

cExpr,单击书签时要执行的表达式,为JavaScript

nIndex,(可选)在书签的子数组中,创建新子书签的基于0的索引。默认值为0。

Sub Pdf添加书签()

'为某书添加书签

Dim App As New AcrobatAcroApp

Dim PDoc As New AcrobatAcroPDDoc, AVDoc As New AcrobatAcroAVDoc

Dim Jso As Object

Dim BMark As Object '不能声明为AcrobatAcroPDBookmark,否则createchild方法不可用。

Dim PFile As String, WordTF As String, PageNum As Long

PFile = "F:\指定文件pdf" '要插入书签的pdf文件

WordTF = "要查找的"

If PDocOpen(PFile) Then

Set Jso = PDocGetJSObject

Set AVDoc = PDocOpenAVDoc("")  '获得一个可见文档

JsobookmarkrootRemove '移除原有的所有书签

End If

If AVDocFindText(WordTF, 0, 0, 1) Then '从第一页开始,如果找到了字符串WordTF一次

PageNum = AVDocGetAVPageViewGetPageNum '获得当前页码

Set BMark = Jsobookmarkroot '设置书签根对象

BMarkcreateChild WordTF, "thispageNum=" & PageNum, 0 '创建一个书签

PDocSave 1, PFile

End If

PDocClose

AppCloseAllDocs

AppHide

AppExit

Set AVDoc = Nothing

Set PDoc = Nothing

Set App = Nothing

Set BMark = Nothing

Set Jso = Nothing

End Sub

以上就是关于iOS 原生加载PDF文档(主要功能:跳转指定的页码)全部的内容,包括:iOS 原生加载PDF文档(主要功能:跳转指定的页码)、画册pdf文档中要加入扉页吗、android 如何获得pdf文件的页数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9436665.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存