Пример #1
0
        public override void OnLayoutFinished(PrintDocumentInfo info, bool changed)
        {
            //using (var _dir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments))
            using (var _dir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads))
            {
                if (!_dir.Exists())
                {
                    _dir.Mkdir();
                }

                // var path = _dir.Path + "/" + FileName + ".pdf";
                var path = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads, FileName + ".pdf");
                var file = new Java.IO.File(path);
                int iter = 0;
                while (file.Exists())
                {
                    file.Dispose();
                    iter++;
                    //path = _dir.Path + "/" + FileName + "_" + iter.ToString("D3") + ".pdf";
                    path = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads, FileName + "_" + iter.ToString("D3") + ".pdf");
                    file = new Java.IO.File(path);
                }
                file.CreateNewFile();

                var fileDescriptor = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadWrite);
                file.Dispose();

                var writeResultCallback = new PdfWriteResultCallback(TaskCompletionSource, path);

                Adapter.OnWrite(new Android.Print.PageRange[] { PageRange.AllPages }, fileDescriptor, new CancellationSignal(), writeResultCallback);
            }
            base.OnLayoutFinished(info, changed);
        }
        /// <summary>
        /// The open asset file.
        /// </summary>
        /// <param name="uri">
        /// The uri.
        /// </param>
        /// <param name="mode">
        /// The mode.
        /// </param>
        /// <returns>
        /// The Android.Content.Res.AssetFileDescriptor.
        /// </returns>
        public override AssetFileDescriptor OpenAssetFile(Uri uri, string mode)
        {
            this.InitIfNecessary();
            string path = uri.Path;

            if (path.StartsWith("/"))
            {
                path = path.Substring(1);
            }

            ZipFileEntry entry = this.apkExtensionFile.GetEntry(path);

            if (entry != null && entry.Method == Compression.Store)
            {
                try
                {
                    ParcelFileDescriptor pfd = ParcelFileDescriptor.Open(
                        new File(entry.ZipFileName), ParcelFileMode.ReadOnly);

                    return(new AssetFileDescriptor(pfd, entry.FileOffset, entry.FileSize));
                }
                catch (FileNotFoundException e)
                {
                    System.Console.WriteLine(e.Message);
                    System.Console.Write(e.StackTrace);
                }
            }

            return(null);
        }
        /// <summary>
        /// Method to retrieve PDF file from the location. Gets the seekable file descriptor.
        /// </summary>
        /// <param name="argCurrentDataFolder">
        /// The argument current data folder.
        /// </param>
        /// <param name="argFile">
        /// The argument file.
        /// </param>
        /// <returns>
        /// ParcelFileDescriptor
        /// </returns>
        private ParcelFileDescriptor GetSeekableFileDescriptor(DirectoryInfo argCurrentDataFolder, MediaModel argFile)
        {
            ParcelFileDescriptor fileDescriptor = null;

            try
            {
                fileDescriptor = ParcelFileDescriptor.Open(new Java.IO.File(argFile.MediaStorageFilePath), ParcelFileMode.ReadOnly);
            }
            catch (FileNotFoundException ex)
            {
                ErrorInfo t = new ErrorInfo("File not found exception when trying to create ParcelFileDescriptor")
                {
                    { "Original ID", argFile.Id },
                    { "Original File", argFile.OriginalFilePath },
                    { "Storage Folder", argCurrentDataFolder.FullName },
                    { "Root", System.IO.Path.Combine(argCurrentDataFolder.FullName, argFile.OriginalFilePath) }
                };

                App.Current.Services.GetService <IErrorNotifications>().NotifyException("GetSeekableFileDescriptor", ex, t);
            }
            catch (Exception ex)
            {
                ErrorInfo t = new ErrorInfo("Exception when trying to create ParcelFileDescriptor")
                {
                    { "Original ID", argFile.Id },
                    { "Original File", argFile.OriginalFilePath },
                    { "Storage Folder", argCurrentDataFolder.FullName },
                    { "Root", System.IO.Path.Combine(argCurrentDataFolder.FullName, argFile.OriginalFilePath) }
                };

                App.Current.Services.GetService <IErrorNotifications>().NotifyException("GetSeekableFileDescriptor", ex, t);
            }
            return(fileDescriptor);
        }
