11package com.pspdfkit.flutter.pspdfkit
22
3+ import android.annotation.SuppressLint
34import android.content.Context
45import android.content.MutableContextWrapper
56import android.net.Uri
7+ import android.util.Log
68import android.view.View
79import androidx.fragment.app.Fragment
810import androidx.fragment.app.FragmentActivity
@@ -11,19 +13,21 @@ import androidx.fragment.app.FragmentManager
1113import androidx.fragment.app.commit
1214import androidx.fragment.app.commitNow
1315import com.pspdfkit.document.formatters.DocumentJsonFormatter
16+ import com.pspdfkit.document.processor.PdfProcessor
17+ import com.pspdfkit.document.processor.PdfProcessorTask
1418import com.pspdfkit.flutter.pspdfkit.AnnotationConfigurationAdaptor.Companion.convertAnnotationConfigurations
1519import com.pspdfkit.flutter.pspdfkit.toolbar.FlutterMenuGroupingRule
1620import com.pspdfkit.flutter.pspdfkit.toolbar.FlutterViewModeController
1721import com.pspdfkit.flutter.pspdfkit.util.DocumentJsonDataProvider
1822import com.pspdfkit.flutter.pspdfkit.util.Preconditions.requireNotNullNotEmpty
23+ import com.pspdfkit.flutter.pspdfkit.util.ProcessorHelper
1924import com.pspdfkit.flutter.pspdfkit.util.addFileSchemeIfMissing
2025import com.pspdfkit.flutter.pspdfkit.util.areValidIndexes
2126import com.pspdfkit.flutter.pspdfkit.util.isImageDocument
2227import com.pspdfkit.forms.ChoiceFormElement
2328import com.pspdfkit.forms.EditableButtonFormElement
2429import com.pspdfkit.forms.SignatureFormElement
2530import com.pspdfkit.forms.TextFormElement
26- import com.pspdfkit.ui.PdfFragment
2731import com.pspdfkit.ui.PdfUiFragment
2832import com.pspdfkit.ui.PdfUiFragmentBuilder
2933import io.flutter.plugin.common.BinaryMessenger
@@ -34,17 +38,20 @@ import io.flutter.plugin.common.StandardMessageCodec
3438import io.flutter.plugin.platform.PlatformView
3539import io.flutter.plugin.platform.PlatformViewFactory
3640import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
41+ import io.reactivex.rxjava3.disposables.Disposable
3742import io.reactivex.rxjava3.schedulers.Schedulers
3843import org.json.JSONObject
3944import java.io.ByteArrayOutputStream
45+ import java.io.File
46+ import java.io.FileOutputStream
47+
4048
4149internal class PSPDFKitView (
4250 val context : Context ,
4351 id : Int ,
4452 messenger : BinaryMessenger ,
4553 documentPath : String? = null ,
4654 configurationMap : HashMap <String , Any >? = null ,
47-
4855 ) : PlatformView, MethodCallHandler {
4956
5057 private var fragmentContainerView: FragmentContainerView ? = FragmentContainerView (context)
@@ -84,9 +91,7 @@ internal class PSPDFKitView(
8491 .build()
8592 }
8693 }
87-
88- getFragmentActivity(context).supportFragmentManager.registerFragmentLifecycleCallbacks(FlutterPdfUiFragmentCallbacks (measurementValueConfigurations), true )
89-
94+ getFragmentActivity(context).supportFragmentManager.registerFragmentLifecycleCallbacks(FlutterPdfUiFragmentCallbacks (methodChannel,measurementValueConfigurations), true )
9095 getFragmentActivity(context).supportFragmentManager.registerFragmentLifecycleCallbacks( object : FragmentManager .FragmentLifecycleCallbacks () {
9196 override fun onFragmentAttached (
9297 fm : FragmentManager ,
@@ -131,6 +136,7 @@ internal class PSPDFKitView(
131136 fragmentContainerView = null
132137 }
133138
139+ @SuppressLint(" CheckResult" )
134140 override fun onMethodCall (call : MethodCall , result : MethodChannel .Result ) {
135141 // Return if the fragment or the document
136142 // are not ready.
@@ -445,6 +451,35 @@ internal class PSPDFKitView(
445451 result.error(" AnnotationException" , e.message, null )
446452 }
447453 }
454+ " getPageInfo" -> {
455+ try {
456+ val pageIndex: Int = requireNotNull(call.argument(" pageIndex" ))
457+ val pageInfo = mapOf (
458+ " width" to document.getPageSize(pageIndex).width,
459+ " height" to document.getPageSize(pageIndex).height,
460+ " label" to document.getPageLabel(pageIndex,false ),
461+ " index" to pageIndex,
462+ " rotation" to document.getPageRotation(pageIndex)
463+ )
464+ result.success(pageInfo)
465+ }catch (e: Exception ){
466+ result.error(" DocumentException" ,e.message,null )
467+ }
468+ }
469+ " exportPdf" -> {
470+ try {
471+ val fileUrl = document.documentSource.fileUri?.path
472+ if (fileUrl == null ) {
473+ result.error(" DocumentException" , " Document source is not a file" , null )
474+ return
475+ }
476+ val data: ByteArray = fileUrl.let { File (it).readBytes() }
477+ result.success(data)
478+ } catch (e: Exception ) {
479+ Log .e(LOG_TAG , " Error while exporting PDF" , e)
480+ result.error(" DocumentException" , e.message, null )
481+ }
482+ }
448483 else -> result.notImplemented()
449484 }
450485 }
0 commit comments