예제 #1
0
		public PDFView ()
		{
			BackgroundColor = UIColor.White;

			//create a CGPDFDocument from file.pdf included in the main bundle
			pdfDoc = CGPDFDocument.FromFile ("file.pdf");
		}
예제 #2
0
		public PdfViewController (NSUrl url) : base()
		{
			Url = url;
			View = new UIView ();
			View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.FlexibleRightMargin;
			View.AutosizesSubviews = true;
			
			PdfDocument = CGPDFDocument.FromUrl (Url.ToString ());
			
			// For demo purposes, show first page only.
			PdfPage = PdfDocument.GetPage (1);
			PdfPageRect = PdfPage.GetBoxRect (CGPDFBox.Crop);
			
			// Setup tiled layer.
			TiledLayer = new CATiledLayer ();
			TiledLayer.Delegate = new TiledLayerDelegate (this);
			TiledLayer.TileSize = new SizeF (1024f, 1024f);
			TiledLayer.LevelsOfDetail = 5;
			TiledLayer.LevelsOfDetailBias = 5;
			TiledLayer.Frame = PdfPageRect;
			
			ContentView = new UIView (PdfPageRect);
			ContentView.Layer.AddSublayer (TiledLayer);
			
			// Prepare scroll view.
			ScrollView = new UIScrollView (View.Frame);
			ScrollView.AutoresizingMask = View.AutoresizingMask;
			ScrollView.Delegate = new ScrollViewDelegate (this);
			ScrollView.ContentSize = PdfPageRect.Size;
			ScrollView.MaximumZoomScale = 10f;
			ScrollView.MinimumZoomScale = 1f;
			ScrollView.ScrollEnabled = true;
			ScrollView.AddSubview (ContentView);
			View.AddSubview (ScrollView);
		}
예제 #3
0
		public ModelController ()
		{
			NSUrl pdfURL = NSBundle.MainBundle.GetUrlForResource ("Tamarin", "pdf");
			pdf = CGPDFDocument.FromUrl (pdfURL.AbsoluteString);
			numberOfPages = pdf.Pages;
			if (numberOfPages % 2 != 0)
				numberOfPages++;
		}
예제 #4
0
 public PDFDrawingView() : base()
 {
     doc = CGPDFDocument.FromFile(Path.Combine(NSBundle.MainBundle.BundlePath, "QuartzImageDrawing.pdf"));
     if (doc == null)
     {
         throw new Exception("Could not load document");
     }
 }
예제 #5
0
        public void FromUrl()
        {
            string url = NSBundle.MainBundle.GetUrlForResource("Tamarin", "pdf").ToString();

            using (CGPDFDocument doc = CGPDFDocument.FromUrl(url)) {
                CheckTamarin(doc);
            }
        }
예제 #6
0
        void CheckTamarin(CGPDFDocument pdf)
        {
            Assert.True(pdf.AllowsCopying, "AllowsCopying");
            Assert.True(pdf.AllowsPrinting, "AllowsPrinting");
            Assert.False(pdf.IsEncrypted, "IsEncrypted");
            Assert.True(pdf.IsUnlocked, "IsUnlocked");
            Assert.That(pdf.Pages, Is.EqualTo((nint)3), "Pages");

            Assert.That(pdf.GetInfo().Count, Is.EqualTo(7), "GetInfo");
        }
        public UIImage Generate(CGSize size)
        {
            var document = new CGPDFDocument(new CGDataProvider(Url));
            var page     = document.GetPage(1);

            var orginalPageRect = page.GetBoxRect(CGPDFBox.Media);

            //var targetPageRect = A
            throw new NotImplementedException();
        }
예제 #8
0
        static CGPDFDocument CreatePDFDocumentWithName(string pdfName)
        {
            var name    = Path.GetFileNameWithoutExtension(pdfName);
            var pdfPath = Path.GetDirectoryName(pdfName);
            var path    = Path.Combine(pdfPath, name + ".pdf");

            CGPDFDocument doc = CGPDFDocument.FromFile(path);

            return(doc);
        }
예제 #9
0
        public ModelController()
        {
            NSUrl pdfURL = NSBundle.MainBundle.GetUrlForResource("Tamarin", "pdf");

            pdf           = CGPDFDocument.FromUrl(pdfURL.AbsoluteString);
            numberOfPages = pdf.Pages;
            if (numberOfPages % 2 != 0)
            {
                numberOfPages++;
            }
        }
