导航:首页 > 文档加密 > pdf制作阅读器

pdf制作阅读器

发布时间:2023-07-14 18:41:54

⑴ 福昕阅读器怎么把多张照片转为pdf

1、安装福昕PDF阅读器,安装时把福昕PDF虚拟打印机勾选上。系统出现福昕PDF虚拟打印。
2、选中要制作PDF文件的图片。
3、在上步骤游兄选中的图片中图标上右击,弹出快捷菜单。选择“打印”。弹出“打印图片对话框”。
4、在弹出“打印图片对话框”中打印机选择“Foxit Reader PDF Printer”也就是早锋福昕PDF虚拟打印机。
5、单击“打印图片对话框”中的“打印”神睁袭。
6、在弹出对话框,选择要保存的目录,然后单击”保存“。开始把图片打印成Pdf格式。
7、打开刚制作的PDF文件,可以看到前面选的5张图片已经合成1个PDF文件。

⑵ 制作安卓PDF阅读器:三、实现文本选择

我为什么要开启这个系列,努力试着从源头开始,用 PDFium 制作一款阅读器?有人喜欢问这个做了有什么用,这个是唯一的吗?

当然不是唯一的,底层技术更不是我的。不过我认为在维护者的推动下,PDFium 越来越完善,功能越来越多,不 真正 拿来做些什么实在是可惜了。另一个重要原因则是,其他APP要么臃肿或者简陋,要么用着磕手、滑动卡顿、误触频发,而且大多还不免费。( 更正,近年来倒是多了好多免费的PDF阅读器 )

目标期望:

热身运动:当检测到单击( GestureDetector )时,若点击处存在超链接,则打印出超链接的对象。

头文件:fpdf_doc.h

需要将屏幕坐标转换为页面坐标,然后再次在native层转换为所谓的user space、page space。别问我那是啥我也不知道。不过在论坛提问后,有人替我指出了相关文档所在,有时间去看看!

屏幕坐标:[event.getX(), event.getY()]
页面坐标:先前提过将整本PDF当作一张超级大图,subsampling-scale-imageview 有一系列的 viewToSource 坐标转换方法。屏幕转换得到 source 坐标后,减去点击页面的左上角坐标,就是页面坐标。

原始页面坐标需用 FPDF_DeviceToPage 再次转换,才能传给FPDFLink_GetLinkAtPoint,获取坐标处的链接指针。

超链接对象统一返回字符串,可以是Uri地址,也可以是页码 @页码 。

热身运动2:在单击处获取一个英文单词或者汉语词组,需要用到安卓的 BreakIterator。

头文件:fpdf_text.h

首先实现 nativeGetCharIndexAtCoord 方法,获取单击附近的文字索引,需进行同样的坐标转换。

若返回的文字index大于等于零,则此 index 指向该页面全部文本当中的一个字符。全部文本用 FPDFText_GetText 获取(实现 nativeGetText):

接下来就可以用 BreakIterator 分词了:

与绘制PDF本身差不多,不过 bitmap 换成 rect 而已。用到的API依次是FPDFText_CountRects、FPDFText_GetRect。

直接将选框覆盖绘制在前。若要绘制在后面的背景上,就需要三层透明视图了,那么加载铺块和缩略图的时候就要用透明色清空 bitmap,页面的白色背景等也需要另外绘制(Google PDF Viewer应该就是这样,还给背景加了阴影)。这些较为复杂,到时候再说。

有个问题可能需要解决:同一行的选框,部分没有合并。

都是小事儿,暂时不在这上面花时间。

之前做过类似的事情,将普通 TextView 自带的文本选择功能禁用了,然后用API自己做出一个来,包括单击选词,长按托选,放大镜等等。所以相关的内容还是熟悉的。

绘制 Selection Handle 可以用 AppCompat 支持库中的图标资源:

控点的触控操作也很简单,在 Action_Down 中检测落点是否在其中一个 handle 内。若是,则在 Action_Move 中一边移动该 handle,一边检测新的字符索引,作为文本选择的新边界。

由于PDF的复杂性,页面上的字符索引可能间杂排列,比如头一段开头是100,下一段开头50,再下一段150。这就造成先前简单的选择系统“失效”了:

没什么解决方案,API 就这么点。而且,静读天下、Google PDF 查看器都是这样的,唯有 ezpdfreader 没有这个问题。

