Hello,
I have a file that I'm trying to open in the PdfViewer. If the file is corrupt, I want to cancel the operation. Right now, when I try to open a corrupt file, I get a Java.IO.IOException and the application crashes. I'm unable to catch this exception in a try/catch block. Is there a way to check to see if the file is corrupt? I've tried using File.Open and File.OpenRead, and File.ReadAllBytes, but these all work on corrupt files. I've also tried comparing the MD5 hash of a newly downloaded file and the file right before I open it, but this becomes useless when the file is edited (highlighted or free text added).
Here is my stack trace:
Java.IO.IOException: file not in PDF format or corrupted
at Java.Interop.JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00089] in <405ad2ab226e4e74ba67db96baf95129>:0
at Java.Interop.JniPeerMembers+JniInstanceMethods.FinishCreateInstance (System.String constructorSignature, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0004f] in <405ad2ab226e4e74ba67db96baf95129>:0
at Android.Graphics.Pdf.PdfRenderer..ctor (Android.OS.ParcelFileDescriptor input) [0x00070] in /Users/builder/data/lanes/6102/9bf5bd5c/source/monodroid/external/xamarin-android/src/Mono.Android/obj/Release/android-28/mcw/Android.Graphics.Pdf.PdfRenderer.cs:151
at Syncfusion.SfPdfViewer.XForms.Droid.ScrollViewEx.IsDocumentValid (Android.OS.ParcelFileDescriptor fileDescriptor) [0x00000] in <f5d188b682d844b5a33023a93f840691>:0
at java.io.IOException: file not in PDF format or corrupted
at at android.graphics.pdf.PdfRenderer.nativeCreate(Native Method)
at at android.graphics.pdf.PdfRenderer.<init>(PdfRenderer.java:167)
at at mono.java.lang.RunnableImplementor.n_run(Native Method)
at at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)
at at android.os.Handler.handleCallback(Handler.java:873)
at at android.os.Handler.dispatchMessage(Handler.java:99)
at at android.os.Looper.loop(Looper.java:214)
at at android.app.ActivityThread.main(ActivityThread.java:6981)
at at java.lang.reflect.Method.invoke(Native Method)
at at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
Thanks,
Kristen