예제 #10
0
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (PdfDocument != null)
                {
                    PdfDocument.Dispose();
                    PdfDocument = null;
                }

                base.Dispose(disposing);
            }
        }
예제 #11
0
        void DumpPdf(CGPDFDocument doc)
        {
            var sb = new StringBuilder();

            sb.AppendLine($"{doc.Pages} pages found");
            for (var i = 0; i < doc.Pages; i++)
            {
                var page = doc.GetPage(i + 1);
                sb.AppendLine($"Page #{i + 1}");
                var dict = page.Dictionary;
                Dump(sb, 1, dict);
            }
            //Console.WriteLine (sb);
        }
예제 #12
0
        public void FromPage()
        {
            using (var doc = CGPDFDocument.FromFile(NSBundle.MainBundle.PathForResource("Tamarin", "pdf")))
                using (var page = doc.GetPage(1))
                    using (var cs = new CGPDFContentStream(page)) {
                        Assert.That(cs.Handle, Is.Not.EqualTo(IntPtr.Zero), "Handle");

                        var streams = cs.GetStreams();
                        Assert.That(streams.Length, Is.EqualTo(1), "GetStreams.Length");
                        Assert.That(streams [0].Handle, Is.Not.EqualTo(cs.Handle), "GetStreams");

                        Assert.Null(cs.GetResource("XObject", ""), "GetResource");
                    }
        }
예제 #13
0
        private void addImageContext(string[] directory, int i)
        {
            Console.WriteLine("i: " + i);
            try
            {
                CGPDFDocument pdfToLoad = CGPDFDocument.FromFile(directory[i]);
                if (pdfToLoad == null)
                {
                    throw new NullReferenceException();
                }
                else
                {
                    var firstPage = pdfToLoad.GetPage(1);
                    var width     = 240.0f;
                    var pageRect  = firstPage.GetBoxRect(CGPDFBox.Media);


                    var pdfScale = width / pageRect.Size.Width;

                    pageRect.Size = new CGSize(pageRect.Size.Width * pdfScale, pageRect.Size.Height * pdfScale);
                    pageRect.X    = 0;
                    pageRect.Y    = 0;
                    UIGraphics.BeginImageContext(pageRect.Size);

                    var context = UIGraphics.GetCurrentContext();

                    context.SetFillColor(1.0f, 1.0f, 1.0f, 1.0f);
                    context.FillRect(pageRect);
                    context.SaveState();
                    context.TranslateCTM(0.0f, pageRect.Size.Height);
                    context.ScaleCTM(1.0f, -1.0f);
                    context.ConcatCTM(firstPage.GetDrawingTransform(CGPDFBox.Media, pageRect, 0, true));
                    context.DrawPDFPage(firstPage);
                    context.RestoreState();

                    UIImage thm = UIGraphics.GetImageFromCurrentImageContext();

                    UIGraphics.EndImageContext();
                    this.thumbnailImage.Add(thm);
                }
            }
            catch (NullReferenceException)
            {
                UIImage nullImage = new UIImage();
                this.corruptIndex.Add(i);
                this.thumbnailImage.Add(nullImage);
            }
        }
예제 #14
0
        static UIImage imageWithPDFNamed(string name, float scale, CGAffineTransform t)
        {
            CGPDFDocument doc = CreatePDFDocumentWithName(name);

            if (doc == null)
            {
                return(null);
            }

            // PDF pages are numbered starting at page 1
            CGPDFPage page = doc.GetPage(1);

            var result = imageWithPDFPage(page, scale, t);

            return(result);
        }
예제 #15
0
 public PreviewPageInfo [] GetPreviewPageInfo()
 {
     if (previewData != null)
     {
         var pdfDocument           = new CGPDFDocument(new CGDataProvider(previewData));
         List <PreviewPageInfo> pi = new List <PreviewPageInfo>();
         for (int pageNo = 1; pageNo <= pdfDocument.Pages; pageNo++)
         {
             var page     = pdfDocument.GetPage(pageNo);
             var mediaBox = page.GetBoxRect(CGPDFBox.Media);
             pi.Add(new PreviewPageInfo(new PDFImage(pdfDocument, page), new Size((int)mediaBox.Width, (int)mediaBox.Height)));
         }
         return(pi.ToArray());
     }
     return(new PreviewPageInfo[0]);
 }
예제 #16
0
        public void DrawTemplatePage(string templateFile)
        {
            if (isTemplated)
            {
                return;
            }

            isTemplated = true;

            using (var template = CGPDFDocument.FromFile(templateFile)) {
                var templatePage   = template.GetPage(1);
                var templateBounds = templatePage.GetBoxRect(CGPDFBox.Crop);
                context.BeginPage(templateBounds);
                context.DrawPDFPage(templatePage);
            }
        }
