FOXIT PDF SDK(iOS版)

使用Foxit PDF SDK(iOS版)可以在您的iOS应用中轻松集成PDF技术。福昕还提供了内置PDF查看器和用户界面扩展组件,可以减少开发时间,使得PDF库简单易用,即使对于那些不大了解PDF技术的人来说也是如此。选择Foxit PDF SDK(iOS版),通过专业且易于使用的软件开发工具包,满足您项目所有需求。

使用FOXIT PDF SDK(iOS版)开发PDF软件

Foxit PDF SDK(iOS版)集成了您开发iOS应用程序所需的全部PDF技术。Foxit PDF SDK(iOS版)支持主流iOS 开发语言:Swift 和Objective-C和Cordova/Xamarin/React Native等跨平台框架,用户可方便快速地在这些跨平台框架中集成福昕的SDK,增加对PDF的支持。开发人员可通过 Foxit PDF SDK(iOS) 开发出具有强大PDF 处理功能、完善PDF权限管理体系的一流的移动应用产品。福昕的SDK 和用户界面扩展组件可以确保您的应用程序提供用户所需的所有PDF功能和特性。

PDF SDK for iOS Support

功能

查看PDF

我们的核心API针对桌面和移动平台进行了优化,可以提供高保真度PDF文档渲染体验。

数字签名

无需打印文件,用户可以在其电子设备上签署文件,加速业务处理,并给用户带来舒适的体验。

PDF表单

支持使用电子设备填写数字表单,使之更高效、快捷。

权限管理

Foxit PDF SDK可以通过加密/解密服务或集成自定义数字权限管理(DRM)或信息权限管理(IRM)系统生成受保护的PDF文件。福昕的PDF SDK集成了微软权限管理服务(RMS)。

PDF注释

Foxit PDF SDK提供全面的注释和标记功能,支持创建、编辑、导入和导出注释等。
 
 

全文搜索

对任何语言或编码类型PDF文档支持快速全文搜索功能。即使是搜索各类数字设备上的文件库,基于SQLite的全文搜索都能提供近乎即时的结果。
 

Announcing PDF SDK 6.2 

Foxit PDF SDK 6.2 introduces a brand-new Objective-C API for development in Mac, and extended support for Microsoft AD RMS 2.1.

Additionally, in Android and iOS we have added UI improvements, full support for multimedia annotations (audio, video, and voice!) as well as full XFA form support.

高级技术

XFA表单

XFA表单是基于XML的表单。能够安全获取、呈现、移动、处理、输出、更新和打印与静态和动态XFA表单相关的信息。使用XFA表单能简化您的数据共享、数据和获取。

权限管理

将应用程序和文件连接到微软的权限管理服务平台,保护PDF文档的安全。Foxit PDF SDK支持集成自定义IRM和DRM解决方案。
 
 

OCR文字识别

利用福昕高度精确的文字识别(OCR)引擎将扫描的文档转换成可搜索的PDF文件。这一强大的功能是为扫描文件、存档和文件数字化而设计的,支持输出PDF和PDF/A等13种格式文件。

密文处理

出于合法或安全的考虑,通过编程实现搜索和审查文档的敏感信息,确保您的客户和员工的信息安全。通过福昕强大的技术加密文档,使得文档符合通用数据保护条例(GDPR)。

互联PDF

利用福昕的尖端技术,通过编程,为PDF文件提供智能管理、安全保护和协同合作服务。只需一个SDK,就能实时保护文档、访问分析数据和协同处理文档。
 

转换

利用我们的转换和压缩技术更快地转换和存储文件。支持将TIFF、JPEG、Word、Email、HTML、ASCII文本等格式文件转换PDF和PDF/A等文件。
 

试用福昕技术

福昕阅读器(iOS版)是使用PDF SDK(iOS版)开发而成,可以从应用商店免费下载。欢迎立即试用。

优点

原生用户界面

PDF SDK(iOS版)专为开发人员构建。我们提供了内置PDF阅读器,使您开发工作量减半,并允许您自定义此阅读器。

易于集成

我们开发iOS PDF库时将平台作为首要考虑因素。我们遵循iOS的命名规范,使我们的程序符合iOS应用程序标准。

选择我们

Foxit PDF SDK提供了更好的渲染质量和丰富的功能,包括注释、表单、签名等功能,是您构建PDF功能的不二选择。

福昕核心技术支持

Foxit PDF SDK的核心技术已经存在多年,并且受到许多知名公司的信任。福昕强大的引擎使文档在所有平台上都可以快速查看并且保持一致。

