using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using System.IO;
#pragma warning disable 1591
namespace PdfiumViewer
{
partial class NativeMethods
{
// Interned strings are cached over AppDomains. This means that when we
// lock on this string, we actually lock over AppDomain's. The Pdfium
// library is not thread safe, and this way of locking
// guarantees that we don't access the Pdfium library from different
// threads, even when there are multiple AppDomain's in play.
private static readonly string LockString = String.Intern("e362349b-001d-4cb2-bf55-a71606a3e36f");
public static void FPDF_AddRef()
{
lock (LockString)
{
Imports.FPDF_AddRef();
}
}
public static void FPDF_Release()
{
lock (LockString)
{
Imports.FPDF_Release();
}
}
public static IntPtr FPDF_LoadMemDocument(SafeHandle data_buf, int size, string password)
{
lock (LockString)
{
return Imports.FPDF_LoadMemDocument(data_buf, size, password);
}
}
public static IntPtr FPDF_LoadMemDocument(byte[] data_buf, int size, string password)
{
lock (LockString)
{
return Imports.FPDF_LoadMemDocument(data_buf, size, password);
}
}
public static void FPDF_CloseDocument(IntPtr document)
{
lock (LockString)
{
Imports.FPDF_CloseDocument(document);
}
}
public static int FPDF_GetPageCount(IntPtr document)
{
lock (LockString)
{
return Imports.FPDF_GetPageCount(document);
}
}
public static uint FPDF_GetDocPermissions(IntPtr document)
{
lock (LockString)
{
return Imports.FPDF_GetDocPermissions(document);
}
}
public static IntPtr FPDFDOC_InitFormFillEnvironment(IntPtr document, FPDF_FORMFILLINFO formInfo)
{
lock (LockString)
{
return Imports.FPDFDOC_InitFormFillEnvironment(document, formInfo);
}
}
public static void FPDF_SetFormFieldHighlightColor(IntPtr hHandle, int fieldType, uint color)
{
lock (LockString)
{
Imports.FPDF_SetFormFieldHighlightColor(hHandle, fieldType, color);
}
}
public static void FPDF_SetFormFieldHighlightAlpha(IntPtr hHandle, byte alpha)
{
lock (LockString)
{
Imports.FPDF_SetFormFieldHighlightAlpha(hHandle, alpha);
}
}
public static void FORM_DoDocumentJSAction(IntPtr hHandle)
{
lock (LockString)
{
Imports.FORM_DoDocumentJSAction(hHandle);
}
}
public static void FORM_DoDocumentOpenAction(IntPtr hHandle)
{
lock (LockString)
{
Imports.FORM_DoDocumentOpenAction(hHandle);
}
}
public static void FPDFDOC_ExitFormFillEnvironment(IntPtr hHandle)
{
lock (LockString)
{
Imports.FPDFDOC_ExitFormFillEnvironment(hHandle);
}
}
public static void FORM_DoDocumentAAction(IntPtr hHandle, FPDFDOC_AACTION aaType)
{
lock (LockString)
{
Imports.FORM_DoDocumentAAction(hHandle, aaType);
}
}
public static IntPtr FPDF_LoadPage(IntPtr document, int page_index)
{
lock (LockString)
{
return Imports.FPDF_LoadPage(document, page_index);
}
}
public static IntPtr FPDFText_LoadPage(IntPtr page)
{
lock (LockString)
{
return Imports.FPDFText_LoadPage(page);
}
}
public static void FORM_OnAfterLoadPage(IntPtr page, IntPtr _form)
{
lock (LockString)
{
Imports.FORM_OnAfterLoadPage(page, _form);
}
}
public static void FORM_DoPageAAction(IntPtr page, IntPtr _form, FPDFPAGE_AACTION fPDFPAGE_AACTION)
{
lock (LockString)
{
Imports.FORM_DoPageAAction(page, _form, fPDFPAGE_AACTION);
}
}
public static double FPDF_GetPageWidth(IntPtr page)
{
lock (LockString)
{
return Imports.FPDF_GetPageWidth(page);
}
}
public static double FPDF_GetPageHeight(IntPtr page)
{
lock (LockString)
{
return Imports.FPDF_GetPageHeight(page);
}
}
public static void FORM_OnBeforeClosePage(IntPtr page, IntPtr _form)
{
lock (LockString)
{
Imports.FORM_OnBeforeClosePage(page, _form);
}
}
public static void FPDFText_ClosePage(IntPtr text_page)
{
lock (LockString)
{
Imports.FPDFText_ClosePage(text_page);
}
}
public static void FPDF_ClosePage(IntPtr page)
{
lock (LockString)
{
Imports.FPDF_ClosePage(page);
}
}
public static void FPDF_RenderPage(IntPtr dc, IntPtr page, int start_x, int start_y, int size_x, int size_y, int rotate, FPDF flags)
{
lock (LockString)
{
Imports.FPDF_RenderPage(dc, page, start_x, start_y, size_x, size_y, rotate, flags);
}
}
public static void FPDF_RenderPageBitmap(IntPtr bitmapHandle, IntPtr page, int start_x, int start_y, int size_x, int size_y, int rotate, FPDF flags)
{
lock (LockString)
{
Imports.FPDF_RenderPageBitmap(bitmapHandle, page, start_x, start_y, size_x, size_y, rotate, flags);
}
}
public static int FPDF_GetPageSizeByIndex(IntPtr document, int page_index, out double width, out double height)
{
lock (LockString)
{
return Imports.FPDF_GetPageSizeByIndex(document, page_index, out width, out height);
}
}
public static IntPtr FPDFBitmap_CreateEx(int width, int height, int format, IntPtr first_scan, int stride)
{
lock (LockString)
{
return Imports.FPDFBitmap_CreateEx(width, height, format, first_scan, stride);
}
}
public static void FPDFBitmap_FillRect(IntPtr bitmapHandle, int left, int top, int width, int height, uint color)
{
lock (LockString)
{
Imports.FPDFBitmap_FillRect(bitmapHandle, left, top, width, height, color);
}
}
public static IntPtr FPDFBitmap_Destroy(IntPtr bitmapHandle)
{
lock (LockString)
{
return Imports.FPDFBitmap_Destroy(bitmapHandle);
}
}
public static IntPtr FPDFText_FindStart(IntPtr page, byte[] findWhat, FPDF_SEARCH_FLAGS flags, int start_index)
{
lock (LockString)
{
return Imports.FPDFText_FindStart(page, findWhat, flags, start_index);
}
}
public static int FPDFText_GetSchResultIndex(IntPtr handle)
{
lock (LockString)
{
return Imports.FPDFText_GetSchResultIndex(handle);
}
}
public static int FPDFText_GetSchCount(IntPtr handle)
{
lock (LockString)
{
return Imports.FPDFText_GetSchCount(handle);
}
}
public static int FPDFText_GetText(IntPtr page, int start_index, int count, byte[] result)
{
lock (LockString)
{
return Imports.FPDFText_GetText(page, start_index, count, result);
}
}
public static void FPDFText_GetCharBox(IntPtr page, int index, out double left, out double right, out double bottom, out double top)
{
lock (LockString)
{
Imports.FPDFText_GetCharBox(page, index, out left, out right, out bottom, out top);
}
}
public static int FPDFText_CountChars(IntPtr page)
{
lock (LockString)
{
return Imports.FPDFText_CountChars(page);
}
}
public static bool FPDFText_FindNext(IntPtr handle)
{
lock (LockString)
{
return Imports.FPDFText_FindNext(handle);
}
}
public static void FPDFText_FindClose(IntPtr handle)
{
lock (LockString)
{
Imports.FPDFText_FindClose(handle);
}
}
public static bool FPDFLink_Enumerate(IntPtr page, ref int startPos, out IntPtr linkAnnot)
{
lock (LockString)
{
return Imports.FPDFLink_Enumerate(page, ref startPos, out linkAnnot);
}
}
public static IntPtr FPDFLink_GetDest(IntPtr document, IntPtr link)
{
lock (LockString)
{
return Imports.FPDFLink_GetDest(document, link);
}
}
public static uint FPDFDest_GetPageIndex(IntPtr document, IntPtr dest)
{
lock (LockString)
{
return Imports.FPDFDest_GetPageIndex(document, dest);
}
}
public static bool FPDFLink_GetAnnotRect(IntPtr linkAnnot, FS_RECTF rect)
{
lock (LockString)
{
return Imports.FPDFLink_GetAnnotRect(linkAnnot, rect);
}
}
public static void FPDF_DeviceToPage(IntPtr page, int start_x, int start_y, int size_x, int size_y, int rotate, int device_x, int device_y, out double page_x, out double page_y)
{
lock (LockString)
{
Imports.FPDF_DeviceToPage(page, start_x, start_y, size_x, size_y, rotate, device_x, device_y, out page_x, out page_y);
}
}
public static void FPDF_PageToDevice(IntPtr page, int start_x, int start_y, int size_x, int size_y, int rotate, double page_x, double page_y, out int device_x, out int device_y)
{
lock (LockString)
{
Imports.FPDF_PageToDevice(page, start_x, start_y, size_x, size_y, rotate, page_x, page_y, out device_x, out device_y);
}
}
public static IntPtr FPDFLink_GetAction(IntPtr link)
{
lock (LockString)
{
return Imports.FPDFLink_GetAction(link);
}
}
public static uint FPDFAction_GetURIPath(IntPtr document, IntPtr action, StringBuilder buffer, uint buflen)
{
lock (LockString)
{
return Imports.FPDFAction_GetURIPath(document, action, buffer, buflen);
}
}
public static IntPtr FPDF_BookmarkGetFirstChild(IntPtr document, IntPtr bookmark)
{
lock (LockString)
return Imports.FPDFBookmark_GetFirstChild(document, bookmark);
}
public static IntPtr FPDF_BookmarkGetNextSibling(IntPtr document, IntPtr bookmark)
{
lock (LockString)
return Imports.FPDFBookmark_GetNextSibling(document, bookmark);
}
public static uint FPDF_BookmarkGetTitle(IntPtr bookmark, byte[] buffer, uint buflen)
{
lock (LockString)
return Imports.FPDFBookmark_GetTitle(bookmark, buffer, buflen);
}
public static IntPtr FPDF_BookmarkGetAction(IntPtr bookmark)
{
lock (LockString)
return Imports.FPDFBookmark_GetAction(bookmark);
}
public static IntPtr FPDF_BookmarkGetDest(IntPtr document, IntPtr bookmark)
{
lock (LockString)
return Imports.FPDFBookmark_GetDest(document, bookmark);
}
public static uint FPDF_ActionGetType(IntPtr action)
{
lock (LockString)
return Imports.FPDFAction_GetType(action);
}
///
/// Opens a document using a .NET Stream. Allows opening huge
/// PDFs without loading them into memory first.
///
/// The input Stream. Don't dispose prior to closing the pdf.
/// Password, if the PDF is protected. Can be null.
/// Retrieves an IntPtr to the COM object for the Stream. The caller must release this with Marshal.Release prior to Disposing the Stream.
/// An IntPtr to the FPDF_DOCUMENT object.
public static IntPtr FPDF_LoadCustomDocument(Stream input, string password, int id)
{
var getBlock = Marshal.GetFunctionPointerForDelegate(_getBlockDelegate);
var access = new FPDF_FILEACCESS
{
m_FileLen = (uint)input.Length,
m_GetBlock = getBlock,
m_Param = (IntPtr)id
};
lock (LockString)
{
return Imports.FPDF_LoadCustomDocument(access, password);
}
}
public static FPDF_ERR FPDF_GetLastError()
{
lock (LockString)
{
return (FPDF_ERR)Imports.FPDF_GetLastError();
}
}
public static uint FPDF_GetMetaText(IntPtr document, string tag, byte[] buffer, uint buflen)
{
lock (LockString)
{
return Imports.FPDF_GetMetaText(document, tag, buffer, buflen);
}
}
#region Save / Edit Methods
public static void FPDFPage_SetRotation(IntPtr page, PdfRotation rotation)
{
lock (LockString)
{
Imports.FPDFPage_SetRotation(page, (int)rotation);
}
}
public static bool FPDFPage_GenerateContent(IntPtr page)
{
lock (LockString)
{
return Imports.FPDFPage_GenerateContent(page);
}
}
public static void FPDFPage_Delete(IntPtr doc, int page)
{
lock (LockString)
{
Imports.FPDFPage_Delete(doc, page);
}
}
public static bool FPDF_SaveAsCopy(IntPtr doc, Stream output, FPDF_SAVE_FLAGS flags)
{
int id = StreamManager.Register(output);
try
{
var write = new FPDF_FILEWRITE
{
stream = (IntPtr)id,
version = 1,
WriteBlock = Marshal.GetFunctionPointerForDelegate(_saveBlockDelegate)
};
lock (LockString)
{
return Imports.FPDF_SaveAsCopy(doc, write, flags);
}
}
finally
{
StreamManager.Unregister(id);
}
}
public static bool FPDF_SaveWithVersion(IntPtr doc, Stream output, FPDF_SAVE_FLAGS flags, int fileVersion)
{
int id = StreamManager.Register(output);
try
{
var write = new FPDF_FILEWRITE
{
stream = (IntPtr)id,
version = 1,
WriteBlock = Marshal.GetFunctionPointerForDelegate(_saveBlockDelegate)
};
lock (LockString)
{
return Imports.FPDF_SaveWithVersion(doc, write, flags, fileVersion);
}
}
finally
{
StreamManager.Unregister(id);
}
}
public static void FPDF_FFLDraw(IntPtr form, IntPtr bitmap, IntPtr page, int start_x, int start_y, int size_x, int size_y, int rotate, FPDF flags)
{
lock (LockString)
{
Imports.FPDF_FFLDraw(form, bitmap, page, start_x, start_y, size_x, size_y, rotate, flags);
}
}
#endregion
#region Custom Load/Save Logic
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate int FPDF_GetBlockDelegate(IntPtr param, uint position, IntPtr buffer, uint size);
private static readonly FPDF_GetBlockDelegate _getBlockDelegate = FPDF_GetBlock;
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate int FPDF_SaveBlockDelegate(IntPtr fileWrite, IntPtr data, uint size);
private static readonly FPDF_SaveBlockDelegate _saveBlockDelegate = FPDF_SaveBlock;
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;
}
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;
}
}
#endregion
private static class Imports
{
[DllImport("pdfium.dll")]
public static extern void FPDF_AddRef();
[DllImport("pdfium.dll")]
public static extern void FPDF_Release();
[DllImport("pdfium.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr FPDF_LoadCustomDocument([MarshalAs(UnmanagedType.LPStruct)]FPDF_FILEACCESS access, string password);
[DllImport("pdfium.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr FPDF_LoadMemDocument(SafeHandle data_buf, int size, string password);
[DllImport("pdfium.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr FPDF_LoadMemDocument(byte[] data_buf, int size, string password);
[DllImport("pdfium.dll")]
public static extern void FPDF_CloseDocument(IntPtr document);
[DllImport("pdfium.dll")]
public static extern int FPDF_GetPageCount(IntPtr document);
[DllImport("pdfium.dll")]
public static extern uint FPDF_GetDocPermissions(IntPtr document);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFDOC_InitFormFillEnvironment(IntPtr document, FPDF_FORMFILLINFO formInfo);
[DllImport("pdfium.dll")]
public static extern void FPDF_SetFormFieldHighlightColor(IntPtr hHandle, int fieldType, uint color);
[DllImport("pdfium.dll")]
public static extern void FPDF_SetFormFieldHighlightAlpha(IntPtr hHandle, byte alpha);
[DllImport("pdfium.dll")]
public static extern void FORM_DoDocumentJSAction(IntPtr hHandle);
[DllImport("pdfium.dll")]
public static extern void FORM_DoDocumentOpenAction(IntPtr hHandle);
[DllImport("pdfium.dll")]
public static extern void FPDFDOC_ExitFormFillEnvironment(IntPtr hHandle);
[DllImport("pdfium.dll")]
public static extern void FORM_DoDocumentAAction(IntPtr hHandle, FPDFDOC_AACTION aaType);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDF_LoadPage(IntPtr document, int page_index);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFText_LoadPage(IntPtr page);
[DllImport("pdfium.dll")]
public static extern void FORM_OnAfterLoadPage(IntPtr page, IntPtr _form);
[DllImport("pdfium.dll")]
public static extern void FORM_DoPageAAction(IntPtr page, IntPtr _form, FPDFPAGE_AACTION fPDFPAGE_AACTION);
[DllImport("pdfium.dll")]
public static extern double FPDF_GetPageWidth(IntPtr page);
[DllImport("pdfium.dll")]
public static extern double FPDF_GetPageHeight(IntPtr page);
[DllImport("pdfium.dll")]
public static extern void FORM_OnBeforeClosePage(IntPtr page, IntPtr _form);
[DllImport("pdfium.dll")]
public static extern void FPDFText_ClosePage(IntPtr text_page);
[DllImport("pdfium.dll")]
public static extern void FPDF_ClosePage(IntPtr page);
[DllImport("pdfium.dll")]
public static extern void FPDF_RenderPage(IntPtr dc, IntPtr page, int start_x, int start_y, int size_x, int size_y, int rotate, FPDF flags);
[DllImport("pdfium.dll")]
public static extern void FPDF_RenderPageBitmap(IntPtr bitmapHandle, IntPtr page, int start_x, int start_y, int size_x, int size_y, int rotate, FPDF flags);
[DllImport("pdfium.dll")]
public static extern int FPDF_GetPageSizeByIndex(IntPtr document, int page_index, out double width, out double height);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFBitmap_CreateEx(int width, int height, int format, IntPtr first_scan, int stride);
[DllImport("pdfium.dll")]
public static extern void FPDFBitmap_FillRect(IntPtr bitmapHandle, int left, int top, int width, int height, uint color);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFBitmap_Destroy(IntPtr bitmapHandle);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFText_FindStart(IntPtr page, byte[] findWhat, FPDF_SEARCH_FLAGS flags, int start_index);
[DllImport("pdfium.dll")]
public static extern int FPDFText_GetSchResultIndex(IntPtr handle);
[DllImport("pdfium.dll")]
public static extern int FPDFText_GetSchCount(IntPtr handle);
[DllImport("pdfium.dll")]
public static extern int FPDFText_GetText(IntPtr page, int start_index, int count, byte[] result);
[DllImport("pdfium.dll")]
public static extern void FPDFText_GetCharBox(IntPtr page, int index, out double left, out double right, out double bottom, out double top);
[DllImport("pdfium.dll")]
public static extern int FPDFText_CountChars(IntPtr page);
[DllImport("pdfium.dll")]
public static extern bool FPDFText_FindNext(IntPtr handle);
[DllImport("pdfium.dll")]
public static extern void FPDFText_FindClose(IntPtr handle);
[DllImport("pdfium.dll")]
public static extern bool FPDFLink_Enumerate(IntPtr page, ref int startPos, out IntPtr linkAnnot);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFLink_GetDest(IntPtr document, IntPtr link);
[DllImport("pdfium.dll")]
public static extern uint FPDFDest_GetPageIndex(IntPtr document, IntPtr dest);
[DllImport("pdfium.dll")]
public static extern bool FPDFLink_GetAnnotRect(IntPtr linkAnnot, FS_RECTF rect);
[DllImport("pdfium.dll")]
public static extern void FPDF_DeviceToPage(IntPtr page, int start_x, int start_y, int size_x, int size_y, int rotate, int device_x, int device_y, out double page_x, out double page_y);
[DllImport("pdfium.dll")]
public static extern void FPDF_PageToDevice(IntPtr page, int start_x, int start_y, int size_x, int size_y, int rotate, double page_x, double page_y, out int device_x, out int device_y);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFLink_GetAction(IntPtr link);
[DllImport("pdfium.dll")]
public static extern uint FPDFAction_GetURIPath(IntPtr document, IntPtr action, StringBuilder buffer, uint buflen);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFBookmark_GetFirstChild(IntPtr document, IntPtr bookmark);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFBookmark_GetNextSibling(IntPtr document, IntPtr bookmark);
[DllImport("pdfium.dll")]
public static extern uint FPDFBookmark_GetTitle(IntPtr bookmark, byte[] buffer, uint buflen);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFBookmark_GetAction(IntPtr bookmark);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFBookmark_GetDest(IntPtr document, IntPtr bookmark);
[DllImport("pdfium.dll")]
public static extern uint FPDFAction_GetType(IntPtr action);
[DllImport("pdfium.dll")]
public static extern uint FPDF_GetLastError();
[DllImport("pdfium.dll")]
public static extern uint FPDF_GetMetaText(IntPtr document, string tag, byte[] buffer, uint buflen);
#region Save/Edit APIs
[DllImport("pdfium.dll")]
public static extern bool FPDF_ImportPages(IntPtr destDoc, IntPtr srcDoc, [MarshalAs(UnmanagedType.LPStr)]string pageRange, int index);
[DllImport("pdfium.dll")]
public static extern bool FPDF_SaveAsCopy(IntPtr doc,
[MarshalAs(UnmanagedType.LPStruct)]FPDF_FILEWRITE writer,
[MarshalAs(UnmanagedType.I4)]FPDF_SAVE_FLAGS flag);
[DllImport("pdfium.dll")]
public static extern bool FPDF_SaveWithVersion(IntPtr doc,
[MarshalAs(UnmanagedType.LPStruct)]FPDF_FILEWRITE writer,
[MarshalAs(UnmanagedType.I4)]FPDF_SAVE_FLAGS flags,
int fileVersion);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFPage_New(IntPtr doc, int index, double width, double height);
[DllImport("pdfium.dll")]
public static extern void FPDFPage_Delete(IntPtr doc, int index);
[DllImport("pdfium.dll")]
public static extern int FPDFPage_GetRotation(IntPtr page);
[DllImport("pdfium.dll")]
public static extern void FPDFPage_SetRotation(IntPtr page, int rotate);
[DllImport("pdfium.dll")]
public static extern IntPtr FPDF_CreateNewDocument();
[DllImport("pdfium.dll")]
public static extern IntPtr FPDFPageObj_NewImgeObj(IntPtr document);
[DllImport("pdfium.dll")]
public static extern bool FPDFImageObj_SetBitmap(IntPtr pages, int count, IntPtr imageObject, IntPtr bitmap);
[DllImport("pdfium.dll")]
public static extern void FPDFPageObj_Transform(IntPtr page, double a, double b, double c, double d, double e, double f);
[DllImport("pdfium.dll")]
public static extern void FPDFPage_InsertObject(IntPtr page, IntPtr pageObject);
[DllImport("pdfium.dll")]
public static extern bool FPDFPage_GenerateContent(IntPtr page);
[DllImport("pdfium.dll")]
public static extern void FPDF_FFLDraw(IntPtr form, IntPtr bitmap, IntPtr page, int start_x, int start_y, int size_x, int size_y, int rotate, FPDF flags);
#endregion
}
[StructLayout(LayoutKind.Sequential)]
public class FPDF_FORMFILLINFO
{
public int version;
private IntPtr Release;
private IntPtr FFI_Invalidate;
private IntPtr FFI_OutputSelectedRect;
private IntPtr FFI_SetCursor;
private IntPtr FFI_SetTimer;
private IntPtr FFI_KillTimer;
private IntPtr FFI_GetLocalTime;
private IntPtr FFI_OnChange;
private IntPtr FFI_GetPage;
private IntPtr FFI_GetCurrentPage;
private IntPtr FFI_GetRotation;
private IntPtr FFI_ExecuteNamedAction;
private IntPtr FFI_SetTextFieldFocus;
private IntPtr FFI_DoURIAction;
private IntPtr FFI_DoGoToAction;
private IntPtr m_pJsPlatform;
// XFA support i.e. version 2
private IntPtr FFI_DisplayCaret;
private IntPtr FFI_GetCurrentPageIndex;
private IntPtr FFI_SetCurrentPage;
private IntPtr FFI_GotoURL;
private IntPtr FFI_GetPageViewRect;
private IntPtr FFI_PageEvent;
private IntPtr FFI_PopupMenu;
private IntPtr FFI_OpenFile;
private IntPtr FFI_EmailTo;
private IntPtr FFI_UploadTo;
private IntPtr FFI_GetPlatform;
private IntPtr FFI_GetLanguage;
private IntPtr FFI_DownloadFromURL;
private IntPtr FFI_PostRequestURL;
private IntPtr FFI_PutRequestURL;
}
public enum FPDF_UNSP
{
DOC_XFAFORM = 1,
DOC_PORTABLECOLLECTION = 2,
DOC_ATTACHMENT = 3,
DOC_SECURITY = 4,
DOC_SHAREDREVIEW = 5,
DOC_SHAREDFORM_ACROBAT = 6,
DOC_SHAREDFORM_FILESYSTEM = 7,
DOC_SHAREDFORM_EMAIL = 8,
ANNOT_3DANNOT = 11,
ANNOT_MOVIE = 12,
ANNOT_SOUND = 13,
ANNOT_SCREEN_MEDIA = 14,
ANNOT_SCREEN_RICHMEDIA = 15,
ANNOT_ATTACHMENT = 16,
ANNOT_SIG = 17
}
public enum FPDFDOC_AACTION
{
WC = 0x10,
WS = 0x11,
DS = 0x12,
WP = 0x13,
DP = 0x14
}
public enum FPDFPAGE_AACTION
{
OPEN = 0,
CLOSE = 1
}
[Flags]
public enum FPDF
{
ANNOT = 0x01,
LCD_TEXT = 0x02,
NO_NATIVETEXT = 0x04,
GRAYSCALE = 0x08,
DEBUG_INFO = 0x80,
NO_CATCH = 0x100,
RENDER_LIMITEDIMAGECACHE = 0x200,
RENDER_FORCEHALFTONE = 0x400,
PRINTING = 0x800,
REVERSE_BYTE_ORDER = 0x10
}
[Flags]
public enum FPDF_SEARCH_FLAGS
{
FPDF_MATCHCASE = 1,
FPDF_MATCHWHOLEWORD = 2
}
[StructLayout(LayoutKind.Sequential)]
public class FS_RECTF
{
public float left;
public float top;
public float right;
public float bottom;
}
public enum FPDF_ERR : uint
{
FPDF_ERR_SUCCESS = 0, // No error.
FPDF_ERR_UNKNOWN = 1, // Unknown error.
FPDF_ERR_FILE = 2, // File not found or could not be opened.
FPDF_ERR_FORMAT = 3, // File not in PDF format or corrupted.
FPDF_ERR_PASSWORD = 4, // Password required or incorrect password.
FPDF_ERR_SECURITY = 5, // Unsupported security scheme.
FPDF_ERR_PAGE = 6 // Page not found or content error.
}
#region Save/Edit Structs and Flags
[Flags]
public enum FPDF_SAVE_FLAGS
{
FPDF_INCREMENTAL = 1,
FPDF_NO_INCREMENTAL = 2,
FPDF_REMOVE_SECURITY = 3
}
[StructLayout(LayoutKind.Sequential)]
public class FPDF_FILEACCESS
{
public uint m_FileLen;
public IntPtr m_GetBlock;
public IntPtr m_Param;
}
[StructLayout(LayoutKind.Sequential)]
public class FPDF_FILEWRITE
{
public int version;
public IntPtr WriteBlock;
public IntPtr stream;
}
#endregion
}
}