예제 #17
0
        // Init method. Call this before adding the instance of the PDF_Manager to the View.
        public void Init(CGPDFDocument oPdfDoc, int page, PageTurnViewController mother_controller)
        {
            Console.WriteLine ("Rendering PDF Page Number: " + page);
            this.page_number = page;
            this.currentPDFdocument = oPdfDoc;

            currentPDFPage = this.currentPDFdocument.GetPage (page_number);

            RectangleF oPdfPageRect = this.currentPDFPage.GetBoxRect (CGPDFBox.Bleed);

            Console.WriteLine ("PDFRect : " + oPdfPageRect.ToString ());

            // Setup tiled layer.
            oTiledLayer = new CATiledLayer ();
            tiled_layer_delegate = new TiledLayerDelegate (this);
            oTiledLayer.Delegate = tiled_layer_delegate;
            oTiledLayer.TileSize = new SizeF (1024f, 1024f);
            oTiledLayer.LevelsOfDetail = 5;
            oTiledLayer.LevelsOfDetailBias = 5;
            oTiledLayer.Frame = oPdfPageRect;
            Console.WriteLine ("oTiledLayer.Frame : " + oTiledLayer.Frame.ToString ());

            this.oContentView = new UIView (oPdfPageRect);
            this.oContentView.Layer.AddSublayer (oTiledLayer);

            this.View.AutoresizingMask = mother_controller.View.AutoresizingMask;
            this.View.AutosizesSubviews = true;

            #if DEBUG
            this.View.Layer.BorderColor = UIColor.Red.CGColor;
            this.View.Layer.BorderWidth = 2f;
            #endif

            // Prepare scroll view.

            this.scroll_area.AutoresizingMask = mother_controller.View.AutoresizingMask;

            scroll_area_delegate = new ScrollViewDelegate (this);
            scroll_area.Delegate = scroll_area_delegate;

            scroll_area.ContentSize = oPdfPageRect.Size;
            scroll_area.MaximumZoomScale = 1000f;
            scroll_area.MinimumZoomScale = 0.1f;

            scroll_area.AddSubview (this.oContentView);
            scroll_area.SetZoomScale (this.View.Frame.Width / oContentView.Frame.Width, false);
        }
예제 #18
0
        public static void OpenDocument(string docName, string docFilePath)
        {
            CloseDocument();

            _currentPageNumber = -1;
            _docName           = docName;
            _docFilePath       = docFilePath;
            try {
                _document          = CGPDFDocument.FromFile(_docFilePath);
                _documentHasLoaded = true;
            } catch (Exception) {
                _documentHasLoaded = false;
                using (var alert = new UIAlertView("Error", "Open PDF document error", null, "Ok")) {
                    alert.Show();
                }
            }
        }
예제 #19
0
        static UIImage[] imagesWithPDFNamed(string name, float scale, CGAffineTransform t)
        {
            CGPDFDocument  doc    = CreatePDFDocumentWithName(name);
            List <UIImage> images = new List <UIImage>();

            // PDF pages are numbered starting at page 1
            for (int pageIndex = 1; pageIndex <= doc.Pages; ++pageIndex)
            {
                var     page  = doc.GetPage(pageIndex);
                UIImage image = imageWithPDFPage(page, scale, t);
                if (image != null)
                {
                    images.Add(image);
                }
            }

            return(images.ToArray());
        }
예제 #20
0
        internal void LoadDocument(Stream stream)
        {
            if (stream.CanSeek)
            {
                stream.Position = 0;
            }

            var tempStream = new MemoryStream();

            stream.CopyTo(tempStream);
            tempStream.Position = 0;
            CGDataProvider provider = new CGDataProvider((tempStream as MemoryStream).ToArray());

            PdfDocument            = new CGPDFDocument(provider);
            this.Element.PageCount = (int)PdfDocument.Pages;
            this.Element.GenerateItems();
            this.ConvertPagetoImage(this.Element.CurrentPage);
        }
예제 #21
0
        public ModelController()
        {
            var pdfUrl = NSBundle.MainBundle.GetUrlForResource("Tamarin", "pdf");

            if (pdfUrl != null)
            {
                pdf           = CGPDFDocument.FromUrl(pdfUrl.AbsoluteString);
                numberOfPages = pdf.Pages;
                if (numberOfPages % 2 != 0)
                {
                    numberOfPages++;
                }
            }
            else
            {
                // missing pdf file, cannot proceed.
                Console.WriteLine("Missing pdf file 'Tamarin.pdf'");
            }
        }
