2021-06-07 14:34:30 +02:00
.TH pdfio 3 "pdf read/write library" "2021-06-07" "pdf read/write library"
2021-05-30 03:21:45 +02:00
.SH NAME
pdfio \- pdf read/write library
.SH Introduction
.PP
2021-05-30 13:10:44 +02:00
PDFio is a simple C library for reading and writing PDF files. The primary goals of pdfio are:
2021-05-30 03:21:45 +02:00
.IP \(bu 5
.PP
Read any PDF file with or without encryption or linearization
.IP \(bu 5
.PP
Write PDF files without encryption or linearization
.IP \(bu 5
.PP
Extract or embed useful metadata (author, creator, page information, etc.)
.IP \(bu 5
.PP
"Filter" PDF files, for example to extract a range of pages or to embed fonts that are missing from a PDF
.IP \(bu 5
.PP
Provide access to objects used for each page
.PP
2021-05-30 13:10:44 +02:00
PDFio is
2021-05-30 03:21:45 +02:00
.I not
concerned with rendering or viewing a PDF file, although a PDF RIP or viewer could be written using it.
2021-06-07 14:34:30 +02:00
.PP
PDFio is Copyright \[ co] 2021 by Michael R Sweet and is licensed under the Apache License Version 2.0 with an (optional) exception to allow linking against GPL2/LGPL2 software. See the files "LICENSE" and "NOTICE" for more information.
.SS Requirements
.PP
PDFio requires the following to build the software:
.IP \(bu 5
.PP
A C99 compiler such as Clang, GCC, or MS Visual C
.IP \(bu 5
.PP
A POSIX\- compliant make program
.IP \(bu 5
.PP
ZLIB (https://www.zlib.net) 1.0 or higher
.PP
IDE files for Xcode (macOS/iOS) and Visual Studio (Windows) are also provided.
.SS Installing pdfio
.PP
PDFio comes with a portable makefile that will work on any POSIX\- compliant system with ZLIB installed. To make it, run:
.nf
make all
.fi
.PP
To test it, run:
.nf
make test
.fi
.PP
To install it, run:
.nf
make install
.fi
.PP
If you want a shared library, run:
.nf
make all\- shared
make install\- shared
.fi
.PP
The default installation location is "/usr/local". Pass the prefix variable to make to install it to another location:
.nf
make install prefix=/some/other/directory
.fi
.PP
The makefile installs the pdfio header to "${prefix}/include", the library to "${prefix}/lib", the pkg\- config file to "${prefix}/lib/pkgconfig", the man page to "${prefix}/share/man/man3", and the documentation to "${prefix}/share/doc/pdfio".
.PP
The makefile supports the following variables that can be specified in the make command or as environment variables:
.IP \(bu 5
.PP
AR: the library archiver (default "ar")
.IP \(bu 5
.PP
ARFLAGS: options for the library archiver (default "cr")
.IP \(bu 5
.PP
CC: the C compiler (default "cc")
.IP \(bu 5
.PP
CFLAGS: options for the C compiler (default "")
.IP \(bu 5
.PP
CODESIGN_IDENTITY: the identity to use when code signing the shared library on macOS (default "Developer ID")
.IP \(bu 5
.PP
COMMONFLAGS: options for the C compiler and linker (typically architecture and optimization options, default is "\- Os \- g")
.IP \(bu 5
.PP
CPPFLAGS: options for the C preprocessor (default "")
.IP \(bu 5
.PP
DESTDIR" and "DSTROOT: specifies a root directory when installing (default is "", specify only one)
.IP \(bu 5
.PP
DSOFLAGS: options for the C compiler when linking the shared library (default "")
.IP \(bu 5
.PP
LDFLAGS: options for the C compiler when linking the test programs (default "")
.IP \(bu 5
.PP
LIBS: library options when linking the test programs (default "\- lz")
.IP \(bu 5
.PP
RANLIB: program that generates a table\- of\- contents in a library (default "ranlib")
.IP \(bu 5
.PP
prefix: specifies the installation directory (default "/usr/local")
.SS Visual Studio Project
.PP
Note: I haven't yet added this...
.PP
The Visual Studio solution ("pdfio.sln") is provided for Windows developers generates both a static library and DLL.
.SS Xcode Project
.PP
There is also an Xcode project ("pdfio.xcodeproj") you can use on macOS which generates a static library that will be installed under "/usr/local" with:
.nf
sudo xcodebuild install
.fi
.PP
You can reproduce this with the makefile using:
.nf
sudo make 'COMMONFLAGS="\- Os \- mmacosx\- version\- min=10.14 \- arch x86_64 \- arch arm64"' install
.fi
.SS Detecting PDFio
.PP
PDFio can be detected using the pkg\- config command, for example:
.nf
if pkg\- config \- \- exists pdfio; then
...
fi
.fi
.PP
In a makefile you can add the necessary compiler and linker options with:
.nf
CFLAGS += `pkg\- config \- \- cflags pdfio`
LIBS += `pkg\- config \- \- libs pdfio`
.fi
.SS Header Files
.PP
PDFio provides a primary header file that is always used:
.nf
#include <pdfio.h>
.fi
.PP
PDFio also provides content helper functions that are defined in a separate header file:
.nf
#include <pdfio\- content.h>
.fi
.SH API Overview
.PP
PDFio exposes several types:
.IP \(bu 5
.PP
pdfio_file_t: A PDF file (for reading or writing)
.IP \(bu 5
.PP
pdfio_array_t: An array of values
.IP \(bu 5
.PP
pdfio_dict_t: A dictionary of key/value pairs in a PDF file, object, etc.
.IP \(bu 5
.PP
pdfio_obj_t: An object in a PDF file
.IP \(bu 5
.PP
pdfio_stream_t: An object stream
.SS PDF Files
.SS PDF Values
.SS PDF Objects
.SS PDF Streams
2021-05-30 03:21:45 +02:00
.SH ENUMERATIONS
.SS pdfio_filter_e
Compression/decompression filters for streams
.TP 5
PDFIO_FILTER_ASCII85
.br
ASCII85Decode filter (reading only)
.TP 5
PDFIO_FILTER_ASCIIHEX
.br
ASCIIHexDecode filter (reading only)
.TP 5
PDFIO_FILTER_CCITTFAX
.br
CCITTFaxDecode filter
.TP 5
PDFIO_FILTER_CRYPT
.br
Encryption filter
.TP 5
PDFIO_FILTER_DCT
.br
DCTDecode (JPEG) filter
.TP 5
PDFIO_FILTER_FLATE
.br
FlateDecode filter
.TP 5
PDFIO_FILTER_JBIG2
.br
JBIG2Decode filter
.TP 5
PDFIO_FILTER_JPX
.br
JPXDecode filter (reading only)
.TP 5
PDFIO_FILTER_LZW
.br
LZWDecode filter (reading only)
.TP 5
PDFIO_FILTER_NONE
.br
No filter
.TP 5
PDFIO_FILTER_RUNLENGTH
.br
RunLengthDecode filter (reading only)
.SS pdfio_valtype_e
PDF value types
.TP 5
PDFIO_VALTYPE_ARRAY
.br
Array
.TP 5
PDFIO_VALTYPE_BINARY
.br
Binary data
.TP 5
PDFIO_VALTYPE_BOOLEAN
.br
Boolean
.TP 5
PDFIO_VALTYPE_DATE
.br
Date/time
.TP 5
PDFIO_VALTYPE_DICT
.br
Dictionary
.TP 5
PDFIO_VALTYPE_INDIRECT
.br
Indirect object (N G obj)
.TP 5
PDFIO_VALTYPE_NAME
.br
Name
.TP 5
PDFIO_VALTYPE_NONE
.br
No value, not set
.TP 5
PDFIO_VALTYPE_NULL
.br
Null object
.TP 5
PDFIO_VALTYPE_NUMBER
.br
Number (integer or real)
.TP 5
PDFIO_VALTYPE_STRING
.br
String
.SH FUNCTIONS
.SS pdfioArrayAppendArray
Add an array value to an array.
.PP
.nf
bool pdfioArrayAppendArray (
pdfio_array_t *a,
pdfio_array_t *value
);
.fi
.SS pdfioArrayAppendBinary
Add a binary string value to an array.
.PP
.nf
bool pdfioArrayAppendBinary (
pdfio_array_t *a,
2021-06-07 14:34:30 +02:00
const unsigned char *value,
2021-05-30 03:21:45 +02:00
size_t valuelen
);
.fi
.SS pdfioArrayAppendBoolean
Add a boolean value to an array.
.PP
.nf
bool pdfioArrayAppendBoolean (
pdfio_array_t *a,
bool value
);
.fi
.SS pdfioArrayAppendDict
Add a dictionary to an array.
.PP
.nf
bool pdfioArrayAppendDict (
pdfio_array_t *a,
pdfio_dict_t *value
);
.fi
.SS pdfioArrayAppendName
Add a name to an array.
.PP
.nf
bool pdfioArrayAppendName (
pdfio_array_t *a,
const char *value
);
.fi
.SS pdfioArrayAppendNumber
Add a number to an array.
.PP
.nf
bool pdfioArrayAppendNumber (
pdfio_array_t *a,
double value
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioArrayAppendObj
2021-05-30 03:21:45 +02:00
Add an indirect object reference to an array.
.PP
.nf
2021-06-07 14:34:30 +02:00
bool pdfioArrayAppendObj (
2021-05-30 03:21:45 +02:00
pdfio_array_t *a,
pdfio_obj_t *value
);
.fi
.SS pdfioArrayAppendString
Add a string to an array.
.PP
.nf
bool pdfioArrayAppendString (
pdfio_array_t *a,
const char *value
);
.fi
.SS pdfioArrayCopy
Copy an array.
.PP
.nf
pdfio_array_t * pdfioArrayCopy (
pdfio_file_t *pdf,
pdfio_array_t *a
);
.fi
.SS pdfioArrayCreate
Create an empty array.
.PP
.nf
pdfio_array_t * pdfioArrayCreate (
pdfio_file_t *pdf
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioArrayCreateCalibratedColorFromMatrix
Create a calibrated color space array using a CIE XYZ transform matrix.
.PP
.nf
pdfio_array_t * pdfioArrayCreateCalibratedColorFromMatrix (
pdfio_file_t *pdf,
size_t num_colors,
double gamma,
const double matrix[3][3],
const double white_point[3]
);
.fi
.SS pdfioArrayCreateCalibratedColorFromPrimaries
Create a calibrated color sapce array using CIE xy primary chromacities.
.PP
.nf
pdfio_array_t * pdfioArrayCreateCalibratedColorFromPrimaries (
pdfio_file_t *pdf,
size_t num_colors,
double gamma,
double wx,
double wy,
double rx,
double ry,
double gx,
double gy,
double bx,
double by
);
.fi
.SS pdfioArrayCreateICCBasedColor
Create an ICC-based color space array.
.PP
.nf
pdfio_array_t * pdfioArrayCreateICCBasedColor (
pdfio_file_t *pdf,
pdfio_obj_t *icc_object
);
.fi
.SS pdfioArrayCreateIndexedColor
Create an indexed color space array.
.PP
.nf
pdfio_array_t * pdfioArrayCreateIndexedColor (
pdfio_file_t *pdf,
size_t num_colors,
const unsigned char *colors
);
.fi
2021-05-30 03:21:45 +02:00
.SS pdfioArrayGetArray
Get an array value from an array.
.PP
.nf
pdfio_array_t * pdfioArrayGetArray (
pdfio_array_t *a,
size_t n
);
.fi
.SS pdfioArrayGetBinary
Get a binary string value from an array.
.PP
.nf
unsigned char * pdfioArrayGetBinary (
pdfio_array_t *a,
size_t n,
size_t *length
);
.fi
.SS pdfioArrayGetBoolean
Get a boolean value from an array.
.PP
.nf
bool pdfioArrayGetBoolean (
pdfio_array_t *a,
size_t n
);
.fi
.SS pdfioArrayGetDict
Get a dictionary value from an array.
.PP
.nf
pdfio_dict_t * pdfioArrayGetDict (
pdfio_array_t *a,
size_t n
);
.fi
.SS pdfioArrayGetName
Get a name value from an array.
.PP
.nf
const char * pdfioArrayGetName (
pdfio_array_t *a,
size_t n
);
.fi
.SS pdfioArrayGetNumber
Get a number from an array.
.PP
.nf
double pdfioArrayGetNumber (
pdfio_array_t *a,
size_t n
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioArrayGetObj
2021-05-30 03:21:45 +02:00
Get an indirect object reference from an array.
.PP
.nf
2021-06-07 14:34:30 +02:00
pdfio_obj_t * pdfioArrayGetObj (
2021-05-30 03:21:45 +02:00
pdfio_array_t *a,
size_t n
);
.fi
.SS pdfioArrayGetSize
Get the length of an array.
.PP
.nf
size_t pdfioArrayGetSize (
pdfio_array_t *a
);
.fi
.SS pdfioArrayGetString
Get a string value from an array.
.PP
.nf
const char * pdfioArrayGetString (
pdfio_array_t *a,
size_t n
);
.fi
.SS pdfioArrayGetType
Get a value type from an array.
.PP
.nf
pdfio_valtype_t pdfioArrayGetType (
pdfio_array_t *a,
size_t n
);
.fi
.SS pdfioContentClip
Clip output to the current path.
.PP
.nf
bool pdfioContentClip (
pdfio_stream_t *st,
bool even_odd
);
.fi
.SS pdfioContentDrawImage
Draw an image object.
.PP
.nf
bool pdfioContentDrawImage (
pdfio_stream_t *st,
const char *name,
double x,
double y,
2021-06-07 14:34:30 +02:00
double width,
double height
2021-05-30 03:21:45 +02:00
);
.fi
.PP
The object name must be part of the page dictionary resources, typically
using the \fI pdfioPageDictAddImage\fR function.
.SS pdfioContentFill
Fill the current path.
.PP
.nf
bool pdfioContentFill (
pdfio_stream_t *st,
bool even_odd
);
.fi
.SS pdfioContentFillAndStroke
Fill and stroke the current path.
.PP
.nf
bool pdfioContentFillAndStroke (
pdfio_stream_t *st,
bool even_odd
);
.fi
.SS pdfioContentMatrixConcat
Concatenate a matrix to the current graphics
state.
.PP
.nf
bool pdfioContentMatrixConcat (
pdfio_stream_t *st,
pdfio_matrix_t m
);
.fi
.SS pdfioContentMatrixRotate
Rotate the current transform matrix.
.PP
.nf
bool pdfioContentMatrixRotate (
pdfio_stream_t *st,
double degrees
);
.fi
.SS pdfioContentMatrixScale
Scale the current transform matrix.
.PP
.nf
bool pdfioContentMatrixScale (
pdfio_stream_t *st,
double sx,
double sy
);
.fi
.SS pdfioContentMatrixTranslate
Translate the current transform matrix.
.PP
.nf
bool pdfioContentMatrixTranslate (
pdfio_stream_t *st,
double tx,
double ty
);
.fi
.SS pdfioContentPathClose
Close the current path.
.PP
.nf
bool pdfioContentPathClose (
pdfio_stream_t *st
);
.fi
.SS pdfioContentPathCurve
Add a Bezier curve with two control points.
.PP
.nf
bool pdfioContentPathCurve (
pdfio_stream_t *st,
double x1,
double y1,
double x2,
double y2,
double x3,
double y3
);
.fi
.SS pdfioContentPathCurve13
Add a Bezier curve with an initial control point.
.PP
.nf
bool pdfioContentPathCurve13 (
pdfio_stream_t *st,
double x1,
double y1,
double x3,
double y3
);
.fi
.SS pdfioContentPathCurve23
Add a Bezier curve with a trailing control point.
.PP
.nf
bool pdfioContentPathCurve23 (
pdfio_stream_t *st,
double x2,
double y2,
double x3,
double y3
);
.fi
.SS pdfioContentPathLineTo
Add a straight line to the current path.
.PP
.nf
bool pdfioContentPathLineTo (
pdfio_stream_t *st,
double x,
double y
);
.fi
.SS pdfioContentPathMoveTo
Start a new subpath.
.PP
.nf
bool pdfioContentPathMoveTo (
pdfio_stream_t *st,
double x,
double y
);
.fi
.SS pdfioContentPathRect
Add a rectangle to the current path.
.PP
.nf
bool pdfioContentPathRect (
pdfio_stream_t *st,
2021-06-07 14:34:30 +02:00
double x,
double y,
double width,
double height
2021-05-30 03:21:45 +02:00
);
.fi
.SS pdfioContentRestore
Restore a previous graphics state.
.PP
.nf
bool pdfioContentRestore (
pdfio_stream_t *st
);
.fi
.SS pdfioContentSave
Save the current graphics state.
.PP
.nf
bool pdfioContentSave (
pdfio_stream_t *st
);
.fi
.SS pdfioContentSetDashPattern
Set the stroke pattern.
.PP
.nf
bool pdfioContentSetDashPattern (
pdfio_stream_t *st,
int phase,
int on,
int off
);
.fi
.SS pdfioContentSetFillColorDeviceCMYK
Set device CMYK fill color.
.PP
.nf
bool pdfioContentSetFillColorDeviceCMYK (
pdfio_stream_t *st,
double c,
double m,
double y,
double k
);
.fi
.SS pdfioContentSetFillColorDeviceGray
Set the device gray fill color.
.PP
.nf
bool pdfioContentSetFillColorDeviceGray (
pdfio_stream_t *st,
double g
);
.fi
.SS pdfioContentSetFillColorDeviceRGB
Set the device RGB fill color.
.PP
.nf
bool pdfioContentSetFillColorDeviceRGB (
pdfio_stream_t *st,
double r,
double g,
double b
);
.fi
.SS pdfioContentSetFillColorGray
Set the calibrated gray fill color.
.PP
.nf
bool pdfioContentSetFillColorGray (
pdfio_stream_t *st,
double g
);
.fi
.SS pdfioContentSetFillColorRGB
Set the calibrated RGB fill color.
.PP
.nf
bool pdfioContentSetFillColorRGB (
pdfio_stream_t *st,
double r,
double g,
double b
);
.fi
.SS pdfioContentSetFillColorSpace
Set the fill colorspace.
.PP
.nf
bool pdfioContentSetFillColorSpace (
pdfio_stream_t *st,
const char *name
);
.fi
.SS pdfioContentSetFlatness
Set the flatness tolerance.
.PP
.nf
bool pdfioContentSetFlatness (
pdfio_stream_t *st,
double flatness
);
.fi
.SS pdfioContentSetLineCap
Set the line ends style.
.PP
.nf
bool pdfioContentSetLineCap (
pdfio_stream_t *st,
pdfio_linecap_t lc
);
.fi
.SS pdfioContentSetLineJoin
Set the line joining style.
.PP
.nf
bool pdfioContentSetLineJoin (
pdfio_stream_t *st,
pdfio_linejoin_t lj
);
.fi
.SS pdfioContentSetLineWidth
Set the line width.
.PP
.nf
bool pdfioContentSetLineWidth (
pdfio_stream_t *st,
double width
);
.fi
.SS pdfioContentSetMiterLimit
Set the miter limit.
.PP
.nf
bool pdfioContentSetMiterLimit (
pdfio_stream_t *st,
double limit
);
.fi
.SS pdfioContentSetStrokeColorDeviceCMYK
Set the device CMYK stroke color.
.PP
.nf
bool pdfioContentSetStrokeColorDeviceCMYK (
pdfio_stream_t *st,
double c,
double m,
double y,
double k
);
.fi
.SS pdfioContentSetStrokeColorDeviceGray
Set the device gray stroke color.
.PP
.nf
bool pdfioContentSetStrokeColorDeviceGray (
pdfio_stream_t *st,
double g
);
.fi
.SS pdfioContentSetStrokeColorDeviceRGB
Set the device RGB stroke color.
.PP
.nf
bool pdfioContentSetStrokeColorDeviceRGB (
pdfio_stream_t *st,
double r,
double g,
double b
);
.fi
.SS pdfioContentSetStrokeColorGray
Set the calibrated gray stroke color.
.PP
.nf
bool pdfioContentSetStrokeColorGray (
pdfio_stream_t *st,
double g
);
.fi
.SS pdfioContentSetStrokeColorRGB
Set the calibrated RGB stroke color.
.PP
.nf
bool pdfioContentSetStrokeColorRGB (
pdfio_stream_t *st,
double r,
double g,
double b
);
.fi
.SS pdfioContentSetStrokeColorSpace
Set the stroke color space.
.PP
.nf
bool pdfioContentSetStrokeColorSpace (
pdfio_stream_t *st,
const char *name
);
.fi
.SS pdfioContentSetTextCharacterSpacing
Set the spacing between characters.
.PP
.nf
bool pdfioContentSetTextCharacterSpacing (
pdfio_stream_t *st,
double spacing
);
.fi
.SS pdfioContentSetTextFont
Set the text font and size.
.PP
.nf
bool pdfioContentSetTextFont (
pdfio_stream_t *st,
const char *name,
double size
);
.fi
.SS pdfioContentSetTextLeading
Set text leading (line height) value.
.PP
.nf
bool pdfioContentSetTextLeading (
pdfio_stream_t *st,
double leading
);
.fi
.SS pdfioContentSetTextMatrix
Set the text transform matrix.
.PP
.nf
bool pdfioContentSetTextMatrix (
pdfio_stream_t *st,
pdfio_matrix_t m
);
.fi
.SS pdfioContentSetTextRenderingMode
Set the text rendering mode.
.PP
.nf
bool pdfioContentSetTextRenderingMode (
pdfio_stream_t *st,
pdfio_textrendering_t mode
);
.fi
.SS pdfioContentSetTextRise
Set the text baseline offset.
.PP
.nf
bool pdfioContentSetTextRise (
pdfio_stream_t *st,
double rise
);
.fi
.SS pdfioContentSetTextWordSpacing
Set the inter-word spacing.
.PP
.nf
bool pdfioContentSetTextWordSpacing (
pdfio_stream_t *st,
double spacing
);
.fi
.SS pdfioContentSetTextXScaling
Set the horizontal scaling value.
.PP
.nf
bool pdfioContentSetTextXScaling (
pdfio_stream_t *st,
double percent
);
.fi
.SS pdfioContentStroke
Stroke the current path.
.PP
.nf
bool pdfioContentStroke (
pdfio_stream_t *st
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioContentTextBegin
Begin a text block.
.PP
.nf
bool pdfioContentTextBegin (
pdfio_stream_t *st
);
.fi
.SS pdfioContentTextEnd
End a text block.
.PP
.nf
bool pdfioContentTextEnd (
pdfio_stream_t *st
);
.fi
2021-05-30 03:21:45 +02:00
.SS pdfioContentTextMoveLine
Move to the next line and offset.
.PP
.nf
bool pdfioContentTextMoveLine (
pdfio_stream_t *st,
double tx,
double ty
);
.fi
.SS pdfioContentTextMoveTo
Offset within the current line.
.PP
.nf
bool pdfioContentTextMoveTo (
pdfio_stream_t *st,
double tx,
double ty
);
.fi
.SS pdfioContentTextNextLine
Move to the next line.
.PP
.nf
bool pdfioContentTextNextLine (
pdfio_stream_t *st
);
.fi
.SS pdfioContentTextShow
Show text.
.PP
.nf
bool pdfioContentTextShow (
pdfio_stream_t *st,
2021-06-07 14:34:30 +02:00
const char *s
2021-05-30 03:21:45 +02:00
);
.fi
.SS pdfioContentTextShowJustified
Show justified text.
.PP
.nf
bool pdfioContentTextShowJustified (
pdfio_stream_t *st,
size_t num_fragments,
const double *offsets,
const char *const *fragments
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioContentTextShowf
.PP
.nf
bool pdfioContentTextShowf (
pdfio_stream_t *st,
const char *format,
...
);
.fi
2021-05-30 03:21:45 +02:00
.SS pdfioDictCopy
Copy a dictionary to a PDF file.
.PP
.nf
pdfio_dict_t * pdfioDictCopy (
pdfio_file_t *pdf,
pdfio_dict_t *dict
);
.fi
.SS pdfioDictCreate
Create a dictionary to hold key/value pairs.
.PP
.nf
pdfio_dict_t * pdfioDictCreate (
pdfio_file_t *pdf
);
.fi
.SS pdfioDictGetArray
Get a key array value from a dictionary.
.PP
.nf
pdfio_array_t * pdfioDictGetArray (
pdfio_dict_t *dict,
const char *key
);
.fi
.SS pdfioDictGetBinary
Get a key binary string value from a dictionary.
.PP
.nf
unsigned char * pdfioDictGetBinary (
pdfio_dict_t *dict,
const char *key,
size_t *length
);
.fi
.SS pdfioDictGetBoolean
Get a key boolean value from a dictionary.
.PP
.nf
bool pdfioDictGetBoolean (
pdfio_dict_t *dict,
const char *key
);
.fi
.SS pdfioDictGetDict
Get a key dictionary value from a dictionary.
.PP
.nf
pdfio_dict_t * pdfioDictGetDict (
pdfio_dict_t *dict,
const char *key
);
.fi
.SS pdfioDictGetName
Get a key name value from a dictionary.
.PP
.nf
const char * pdfioDictGetName (
pdfio_dict_t *dict,
const char *key
);
.fi
.SS pdfioDictGetNumber
Get a key number value from a dictionary.
.PP
.nf
double pdfioDictGetNumber (
pdfio_dict_t *dict,
const char *key
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioDictGetObj
2021-05-30 03:21:45 +02:00
Get a key indirect object value from a dictionary.
.PP
.nf
2021-06-07 14:34:30 +02:00
pdfio_obj_t * pdfioDictGetObj (
2021-05-30 03:21:45 +02:00
pdfio_dict_t *dict,
const char *key
);
.fi
.SS pdfioDictGetRect
Get a key rectangle value from a dictionary.
.PP
.nf
pdfio_rect_t * pdfioDictGetRect (
pdfio_dict_t *dict,
const char *key,
pdfio_rect_t *rect
);
.fi
.SS pdfioDictGetString
Get a key string value from a dictionary.
.PP
.nf
const char * pdfioDictGetString (
pdfio_dict_t *dict,
const char *key
);
.fi
.SS pdfioDictGetType
Get a key value type from a dictionary.
.PP
.nf
pdfio_valtype_t pdfioDictGetType (
pdfio_dict_t *dict,
const char *key
);
.fi
.SS pdfioDictSetArray
Set a key array in a dictionary.
.PP
.nf
bool pdfioDictSetArray (
pdfio_dict_t *dict,
const char *key,
pdfio_array_t *value
);
.fi
.SS pdfioDictSetBinary
Set a key binary string in a dictionary.
.PP
.nf
bool pdfioDictSetBinary (
pdfio_dict_t *dict,
const char *key,
2021-06-07 14:34:30 +02:00
const unsigned char *value,
2021-05-30 03:21:45 +02:00
size_t valuelen
);
.fi
.SS pdfioDictSetBoolean
Set a key boolean in a dictionary.
.PP
.nf
bool pdfioDictSetBoolean (
pdfio_dict_t *dict,
const char *key,
bool value
);
.fi
.SS pdfioDictSetDict
Set a key dictionary in a dictionary.
.PP
.nf
bool pdfioDictSetDict (
pdfio_dict_t *dict,
const char *key,
pdfio_dict_t *value
);
.fi
.SS pdfioDictSetName
Set a key name in a dictionary.
.PP
.nf
bool pdfioDictSetName (
pdfio_dict_t *dict,
const char *key,
const char *value
);
.fi
.SS pdfioDictSetNull
Set a key null in a dictionary.
.PP
.nf
bool pdfioDictSetNull (
pdfio_dict_t *dict,
const char *key
);
.fi
.SS pdfioDictSetNumber
Set a key number in a dictionary.
.PP
.nf
bool pdfioDictSetNumber (
pdfio_dict_t *dict,
const char *key,
double value
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioDictSetObj
2021-05-30 03:21:45 +02:00
Set a key indirect object reference in a dictionary.
.PP
.nf
2021-06-07 14:34:30 +02:00
bool pdfioDictSetObj (
2021-05-30 03:21:45 +02:00
pdfio_dict_t *dict,
const char *key,
pdfio_obj_t *value
);
.fi
.SS pdfioDictSetRect
Set a key rectangle in a dictionary.
.PP
.nf
bool pdfioDictSetRect (
pdfio_dict_t *dict,
const char *key,
pdfio_rect_t *value
);
.fi
.SS pdfioDictSetString
Set a key literal string in a dictionary.
.PP
.nf
bool pdfioDictSetString (
pdfio_dict_t *dict,
const char *key,
const char *value
);
.fi
.SS pdfioDictSetStringf
Set a key formatted string in a dictionary.
.PP
.nf
bool pdfioDictSetStringf (
pdfio_dict_t *dict,
const char *key,
const char *format,
...
);
.fi
.SS pdfioFileClose
Close a PDF file and free all memory used for it.
.PP
.nf
bool pdfioFileClose (
pdfio_file_t *pdf
);
.fi
.SS pdfioFileCreate
Create a PDF file.
.PP
.nf
pdfio_file_t * pdfioFileCreate (
const char *filename,
const char *version,
pdfio_rect_t *media_box,
pdfio_rect_t *crop_box,
pdfio_error_cb_t error_cb,
void *error_data
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioFileCreateBaseFontObj
Create one of the base 14 PDF fonts.
.PP
.nf
pdfio_obj_t * pdfioFileCreateBaseFontObj (
pdfio_file_t *pdf,
const char *name
);
.fi
.PP
This function creates one of the base 14 PDF fonts. The "name" parameter
specifies the font nane:
.PP
.IP \(bu 5
\fB Courier\fR
.IP \(bu 5
\fB Courier-Bold\fR
.IP \(bu 5
\fB Courier-BoldItalic\fR
.IP \(bu 5
\fB Courier-Italic\fR
.IP \(bu 5
\fB Helvetica\fR
.IP \(bu 5
\fB Helvetica-Bold\fR
.IP \(bu 5
\fB Helvetica-BoldOblique\fR
.IP \(bu 5
\fB Helvetica-Oblique\fR
.IP \(bu 5
\fB Symbol\fR
.IP \(bu 5
\fB Times-Bold\fR
.IP \(bu 5
\fB Times-BoldItalic\fR
.IP \(bu 5
\fB Times-Italic\fR
.IP \(bu 5
\fB Times-Roman\fR
.IP \(bu 5
\fB ZapfDingbats\fR </li>
</ul>
.SS pdfioFileCreateFontObj
2021-05-30 03:21:45 +02:00
Add a font object to a PDF file.
.PP
.nf
2021-06-07 14:34:30 +02:00
pdfio_obj_t * pdfioFileCreateFontObj (
2021-05-30 03:21:45 +02:00
pdfio_file_t *pdf,
2021-06-07 14:34:30 +02:00
const char *filename,
bool unicode
2021-05-30 03:21:45 +02:00
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioFileCreateICCProfileObj
2021-05-30 03:21:45 +02:00
Add an ICC profile object to a PDF file.
.PP
.nf
2021-06-07 14:34:30 +02:00
pdfio_obj_t * pdfioFileCreateICCProfileObj (
2021-05-30 03:21:45 +02:00
pdfio_file_t *pdf,
const char *filename
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioFileCreateImageObj
2021-05-30 03:21:45 +02:00
Add an image object to a PDF file.
.PP
.nf
2021-06-07 14:34:30 +02:00
pdfio_obj_t * pdfioFileCreateImageObj (
2021-05-30 03:21:45 +02:00
pdfio_file_t *pdf,
const char *filename,
bool interpolate
);
.fi
.PP
Currently only GIF, JPEG, and PNG files are supported.
2021-06-07 14:34:30 +02:00
.SS pdfioFileCreateObj
2021-05-30 03:21:45 +02:00
Create a new object in a PDF file.
.PP
.nf
2021-06-07 14:34:30 +02:00
pdfio_obj_t * pdfioFileCreateObj (
2021-05-30 03:21:45 +02:00
pdfio_file_t *pdf,
pdfio_dict_t *dict
);
.fi
.SS pdfioFileCreatePage
Create a page in a PDF file.
.PP
.nf
pdfio_stream_t * pdfioFileCreatePage (
pdfio_file_t *pdf,
pdfio_dict_t *dict
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioFileFindObj
2021-05-30 03:21:45 +02:00
Find an object using its object number.
.PP
.nf
2021-06-07 14:34:30 +02:00
pdfio_obj_t * pdfioFileFindObj (
2021-05-30 03:21:45 +02:00
pdfio_file_t *pdf,
size_t number
);
.fi
.PP
2021-06-07 14:34:30 +02:00
This differs from \fI pdfioFileGetObj\fR which takes an index into the
2021-05-30 03:21:45 +02:00
list of objects while this function takes the object number.
.SS pdfioFileGetID
Get the PDF file's ID strings.
.PP
.nf
pdfio_array_t * pdfioFileGetID (
pdfio_file_t *pdf
);
.fi
.SS pdfioFileGetName
Get a PDF's filename.
.PP
.nf
const char * pdfioFileGetName (
pdfio_file_t *pdf
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioFileGetNumObjs
2021-05-30 03:21:45 +02:00
Get the number of objects in a PDF file.
.PP
.nf
2021-06-07 14:34:30 +02:00
size_t pdfioFileGetNumObjs (
2021-05-30 03:21:45 +02:00
pdfio_file_t *pdf
);
.fi
.SS pdfioFileGetNumPages
Get the number of pages in a PDF file.
.PP
.nf
size_t pdfioFileGetNumPages (
pdfio_file_t *pdf
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioFileGetObj
2021-05-30 03:21:45 +02:00
Get an object from a PDF file.
.PP
.nf
2021-06-07 14:34:30 +02:00
pdfio_obj_t * pdfioFileGetObj (
2021-05-30 03:21:45 +02:00
pdfio_file_t *pdf,
size_t n
);
.fi
.SS pdfioFileGetPage
Get a page object from a PDF file.
.PP
.nf
pdfio_obj_t * pdfioFileGetPage (
pdfio_file_t *pdf,
size_t n
);
.fi
.SS pdfioFileGetVersion
Get the PDF version number for a PDF file.
.PP
.nf
const char * pdfioFileGetVersion (
pdfio_file_t *pdf
);
.fi
.SS pdfioFileOpen
Open a PDF file for reading.
.PP
.nf
pdfio_file_t * pdfioFileOpen (
const char *filename,
pdfio_error_cb_t error_cb,
void *error_data
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioImageGetBytesPerLine
Get the number of bytes to read for each line.
.PP
.nf
size_t pdfioImageGetBytesPerLine (
pdfio_obj_t *obj
);
.fi
2021-05-30 03:21:45 +02:00
.SS pdfioImageGetHeight
Get the height of an image object.
.PP
.nf
double pdfioImageGetHeight (
pdfio_obj_t *obj
);
.fi
.SS pdfioImageGetWidth
Get the width of an image object.
.PP
.nf
double pdfioImageGetWidth (
pdfio_obj_t *obj
);
.fi
.SS pdfioObjClose
Close an object, writing any data as needed to the PDF
file.
.PP
.nf
bool pdfioObjClose (
pdfio_obj_t *obj
);
.fi
.SS pdfioObjCopy
Copy an object to another PDF file.
.PP
.nf
pdfio_obj_t * pdfioObjCopy (
pdfio_file_t *pdf,
pdfio_obj_t *srcobj
);
.fi
.SS pdfioObjCreateStream
Create an object (data) stream for writing.
.PP
.nf
pdfio_stream_t * pdfioObjCreateStream (
pdfio_obj_t *obj,
pdfio_filter_t filter
);
.fi
.SS pdfioObjGetArray
Get the array associated with an object.
.PP
.nf
pdfio_array_t * pdfioObjGetArray (
pdfio_obj_t *obj
);
.fi
.SS pdfioObjGetDict
Get the dictionary associated with an object.
.PP
.nf
pdfio_dict_t * pdfioObjGetDict (
pdfio_obj_t *obj
);
.fi
.SS pdfioObjGetGeneration
Get the object's generation number.
.PP
.nf
unsigned short pdfioObjGetGeneration (
pdfio_obj_t *obj
);
.fi
.SS pdfioObjGetLength
Get the length of the object's (data) stream.
.PP
.nf
size_t pdfioObjGetLength (
pdfio_obj_t *obj
);
.fi
.SS pdfioObjGetNumber
Get the object's number.
.PP
.nf
size_t pdfioObjGetNumber (
pdfio_obj_t *obj
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioObjGetSubtype
Get an object's subtype.
.PP
.nf
const char * pdfioObjGetSubtype (
pdfio_obj_t *obj
);
.fi
2021-05-30 03:21:45 +02:00
.SS pdfioObjGetType
Get an object's type.
.PP
.nf
const char * pdfioObjGetType (
pdfio_obj_t *obj
);
.fi
.SS pdfioObjOpenStream
Open an object's (data) stream for reading.
.PP
.nf
pdfio_stream_t * pdfioObjOpenStream (
pdfio_obj_t *obj,
bool decode
);
.fi
.SS pdfioPageCopy
Copy a page to a PDF file.
.PP
.nf
bool pdfioPageCopy (
pdfio_file_t *pdf,
pdfio_obj_t *srcpage
);
.fi
2021-06-07 14:34:30 +02:00
.SS pdfioPageDictAddColorSpace
Add a color space to the page dictionary.
2021-05-30 03:21:45 +02:00
.PP
.nf
2021-06-07 14:34:30 +02:00
bool pdfioPageDictAddColorSpace (
2021-05-30 03:21:45 +02:00
pdfio_dict_t *dict,
const char *name,
2021-06-07 14:34:30 +02:00
pdfio_array_t *data
2021-05-30 03:21:45 +02:00
);
.fi
2021-06-07 14:34:30 +02:00
.PP
This function adds a named color space to the page dictionary.
.PP
The names "DefaultCMYK", "DefaultGray", and "DefaultRGB" specify the default
device color space used for the page.
.PP
The "data" array contains a calibrated, indexed, or ICC-based color space
array that was created using the
\fI pdfioArrayCreateCalibratedColorFromMatrix\fR ,
\fI pdfioArrayCreateCalibratedColorFromPrimaries\fR ,
\fI pdfioArrayCreateICCBasedColor\fR , or
\fI pdfioArrayCreateIndexedColor\fR functions.
2021-05-30 03:21:45 +02:00
.SS pdfioPageDictAddFont
Add a font object to the page dictionary.
.PP
.nf
bool pdfioPageDictAddFont (
pdfio_dict_t *dict,
const char *name,
pdfio_obj_t *obj
);
.fi
.SS pdfioPageDictAddImage
Add an image object to the page dictionary.
.PP
.nf
bool pdfioPageDictAddImage (
pdfio_dict_t *dict,
const char *name,
pdfio_obj_t *obj
);
.fi
.SS pdfioStreamClose
Close a (data) stream in a PDF file.
.PP
.nf
bool pdfioStreamClose (
pdfio_stream_t *st
);
.fi
.SS pdfioStreamConsume
Consume bytes from the stream.
.PP
.nf
bool pdfioStreamConsume (
pdfio_stream_t *st,
size_t bytes
);
.fi
.SS pdfioStreamGetToken
Read a single PDF token from a stream.
.PP
.nf
bool pdfioStreamGetToken (
pdfio_stream_t *st,
char *buffer,
size_t bufsize
);
.fi
.SS pdfioStreamPeek
Peek at data in a stream.
.PP
.nf
ssize_t pdfioStreamPeek (
pdfio_stream_t *st,
void *buffer,
size_t bytes
);
.fi
.SS pdfioStreamPrintf
Write a formatted string to a stream.
.PP
.nf
bool pdfioStreamPrintf (
pdfio_stream_t *st,
const char *format,
...
);
.fi
.SS pdfioStreamPuts
Write a literal string to a stream.
.PP
.nf
bool pdfioStreamPuts (
pdfio_stream_t *st,
const char *s
);
.fi
.SS pdfioStreamRead
Read data from a stream.
.PP
.nf
ssize_t pdfioStreamRead (
pdfio_stream_t *st,
void *buffer,
size_t bytes
);
.fi
2021-06-07 14:34:30 +02:00
.PP
This function reads data from a stream. When reading decoded image data
from a stream, you \fI must\fR read whole scanlines. The
\fI pdfioImageGetBytesPerLine\fR function can be used to determine the
proper read length.
2021-05-30 03:21:45 +02:00
.SS pdfioStreamWrite
Write data to a stream.
.PP
.nf
bool pdfioStreamWrite (
pdfio_stream_t *st,
const void *buffer,
size_t bytes
);
.fi
.SS pdfioStringCreate
Create a durable literal string.
.PP
.nf
char * pdfioStringCreate (
pdfio_file_t *pdf,
const char *s
);
.fi
.PP
This function creates a literal string associated with the PDF file
"pwg". The "s" string points to a nul-terminated C string.
.PP
\fB NULL\fR is returned on error, otherwise a \fB char *\fR that is valid until
\fB pdfioFileClose\fR is called.
.SS pdfioStringCreatef
Create a durable formatted string.
.PP
.nf
char * pdfioStringCreatef (
pdfio_file_t *pdf,
const char *format,
...
);
.fi
.PP
This function creates a formatted string associated with the PDF file
"pwg". The "format" string contains \fB printf\fR -style format characters.
.PP
\fB NULL\fR is returned on error, otherwise a \fB char *\fR that is valid until
\fB pdfioFileClose\fR is called.
.SH STRUCTURES
.SS pdfio_rect_s
PDF rectangle
.PP
.nf
struct pdfio_rect_s
{
double x1;
double x2;
double y1;
double y2;
};
.fi
.SH TYPES
.SS pdf_value_t
PDF value of any type
.PP
.nf
typedef struct _pdfio_value_s pdf_value_t;
.fi
.SS pdfio_array_t
Array of PDF values
.PP
.nf
typedef struct _pdfio_array_s pdfio_array_t;
.fi
.SS pdfio_dict_t
Key/value dictionary
.PP
.nf
typedef struct _pdfio_dict_s pdfio_dict_t;
.fi
.SS pdfio_error_cb_t
Error callback
.PP
.nf
typedef bool(*)(pdfio_file_t *pdf, const char *message, void *data) pdfio_error_cb_t;
.fi
.SS pdfio_file_t
PDF file
.PP
.nf
typedef struct _pdfio_file_s pdfio_file_t;
.fi
.SS pdfio_filter_t
Compression/decompression filters for streams
.PP
.nf
typedef enum pdfio_filter_e pdfio_filter_t;
.fi
.SS pdfio_obj_t
Numbered object in PDF file
.PP
.nf
typedef struct _pdfio_obj_s pdfio_obj_t;
.fi
.SS pdfio_rect_t
PDF rectangle
.PP
.nf
typedef struct pdfio_rect_s pdfio_rect_t;
.fi
.SS pdfio_stream_t
Object data stream in PDF file
.PP
.nf
typedef struct _pdfio_stream_s pdfio_stream_t;
.fi
.SS pdfio_valtype_t
PDF value types
.PP
.nf
typedef enum pdfio_valtype_e pdfio_valtype_t;
.fi
.SH AUTHOR
.PP
Michael R Sweet
.SH COPYRIGHT
.PP
Copyright (c) 2021 by Michael R Sweet