Пример #4
0
        public override ParcelFileDescriptor OpenFile(Android.Net.Uri uri, String mode)
        {
            const string logTag = ClassName + " - openFile";

            Log.Verbose(logTag,
                        "Called with uri: '" + uri + "'." + uri.LastPathSegment);

            if (uri.ToString().StartsWith("content://" + Authority))
            {
                // The desired file name is specified by the last segment of the
                // path
                // E.g.
                // 'content://keepass2android.provider/Test.txt'
                // Take this and build the path to the file

                //Protect against path traversal with an uri like content://keepass2android.keepass2android.provider/..%2F..%2Fshared_prefs%2FKP2A.Plugin.keepass2android.plugin.qr.xml
                if (uri.LastPathSegment.Contains("/"))
                {
                    throw new Exception("invalid path ");
                }

                String fileLocation = Context.CacheDir + File.Separator + AttachmentCacheSubDir + File.Separator
                                      + uri.LastPathSegment;

                // Create & return a ParcelFileDescriptor pointing to the file
                // Note: I don't care what mode they ask for - they're only getting
                // read only
                ParcelFileDescriptor pfd = ParcelFileDescriptor.Open(new File(
                                                                         fileLocation), ParcelFileMode.ReadOnly);
                return(pfd);
            }
            Log.Verbose(logTag, "Unsupported uri: '" + uri + "'.");
            throw new FileNotFoundException("Unsupported uri: "
                                            + uri.ToString());
        }
Пример #5
0
        public override ParcelFileDescriptor OpenDocument(string documentId, string mode, CancellationSignal signal)
        {
            Log.Verbose(TAG, "openDocument, mode: " + mode);
            // It's OK to do network operations in this method to download the document, as long as you
            // periodically check the CancellationSignal.  If you have an extremely large file to
            // transfer from the network, a better solution may be pipes or sockets
            // (see ParcelFileDescriptor for helper methods).

            File file       = GetFileForDocId(documentId);
            var  accessMode = ParcelFileDescriptor.ParseMode(mode);

            bool isWrite = (mode.IndexOf('w') != -1);

            if (isWrite)
            {
                // Attach a close listener if the document is opened in write mode.
                try {
                    var handler = new Handler(Context.MainLooper);
                    return(ParcelFileDescriptor.Open(file, accessMode, handler, new MyOnCloseListener(documentId)));
                } catch (IOException) {
                    throw new FileNotFoundException("Failed to open document with id " + documentId + " and mode " + mode);
                }
            }
            else
            {
                return(ParcelFileDescriptor.Open(file, accessMode));
            }
        }
Пример #6
0
        public ParcelFileDescriptor GetOutputFile(File path, string fileName)
        {
            bool success = true;

            if (!path.Exists())
            {
                success = path.Mkdir();
            }
            if (success)
            {
                File file = new File(path, fileName);
                try
                {
                    success = file.CreateNewFile();
                    if (success)
                    {
                        return(ParcelFileDescriptor.Open(file, ParcelFileMode.ReadWrite));
                    }
                }
                catch (System.Exception e)
                {
                    //AnalyticsHandlerAdapter.getInstance().sendException(e);
                }
            }
            return(null);
        }
Пример #7
0
                public void Generate(string path)
                {
                    try
                    {
                        var file           = new Java.IO.File(path);
                        var fileDescriptor = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly);

                        var docRenderer = new PdfRenderer(fileDescriptor);
                        if (docRenderer.PageCount == 0)
                        {
                            Image = null; PageCount = 0; return;
                        }

                        var docPage = docRenderer.OpenPage(0);

                        Bitmap renderedPage = Bitmap.CreateBitmap(docPage.Width, docPage.Height, Bitmap.Config.Argb8888);
                        docPage.Render(renderedPage, null, null, PdfRenderMode.ForDisplay);

                        Image     = renderedPage;
                        PageCount = docRenderer.PageCount;
                    }
                    catch (Exception)
                    {
                        Image     = null;
                        PageCount = 0;
                    }
                }
        public override ParcelFileDescriptor OpenFile(Android.Net.Uri uri, string mode)
        {
            string fileName =
                Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), uri.LastPathSegment);

            return(ParcelFileDescriptor.Open(new Java.IO.File(fileName), ParcelFileMode.ReadOnly));
        }