예제 #22
0
        public void Tamarin()
        {
            using (var table = new CGPDFOperatorTable()) {
                // note: the native API is horrible as we can't share the same callback and dispatch it to the right
                // managed method. That force every operator to have one ugly, MonoPInvokeCallback-decorated, per
                // operator
#if WE_HAD_A_NICE_API
                table.SetCallback("BT", delegate(CGPDFScanner scanner) {
                    bt_count++;
                });

                table.SetCallback("Do", delegate(CGPDFScanner scanner) {
                    // ... drill down to the image
                });
#elif NET
                unsafe {
                    // BT == new paragraph
                    table.SetCallback("BT", &BT);
                    // Do == the image is inside it
                    table.SetCallback("Do", &Do);
                }
#else
                // BT == new paragraph
                table.SetCallback("BT", BT);
                // Do == the image is inside it
                table.SetCallback("Do", Do);
#endif
                using (var doc = CGPDFDocument.FromFile(NSBundle.MainBundle.PathForResource("Tamarin", "pdf")))
                    using (var page = doc.GetPage(1))
                        using (var cs = new CGPDFContentStream(page))
                            using (var scanner = new CGPDFScanner(cs, table, this)) {
                                Assert.That(scanner.Handle, Is.Not.EqualTo(IntPtr.Zero), "Handle");

                                Assert.That(scanner.GetContentStream().Handle, Is.EqualTo(cs.Handle), "GetContentStream");

                                bt_count  = 0;
                                do_checks = 7;
                                Assert.True(scanner.Scan(), "Scan");
                                Assert.That(bt_count, Is.EqualTo(45), "new paragraph");
                                Assert.That(do_checks, Is.EqualTo(0), "found the image");
                            }
            }
        }
예제 #23
0
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            if (e.PropertyName == nameof(ExtendedPDFViewer.PageStream))
            {
                if (PdfDocument != null)
                {
                    PdfDocument.Dispose();
                    PdfDocument = null;
                    this.Element.Dispose();
                }

                this.LoadDocument(this.Element.PageStream);
            }
            else if (e.PropertyName == nameof(ExtendedPDFViewer.CurrentPage))
            {
                this.ConvertPagetoImage(this.Element.CurrentPage);
            }
        }
예제 #24
0
        public static UIImage Convert(string pdfPath, bool directLink)
        {
            var localDocUrl = directLink ? pdfPath : Path.Combine(NSBundle.MainBundle.BundlePath, pdfPath);

            var document = new CGPDFDocument(new CGDataProvider(localDocUrl));
            var page     = document.GetPage(1);

            var pageRect = page.GetBoxRect(CGPDFBox.Media);
            var renderer = new UIGraphicsImageRenderer(pageRect.Size);
            var img      = renderer.CreateImage(ctx => {
                UIColor.White.SetFill();
                ctx.FillRect(pageRect);

                ctx.CGContext.TranslateCTM(0, pageRect.Size.Height);
                ctx.CGContext.ScaleCTM(1, -1);
                ctx.CGContext.DrawPDFPage(page);
            });

            return(img);
        }
예제 #25
0
        void CheckTamarin(CGPDFDocument pdf)
        {
            Assert.True(pdf.AllowsCopying, "AllowsCopying");
            Assert.True(pdf.AllowsPrinting, "AllowsPrinting");
            Assert.False(pdf.IsEncrypted, "IsEncrypted");
            Assert.True(pdf.IsUnlocked, "IsUnlocked");
            Assert.That(pdf.Pages, Is.EqualTo((nint)3), "Pages");

            Assert.That(pdf.GetInfo().Count, Is.EqualTo(7), "GetInfo");

            if (TestRuntime.CheckXcodeVersion(9, 0))
            {
                // Merely check that the P/Invoke goes through.
                var perms = pdf.GetAccessPermissions();

                // Get and set outline
                var outline = pdf.GetOutline();
                pdf.SetOutline(outline);
            }
        }
