① c# 实现pdf文件预览功能
利用Adobe PDF Reader 控件,实现在Winform中预览PDF文档。 实现方法如下:
(1)前提条件
必须事先在计算机安装Adobe Reader软件。Adobe Reader是免费软件,可以从Adobe官网下载安装
(2)在Visual Studio中新建一个“Windows 窗体应用程序”项目
(3)在工具箱上点鼠标右键-->选择项 -->COM组件-->Adobe PDF Reader
② 制作安卓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。
④ android 如何获得pdf文件的页数
分页方法:
打开网络pdf 思路整体还是来源与图片的加载。
android中加载网络图片的框架有很多个。如image-laoder, fresco、glide等,首先都是从内存中找图片,如果内存中没有,接着从本地找,本地没有在从网络下载。
android中加载pdf也是类似,首先从本地找pdf文件,如果本地存在该pdf文件,直接打开,如果本地不存在,将该pdf文件下载到本地在打开。
下载文件用到了retrofit2的库,已经封装到android_pdf中了。
2.依赖android_pdf库方法
2.1 在项目的gradle中增加如下代码:
compile 'com.lidong.pdf:android_pdf:1.0.1'
2.2 一句代码就可以加载网络pdf。
```
pdfView.fileFromLocalStorage(this,this,this,fileUrl,fileName); //设置pdf文件地址
```
2.3对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库方法
3.1写一个布局文件
```
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.lidong.pdf.androidpdf.MainActivity">
<com.lidong.pdf.PDFView
android:id="@+id/pdfView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
```
3.2在MainActivity中加载
```
import android.graphics.Canvas;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.lidong.pdf.PDFView;
import com.lidong.pdf.api.ApiManager;
import com.lidong.pdf.listener.OnDrawListener;
import com.lidong.pdf.listener.OnLoadCompleteListener;
import com.lidong.pdf.listener.OnPageChangeListener;
import com.lidong.pdf.util.FileUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import okhttp3.ResponseBody;
import rx.android.schelers.AndroidSchelers;
import rx.functions.Action1;
import rx.schelers.Schelers;
public class MainActivity extends AppCompatActivity implements OnPageChangeListener
,OnLoadCompleteListener, OnDrawListener {
private PDFView pdfView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pdfView = (PDFView) findViewById( R.id.pdfView );
displayFromFile1("http://file.chmsp.com.cn/colligate/file/00100000224821.pdf", "00100000224821.pdf");
}
/**
* 获取打开网络的pdf文件
* @param fileUrl
* @param fileName
*/
private void displayFromFile1( String fileUrl ,String fileName) {
pdfView.fileFromLocalStorage(this,this,this,fileUrl,fileName); //设置pdf文件地址
}
/**
* 翻页回调
* @param page
* @param pageCount
*/
@Override
public void onPageChanged(int page, int pageCount) {
Toast.makeText( MainActivity.this , "page= " + page +
" pageCount= " + pageCount , Toast.LENGTH_SHORT).show();
}
/**
* 加载完成回调
* @param nbPages 总共的页数
*/
@Override
public void loadComplete(int nbPages) {
Toast.makeText( MainActivity.this , "加载完成" + nbPages , Toast.LENGTH_SHORT).show();
}
@Override
public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {
// Toast.makeText( MainActivity.this , "pageWidth= " + pageWidth + "
// pageHeight= " + pageHeight + " displayedPage=" + displayedPage , Toast.LENGTH_SHORT).show();
}
```
⑤ 安卓平板到底行不行—Galaxy Tab S7使用三个月感想
因为我想要一个设备来随时方便地阅读文献与记笔记(其实是摸鱼看爱奇艺)那为什么要买一个安卓平板? iPad Pro不香吗?香是香,可是我除了一个mac mini,一个airpods 还有一台黑苹果也没啥iOS生态。而且iOS还没有我肥肠喜欢的某些安卓独有的特色爱啪啪(例如kiwi浏览器,可以装任何chrome插件;例如tachiyomi,可以看几乎所有漫画 ,此外还有等等等iOS给不了的优秀独立app)
正面
背面
原装皮套支架效果
既然是打着促进学习的旗号买的平板,当然要记笔记啊。作为一个苦逼基础医学研究僧,每天除了肝实验就是在看文章(以及找机会摸鱼 )
由于我在PC上使用Zotero作为文献管理工具,并且设置了Webdav来同步文献PDF,所以我在平板上安装了Zoo for zotero,一样也能同步条目和PDF附件 !配合xodo在PDF里标记和勾勾画画非常舒适!
一些随笔笔记则使用三星笔记记录,笔迹非常跟手几乎毫无延迟,听讲座的时候记笔记很方便。可以说自从买了这个板板之后我主要都是用平板来看文献了,效率高的不止一点 。
三星笔记用来随记
三星笔记
顺带一说三星笔记在Win10端有UWP,但非三星电脑没法从微软商店下载,不过可以从不正经的渠道安装 ,而且一样能同步。
配合Xodo看文献是真的舒服
第二个痛点就是为了桌面模式,连上蓝牙鼠标键盘,俨然成了一台不太正经的PC。甚至还能连接显示器来使用,双屏显示
。在Dex模式下,三星浏览器,Edge,kiwi都能很好的支持PC页面。特别推荐kiwi浏览器,安装了user-agent switch和油猴之后,几乎能获得和PC端chrome浏览器一致的体验。不过Dex模式下也有某些app dpi适应有点问题(没错就是微信,qq音乐,还有x宝),B站、A站的app也没法全屏播放,腾讯视频和爱奇艺倒是有正经的hd版(体验意外的还不错,果真买后爱奇艺 )。不过既然都有kiwi了,看B站就不如直接浏览器播放来的舒服了,再整点油猴脚本,浏览体验噌噌噌地上涨啊
Tab S7的Dex模式-还能同时使用平板
比较爽的是在连接显示器开启Dex模式的同时还能操控正常模式的平板,相当于拓展了一个副屏 。不过使用外接显示器似乎就没法在平板上开启120Hz了,略有不爽
大家都知道华为的跨屏协同很不错,其实三爽也有类似的操作,就是Samsung Flow(三星用户手册.ipg )。使用这玩意就能够在平板上同步手机的通知以及传输文件(前提你得是三星手机),还能够直接把手机投屏上去,开启套娃模式
使用flow协同的手机摄像头对着屏幕XD
视觉:120hz 刷新率感知很强,但由于是LCD所以相比于OLED存在一些拖影,不过依旧非常顺滑。另外虽然不支持HDR,但是支持P3色域,亮度宣称也有500nit,加上2k屏的加持,观感上还是不错的。
听觉:AKG调音的四扬声器真的非常非常,声音洪亮、层次感非常足(玄学听感,至少比我的elitebook的喇叭好)
文字处理:虽然微软全家桶功能上做的差强人意,不过我觉得至少满足最基本的文字需求还是可以的...配合onedrive改个PPT,写点小报告也还行。照片修图:这个就得提到Lightroom了,安卓端的lightroom我觉得已经可以基本上满足很多人的需要了。基本的控制条都有,而且还能用预设,简单修个图完全足够。什么?你说处理raw格式要订阅?嘿嘿,资金不充裕的同学可以转道酷安找找快乐版。 如果还要更加高级的功能,还可以下载PS Mobile ,这玩意基本上就是网页版photoshop的本地缓存套壳,可以离线使用,除了不能装插件基本上正经photoshop该有的功能都有了,配合spen修图ps爽歪歪 。
Lightroom for Samsung基本上该有的都有了,不过我看非samsung专版的lightroom基本上也差不多就少了几个三星的模板
实在需要PS还有PS Mobile这个神器
虽然有865加持,但由于我基本上不玩手游,所以我也对性能啥的也没啥感觉。对于平板的主要 娱乐 用途就是看视频和漫画。虽然B站app不咋地,但是腾讯视频HD和爱奇艺HD都意外的还行,UI布局设计啥的明显都对平板有优化。另外我还在自己的NAS上部署了Plex服务器(小姐姐们的家 ),配合plex的app体验还不错。而至于漫画,那必须推荐tachiyomi这个神器,使用这个app几乎可以下载所有网络上的漫画(甚至是某些里站 ),对于看漫画来说大屏幕真的太舒服了。
PLEX
漫画神器TachiyomiJ2K,在平板上看更是舒服
屏幕品控和拖影:许多人说S7屏幕边角发黄,我也翻车了 ,不过我觉得还行,正常情况下看不太出来(如果能换S7+的OLED屏将绝杀,可惜换不得 )。另外相比较手上OLED屏幕的S20,LCD的120hz确实有明显的拖影,敏感的人还是选择S7+吧。
镜头拉跨:虽然几乎不用后置的镜头,但画质实属不行,只能说有个广角聊胜于无吧。
应用生态:其实这应该属于安卓碎片化和国内流氓厂商的锅,太多应用没有对平板做适配了。虽然现在的安卓api框架下大多数应用都能做到dpi自适应(这一点比ipad好,至少不会不适配就给你整个大黑边),但布局完全就是个大号手机,甚至某些厂商连自适应dpi都给你阉割掉(某鹅厂某ali,这一点上甚至不如很多独立制作的app),尤其DEX模式的自定义比例窗口主要依靠的就是安卓应用的dpi自适应,而微信qq音乐某宝JD这些毒瘤直接给你阉割掉,整出各种奇葩问题(好消息是8.0版的微信似乎终于支持自适应dpi了,可喜可贺zxldm回来了)
看着好像还行的qq音乐小窗口
一全屏给你整成这样
安卓平板值不值得买?我寻思还是值得的,虽然处理器性能比ipad pro差得远,但实际上轻度的办公修图还是没问题的。而且安卓平板现在标配的桌面模式加上无限制数量任意调整大小的小窗口,实际上带来了更加接近传统PC的体验,接上鼠标键盘那操作的效率简直指数性提升 。再加上安卓端还有一些神级别的浏览器可以安装桌面chrome的插件(比如kiwi,yandex,firefox,嗯还有锤子),直接大大提升了用平板浏览网页的感受 。这些都是安卓本身的优点。说到桌面模式,我其实对锤子的TNT也很感兴趣,特别是最近发现锤子的浏览器竟然支持了桌面chrome插件,可惜锤子无了,以后可能也不会再有人接盘了。
那么iPad呢?iPad OS在我的感觉来看,就是想要在iOS的基础上拓展多任务处理能力,但做的实在一言难尽...让人感觉苹果就是不想把正经的macOS或者一个阉割版的macOS桌面模式放到iPad OS里 。假如iPad Pro能够一插显示器或者一接键鼠直接启动macOS,那还不直接香爆? 这生产力不比现在的iPad OS强?论A14的能力运行macOS轻轻松松吧?希望苹果和安卓能够继续互相借鉴,无论是iPad也好安卓平板也好,其实在生产力上还大有可为,在轻度应用上取代传统笔记本几乎就在肉眼可见的未来。
⑥ 《Android程序设计Android程序设计》pdf下载在线阅读,求百度网盘云资源
《Android程序设计》(Zigurd Mednieks)电子书网盘下载免费在线阅读
链接:https://pan..com/s/1AbudOHIhnJ5-KQH-jLNBYw
书名:Android程序设计
作者:Zigurd Mednieks
译者:祝洪凯
出版社:机械工业出版社华章公司
出版年份:2013-3-1
页数:456
内容简介:
如何才能构建设计良好的Android应用?通过本书提供的权威指南,深入探索Android核心模块及其API,了解如何创建可以运行在一系列Android设备上的出色的应用软件。本书将带你探索行之有效的应用设计和实施方式,包括一些应用框架,你可以把这些框架作为自己项目的起始点。
深入传感器、本地开发、3D图形和许多其他主题,并发现如何在选择的平台上构建应用程序。如果你要进阶到高级程序员,你将学会如何创建良好的Android应用程序。
作者简介:
Zigurd Mednieks是领先的OEM、企业和创建基于Android系统的创业投资顾问。
Laird Dornin是一家大型无线运营商的高级工程师,在Java、Android、J2ME、SavaJe和WebKit方面有丰富的经验。
G.Blake Meike是一位经验丰富的开发人员,为移动和服务端平台构建Java应用有丰富的经验。
Masumi Nakamura是Where Inc.的Big Data和Recommendations组的首席架构师。
⑦ android怎么和支付宝实现接口对接
可以在支付宝开放平台下载Android SDK对接文档,地址: https://openhome.alipay.com/doc/docIndex.htm 希望对你有用
⑧ Android上生成word或者pdf,有开源的api么
Android上生成word或者pdf,有开源的api么?思路有两个:
1、通过jni调用 ms word com接口 生成pdf
2、使用openoffice生成pdf
从生成的质量来看,第一种效果好,毕竟是微软自家产品。第二种对于普通的文档,转换基本没什么问题,但是在对于word文档里有公式式或特殊内容,转换出来会变形。下面的代码是使用
Jacob转换的 代码有点长:我整理的文章:itate-动态-文章《Android上生成word或者pdf,有开源的api么?》