You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
341 lines
9.7 KiB
341 lines
9.7 KiB
/*
|
|
* XpdfPluginAPI.h
|
|
*
|
|
* Copyright 2004 Glyph & Cog, LLC
|
|
*/
|
|
|
|
#ifndef XPDFPLUGINAPI_H
|
|
#define XPDFPLUGINAPI_H
|
|
|
|
#ifdef _WIN32
|
|
#include <windows.h>
|
|
#else
|
|
#define Object XtObject
|
|
#include <X11/Intrinsic.h>
|
|
#undef Object
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*------------------------------------------------------------------------
|
|
* Macros
|
|
*------------------------------------------------------------------------*/
|
|
|
|
/*
|
|
* The current API version.
|
|
*/
|
|
#define xpdfPluginAPIVersion 1
|
|
|
|
#ifdef _WIN32
|
|
# ifdef __cplusplus
|
|
# define PLUGINFUNC(retType) extern "C" __declspec(dllexport) retType
|
|
# else
|
|
# define PLUGINFUNC(retType) extern __declspec(dllexport) retType
|
|
# endif
|
|
#else
|
|
# ifdef __cplusplus
|
|
# define PLUGINFUNC(retType) extern "C" retType
|
|
# else
|
|
# define PLUGINFUNC(retType) extern retType
|
|
# endif
|
|
#endif
|
|
|
|
/*------------------------------------------------------------------------
|
|
* Plugin setup/cleanup
|
|
*------------------------------------------------------------------------*/
|
|
|
|
/*
|
|
* All plugins are required to implement two functions:
|
|
*
|
|
* -- Initialize the plugin. Returns non-zero if successful.
|
|
* PLUGINFUNC(XpdfBool) xpdfInitPlugin(void);
|
|
*
|
|
* -- Free the plugin.
|
|
* PLUGINFUNC(void) xpdfFreePlugin(void);
|
|
*/
|
|
|
|
/*------------------------------------------------------------------------
|
|
* Types
|
|
*------------------------------------------------------------------------*/
|
|
|
|
/*
|
|
* Standard C boolean -- zero = false, non-zero = true.
|
|
*/
|
|
typedef int XpdfBool;
|
|
#define xpdfTrue 1
|
|
#define xpdfFalse 0
|
|
|
|
/*
|
|
* PDF document handle.
|
|
*/
|
|
typedef struct _XpdfDoc *XpdfDoc;
|
|
|
|
/*
|
|
* PDF object handle.
|
|
*/
|
|
typedef struct _XpdfObject *XpdfObject;
|
|
|
|
/*
|
|
* Document access permissions. Any of these can be bitwise 'or'ed
|
|
* together. If xpdfPermissionOpen is not included, the document
|
|
* cannot be opened at all, and the other bits are ignored.
|
|
*/
|
|
typedef unsigned int XpdfPermission;
|
|
#define xpdfPermissionOpen (1 << 0)
|
|
#define xpdfPermissionPrint (1 << 2)
|
|
#define xpdfPermissionChange (1 << 3)
|
|
#define xpdfPermissionCopy (1 << 4)
|
|
#define xpdfPermissionNotes (1 << 5)
|
|
|
|
/*------------------------------------------------------------------------
|
|
* Security handler
|
|
*------------------------------------------------------------------------*/
|
|
|
|
/*
|
|
* XpdfSecurityHandler - a security handler plugin should create one
|
|
* of these and pass it to xpdfRegisterSecurityHandler.
|
|
*/
|
|
#ifdef __cplusplus
|
|
struct XpdfSecurityHandler {
|
|
#else
|
|
typedef struct {
|
|
#endif
|
|
|
|
/*
|
|
* Version of the security handler spec (this document) -- use
|
|
* xpdfPluginAPIVersion.
|
|
*/
|
|
int version;
|
|
|
|
/*
|
|
* Security handler name.
|
|
*/
|
|
char *name;
|
|
|
|
/*
|
|
* Any global data the security handler needs. XpdfViewer will pass
|
|
* this pointer to all handler functions as the <handlerData>
|
|
* argument.
|
|
*/
|
|
void *handlerData;
|
|
|
|
/*
|
|
* Allocate and initialize data for a new document. XpdfViewer will
|
|
* pass the returned pointer to all other handler functions as the
|
|
* <docData> argument. Returns non-zero if successful.
|
|
*/
|
|
XpdfBool (*newDoc)(void *handlerData, XpdfDoc doc,
|
|
XpdfObject encryptDict, void **docData);
|
|
|
|
/*
|
|
* Free the data allocated by newDoc.
|
|
*/
|
|
void (*freeDoc)(void *handlerData, void *docData);
|
|
|
|
/*
|
|
* Construct authorization data based on the supplied owner and user
|
|
* passwords (either or both of which may be NULL). This function
|
|
* is called in "batch" mode, i.e., if the password was supplied on
|
|
* the command line or via an Xpdf library API. It should not
|
|
* generate any user interaction (e.g., a password dialog). It is
|
|
* not required to support this function: the makeAuthData function
|
|
* pointer can be set to NULL. Returns non-zero if successful.
|
|
*/
|
|
XpdfBool (*makeAuthData)(void *handlerData, void *docData,
|
|
char *ownerPassword, char *userPassword,
|
|
void **authData);
|
|
|
|
/*
|
|
* Request any needed information (e.g., a password) from the user,
|
|
* and construct an authorization data object. Returns non-zero if
|
|
* successful.
|
|
*/
|
|
XpdfBool (*getAuthData)(void *handlerData, void *docData,
|
|
void **authData);
|
|
|
|
/*
|
|
* Free the data allocated by getAuthData.
|
|
*/
|
|
void (*freeAuthData)(void *handlerData, void *docData,
|
|
void *authData);
|
|
|
|
/*
|
|
* Request permission to access the document. This returns all
|
|
* permissions granted by authData.
|
|
*/
|
|
XpdfPermission (*authorize)(void *handlerData, void *docData,
|
|
void *authData);
|
|
|
|
/*
|
|
* Get the decryption key and algorithm version associated with the
|
|
* document. Returns non-zero if successful.
|
|
*/
|
|
XpdfBool (*getKey)(void *handlerData, void *docData,
|
|
char **key, int *keyLen, int *cryptVersion);
|
|
|
|
/*
|
|
* Free the data allocated by getKey.
|
|
*/
|
|
void (*freeKey)(void *handlerData, void *docData,
|
|
char *key, int keyLen);
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#else
|
|
} XpdfSecurityHandler;
|
|
#endif
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
typedef struct {
|
|
int version;
|
|
|
|
/*------------------------------------------------------------------------
|
|
* Document access functions
|
|
*------------------------------------------------------------------------*/
|
|
|
|
/*
|
|
* Get a document's info dictionary. (The returned object must be
|
|
* freed with xpdfFreeObj.)
|
|
*/
|
|
XpdfObject (*_xpdfGetInfoDict)(XpdfDoc doc);
|
|
|
|
/*
|
|
* Get a document's catalog ("root") dictionary. (The returned object
|
|
* must be freed with xpdfFreeObj.)
|
|
*/
|
|
XpdfObject (*_xpdfGetCatalog)(XpdfDoc doc);
|
|
|
|
#ifdef _WIN32
|
|
|
|
/*
|
|
* Get the handle for the viewer window associated with the specified
|
|
* document. [Win32 only]
|
|
*/
|
|
HWND (*_xpdfWin32GetWindow)(XpdfDoc doc);
|
|
|
|
#else
|
|
|
|
/*
|
|
* Get the Motif widget for the viewer window associated with the
|
|
* specified document. [X only]
|
|
*/
|
|
Widget (*_xpdfXGetWindow)(XpdfDoc doc);
|
|
|
|
#endif
|
|
|
|
/*------------------------------------------------------------------------
|
|
* Object access functions
|
|
*------------------------------------------------------------------------*/
|
|
|
|
/*
|
|
* Check an object's type.
|
|
*/
|
|
XpdfBool (*_xpdfObjIsBool)(XpdfObject obj);
|
|
XpdfBool (*_xpdfObjIsInt)(XpdfObject obj);
|
|
XpdfBool (*_xpdfObjIsReal)(XpdfObject obj);
|
|
XpdfBool (*_xpdfObjIsString)(XpdfObject obj);
|
|
XpdfBool (*_xpdfObjIsName)(XpdfObject obj);
|
|
XpdfBool (*_xpdfObjIsNull)(XpdfObject obj);
|
|
XpdfBool (*_xpdfObjIsArray)(XpdfObject obj);
|
|
XpdfBool (*_xpdfObjIsDict)(XpdfObject obj);
|
|
XpdfBool (*_xpdfObjIsStream)(XpdfObject obj);
|
|
XpdfBool (*_xpdfObjIsRef)(XpdfObject obj);
|
|
|
|
/*
|
|
* Value access.
|
|
* (Objects returned by xpdfArrayGet and xpdfDictGet must be freed
|
|
* with xpdfFreeObj.)
|
|
*/
|
|
XpdfBool (*_xpdfBoolValue)(XpdfObject obj);
|
|
int (*_xpdfIntValue)(XpdfObject obj);
|
|
double (*_xpdfRealValue)(XpdfObject obj);
|
|
int (*_xpdfStringLength)(XpdfObject obj);
|
|
char *(*_xpdfStringValue)(XpdfObject obj);
|
|
char *(*_xpdfNameValue)(XpdfObject obj);
|
|
int (*_xpdfArrayLength)(XpdfObject obj);
|
|
XpdfObject (*_xpdfArrayGet)(XpdfObject obj, int idx);
|
|
XpdfObject (*_xpdfDictGet)(XpdfObject obj, char *key);
|
|
|
|
/*
|
|
* Object destruction. NB: *all* objects must be freed after use.
|
|
*/
|
|
void (*_xpdfFreeObj)(XpdfObject obj);
|
|
|
|
/*------------------------------------------------------------------------
|
|
* Memory allocation functions
|
|
*------------------------------------------------------------------------*/
|
|
|
|
void *(*_xpdfMalloc)(int size);
|
|
void *(*_xpdfRealloc)(void *p, int size);
|
|
void (*_xpdfFree)(void *p);
|
|
|
|
/*------------------------------------------------------------------------
|
|
* Security handler functions
|
|
*------------------------------------------------------------------------*/
|
|
|
|
/*
|
|
* Register a new security handler.
|
|
*/
|
|
void (*_xpdfRegisterSecurityHandler)(XpdfSecurityHandler *handler);
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
} XpdfPluginVecTable;
|
|
|
|
#ifdef _WIN32
|
|
|
|
extern __declspec(dllexport) XpdfPluginVecTable xpdfPluginVecTable;
|
|
|
|
#define xpdfPluginSetup \
|
|
extern __declspec(dllexport) \
|
|
XpdfPluginVecTable xpdfPluginVecTable = {xpdfPluginAPIVersion};
|
|
|
|
#else
|
|
|
|
extern XpdfPluginVecTable xpdfPluginVecTable;
|
|
|
|
#define xpdfPluginSetup \
|
|
XpdfPluginVecTable xpdfPluginVecTable = {xpdfPluginAPIVersion};
|
|
|
|
#endif
|
|
|
|
#define xpdfGetInfoDict (*xpdfPluginVecTable._xpdfGetInfoDict)
|
|
#define xpdfGetCatalog (*xpdfPluginVecTable._xpdfGetCatalog)
|
|
#ifdef _WIN32
|
|
#define xpdfWin32GetWindow (*xpdfPluginVecTable._xpdfWin32GetWindow)
|
|
#else
|
|
#define xpdfXGetWindow (*xpdfPluginVecTable._xpdfXGetWindow)
|
|
#endif
|
|
#define xpdfObjIsBool (*xpdfPluginVecTable._xpdfObjIsBool)
|
|
#define xpdfObjIsInt (*xpdfPluginVecTable._xpdfObjIsInt)
|
|
#define xpdfObjIsReal (*xpdfPluginVecTable._xpdfObjIsReal)
|
|
#define xpdfObjIsString (*xpdfPluginVecTable._xpdfObjIsString)
|
|
#define xpdfObjIsName (*xpdfPluginVecTable._xpdfObjIsName)
|
|
#define xpdfObjIsNull (*xpdfPluginVecTable._xpdfObjIsNull)
|
|
#define xpdfObjIsArray (*xpdfPluginVecTable._xpdfObjIsArray)
|
|
#define xpdfObjIsDict (*xpdfPluginVecTable._xpdfObjIsDict)
|
|
#define xpdfObjIsStream (*xpdfPluginVecTable._xpdfObjIsStream)
|
|
#define xpdfObjIsRef (*xpdfPluginVecTable._xpdfObjIsRef)
|
|
#define xpdfBoolValue (*xpdfPluginVecTable._xpdfBoolValue)
|
|
#define xpdfIntValue (*xpdfPluginVecTable._xpdfIntValue)
|
|
#define xpdfRealValue (*xpdfPluginVecTable._xpdfRealValue)
|
|
#define xpdfStringLength (*xpdfPluginVecTable._xpdfStringLength)
|
|
#define xpdfStringValue (*xpdfPluginVecTable._xpdfStringValue)
|
|
#define xpdfNameValue (*xpdfPluginVecTable._xpdfNameValue)
|
|
#define xpdfArrayLength (*xpdfPluginVecTable._xpdfArrayLength)
|
|
#define xpdfArrayGet (*xpdfPluginVecTable._xpdfArrayGet)
|
|
#define xpdfDictGet (*xpdfPluginVecTable._xpdfDictGet)
|
|
#define xpdfFreeObj (*xpdfPluginVecTable._xpdfFreeObj)
|
|
#define xpdfMalloc (*xpdfPluginVecTable._xpdfMalloc)
|
|
#define xpdfRealloc (*xpdfPluginVecTable._xpdfRealloc)
|
|
#define xpdfFree (*xpdfPluginVecTable._xpdfFree)
|
|
#define xpdfRegisterSecurityHandler (*xpdfPluginVecTable._xpdfRegisterSecurityHandler)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|