⑶ 制作安卓PDF阅读器:七、实现多实例打开、文档目录树

无论什么平台,任何查看器都理应支持多实例模式。不仅仅要支持多实例模式,还要可以切换到单实例模式,而且在多实例下,在外部App重复打开同一文件,可跳转至已有实例,而不会重复打开相同的多实例,这便是设计。

为此,需大量运用 static 全局变量。不必担心内存泄漏,只要不崩溃,就可以在 onDestroy 中释放引用。若是不慎崩溃,整个虚拟进程都被关闭了,又有什么可担心的呢?

从桌面打开主界面有两种选择:

主界面UI

底栏:【前进,后退,搜索,书签大纲,宫格更多】

宫格更多 第二底栏(底栏之上)
宫格:【夜间模式,历史记录,书签,设置,缩略图模式,转屏,朗读,页面跳转,进度条,小缩略图,左侧小缩略图,右侧小笔记】

底栏:【退出程序,退离程序,返回】

尼玛这些慢慢做,够我做一年……

先从底栏做起吧,然后定制底栏,然后宫格及其变形动画。

燃鹅时间有限,所以可能取消动画,取消自定义,速战速决……

优化 TellH / RecyclerTreeView :

其实 listview 也能达到类似的效果(见下方),不过既然有人(似乎是抖音安卓团队)专门抽离出了libarary,就不必再造轮子了,改进就行。寥寥二三文件就不必新建库模块了,源码拉直接拉进去,简单又省事。

目录对话框:viewpager,并排【书签,目录,注释列表】

Dialog + viewpager + FragmentPagerAdapter + 以上三个Fragment

需注意 FragmentPagerAdapter 的构造参数。应当传入 getChildFragmentManager() 而不是 getSupportFragmentManager(),否则因为这里是 Dialog 嵌套 Fragment,传全局的FragmentManager会导致APP崩溃(No view found for id … for fragment … 异常)。

既然决定使用 Dialog 了,不妨直接上 DialogFragment。后者的配置更加灵活,既可以当做 Dialog 弹出对话框,又可以选择将之当作普通的 Fragment ,直接加载进入主界面布局。

对话框界面设计分三层:

Toolbar【各种小按钮】
viewpager【书签,目录,注释列表】
TabLayout【书签,目录,注释列表】

拉取PDF目录,需要用到的API有:FPDFBookmark_GetFirstChild、FPDFBookmark_GetNextSibling、FPDFBookmark_GetTitle、FPDFBookmark_GetDest,没有编辑功能。

其实 PDF 的书签目录除了页码外,还可以包含一些视图参数,大概是缩放、页面位置这些。既然PDFium不支持编辑书签,那暂时就这样。

记录一下复用这个目录树对话窗口引发的recyclerview不响应notifydatasetchanged调用的bug。(解决fragment嵌套viewpager再嵌套recyclerview导致recyclerview无法正常更新的BUG。)

dismiss并复用后,点击列表中的目录,目录不再展开,recyclerview不更新视图。但是 滚动 一下recyclerview(即使条目很少无法真正滚动,向上划一下也会有效果。),发现视图更新了,这证明逻辑处理并无问题。那么问题出在哪呢?

答案是 viewpager 的adapter不能被复用。关键在于这个adapter传入了一个getChildFragmentManager()对象。而这玩意儿在对话框dismiss后就会立即失效。所以即使视图是复用的,第二次的onCreateView也需要重新给viewpager设置adapter。

阅读全文

与pdf制作阅读器相关的资料

热点内容
vsc编译vc程序 浏览:193
centos55命令 浏览:705
美国干编程有什么条件 浏览:505
阿里云服务器远程链接 浏览:249
墨镜慧眼怎么下载厂商的app 浏览:61
iphone加密专线 浏览:491
aes产生加密文件 浏览:415
编程实现蓝牙通信 浏览:768
怎么恢复掉签的app 浏览:847
服务器部署ip地址 浏览:322
涉密场所周边安全防护距离算法 浏览:674
安卓fpse模拟器怎么设置加速 浏览:947
建行app怎么生成电子签章 浏览:508
获取当前时间javadate 浏览:75
带密码的wifi如何加密 浏览:238
服务器怎么变成阵列 浏览:719
web前端黑客技术pdf 浏览:72
育儿百科全书pdf 浏览:601
任务栏启动命令 浏览:913
编译优化等级区别 浏览:758