Esempio n. 1
0
        protected virtual void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (_form != IntPtr.Zero)
                {
                    NativePdfiumMethods.FORM_DoDocumentAAction(_form, NativePdfiumMethods.FPDFDOC_AACTION.WC);
                    NativePdfiumMethods.FPDFDOC_ExitFormFillEnviroument(_form);
                    _form = IntPtr.Zero;
                }

                if (_document != IntPtr.Zero)
                {
                    NativePdfiumMethods.FPDF_CloseDocument(_document);
                    _document = IntPtr.Zero;
                }

                if (_formCallbacksHandle.IsAllocated)
                {
                    _formCallbacksHandle.Free();
                }

                _disposed = true;
            }
        }
Esempio n. 2
0
        public byte[] GetPDFPage(int pageNumber)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException(GetType().Name);
            }

            IntPtr newDocument = NativePdfiumMethods.FPDF_CreateNewDocument();

            var bl = NativePdfiumMethods.FPDF_ImportPages(newDocument, _document, pageNumber.ToString(), 0);

            int pageCount = NativePdfiumMethods.FPDF_GetPageCount(newDocument);


            using (MemoryStream ms = new MemoryStream())
            {
                FPDF_FILEWRITE saveData = new FPDF_FILEWRITE();
                saveData.WriteBlock = (WriteBlockCallback)((pThis, buffer, buflen) =>
                {
                    ms.Write(buffer, 0, buffer.Length);
                    return(true);
                });
                try
                {
                    NativePdfiumMethods.FPDF_SaveAsCopy(newDocument, saveData, 1);
                }
                finally
                {
                    GC.KeepAlive((object)saveData);
                }

                NativePdfiumMethods.FPDF_CloseDocument(newDocument);

                return(ms.ToArray());
            }
        }