예제 #26
0
        public async Task <Abstractions.PdfDocument> Rasterize(string pdfPath, bool cachePirority = true)
        {
            if (cachePirority)
            {
                var existing = await GetRasterized(pdfPath);

                if (existing != null)
                {
                    Debug.WriteLine("Using cached images ...");

                    return(existing);
                }
            }

            Debug.WriteLine("Downloading and generating again ...");

            var localpath = pdfPath.IsDistantUrl() ? await this.DownloadTemporary(pdfPath) : pdfPath;

            //TODO threading the process

                        #if DROID
            var f   = new Java.IO.File(localpath);
            var fd  = Android.OS.ParcelFileDescriptor.Open(f, Android.OS.ParcelFileMode.ReadOnly);
            var pdf = new PdfRenderer(fd);
                        #else
            var pdf = CGPDFDocument.FromFile(localpath);
                        #endif

            var path       = GetLocalPath(pdfPath, !cachePirority);
            var pagesPaths = this.Render(pdf, path);

            return(new Plugin.PdfRasterizer.Abstractions.PdfDocument()
            {
                Pages = pagesPaths.Select((p) => new PdfPage()
                {
                    Path = p
                }),
            });
        }
예제 #27
0
        public static UIImage FromPdf(string name, float width, float height)
        {
            CGPDFDocument doc = CreatePDFDocumentWithName(name);

            if (doc == null)
            {
                return(null);
            }

            // PDF pages are numbered starting at page 1
            CGPDFPage page = doc.GetPage(1);

            RectangleF box = page.GetBoxRect(CGPDFBox.Crop);

            var xScale = (width * UIScreen.MainScreen.Scale) / box.Width;
            var yScale = (height * UIScreen.MainScreen.Scale) / box.Height;


            var result = imageWithPDFPage(page, Math.Max(xScale, yScale), CGAffineTransform.MakeIdentity());

            return(result);
        }
예제 #28
0
		public override void ViewDidDisappear (bool animated)
		{
			base.ViewDidDisappear (animated);
			var page = PdfPage;
			var document = PdfDocument;
			var contentView = ContentView;
			var tiledLayer = TiledLayer;
			var scrollView = ScrollView;
			
			PdfPage = null;
			PdfDocument = null;
			ContentView = null;
			TiledLayer = null;
			ScrollView = null;
			
			scrollView.RemoveFromSuperview ();
			tiledLayer.RemoveFromSuperLayer ();
			page.Dispose ();
			document.Dispose ();
			contentView.Dispose ();
			scrollView.Dispose ();
			tiledLayer.Dispose ();
		}
예제 #29
0
        private string[] Render(CGPDFDocument pdf, string outputDirectory)
        {
            var result = new string[pdf.Pages];

            for (int i = 0; i < pdf.Pages; i++)
            {
                var pagePath = string.Format("{0}/{1}.png", outputDirectory.TrimEnd(new char[] { '/', '\\' }), i);
                Debug.WriteLine("P:" + pagePath);
                var page = pdf.GetPage(i + 1);
                Debug.WriteLine("PAGE:" + (page == null));
                var image = RenderImage(page);
                var data  = image.AsPNG();
                File.Create(pagePath);
                data.Save(pagePath, true);
                result [i] = pagePath;
            }

            var metaPath = string.Format("{0}/{1}", outputDirectory.TrimEnd(new char[] { '/', '\\' }), MetaFile);

            File.Create(metaPath);

            return(result);
        }
예제 #30
0
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);
            if (e.OldElement != null || this.Element == null)
            {
                return;
            }
            PdfPage page = (PdfPage)Element;
            string  path;

            if (page.useTemp)
            {
                string tempFolder = new FileManage().GetTempFolder();
                path = System.IO.Path.Combine(tempFolder, page.FileName);
            }
            else
            {
                string libraryFolder = new FileManage().GetLibraryFolder();
                path = System.IO.Path.Combine(libraryFolder, page.FileName);
            }

            UIWebView webView = new UIWebView();

            if (path.EndsWith(".pdf"))
            {
                CGPDFDocument doc = CGPDFDocument.FromFile(path);
                NumberOfPages = doc.Pages;
            }

            NSUrlRequest request = new NSUrlRequest(new NSUrl(path, false));

            webView.LoadRequest(new NSUrlRequest(new NSUrl(path, false)));
            webView.PaginationMode  = UIWebPaginationMode.TopToBottom;
            webView.ScalesPageToFit = true;

            View = webView;
        }
        void acPrinterTest(NSObject sender)
        {
            CGPDFDocument pdfDoc = CGPDFDocument.FromFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "100605 PrePlumbingPDF_Signed.pdf"));
            UIImage       img    = MyConstants.ImageFromPDF(pdfDoc, 1);

            TcpPrinterConnection myConn;

            myConn = new TcpPrinterConnection("10.11.1.3", 6101, 10, 10);

            NSError err;

            bool connectionOK = myConn.Open();

            if (connectionOK)
            {
                try {
                    // string test = SGD.Get ("appl.name", myConn, out err); // -- SGD class from Zebra API works

                    ZebraPrinterCpcl zprn = ZebraPrinterFactory.GetInstance(myConn, PrinterLanguage.PRINTER_LANGUAGE_CPCL);
                    GraphicsUtilCpcl gu   = zprn.GetGraphicsUtil();

                    string testSETFF = "! U1 JOURNAL\r\n! U1 SETFF 50 5\r\n";
                    NSData testData  = NSData.FromArray(System.Text.UTF8Encoding.UTF8.GetBytes(testSETFF));
                    myConn.Write(testData, out err);
                    // gu.printImage(img.CGImage, 280, 5, -1, -1, false, out err);

                    gu.printImage(img.CGImage, 280, 5, -1, -1, false, out err);
                    if (err != null)
                    {
                        // Console.WriteLine (err.LocalizedDescription);
                    }
                }
                finally {
                    myConn.Close();
                }
            }
        }