系统要求

  • iOS 9.0或更高版本
  • Xcode 9.0或更高版本(使用Objective-C)
  • Xcode 9.0或更高版本(使用Swift)

Xcode样例代码

    /** @brief	Edit bookmark appearances and titles, and save these changes to a PDF file. */
    func modifyBookmarkOfDoc(_ doc: FSPDFDoc, saveAsNewDocAtPath path: String) -> Bool {
        if path == "" {
            return false
        }
        let rootBMark = doc.getRootBookmark()
        guard let child = rootBMark?.getFirstChild() else {
            return false
        }
        if !(self.setPropertiesOfBookmarks(child)) {
            return false
        }
        doc.save(as: path, save_flags: 0)
        return true
    }
    
    class func parsePage(_ page: FSPDFPage, reparse: Bool) -> Bool {
        let progressive = page.startParse(0, pause: nil, is_reparse: reparse)
        if progressive == nil {
            return true
        }
        
        while true {
            let state = progressive!.resume()
            switch state {
            case .finished:
                return true
            case .toBeContinued:
                continue
            case .error:
                return false
            default:
                fatalError()
            }
        }
    } 
	
    func setPropertiesOfBookmarks(_ bookmark: FSBookmark?) -> Bool {
        if bookmark == nil {
            return false
        }
        var bk: FSBookmark!
        bk = bookmark!
        while !bk.isEmpty() {
            let title = bk.title!
            bk.title = "\(String(describing: title))_renamed" as NSString
            bk.color = 0x0000ffff
            bk.style = UInt32(FSBookmarkStyle.bold.rawValue)
            
            let child = bk.getFirstChild()!
            if !child.isEmpty() {
                self.setPropertiesOfBookmarks(child)
            }
            bk = bk!.getNextSibling()
        }
        return true
    } 
    /** @brief	Render a specified page to Bitmap, and save it to a PNG image. */
    func renderPage(_ page: FSPDFPage, atPath path: String) -> Bool {
        if path == "" {
            return false
        }
        if !page.isParsed() {
            if !PlatformAPIDemo.parsePage(page, reparse: true) {
                return false
            }
        }
        //create bitmap
        let pageWidth: Int = Int(page.getWidth())
        let pageHeight: Int = Int(page.getHeight())
        
        let bmp = FSBitmap(width: Int32(pageWidth), height: Int32(pageHeight), format: .dibRgb32, buffer: nil, pitch: 0)!
        
        bmp.fillRect(0xffffffff, rect: nil)
        //init renderer
        let render = FSRenderer.init(bitmap: bmp, is_rgb_order: true) 
        if render == nil {
            return false
        }
        
        //set different kinds of properties
        render!.setRenderContentFlags(1)
        render!.setTransformAnnotIcon(true)
        render!.setColorMode(FSRendererColorMode.normal)
        render!.setMappingModeColors(0xffffffff, foreground_color: 0x0000ffff)
        render!.setForceHalftone(true)
        let mat = page.getDisplayMatrix(0, top: 0, width: Int32(pageWidth), height: Int32(pageHeight), rotate: .rotation0)
        let progressive = render!.startRender(page, matrix: mat, pause: nil)
        if progressive != nil {
            while true {
                let state = progressive!.resume()
                if state == .error {
                    return false
                } else if state != .toBeContinued {
                    break;
                }
            }
        }
        if !self.save2PNGWithBitmap(bmp, transform: nil, Path: path as NSString) {
            return false
        }
        return true
    } 
	
    func save2PNGWithBitmap(_ fsBitmap: FSBitmap, transform: CGAffineTransform?, Path path: NSString) -> Bool {
        if path == "" {
            return false
        }
        let pageWidth: Int = Int(fsBitmap.getWidth())
        let pageHeight: Int = Int(fsBitmap.getHeight())
        if pageWidth <= 0 || pageHeight <= 0 {
            return false
        }

        let provider = CGDataProvider.init(data: fsBitmap.getBuffer() as CFData)
        
        let image = CGImage(width: pageWidth, height: pageHeight, bitsPerComponent: 8, bitsPerPixel: 32, bytesPerRow: Int(fsBitmap.getPitch()), space: CGColorSpaceCreateDeviceRGB(), bitmapInfo: .byteOrder32Big, provider: provider!, decode: nil, shouldInterpolate: true, intent: .defaultIntent)!
        let uiImage = UIImage(cgImage: image)
        let fileURL = URL(fileURLWithPath: path as String)
        do {
            try UIImagePNGRepresentation(uiImage)!.write(to: fileURL)
        } catch {
            print(error)
            return false
        }
        return true
    }