Пример #9
0
        private void openRenderer(Context context)
        {
            // In this sample, we read a PDF from the assets directory.
            File file = new File(context.CacheDir, FILENAME);

            if (!file.Exists())
            {
                // Since PdfRenderer cannot handle the compressed asset file directly, we copy it into
                // the cache directory.
                System.IO.Stream         input  = context.Assets.Open(FILENAME);
                Java.IO.FileOutputStream output = new Java.IO.FileOutputStream(file);
                byte[] buffer = new byte[1024];
                int    size;
                while ((size = input.Read(buffer, 0, buffer.Length)) > 0)
                {
                    output.Write(buffer, 0, size);
                }
                input.Close();
                output.Close();
            }
            parcelFileDescriptor = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly);
            // This is the PdfRenderer we use to render the PDF.
            if (parcelFileDescriptor != null)
            {
                pdfRenderer = new PdfRenderer(parcelFileDescriptor);
            }
        }
Пример #10
0
        private async void Render(int page, bool isFirstTime = false)
        {
            if (pdfFile.Exists())
            {
                try
                {
                    rendering   = true;
                    pdfRenderer = new PdfRenderer(ParcelFileDescriptor.Open(pdfFile, ParcelFileMode.ReadOnly));
                    totalPages  = pdfRenderer.PageCount;
                    var previousPage = currentPage;
                    currentPage = page;
                    if (currentPage < 0)
                    {
                        currentPage = 0;
                    }
                    else if (currentPage >= pdfRenderer.PageCount)
                    {
                        currentPage = pdfRenderer.PageCount - 1;
                    }
                    if (currentPage == previousPage && !isFirstTime)
                    {
                        return;
                    }
                    pageCount.Text = $"{currentPage + 1} of {pdfRenderer.PageCount}";
                    var pdfPage = pdfRenderer.OpenPage(currentPage);
                    setVisibilities(false);
                    await
                    Task.Run(
                        () =>
                        pdfPage.Render(GetBitmap(pdfPage.Width, pdfPage.Height), rect, pdfView.Matrix,
                                       PdfRenderMode.ForDisplay));

                    pdfView.SetImageBitmap(bitmapPdf);
                    pdfView.Invalidate();
                    pdfRenderer.Dispose();
                    pdfRenderer = null;
                    bitmapPdf   = null;
                    GC.Collect();
                    setVisibilities(true);
                    rendering = false;
                }
                catch (Exception ex)
                {
                    // ignored
                }
            }
            else
            {
                if (page < 0)
                {
                    currentPage = 0;
                }
                else if (page < totalPages)
                {
                    currentPage = page;
                }
                DownloadPdfDocument();
            }
        }
Пример #11
0
        private void LoadPdf(String FileName)
        {
            Java.IO.File file = new Java.IO.File(FileName);

            renderer = new PdfRenderer(ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly));

            Count = renderer.PageCount;
        }
Пример #12
0
        public override AssetFileDescriptor OpenDocumentThumbnail(string documentId, Android.Graphics.Point sizeHint, CancellationSignal signal)
        {
            Log.Verbose(TAG, "openDocumentThumbnail");

            File file = GetFileForDocId(documentId);
            var  pfd  = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly);

            return(new AssetFileDescriptor(pfd, 0, AssetFileDescriptor.UnknownLength));
        }
        public override ParcelFileDescriptor OpenFile(Android.Net.Uri uri, string mode)
        {
            string fileName = uri.ToString().Substring(CONTENT_URI.ToString().Length);

            System.Console.WriteLine(fileName + " - File to open in external app");
            if (System.IO.File.Exists(fileName))
            {
                return(ParcelFileDescriptor.Open(new Java.IO.File(fileName), ParcelFileMode.ReadOnly));
            }

            return(null);
        }
Пример #14
0
 public void RenderPDFPagesIntoImages(Java.IO.File file)
 {
     // create a new renderer
     try
     {
         renderer = new PdfRenderer(ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly));
         numPages = renderer.PageCount;
     }
     catch (Exception)
     {
         // handle any exceptions
     }
 }
Пример #15
0
        public bool StartRtcEventLog(string file, int fileSizeLimitBytes)
        {
            try
            {
                ParcelFileDescriptor rtcEventLog = ParcelFileDescriptor.Open(new File(file),
                                                                             ParcelFileMode.Create | ParcelFileMode.Truncate | ParcelFileMode.ReadWrite);

                return(_peerConnection.StartRtcEventLog(rtcEventLog.DetachFd(), fileSizeLimitBytes));
            }
            catch (IOException ex)
            {
                return(false);
            }
        }
