mirror of
https://github.com/michaelrsweet/pdfio.git
synced 2025-02-20 19:02:50 +01:00
Basic text support.
This commit is contained in:
parent
c4e0421f62
commit
82e62ae852
214
pdfio-content.c
214
pdfio-content.c
@ -45,19 +45,7 @@ typedef pdfio_obj_t *(*_pdfio_image_func_t)(pdfio_dict_t *dict, int fd);
|
|||||||
static pdfio_obj_t *copy_jpeg(pdfio_dict_t *dict, int fd);
|
static pdfio_obj_t *copy_jpeg(pdfio_dict_t *dict, int fd);
|
||||||
static pdfio_obj_t *copy_png(pdfio_dict_t *dict, int fd);
|
static pdfio_obj_t *copy_png(pdfio_dict_t *dict, int fd);
|
||||||
static pdfio_array_t *create_calcolor(pdfio_file_t *pdf, size_t num_colors, double gamma, const double matrix[3][3], const double white_point[3]);
|
static pdfio_array_t *create_calcolor(pdfio_file_t *pdf, size_t num_colors, double gamma, const double matrix[3][3], const double white_point[3]);
|
||||||
static bool write_string(pdfio_stream_t *st, const char *s);
|
static bool write_string(pdfio_stream_t *st, const char *s, bool *newline);
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// 'pdfioContentBeginText()' - Begin a text block.
|
|
||||||
//
|
|
||||||
|
|
||||||
bool // O - `true` on success, `false` on failure
|
|
||||||
pdfioContentBeginText(
|
|
||||||
pdfio_stream_t *st) // I - Stream
|
|
||||||
{
|
|
||||||
return (pdfioStreamPuts(st, "BT\n"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -93,17 +81,6 @@ pdfioContentDrawImage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// 'pdfioContentEndText()' - End a text block.
|
|
||||||
//
|
|
||||||
|
|
||||||
bool // O - `true` on success, `false` on failure
|
|
||||||
pdfioContentEndText(pdfio_stream_t *st) // I - Stream
|
|
||||||
{
|
|
||||||
return (pdfioStreamPuts(st, "ET\n"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// 'pdfioContentFill()' - Fill the current path.
|
// 'pdfioContentFill()' - Fill the current path.
|
||||||
//
|
//
|
||||||
@ -683,6 +660,29 @@ pdfioContentStroke(pdfio_stream_t *st) // I - Stream
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// 'pdfioContentTextBegin()' - Begin a text block.
|
||||||
|
//
|
||||||
|
|
||||||
|
bool // O - `true` on success, `false` on failure
|
||||||
|
pdfioContentTextBegin(
|
||||||
|
pdfio_stream_t *st) // I - Stream
|
||||||
|
{
|
||||||
|
return (pdfioStreamPuts(st, "BT\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// 'pdfioContentTextEnd()' - End a text block.
|
||||||
|
//
|
||||||
|
|
||||||
|
bool // O - `true` on success, `false` on failure
|
||||||
|
pdfioContentTextEnd(pdfio_stream_t *st) // I - Stream
|
||||||
|
{
|
||||||
|
return (pdfioStreamPuts(st, "ET\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// 'pdfioContentTextMoveLine()' - Move to the next line and offset.
|
// 'pdfioContentTextMoveLine()' - Move to the next line and offset.
|
||||||
//
|
//
|
||||||
@ -730,12 +730,49 @@ pdfioContentTextNextLine(
|
|||||||
bool // O - `true` on success, `false` on failure
|
bool // O - `true` on success, `false` on failure
|
||||||
pdfioContentTextShow(
|
pdfioContentTextShow(
|
||||||
pdfio_stream_t *st, // I - Stream
|
pdfio_stream_t *st, // I - Stream
|
||||||
const char *s, // I - String to show
|
const char *s) // I - String to show
|
||||||
bool new_line) // I - Advance to the next line afterwards
|
|
||||||
{
|
{
|
||||||
write_string(st, s);
|
bool newline = false; // New line?
|
||||||
|
|
||||||
if (new_line)
|
|
||||||
|
// Write the string...
|
||||||
|
if (!write_string(st, s, &newline))
|
||||||
|
return (false);
|
||||||
|
|
||||||
|
// Draw it...
|
||||||
|
if (newline)
|
||||||
|
return (pdfioStreamPuts(st, "\'\n"));
|
||||||
|
else
|
||||||
|
return (pdfioStreamPuts(st, "Tj\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// 'pdfioContentTextShowf()' - Show formatted text.
|
||||||
|
//
|
||||||
|
|
||||||
|
bool
|
||||||
|
pdfioContentTextShowf(
|
||||||
|
pdfio_stream_t *st, // I - Stream
|
||||||
|
const char *format, // I - `printf`-style format string
|
||||||
|
...) // I - Additional arguments as needed
|
||||||
|
{
|
||||||
|
bool newline = false; // New line?
|
||||||
|
char buffer[8192]; // Text buffer
|
||||||
|
va_list ap; // Argument pointer
|
||||||
|
|
||||||
|
|
||||||
|
// Format the string...
|
||||||
|
va_start(ap, format);
|
||||||
|
vsnprintf(buffer, sizeof(buffer), format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
// Write the string...
|
||||||
|
if (!write_string(st, buffer, &newline))
|
||||||
|
return (false);
|
||||||
|
|
||||||
|
// Draw it...
|
||||||
|
if (newline)
|
||||||
return (pdfioStreamPuts(st, "\'\n"));
|
return (pdfioStreamPuts(st, "\'\n"));
|
||||||
else
|
else
|
||||||
return (pdfioStreamPuts(st, "Tj\n"));
|
return (pdfioStreamPuts(st, "Tj\n"));
|
||||||
@ -770,7 +807,7 @@ pdfioContentTextShowJustified(
|
|||||||
|
|
||||||
if (fragments[i])
|
if (fragments[i])
|
||||||
{
|
{
|
||||||
if (!write_string(st, fragments[i]))
|
if (!write_string(st, fragments[i], NULL))
|
||||||
return (false);
|
return (false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -854,11 +891,36 @@ pdfioPageDictAddFont(
|
|||||||
const char *name, // I - Font name
|
const char *name, // I - Font name
|
||||||
pdfio_obj_t *obj) // I - Font object
|
pdfio_obj_t *obj) // I - Font object
|
||||||
{
|
{
|
||||||
(void)dict;
|
pdfio_dict_t *resources; // Resource dictionary
|
||||||
(void)name;
|
pdfio_dict_t *font; // Font dictionary
|
||||||
(void)obj;
|
|
||||||
|
|
||||||
return (false);
|
|
||||||
|
// Range check input...
|
||||||
|
if (!dict || !name || !obj)
|
||||||
|
return (false);
|
||||||
|
|
||||||
|
// Get the Resources dictionary...
|
||||||
|
if ((resources = pdfioDictGetDict(dict, "Resources")) == NULL)
|
||||||
|
{
|
||||||
|
if ((resources = pdfioDictCreate(dict->pdf)) == NULL)
|
||||||
|
return (false);
|
||||||
|
|
||||||
|
if (!pdfioDictSetDict(dict, "Resources", resources))
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the Font dictionary...
|
||||||
|
if ((font = pdfioDictGetDict(resources, "Font")) == NULL)
|
||||||
|
{
|
||||||
|
if ((font = pdfioDictCreate(dict->pdf)) == NULL)
|
||||||
|
return (false);
|
||||||
|
|
||||||
|
if (!pdfioDictSetDict(resources, "Font", font))
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now set the image reference in the Font resource dictionary and return...
|
||||||
|
return (pdfioDictSetObject(font, name, obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -905,17 +967,74 @@ pdfioPageDictAddImage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// 'pdfioFileCreateBaseFontObject()' - Create one of the base 14 PDF fonts.
|
||||||
|
//
|
||||||
|
// This function creates one of the base 14 PDF fonts. The "name" parameter
|
||||||
|
// specifies the font nane:
|
||||||
|
//
|
||||||
|
// - `Courier`
|
||||||
|
// - `Courier-Bold`
|
||||||
|
// - `Courier-BoldItalic`
|
||||||
|
// - `Courier-Italic`
|
||||||
|
// - `Helvetica`
|
||||||
|
// - `Helvetica-Bold`
|
||||||
|
// - `Helvetica-BoldOblique`
|
||||||
|
// - `Helvetica-Oblique`
|
||||||
|
// - `Symbol`
|
||||||
|
// - `Times-Bold`
|
||||||
|
// - `Times-BoldItalic`
|
||||||
|
// - `Times-Italic`
|
||||||
|
// - `Times-Roman`
|
||||||
|
// - `ZapfDingbats`
|
||||||
|
//
|
||||||
|
|
||||||
|
pdfio_obj_t * // O - Font object
|
||||||
|
pdfioFileCreateBaseFontObject(
|
||||||
|
pdfio_file_t *pdf, // I - PDF file
|
||||||
|
const char *name) // I - Font name
|
||||||
|
{
|
||||||
|
pdfio_dict_t *dict; // Font dictionary
|
||||||
|
pdfio_obj_t *obj; // Font object
|
||||||
|
|
||||||
|
|
||||||
|
if ((dict = pdfioDictCreate(pdf)) == NULL)
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
pdfioDictSetName(dict, "Type", "Font");
|
||||||
|
pdfioDictSetName(dict, "Subtype", "Type1");
|
||||||
|
pdfioDictSetName(dict, "BaseFont", pdfioStringCreate(pdf, name));
|
||||||
|
pdfioDictSetName(dict, "Encoding", "WinAnsiEncoding");
|
||||||
|
|
||||||
|
if ((obj = pdfioFileCreateObject(dict->pdf, dict)) != NULL)
|
||||||
|
pdfioObjClose(obj);
|
||||||
|
|
||||||
|
return (obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// 'pdfioFileCreateFontObject()' - Add a font object to a PDF file.
|
// 'pdfioFileCreateFontObject()' - Add a font object to a PDF file.
|
||||||
//
|
//
|
||||||
|
|
||||||
pdfio_obj_t * // O - Object
|
pdfio_obj_t * // O - Font object
|
||||||
pdfioFileCreateFontObject(
|
pdfioFileCreateFontObject(
|
||||||
pdfio_file_t *pdf, // I - PDF file
|
pdfio_file_t *pdf, // I - PDF file
|
||||||
const char *filename) // I - Filename
|
const char *filename, // I - Filename
|
||||||
|
bool unicode) // I - Unicode font?
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
|
pdfio_dict_t *dict; // Font dictionary
|
||||||
|
pdfio_obj_t *obj; // Font object
|
||||||
|
pdfio_st_t *st; // Content stream
|
||||||
|
int fd; // File
|
||||||
|
char buffer[16384]; // Copy buffer
|
||||||
|
ssize_t bytes; // Bytes read
|
||||||
|
#endif // 0
|
||||||
|
|
||||||
(void)pdf;
|
(void)pdf;
|
||||||
(void)filename;
|
(void)filename;
|
||||||
|
(void)unicode;
|
||||||
|
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
@ -1274,7 +1393,8 @@ create_calcolor(
|
|||||||
|
|
||||||
static bool // O - `true` on success, `false` otherwise
|
static bool // O - `true` on success, `false` otherwise
|
||||||
write_string(pdfio_stream_t *st, // I - Stream
|
write_string(pdfio_stream_t *st, // I - Stream
|
||||||
const char *s) // I - String
|
const char *s, // I - String
|
||||||
|
bool *newline) // O - Ends with a newline?
|
||||||
{
|
{
|
||||||
const char *ptr; // Pointer into string
|
const char *ptr; // Pointer into string
|
||||||
|
|
||||||
@ -1291,7 +1411,7 @@ write_string(pdfio_stream_t *st, // I - Stream
|
|||||||
// Unicode string...
|
// Unicode string...
|
||||||
int ch; // Unicode character
|
int ch; // Unicode character
|
||||||
|
|
||||||
if (!pdfioStreamPuts(st, "("))
|
if (!pdfioStreamPuts(st, "<"))
|
||||||
return (false);
|
return (false);
|
||||||
|
|
||||||
for (ptr = s; *ptr; ptr ++)
|
for (ptr = s; *ptr; ptr ++)
|
||||||
@ -1314,6 +1434,11 @@ write_string(pdfio_stream_t *st, // I - Stream
|
|||||||
ch = ((ptr[0] & 0x07) << 18) | ((ptr[1] & 0x3f) << 12) | ((ptr[2] & 0x3f) << 6) | (ptr[3] & 0x3f);
|
ch = ((ptr[0] & 0x07) << 18) | ((ptr[1] & 0x3f) << 12) | ((ptr[2] & 0x3f) << 6) | (ptr[3] & 0x3f);
|
||||||
ptr += 3;
|
ptr += 3;
|
||||||
}
|
}
|
||||||
|
else if (*ptr == '\n' && newline)
|
||||||
|
{
|
||||||
|
*newline = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
ch = *ptr & 255;
|
ch = *ptr & 255;
|
||||||
|
|
||||||
@ -1321,7 +1446,7 @@ write_string(pdfio_stream_t *st, // I - Stream
|
|||||||
if (!pdfioStreamPrintf(st, "%04X", ch))
|
if (!pdfioStreamPrintf(st, "%04X", ch))
|
||||||
return (false);
|
return (false);
|
||||||
}
|
}
|
||||||
if (!pdfioStreamPuts(st, ")"))
|
if (!pdfioStreamPuts(st, ">"))
|
||||||
return (false);
|
return (false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1357,6 +1482,19 @@ write_string(pdfio_stream_t *st, // I - Stream
|
|||||||
level ++;
|
level ++;
|
||||||
else if (*ptr == ')')
|
else if (*ptr == ')')
|
||||||
level --;
|
level --;
|
||||||
|
else if (*ptr == '\n' && newline)
|
||||||
|
{
|
||||||
|
if (ptr > start)
|
||||||
|
{
|
||||||
|
if (!pdfioStreamWrite(st, start, (size_t)(ptr - start)))
|
||||||
|
return (false);
|
||||||
|
|
||||||
|
start = ptr + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*newline = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ptr > start)
|
if (ptr > start)
|
||||||
|
@ -84,10 +84,8 @@ extern const double pdfioSRGBWhitePoint[3] PDFIO_PUBLIC;
|
|||||||
//
|
//
|
||||||
|
|
||||||
// PDF content drawing functions...
|
// PDF content drawing functions...
|
||||||
extern bool pdfioContentBeginText(pdfio_stream_t *st) PDFIO_PUBLIC;
|
|
||||||
extern bool pdfioContentClip(pdfio_stream_t *st, bool even_odd) PDFIO_PUBLIC;
|
extern bool pdfioContentClip(pdfio_stream_t *st, bool even_odd) PDFIO_PUBLIC;
|
||||||
extern bool pdfioContentDrawImage(pdfio_stream_t *st, const char *name, double x, double y, double w, double h) PDFIO_PUBLIC;
|
extern bool pdfioContentDrawImage(pdfio_stream_t *st, const char *name, double x, double y, double w, double h) PDFIO_PUBLIC;
|
||||||
extern bool pdfioContentEndText(pdfio_stream_t *st) PDFIO_PUBLIC;
|
|
||||||
extern bool pdfioContentFill(pdfio_stream_t *st, bool even_odd) PDFIO_PUBLIC;
|
extern bool pdfioContentFill(pdfio_stream_t *st, bool even_odd) PDFIO_PUBLIC;
|
||||||
extern bool pdfioContentFillAndStroke(pdfio_stream_t *st, bool even_odd) PDFIO_PUBLIC;
|
extern bool pdfioContentFillAndStroke(pdfio_stream_t *st, bool even_odd) PDFIO_PUBLIC;
|
||||||
extern bool pdfioContentMatrixConcat(pdfio_stream_t *st, pdfio_matrix_t m) PDFIO_PUBLIC;
|
extern bool pdfioContentMatrixConcat(pdfio_stream_t *st, pdfio_matrix_t m) PDFIO_PUBLIC;
|
||||||
@ -130,14 +128,18 @@ extern bool pdfioContentSetTextRise(pdfio_stream_t *st, double rise) PDFIO_PUBL
|
|||||||
extern bool pdfioContentSetTextWordSpacing(pdfio_stream_t *st, double spacing) PDFIO_PUBLIC;
|
extern bool pdfioContentSetTextWordSpacing(pdfio_stream_t *st, double spacing) PDFIO_PUBLIC;
|
||||||
extern bool pdfioContentSetTextXScaling(pdfio_stream_t *st, double percent) PDFIO_PUBLIC;
|
extern bool pdfioContentSetTextXScaling(pdfio_stream_t *st, double percent) PDFIO_PUBLIC;
|
||||||
extern bool pdfioContentStroke(pdfio_stream_t *st) PDFIO_PUBLIC;
|
extern bool pdfioContentStroke(pdfio_stream_t *st) PDFIO_PUBLIC;
|
||||||
|
extern bool pdfioContentTextBegin(pdfio_stream_t *st) PDFIO_PUBLIC;
|
||||||
|
extern bool pdfioContentTextEnd(pdfio_stream_t *st) PDFIO_PUBLIC;
|
||||||
extern bool pdfioContentTextMoveLine(pdfio_stream_t *st, double tx, double ty) PDFIO_PUBLIC;
|
extern bool pdfioContentTextMoveLine(pdfio_stream_t *st, double tx, double ty) PDFIO_PUBLIC;
|
||||||
extern bool pdfioContentTextMoveTo(pdfio_stream_t *st, double tx, double ty) PDFIO_PUBLIC;
|
extern bool pdfioContentTextMoveTo(pdfio_stream_t *st, double tx, double ty) PDFIO_PUBLIC;
|
||||||
extern bool pdfioContentTextNextLine(pdfio_stream_t *st) PDFIO_PUBLIC;
|
extern bool pdfioContentTextNextLine(pdfio_stream_t *st) PDFIO_PUBLIC;
|
||||||
extern bool pdfioContentTextShow(pdfio_stream_t *st, const char *s, bool new_line) PDFIO_PUBLIC;
|
extern bool pdfioContentTextShow(pdfio_stream_t *st, const char *s) PDFIO_PUBLIC;
|
||||||
|
extern bool pdfioContentTextShowf(pdfio_stream_t *st, const char *format, ...) PDFIO_PUBLIC PDFIO_FORMAT(2,3);
|
||||||
extern bool pdfioContentTextShowJustified(pdfio_stream_t *st, size_t num_fragments, const double *offsets, const char * const *fragments) PDFIO_PUBLIC;
|
extern bool pdfioContentTextShowJustified(pdfio_stream_t *st, size_t num_fragments, const double *offsets, const char * const *fragments) PDFIO_PUBLIC;
|
||||||
|
|
||||||
// Resource helpers...
|
// Resource helpers...
|
||||||
extern pdfio_obj_t *pdfioFileCreateFontObject(pdfio_file_t *pdf, const char *filename) PDFIO_PUBLIC;
|
extern pdfio_obj_t *pdfioFileCreateBaseFontObject(pdfio_file_t *pdf, const char *name) PDFIO_PUBLIC;
|
||||||
|
extern pdfio_obj_t *pdfioFileCreateFontObject(pdfio_file_t *pdf, const char *filename, bool unicode) PDFIO_PUBLIC;
|
||||||
extern pdfio_obj_t *pdfioFileCreateICCProfileObject(pdfio_file_t *pdf, const char *filename) PDFIO_PUBLIC;
|
extern pdfio_obj_t *pdfioFileCreateICCProfileObject(pdfio_file_t *pdf, const char *filename) PDFIO_PUBLIC;
|
||||||
extern pdfio_obj_t *pdfioFileCreateImageObject(pdfio_file_t *pdf, const char *filename, bool interpolate) PDFIO_PUBLIC;
|
extern pdfio_obj_t *pdfioFileCreateImageObject(pdfio_file_t *pdf, const char *filename, bool interpolate) PDFIO_PUBLIC;
|
||||||
|
|
||||||
|
184
testpdfio.c
184
testpdfio.c
@ -26,8 +26,8 @@ static bool error_cb(pdfio_file_t *pdf, const char *message, bool *error);
|
|||||||
static ssize_t token_consume_cb(const char **s, size_t bytes);
|
static ssize_t token_consume_cb(const char **s, size_t bytes);
|
||||||
static ssize_t token_peek_cb(const char **s, char *buffer, size_t bytes);
|
static ssize_t token_peek_cb(const char **s, char *buffer, size_t bytes);
|
||||||
static int write_color_patch(pdfio_stream_t *st, bool device);
|
static int write_color_patch(pdfio_stream_t *st, bool device);
|
||||||
static int write_color_test(pdfio_file_t *pdf, int number);
|
static int write_color_test(pdfio_file_t *pdf, int number, pdfio_obj_t *font);
|
||||||
static int write_page(pdfio_file_t *pdf, int number, pdfio_obj_t *image);
|
static int write_page(pdfio_file_t *pdf, int number, pdfio_obj_t *font, pdfio_obj_t *image);
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -160,6 +160,7 @@ do_unit_tests(void)
|
|||||||
_pdfio_value_t value; // Value
|
_pdfio_value_t value; // Value
|
||||||
pdfio_obj_t *color_jpg, // color.jpg image
|
pdfio_obj_t *color_jpg, // color.jpg image
|
||||||
*gray_jpg, // gray.jpg image
|
*gray_jpg, // gray.jpg image
|
||||||
|
*helvetica, // Helvetica font
|
||||||
*page; // Page from test PDF file
|
*page; // Page from test PDF file
|
||||||
static const char *complex_dict = // Complex dictionary value
|
static const char *complex_dict = // Complex dictionary value
|
||||||
"<</Annots 5457 0 R/Contents 5469 0 R/CropBox[0 0 595.4 842]/Group 725 0 R"
|
"<</Annots 5457 0 R/Contents 5469 0 R/CropBox[0 0 595.4 842]/Group 725 0 R"
|
||||||
@ -217,6 +218,13 @@ do_unit_tests(void)
|
|||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
|
// Create fonts...
|
||||||
|
fputs("pdfioFileCreateBaseFontObject(\"Helvetica\"): ", stdout);
|
||||||
|
if ((helvetica = pdfioFileCreateBaseFontObject(outpdf, "Helvetica")) != NULL)
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
// Copy the first page from the test PDF file...
|
// Copy the first page from the test PDF file...
|
||||||
fputs("pdfioFileGetPage(0): ", stdout);
|
fputs("pdfioFileGetPage(0): ", stdout);
|
||||||
if ((page = pdfioFileGetPage(pdf, 0)) != NULL)
|
if ((page = pdfioFileGetPage(pdf, 0)) != NULL)
|
||||||
@ -231,7 +239,7 @@ do_unit_tests(void)
|
|||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
// Write a page with a color image...
|
// Write a page with a color image...
|
||||||
if (write_page(outpdf, 2, color_jpg))
|
if (write_page(outpdf, 2, helvetica, color_jpg))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
// Copy the third page from the test PDF file...
|
// Copy the third page from the test PDF file...
|
||||||
@ -248,11 +256,11 @@ do_unit_tests(void)
|
|||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
// Write a page with a grayscale image...
|
// Write a page with a grayscale image...
|
||||||
if (write_page(outpdf, 4, gray_jpg))
|
if (write_page(outpdf, 4, helvetica, gray_jpg))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
// Write a page that tests multiple color spaces...
|
// Write a page that tests multiple color spaces...
|
||||||
if (write_color_test(outpdf, 5))
|
if (write_color_test(outpdf, 5, helvetica))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
// Close the test PDF file...
|
// Close the test PDF file...
|
||||||
@ -489,7 +497,8 @@ write_color_patch(pdfio_stream_t *st, // I - Content stream
|
|||||||
|
|
||||||
static int // O - 1 on failure, 0 on success
|
static int // O - 1 on failure, 0 on success
|
||||||
write_color_test(pdfio_file_t *pdf, // I - PDF file
|
write_color_test(pdfio_file_t *pdf, // I - PDF file
|
||||||
int number) // I - Page number
|
int number, // I - Page number
|
||||||
|
pdfio_obj_t *font) // I - Text font
|
||||||
{
|
{
|
||||||
pdfio_dict_t *dict; // Page dictionary
|
pdfio_dict_t *dict; // Page dictionary
|
||||||
pdfio_stream_t *st; // Page contents stream
|
pdfio_stream_t *st; // Page contents stream
|
||||||
@ -519,6 +528,12 @@ write_color_test(pdfio_file_t *pdf, // I - PDF file
|
|||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioPageDictAddFont(F1): ", stdout);
|
||||||
|
if (pdfioPageDictAddFont(dict, "F1", font))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
printf("pdfioFileCreatePage(%d): ", number);
|
printf("pdfioFileCreatePage(%d): ", number);
|
||||||
|
|
||||||
if ((st = pdfioFileCreatePage(pdf, dict)) != NULL)
|
if ((st = pdfioFileCreatePage(pdf, dict)) != NULL)
|
||||||
@ -526,6 +541,108 @@ write_color_test(pdfio_file_t *pdf, // I - PDF file
|
|||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentSetStrokeColorDeviceGray(0.0): ", stdout);
|
||||||
|
if (pdfioContentSetStrokeColorDeviceGray(st, 0.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextBegin(): ", stdout);
|
||||||
|
if (pdfioContentTextBegin(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentSetTextFont(\"F1\", 12.0): ", stdout);
|
||||||
|
if (pdfioContentSetTextFont(st, "F1", 12.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextMoveTo(550.0, 36.0): ", stdout);
|
||||||
|
if (pdfioContentTextMoveTo(st, 550.0, 36.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
printf("pdfioContentTextShowf(\"%d\"): ", number);
|
||||||
|
if (pdfioContentTextShowf(st, "%d", number))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextEnd(): ", stdout);
|
||||||
|
if (pdfioContentTextEnd(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextBegin(): ", stdout);
|
||||||
|
if (pdfioContentTextBegin(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentSetTextFont(\"F1\", 18.0): ", stdout);
|
||||||
|
if (pdfioContentSetTextFont(st, "F1", 18.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextMoveTo(82, 360): ", stdout);
|
||||||
|
if (pdfioContentTextMoveTo(st, 82, 360))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextShow(\"AdobeRGB\"): ", stdout);
|
||||||
|
if (pdfioContentTextShow(st, "AdobeRGB"))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextMoveTo(234, 0): ", stdout);
|
||||||
|
if (pdfioContentTextMoveTo(st, 234, 0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextShow(\"DisplayP3\"): ", stdout);
|
||||||
|
if (pdfioContentTextShow(st, "DisplayP3"))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextMoveTo(-234, 252): ", stdout);
|
||||||
|
if (pdfioContentTextMoveTo(st, -234, 252))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextShow(\"sRGB\"): ", stdout);
|
||||||
|
if (pdfioContentTextShow(st, "sRGB"))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextMoveTo(234, 0): ", stdout);
|
||||||
|
if (pdfioContentTextMoveTo(st, 234, 0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextShow(\"DeviceCMYK\"): ", stdout);
|
||||||
|
if (pdfioContentTextShow(st, "DeviceCMYK"))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextEnd(): ", stdout);
|
||||||
|
if (pdfioContentTextEnd(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
fputs("pdfioContentSave(): ", stdout);
|
fputs("pdfioContentSave(): ", stdout);
|
||||||
if (pdfioContentSave(st))
|
if (pdfioContentSave(st))
|
||||||
puts("PASS");
|
puts("PASS");
|
||||||
@ -538,8 +655,8 @@ write_color_test(pdfio_file_t *pdf, // I - PDF file
|
|||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
fputs("pdfioContentMatrixTranslate(82, 180): ", stdout);
|
fputs("pdfioContentMatrixTranslate(82, 162): ", stdout);
|
||||||
if (pdfioContentMatrixTranslate(st, 82, 180))
|
if (pdfioContentMatrixTranslate(st, 82, 162))
|
||||||
puts("PASS");
|
puts("PASS");
|
||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
@ -565,8 +682,8 @@ write_color_test(pdfio_file_t *pdf, // I - PDF file
|
|||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
fputs("pdfioContentMatrixTranslate(316, 180): ", stdout);
|
fputs("pdfioContentMatrixTranslate(316, 162): ", stdout);
|
||||||
if (pdfioContentMatrixTranslate(st, 316, 180))
|
if (pdfioContentMatrixTranslate(st, 316, 162))
|
||||||
puts("PASS");
|
puts("PASS");
|
||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
@ -645,6 +762,7 @@ write_color_test(pdfio_file_t *pdf, // I - PDF file
|
|||||||
static int // O - 1 on failure, 0 on success
|
static int // O - 1 on failure, 0 on success
|
||||||
write_page(pdfio_file_t *pdf, // I - PDF file
|
write_page(pdfio_file_t *pdf, // I - PDF file
|
||||||
int number, // I - Page number
|
int number, // I - Page number
|
||||||
|
pdfio_obj_t *font, // I - Text font
|
||||||
pdfio_obj_t *image) // I - Image to draw
|
pdfio_obj_t *image) // I - Image to draw
|
||||||
{
|
{
|
||||||
// TODO: Add font object support...
|
// TODO: Add font object support...
|
||||||
@ -658,6 +776,8 @@ write_page(pdfio_file_t *pdf, // I - PDF file
|
|||||||
ty; // Y offset
|
ty; // Y offset
|
||||||
|
|
||||||
|
|
||||||
|
(void)font;
|
||||||
|
|
||||||
fputs("pdfioDictCreate: ", stdout);
|
fputs("pdfioDictCreate: ", stdout);
|
||||||
if ((dict = pdfioDictCreate(pdf)) != NULL)
|
if ((dict = pdfioDictCreate(pdf)) != NULL)
|
||||||
puts("PASS");
|
puts("PASS");
|
||||||
@ -670,6 +790,12 @@ write_page(pdfio_file_t *pdf, // I - PDF file
|
|||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioPageDictAddFont(F1): ", stdout);
|
||||||
|
if (pdfioPageDictAddFont(dict, "F1", font))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
printf("pdfioFileCreatePage(%d): ", number);
|
printf("pdfioFileCreatePage(%d): ", number);
|
||||||
|
|
||||||
if ((st = pdfioFileCreatePage(pdf, dict)) != NULL)
|
if ((st = pdfioFileCreatePage(pdf, dict)) != NULL)
|
||||||
@ -680,7 +806,43 @@ write_page(pdfio_file_t *pdf, // I - PDF file
|
|||||||
fputs("pdfioStreamPuts(...): ", stdout);
|
fputs("pdfioStreamPuts(...): ", stdout);
|
||||||
if (pdfioStreamPuts(st,
|
if (pdfioStreamPuts(st,
|
||||||
"1 0 0 RG 0 g 5 w\n"
|
"1 0 0 RG 0 g 5 w\n"
|
||||||
"18 18 559 760 re 72 72 451 648 re B*\n"))
|
"54 54 487 688 re 90 90 415 612 re B*\n"))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentSetStrokeColorDeviceGray(0.0): ", stdout);
|
||||||
|
if (pdfioContentSetStrokeColorDeviceGray(st, 0.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextBegin(): ", stdout);
|
||||||
|
if (pdfioContentTextBegin(st))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentSetTextFont(\"F1\", 12.0): ", stdout);
|
||||||
|
if (pdfioContentSetTextFont(st, "F1", 12.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextMoveTo(550.0, 36.0): ", stdout);
|
||||||
|
if (pdfioContentTextMoveTo(st, 550.0, 36.0))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
printf("pdfioContentTextShowf(\"%d\"): ", number);
|
||||||
|
if (pdfioContentTextShowf(st, "%d", number))
|
||||||
|
puts("PASS");
|
||||||
|
else
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
fputs("pdfioContentTextEnd(): ", stdout);
|
||||||
|
if (pdfioContentTextEnd(st))
|
||||||
puts("PASS");
|
puts("PASS");
|
||||||
else
|
else
|
||||||
return (1);
|
return (1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user