예제 #32
0
 /// <summary>
 /// Opens document
 /// </summary>
 /// <param name="docName">Document name</param>
 /// <param name="docFilePath">Path to document file</param>
 public static void OpenDocument(string docName, string docFilePath)
 {
     // Close previous opened document
     CloseDocument();
     // Open new document
     mCurrentPageNumber = -1;
     mDocName = docName;
     mDocFilePath = docFilePath;
     try {
         mDocument = CGPDFDocument.FromFile(mDocFilePath);
         mDocumentHasLoaded = true;
     } catch (Exception) {
         mDocumentHasLoaded = false;
         using (var alert = new UIAlertView("Error", "Open PDF document error", null, "Ok")) {
             alert.Show();
         }
     }
 }
예제 #33
0
 public void FromFile()
 {
     using (CGPDFDocument doc = CGPDFDocument.FromFile(NSBundle.MainBundle.PathForResource("Tamarin", "pdf"))) {
         CheckTamarin(doc);
     }
 }
예제 #34
0
 public PDFView (IntPtr p) : base(p)
 {
     _pageNumber = 1;
     _pdf = CGPDFDocument.FromFile (Path.Combine (NSBundle.MainBundle.BundlePath, "sample.pdf"));
 }
예제 #35
0
 public static NSDictionary ResolveDestNames(NSSet destNames, CGPDFDocument document)
 {
     return ResolveDestNames_ (destNames, document.Handle);
 }
예제 #36
0
 public void FromFile()
 {
     using (CGPDFDocument doc = CGPDFDocument.FromFile("Tamarin.pdf")) {
         CheckTamarin(doc);
     }
 }
예제 #37
0
 public static uint ResolveActionsWithNamedDestinations(PSPDFGoToAction[] actions, CGPDFDocument documentRef)
 {
     return ResolveActionsWithNamedDestinations_ (actions, documentRef.Handle);
 }
예제 #38
0
 public void ReleaseDocumentRef(CGPDFDocument documentRef, NSObject owner)
 {
     ReleaseDocumentRef_ (documentRef.Handle, owner);
 }