Пример #16
0
            private async void CreatePDF2(Android.Webkit.WebView webview)
            {
                try
                {
                    // 计算webview打印需要的页数
                    int numberOfPages = await GetPDFPageCount(webview);

                    File pdfFile = new File(fileNameWithPath);
                    if (pdfFile.Exists())
                    {
                        pdfFile.Delete();
                    }
                    pdfFile.CreateNewFile();
                    descriptor = ParcelFileDescriptor.Open(pdfFile, ParcelFileMode.ReadWrite);
                    // 设置打印参数
                    var             dm         = webview.Context.Resources.DisplayMetrics;
                    var             d          = dm.Density;
                    var             dpi        = dm.DensityDpi;
                    var             height     = dm.HeightPixels;
                    var             width      = dm.WidthPixels;
                    var             xdpi       = dm.Xdpi;
                    var             ydpi       = dm.Ydpi;
                    PrintAttributes attributes = new PrintAttributes.Builder()
                                                 .SetMediaSize(MediaSize)
                                                 .SetResolution(new PrintAttributes.Resolution("id", Context.PrintService, Convert.ToInt16(xdpi), Convert.ToInt16(ydpi)))
                                                 .SetColorMode(PrintColorMode.Color)
                                                 .SetMinMargins(PrintAttributes.Margins.NoMargins)
                                                 .Build();

                    ranges = new PageRange[] { new PageRange(0, numberOfPages - 1) };
                    // 创建pdf文件缓存目录
                    // 获取需要打印的webview适配器
                    printAdapter = webview.CreatePrintDocumentAdapter("CreatePDF");
                    // 开始打印
                    printAdapter.OnStart();
                    printAdapter.OnLayout(attributes, attributes, new CancellationSignal(), GetLayoutResultCallback(this), new Bundle());
                }
                catch (Java.IO.FileNotFoundException e)
                {
                    System.Console.WriteLine(e.Message);
                }
                catch (Java.IO.IOException e)
                {
                    System.Console.WriteLine(e.Message);
                }
                catch (Java.Lang.Exception e)
                {
                    System.Console.WriteLine(e.Message);
                }
            }
        public bool StartAecDump(string file, int fileSizeLimitBytes)
        {
            try
            {
                ParcelFileDescriptor aecDumpFileDescriptor = ParcelFileDescriptor.Open(new File(file),
                                                                                       ParcelFileMode.Create | ParcelFileMode.Truncate | ParcelFileMode.ReadWrite);

                return(_factory.StartAecDump(aecDumpFileDescriptor.DetachFd(), fileSizeLimitBytes));
            }
            catch (IOException ex)
            {
                return(false);
            }
        }
Пример #18
0
        public bool StartAecDumpWithFilePath(string filePath, long maxSizeInBytes)
        {
            try
            {
                ParcelFileDescriptor aecDumpFileDescriptor = ParcelFileDescriptor.Open(new File(filePath),
                                                                                       ParcelFileMode.Create | ParcelFileMode.Truncate | ParcelFileMode.ReadWrite);

                return(_peerConnectionfactory.StartAecDump(aecDumpFileDescriptor.DetachFd(), (int)maxSizeInBytes));
            }
            catch (Exception exception)
            {
                Log.Error(TAG, $"An Exception has occured :  {exception.Message}");
                return(false);
            }
        }
Пример #19
0
        public bool StartRtcEventLogWithFilePath(string filePath, long maxSizeInBytes)
        {
            try
            {
                ParcelFileDescriptor rtcEventLog = ParcelFileDescriptor.Open(new File(filePath),
                                                                             ParcelFileMode.Create | ParcelFileMode.Truncate | ParcelFileMode.ReadWrite);

                return(_peerConnection.StartRtcEventLog(rtcEventLog.DetachFd(), (int)maxSizeInBytes));
            }
            catch (System.Exception exception)
            {
                Log.Error("PlatformPeerConnection", $"Could not Start RTCEvent logging {exception.Message}");
                return(false);
            }
        }
        public override void OnLayoutFinished(PrintDocumentInfo info, bool changed)
        {
            try
            {
                var file                = new Java.IO.File(PDFToHtml.FilePath);
                var fileDescriptor      = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadWrite);
                var writeResultCallback = new PdfWriteResultCallback(PDFToHtml);
                Adapter.OnWrite(new PageRange[] { PageRange.AllPages }, fileDescriptor, new CancellationSignal(), writeResultCallback);
            }
            catch
            {
                PDFToHtml.Status = PDFEnum.Failed;
            }

            base.OnLayoutFinished(info, changed);
        }
