protected virtual void Dispose(bool disposing) { if (!_disposed) { StreamManager.Unregister(_id); if (_form != IntPtr.Zero) { NativeMethods.FORM_DoDocumentAAction(_form, NativeMethods.FPDFDOC_AACTION.WC); NativeMethods.FPDFDOC_ExitFormFillEnvironment(_form); _form = IntPtr.Zero; } if (_document != IntPtr.Zero) { NativeMethods.FPDF_CloseDocument(_document); _document = IntPtr.Zero; } if (_formCallbacksHandle !.IsAllocated) { _formCallbacksHandle !.Free(); } if (_stream != null) { _stream.Dispose(); _stream = null; } _disposed = true; } }
private static int FPDF_SaveBlock(IntPtr fileWrite, IntPtr data, uint size) { var write = new FPDF_FILEWRITE(); Marshal.PtrToStructure(fileWrite, write); var stream = StreamManager.Get((int)write.stream); if (stream == null) { return(0); } byte[] buffer = new byte[size]; Marshal.Copy(data, buffer, 0, (int)size); try { stream.Write(buffer, 0, (int)size); return((int)size); } catch { return(0); } }
public PdfFile(Stream stream, string?password) { PdfLibrary.EnsureLoaded(); _stream = stream ?? throw new ArgumentNullException(nameof(stream)); _id = StreamManager.Register(stream); var document = NativeMethods.FPDF_LoadCustomDocument(stream, password, _id); if (document == IntPtr.Zero) { throw new PdfException((PdfError)NativeMethods.FPDF_GetLastError()); } LoadDocument(document); }
private static int FPDF_GetBlock(IntPtr param, uint position, IntPtr buffer, uint size) { var stream = StreamManager.Get((int)param); if (stream == null) { return(0); } byte[] managedBuffer = new byte[size]; stream.Position = position; int read = stream.Read(managedBuffer, 0, (int)size); if (read != size) { return(0); } Marshal.Copy(managedBuffer, 0, buffer, (int)size); return(1); }