예제 #39
0
		public PdfScrollView (CGRect frame)
			: base (frame)
		{
			ShowsVerticalScrollIndicator = false;
			ShowsHorizontalScrollIndicator = false;
			BouncesZoom = true;
			DecelerationRate = UIScrollView.DecelerationRateFast;
			BackgroundColor = UIColor.Gray;
			MaximumZoomScale = 5.0f;
			MinimumZoomScale = 0.25f;

			// open the PDF file (default directory is the bundle path)
			pdf = CGPDFDocument.FromFile ("Tamarin.pdf");
			// select the first page (the only one we'll use)
			page = pdf.GetPage (1);

			// make the initial view 'fit to width'
			CGRect pageRect = page.GetBoxRect (CGPDFBox.Media);
			scale = Frame.Width / pageRect.Width;
			pageRect.Size = new CGSize (pageRect.Width * scale, pageRect.Height * scale);

			// create bitmap version of the PDF page, to be used (scaled)
			// when no other (tiled) view are visible
			UIGraphics.BeginImageContext (pageRect.Size);
			CGContext context = UIGraphics.GetCurrentContext ();

			// fill with white background
			context.SetFillColor (1.0f, 1.0f, 1.0f, 1.0f);
			context.FillRect (pageRect);
			context.SaveState ();

			// flip page so we render it as it's meant to be read
			context.TranslateCTM (0.0f, pageRect.Height);
			context.ScaleCTM (1.0f, -1.0f);

			// scale page at the view-zoom level
			context.ScaleCTM (scale, scale);
			context.DrawPDFPage (page);
			context.RestoreState ();

			UIImage backgroundImage = UIGraphics.GetImageFromCurrentImageContext ();
			UIGraphics.EndImageContext ();

			backgroundImageView = new UIImageView (backgroundImage);
			backgroundImageView.Frame = pageRect;
			backgroundImageView.ContentMode = UIViewContentMode.ScaleAspectFit;
			AddSubview (backgroundImageView);
			SendSubviewToBack (backgroundImageView);

			// Create the TiledPDFView based on the size of the PDF page and scale it to fit the view.
			pdfView = new TiledPdfView (pageRect, (float)scale);
			pdfView.Page = page;
			AddSubview (pdfView);

			// no need to have (or set) a UIScrollViewDelegate with MonoTouch

			this.ViewForZoomingInScrollView = delegate {
				// return the view we'll be using while zooming
				return pdfView;
			};

			// when zooming starts we remove (from view) and dispose any
			// oldPdfView and set pdfView as our 'new' oldPdfView, it will
			// stay there until a new view is available (when zooming ends)
			this.ZoomingStarted += delegate {
				if (oldPdfView != null) {
					oldPdfView.RemoveFromSuperview ();
					oldPdfView.Dispose ();
				}
				oldPdfView = pdfView;
				AddSubview (oldPdfView);
			};

			// when zooming ends a new TiledPdfView is created (and shown)
			// based on the updated 'scale' and 'frame'
			ZoomingEnded += delegate (object sender, ZoomingEndedEventArgs e) {
				scale *= e.AtScale;

				CGRect rect = page.GetBoxRect (CGPDFBox.Media);
				rect.Size = new CGSize (rect.Width * scale, rect.Height * scale);

				pdfView = new TiledPdfView (rect, (float)scale);
				pdfView.Page = page;
				AddSubview (pdfView);
			};
		}
		private string[] Render (CGPDFDocument pdf, string outputDirectory)
		{
			var result = new string[pdf.Pages];

			for (int i = 0; i < pdf.Pages; i++) {
				var pagePath = string.Format ("{0}/{1}.png", outputDirectory.TrimEnd (new char[] { '/', '\\' }), i);
				Debug.WriteLine("P:"+pagePath);
				var page = pdf.GetPage (i+1);
				Debug.WriteLine ("PAGE:" + (page == null));
				var image = RenderImage (page);
				var data = image.AsPNG ();
				File.Create (pagePath);
				data.Save (pagePath, true);
				result [i] = pagePath;
			}

			var metaPath = string.Format ("{0}/{1}", outputDirectory.TrimEnd (new char[] { '/', '\\' }), MetaFile);
			File.Create (metaPath);

			return result;
		}
예제 #41
0
        public NoteCellView(String bookID, Note note)
        {
            this.BackgroundColor = UIColor.Clear;
            this.pageID          = pageID;
            this.note            = note;

            nfloat height = 300;

            Page page = BooksOnDeviceAccessor.GetPage(bookID, note.PageID);

            if (note.Text == "Header: " + note.PageID)
            {
                this.Frame = new CGRect(0, 0, 200, height);

                // pageView
                UIImageView pageView = new UIImageView();
                pageView.Frame = new CGRect(15, 20, 170, height - 80);
                this.AddSubview(pageView);

                bool notFound = true;
                if (page != null)
                {
                    String        localPath = DownloadedFilesCache.BuildCachedFilePath(page.URL);
                    CGPDFDocument pdfDoc    = CGPDFDocument.FromFile(localPath);
                    if (pdfDoc != null)
                    {
                        notFound = false;

                        CGPDFPage pdfPage   = pdfDoc.GetPage(1);
                        UIImage   pageImage = ImageHelper.PDF2Image(pdfPage, pageView.Frame.Width, UIScreen.MainScreen.Scale);
                        pageView.Image = pageImage;
                    }
                }

                if (notFound)
                {
                    pageView.Image = UIImage.FromBundle("Assets/Icons/empty_page.png");

                    // emptyLabel
                    UILabel emptyLabel = eBriefingAppearance.GenerateLabel(17);
                    emptyLabel.Frame         = pageView.Frame;
                    emptyLabel.Text          = "Empty";
                    emptyLabel.TextAlignment = UITextAlignment.Center;
                    emptyLabel.SizeToFit();
                    emptyLabel.Center = pageView.Center;
                    this.AddSubview(emptyLabel);
                }

                // pageView
                NotePageView circleView = new NotePageView(page, pageView.Frame.Width / 2);
                circleView.Center = new CGPoint(pageView.Center.X, pageView.Frame.Bottom);
                this.AddSubview(circleView);
            }
            else if (note.Text == "Footer: " + note.PageID)
            {
                this.Frame = new CGRect(0, 0, 50, height);

                // footerView
//				UIImageView footerView = new UIImageView(UIImage.FromBundle("Assets/Icons/endPageNote.png"));
//				footerView.Frame = new CGRect(15, ((height - 40) / 2 - 10), 20, 20);
//                this.AddSubview(footerView);
            }
            else
            {
                this.Frame = new CGRect(0, 0, 250, height);

                // noteView
                NoteCellNoteView noteView = new NoteCellNoteView(note, height - 80);
                noteView.Frame          = new CGRect(15, 20, noteView.Frame.Width, noteView.Frame.Height);
                noteView.TouchUpInside += delegate
                {
                    if (ItemPressedEvent != null)
                    {
                        ItemPressedEvent(page.ID, note);
                    }
                };
                this.AddSubview(noteView);
            }
        }