Пример #21
0
        public override void OnLayoutFinished(PrintDocumentInfo info, bool changed)
        {
            //using (var _dir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments))
            //using (var _dir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads))
            //using (var _dir = Forms9Patch.Droid.Settings.Context.FilesDir)
            using (var _dir = Forms9Patch.Droid.Settings.Context.CacheDir)
            {
                if (!_dir.Exists())
                {
                    _dir.Mkdir();
                }

                // var path = _dir.Path + "/" + FileName + ".pdf";
                //var path = System.IO.Path.Combine(_dir.AbsolutePath, Android.OS.Environment.DirectoryDownloads, FileName + ".pdf");
                //var file = new Java.IO.File(path);

                /*
                 * var file = new Java.IO.File(_dir, FileName + ".pdf");
                 * int iter = 0;
                 * while (file.Exists())
                 * {
                 *  file.Dispose();
                 *  iter++;
                 *  //path = _dir.Path + "/" + FileName + "_" + iter.ToString("D3") + ".pdf";
                 *  //path = System.IO.Path.Combine(_dir.AbsolutePath, Android.OS.Environment.DirectoryDownloads, FileName + "_" + iter.ToString("D4") + ".pdf");
                 *  //file = new Java.IO.File(path);
                 *  file = new Java.IO.File(_dir, FileName + "_" + iter.ToString("D3") + ".pdf");
                 * }
                 *
                 *
                 * //file.CreateNewFile();
                 */
                var file = Java.IO.File.CreateTempFile(FileName + ".", ".pdf", _dir);

                var fileDescriptor = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadWrite);

                var writeResultCallback = new PdfWriteResultCallback(TaskCompletionSource, file.AbsolutePath);

                Adapter.OnWrite(new Android.Print.PageRange[] { PageRange.AllPages }, fileDescriptor, new CancellationSignal(), writeResultCallback);

                file.Dispose();

                //Android.Media.MediaScannerConnection.ScanFile(Forms9Patch.Droid.Settings.Context, new string[] { file.AbsolutePath }, new string[] { "application/pdf" }, null);
                //Android.Media.MediaScannerConnection.ScanFile(file.AbsolutePath, "application/pdf");
            }
            base.OnLayoutFinished(info, changed);
        }
Пример #22
0
        public override ParcelFileDescriptor OpenFile(Uri uri, string mode)
        {
            string path = uri.GetPath();

            if (mode.Equals("r") &&
                (path.Equals("/foo.txt") || path.Equals("/bar.txt")))
            {
                try {
                    return(ParcelFileDescriptor.Open(
                               new Java.Io.File(GetContext().GetFilesDir() + path),
                               ParcelFileDescriptor.MODE_READ_ONLY));
                } catch (FileNotFoundException) {
                    Log.E(TAG, "Bad file " + uri);
                }
            }
            return(null);
        }
Пример #23
0
                protected override Android.Graphics.Bitmap RunInBackground(params string[] @params)
                {
                    if (IsCancelled)
                    {
                        RecycleBitmap(_pdfPageBitmap);
                        return(null);
                    }

                    string url      = (string)@params[0];
                    int    position = int.Parse(@params[1]);
                    double zoom     = double.Parse(@params[2]);

                    _pdfPageBitmap = null;

                    if (File.Exists(url))
                    {
                        var file            = new Java.IO.File(url);
                        var mFileDescriptor = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly);
                        // This is the PdfRenderer we use to render the PDF.
                        if (mFileDescriptor != null)
                        {
                            // create a new renderer
                            using (PdfRenderer renderer = new PdfRenderer(mFileDescriptor))
                            {
                                using (PdfRenderer.Page page = renderer.OpenPage(position))
                                {
                                    try
                                    {
                                        _pdfPageBitmap = Android.Graphics.Bitmap.CreateBitmap((int)(page.Width.Px() * zoom), (int)(page.Height.Px() * zoom), Android.Graphics.Bitmap.Config.Argb4444);
                                        page.Render(_pdfPageBitmap, null, null, PdfRenderMode.ForDisplay);
                                    }
                                    catch (Exception e)
                                    {
                                        _listener.RenderingErrorCaught(string.Format("PdfPageGenerationTask failed for index {0} :{1}", TaskIndex.ToString(), e.Message));
                                        Console.WriteLine(e);
                                    }
                                    page.Close();
                                }
                                renderer.Close();
                            }
                        }
                    }

                    return(_pdfPageBitmap);
                }
