Foxit PDF SDK(Android)
使用福昕现代的、易于使用的PDF SDK(Android),可以轻松在安卓设备中创建、查看和编辑PDF文件。除了福昕强大的核心API之外,我们还提供内置用户界面扩展组件,即使开发团队对PDF知识了解有限,我们也可以帮助您快速开发产品。基于Fx Core™技术,PDF SDK(Android)可以为您提供快速、准确的开发体验。
使用PDF SDK(Android)开发PDF软件
使用Android Studio开发PDF软件的开发人员可以在Java、Kotlin或C++的开发语言环境中使用我们的PDF SDK(Android)。通过JavaScript,您可以通过Cordova或React Native等移动开发框架绑定RDK库来进行更多的原生开发。福昕为安卓开发者提供了开发PDF软件所需的基本要素,让他们可以轻松地使用我们的技术。简单地说,我们的核心API使我们的产品能够被任何水平和经验的开发人员所使用。
功能
查看PDF
我们的核心API针对安卓和其他移动平台进行了优化,可以提供高保真度PDF文档渲染体验。
数字签名
无需打印文件,用户可以在其安卓设备上签署文件,加速业务处理,并给用户带来舒适的体验。
PDF表单
支持使用安卓设备填写数字表单,使之更高效、快捷。
权限管理
PDF注释
PDF SDK(Android)提供丰富的注释和标记功能,支持创建、编辑、导入和导出注释等。
全文搜索
采用SQLite数据库,支持对多种语言类型的PDF文档进行全文检索,提供快速、便捷的搜索体验。
福昕 PDF SDK 简介
我们的高性能库使用最流行的开发语言及环境,为所有平台的企业、移动和云应用程序助力,提供强大的PDF功能。
福昕PDF (WEB) 10.0版本突破性的改变将多维度升级您的使用体验!
我们通过重构书签模块提高了书签加载的时间效率。停止对ASM.JS引擎的支持,并放弃了对Safari V.11以下旧版本的支持;从而压缩SDK包体积,专注于维护更现代和高效的技术。引入新库加载模式,将静态库加载方法切换为动态库加载方法;由一个主模块和几个副模块组成。提供更快的初始加载时间和更少的内存使用。
于此同时,我们支持PDF 3D模型。实现动态XFA表单脚本功能,并使XFA表单在我们的Web SDK中真正具有交互性和数据驱动性。使用 /V字典来创建签名等等特色新的功能,我们期待您的试用与宝贵的意见交互!
高级技术
XFA表单
XFA表单是基于XML的表单。能够安全获取、呈现、移动、处理、输出、更新和打印与静态和动态XFA表单相关的信息。使用XFA表单能简化您的数据共享、数据和获取。
权限管理
将应用程序和文件连接到微软的权限管理服务平台,保护PDF文档的安全。福昕 PDF SDK支持集成自定义IRM和DRM解决方案。
密文处理
出于合法或安全的考虑,通过编程实现搜索和审查文档的敏感信息,确保您的客户和员工的信息安全。通过福昕强大的技术加密文档,使得文档符合通用数据保护条例(GDPR)。
优点
原生用户界面
PDF SDK(Android)专为开发人员构建。我们提供了内置PDF阅读器,使您开发工作量减半,并允许您自定义此阅读器。
适用于Google Play
PDF SDK(Android)完全符合谷歌对应用开发者使用第三方组件的政策,这意味着使用福昕PDF SDK(Android)开发,您的应用程序将会更快地在Googly Play应用商店上架。
兼容多种设备
无论是智能手表、手机,还是Chromebook,甚至是汽车,福昕 PDF SDK都能像您期望的那样,帮助您实现在应用程序中查看PDF文档。
福昕核心技术支持
福昕 PDF SDK的核心技术已经存在多年,并且受到许多知名公司的信任。福昕强大的引擎使文档在不同平台上都可以快速查看并且保持一致。
Android Studio样例代码
public class Render { private Context mContext = null; private String mPath = null; public Render(Context context, String path) { mContext = context; mPath = path; } public void renderPage(int index) { PDFDoc doc = Common.loadPDFDoc(mContext, mPath, null); if (doc == null) return; try { int pageCount = doc.getPageCount(); if (index > pageCount || index < 0) { Toast.makeText(mContext, String.format("The page index is out of range!"), Toast.LENGTH_LONG).show(); return; } String name = mPath.substring(mPath.lastIndexOf("/") + 1, mPath.lastIndexOf(".")); String outputFilePath = String.format("%s_index_%d.jpg", Common.GetOutputFilesFolder(Common.renderModuleName).concat(name), index); PDFPage pdfPage = Common.loadPage(mContext, doc, index, PDFPage.e_ParsePageNormal); if (pdfPage == null) { return; } //Create the bitmap and erase its background. Bitmap bitmap = Bitmap.createBitmap((int) pdfPage.getWidth(), (int) pdfPage.getHeight(), Bitmap.Config.ARGB_8888); //If the page has transparency, the bitmap should be erased "Color.TRANSPARENT". if (pdfPage.hasTransparency()){ bitmap.eraseColor(Color.TRANSPARENT); } else { bitmap.eraseColor(Color.WHITE); } Matrix2D matrix = pdfPage.getDisplayMatrix(0, 0, (int)pdfPage.getWidth(), (int)pdfPage.getHeight(), Constants.e_Rotation0); Renderer renderer = new Renderer(bitmap,true); //Render the page to bitmap. Progressive progressive = renderer.startRender(pdfPage, matrix, null); int state = Progressive.e_ToBeContinued; while (state == Progressive.e_ToBeContinued) { state = progressive.resume(); } progressive.delete(); if (state == Progressive.e_Error) { Toast.makeText(mContext, String.format("Failed to render the page No.%d failed!", index), Toast.LENGTH_LONG).show(); return; } //Save the render result to the jpeg image. if (false == Common.SaveImageFile(bitmap, Bitmap.CompressFormat.JPEG, outputFilePath)) { Toast.makeText(mContext, String.format("Failed to Save Image File!"), Toast.LENGTH_LONG).show(); return; } renderer.delete(); pdfPage.delete(); Toast.makeText(mContext, Common.runSuccesssInfo + outputFilePath, Toast.LENGTH_LONG).show(); } catch (PDFException e) { Toast.makeText(mContext, String.format("Failed to render the page No.%d! %s", index, e.getMessage()), Toast.LENGTH_LONG).show(); } finally { Common.releaseDoc(mContext, doc); } } }