예제 #42
0
        private void Initial()
        {
            btnClock.Enabled = false;
            btnTag.Enabled   = false;

            btnNote.TouchUpInside   += ChangeButtonState;
            btnPencil.TouchUpInside += ChangeButtonState;

            //將pdf的imageVie設定識別碼
            imageView.AccessibilityIdentifier = "PDFImageView";

            #region 產生存放畫線&圖片的資料夾名稱
            PDF_RECORD_DIR = PDF_Type == "Add" ? DateTime.Now.Ticks.ToString() : Path.GetFileNameWithoutExtension(Doc.Name);
            //only doc.name is null had to process file name
            if (PDF_Type == "Add" && Doc.Name == null)
            {
                Doc.Name = string.Format("{0}.json", PDF_RECORD_DIR);
            }

            #endregion

            #region 處理image的資料來源,如pdf 或是jpg

            if (Path.GetExtension(Doc.Reference).ToLower().Equals(".pdf"))
            {
                _pdf = CGPDFDocument.FromFile(Doc.Reference);
                this.View.BackgroundColor = UIColor.Gray;
                Debug.WriteLine(PageNumber);
                imageView.Image = GetPDFImageForPage();
                IsPdfBackground = true;
            }
            else
            {
                UIImage imageBackground = UIImage.FromFile(Doc.Reference);
                int     width           = (int)imageBackground.Size.Width;
                int     height          = (int)imageBackground.Size.Height;
                nfloat  scale;
                if (height > width)
                {
                    scale = (View.Frame.Width - 80.0f) / width;
                }
                else
                {
                    scale = this.View.Frame.Height / height;
                }
                imageView.Image          = imageBackground;
                imageBackgroundRect      = new CGRect();
                imageBackgroundRect.Size = new CGSize(width * scale, height * scale);
                IsPdfBackground          = false;
            }

            //將整個scrollview大小對應pdf的大小
            scrollView.ContentSize = imageView.Image.Size;


            #endregion

            #region 工具列事件處理
            // add done button in navigation bar
            var navButtonDone = new UIBarButtonItem(UIBarButtonSystemItem.Done, (s, e) =>
            {
                #region save data

                // 畫筆未關時,進行關閉
                if (openPen)
                {
                    openPen = false;
                    //儲存畫布至記憶體中
                    CreateNewUIViewHandle(AttachmentTypeEnum.Paint);
                    //移除畫布
                    DrawImageView.RemoveFromSuperview();
                }

                UIViewDataSaveHandle();

                #endregion

                NavigationController.PopToRootViewController(true);
            });
            navItem.SetRightBarButtonItem(navButtonDone, true);
            #endregion

            //按鈕事件處理
            ButtonEventHandle();

            #region 判斷是pdf來源才處理滑動換頁事件
            if (IsPdfBackground == true)
            {
                SwipeChangPageHandle();
            }
            #endregion
        }
예제 #43
0
	public PDFDrawingView () : base () {
		doc = CGPDFDocument.FromFile (Path.Combine (NSBundle.MainBundle.BundlePath, "Images/QuartzImageDrawing.pdf"));
		if (doc == null)
			throw new Exception ("Could not load document");
	}