Пример #24
0
            void SetSource(string url)
            {
                if (File.Exists(_url))
                {
                    var file = new Java.IO.File(_url);

                    var mFileDescriptor = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly);
                    // This is the PdfRenderer we use to render the PDF.
                    if (mFileDescriptor != null)
                    {
                        // create a new renderer
                        using (PdfRenderer renderer = new PdfRenderer(mFileDescriptor))
                        {
                            _count = renderer.PageCount;
                        }
                    }
                }
            }
Пример #25
0
        public bool Email(string mailTo, string subject, List <string> filePaths)
        {
            try
            {
                Context context = Android.App.Application.Context;

                var email = new Intent(Intent.ActionSendMultiple);
                email.SetType("message/rfc822");
                email.PutExtra(Intent.ExtraEmail, new string[] { mailTo });
                email.PutExtra(Intent.ExtraSubject, subject);

                List <IParcelable> uris = new List <IParcelable>();

                filePaths.ForEach(file =>
                {
                    var fileIn = new File(file);
                    if (!fileIn.Exists() || !fileIn.CanRead())
                    {
                        Toast.MakeText(context, "Attachment Error", ToastLength.Short);
                        return;
                    }
                    fileIn.SetReadable(true, false);
                    ParcelFileDescriptor.Open(fileIn, ParcelFileMode.ReadOnly);
                    var uri = FileProvider.GetUriForFile(Forms.Context.ApplicationContext, "triotech.hubo.droid.fileprovider", fileIn);
                    uris.Add(uri);
                });

                email.PutParcelableArrayListExtra(Intent.ExtraStream, uris);

                email.AddFlags(ActivityFlags.NewTask);
                email.AddFlags(ActivityFlags.GrantReadUriPermission);
                email.AddFlags(ActivityFlags.GrantWriteUriPermission);
                email.SetFlags(ActivityFlags.GrantReadUriPermission);
                email.SetFlags(ActivityFlags.GrantWriteUriPermission);

                context.StartActivity(Intent.CreateChooser(email, "Send Email...").AddFlags(ActivityFlags.NewTask));

                return(true);
            }
            catch
            {
                return(false);
            }
        }
Пример #26
0
        public async Task Open(string filePath)
        {
            var client = new HttpClient();
            var rawPdf = await client.GetByteArrayAsync(filePath);

            var f = new Java.IO.File(MainActivity.CurrentActivity.CacheDir, "sample.pdf");

            FileOutputStream output = new FileOutputStream(f);
            await output.WriteAsync(rawPdf);

            output.Close();

            var pdfFileDescriptor = ParcelFileDescriptor.Open(f, ParcelFileMode.ReadOnly);
            var renderer          = new PdfRenderer(pdfFileDescriptor);

            PdfActivity.PdfRenderer = renderer;
            PdfActivity.File        = filePath;
            MainActivity.CurrentActivity.StartActivity(new Intent(MainActivity.CurrentActivity, typeof(PdfActivity)));
        }
Пример #27
0
        private List <Bitmap> ConverPdfToBitmap(string filePath)
        {
            List <Bitmap> bitmaps = new List <Bitmap>();

            Java.IO.File file           = new Java.IO.File(filePath);
            var          fileDescriptor = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly);
            var          pdfRenderer    = new PdfRenderer(fileDescriptor);

            for (int i = 0; i < pdfRenderer.PageCount; i++)
            {
                // Use the rendered bitmap.
                var page   = pdfRenderer.OpenPage(i);
                var bitmap = Bitmap.CreateBitmap(page.Width, page.Height, Bitmap.Config.Argb8888);
                // Render the page to the bitmap.
                page.Render(bitmap, null, null, PdfRenderMode.ForDisplay);
                page.Close();
                bitmaps.Add(bitmap);
            }
            // Open the page to be rendered.
            // Close the page when you are done with it.
            pdfRenderer.Close();
            return(bitmaps);
        }
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            if (e.PropertyName == nameof(ExtendedPDFViewer.FileName))
            {
                if (PdfRenderer != null)
                {
                    PdfRenderer.Dispose();
                    PdfRenderer = null;
                    this.Element.Dispose();
                }

                var fileStreamPath = this.Context.GetFileStreamPath(this.Element.FileName);
                ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.Open(fileStreamPath, ParcelFileMode.ReadOnly);
                PdfRenderer            = new PdfRenderer(fileDescriptor);
                this.Element.PageCount = PdfRenderer.PageCount;
                this.Element.GenerateItems();

                //For better performance, if page count is lesser than 10, create entire items to avoid loading time.
                if (this.Element.PageCount > 10)
                {
                    this.ConvertPagetoBitMap(this.Element.CurrentPage);
                }
                else
                {
                    for (int i = 0; i < this.Element.PageCount; i++)
                    {
                        this.ConvertPagetoBitMap(i);
                    }
                }
            }
            else if (e.PropertyName == nameof(ExtendedPDFViewer.CurrentPage))
            {
                this.ConvertPagetoBitMap(this.Element.CurrentPage);
            }
        }
 public override PdfDocument CreateDocument(Context context, PdfiumCore core, string password)
 {
     return(core.NewDocument(ParcelFileDescriptor.Open(FileUtils.FileFromAssetAsync(context, assetName),
                                                       ParcelFileMode.ReadOnly)));
 }
Пример #30
0
        void RenderPages(bool next = true)
        {
            Stream inputStream = Assets.Open(fileName);

            using (var outputStream = this.OpenFileOutput("_sample.pdf", Android.Content.FileCreationMode.Private))
            {
                inputStream.CopyTo(outputStream);
            }
            var          fileStreamPath = this.GetFileStreamPath("_sample.pdf");
            MemoryStream m_memoryStream = new MemoryStream();

            File.OpenRead(fileStreamPath.AbsolutePath).CopyTo(m_memoryStream);

            var renderer = new PdfRenderer(ParcelFileDescriptor.Open(fileStreamPath, ParcelFileMode.ReadOnly));

            ClearPages();
            pages = new List <Bitmap>();

            if (pageCount == 0)
            {
                pageCount = renderer.PageCount;
            }

            bool goingBackFromEnd = (pageCount == pageCurrent && pageGroupCount < pageMax && !next);

            // set starting page number
            int pageGroupStart;

            if (next)
            {
                pageGroupStart = pageCurrent;
            }
            else if (goingBackFromEnd)
            {
                // if we're at the end and going back we need to adjust the page group start by the previous group count instead of the maximum
                pageGroupStart = pageCurrent - pageGroupCount;
                // we also need to update the current page here instead of in the loop so it stays on track
                pageCurrent = pageGroupStart;
            }
            else
            {
                pageGroupStart = pageCurrent - pageMax;
            }

            // get next paging group count
            int pagesLeft = pageCount - pageCurrent;

            if (pagesLeft < pageMax && next)
            {
                // use pages left if that's below the maximum
                pageGroupCount = pagesLeft;
            }
            else
            {
                pageGroupCount = pageMax;
            }

            // render pages
            for (int i = 0; i < pageGroupCount; i++)
            {
                if (next)
                {
                    page = renderer.OpenPage(pageGroupStart + i);
                    pageCurrent++;
                }
                else
                {
                    page = renderer.OpenPage(pageGroupStart - (i + 1));
                    if (!goingBackFromEnd)
                    {
                        pageCurrent--;
                    }
                }

                // create bitmap of page
                var ratio     = (float)page.Height / page.Width;
                var newHeight = screenWidth * ratio;
                bitmap = Bitmap.CreateBitmap(screenWidth, (int)newHeight, Bitmap.Config.Argb8888);

                // render for showing on the screen
                page.Render(bitmap, null, null, PdfRenderMode.ForDisplay);

                // add bitmaps to list for recycler
                pages.Add(bitmap);

                // close the page
                page.Close();

                if (pageCurrent >= pageCount)
                {
                    break;
                }
            }

            // close the renderer
            renderer.Close();

            // if going back to previous pages we need to reverse the page list to keep the correct order
            if (!next)
            {
                pages.Reverse();
            }

            textPageCurrent.Text = "Viewing pages " + (pageCurrent - (pageGroupCount - 1)) + "-" + pageCurrent + " of " + pageCount;

            // set up recycler using bitmap list
            mAdapter.Pages = pages;
            mAdapter.NotifyDataSetChanged();
        }