示例#1
0
文件: pc_output.c 项目: xharbour/core
pdc_bool
pdc_init_output(
    void *opaque,
    pdc_output *out,
    int compatibility,
    pdc_outctl *oc)
{
    static const char *fn = "pdc_init_output";
    pdc_core *pdc = out->pdc;
    int i;

    pdc_cleanup_output(out, pdc_false);

    out->opaque		= opaque;

    out->lastobj	= 0;
#if defined(MVS) || defined(MVS_TEST)
    out->fopenparams    = oc->fopenparams;
    out->recordsize     = oc->recordsize;
#endif

    if (out->file_offset == NULL) {
	out->file_offset_capacity = ID_CHUNKSIZE;

	out->file_offset = (pdc_off_t *) pdc_malloc(pdc,
		sizeof(pdc_off_t) * out->file_offset_capacity, fn);
    }

    for (i = 1; i < out->file_offset_capacity; ++i)
	out->file_offset[i] = PDC_BAD_ID;

    out->compresslevel	= PDF_DEFAULT_COMPRESSION;
    out->compr_changed	= pdc_false;
    out->flush = oc->flush;

    memcpy(out->id[0], out->id[1], MD5_DIGEST_LENGTH);


    if (!pdc_init_stream(pdc, out, oc->filename, oc->fp, oc->writeproc))
	return pdc_false;


    {
	/* Write the document header */
	pdc_printf(out, "%%PDF-%s\n", pdc_get_pdfversion(pdc, compatibility));

#define PDC_MAGIC_BINARY "\045\344\343\317\322\012"
	pdc_write(out, PDC_MAGIC_BINARY, sizeof(PDC_MAGIC_BINARY) - 1);
    }

    out->open = pdc_true;

    return pdc_true;
}
示例#2
0
pdc_bool
pdc_init_output(
    void *opaque,
    pdc_output *out,
    const char *filename,
    FILE *fp,
    size_t (*writeproc)(pdc_output *out, void *data, size_t size),
    int compatibility)
{
    static const char *fn = "pdc_init_output";
    pdc_core *pdc = out->pdc;
    int i;

    out->lastobj = 0;

    if (out->file_offset == NULL) {
	out->file_offset_capacity = + ID_CHUNKSIZE;

	out->file_offset = (long *) pdc_malloc(pdc,
		sizeof(long) * out->file_offset_capacity, fn);
    }

    for (i = 1; i < out->file_offset_capacity; ++i)
	out->file_offset[i] = PDC_BAD_ID;

    out->compresslevel	= PDF_DEFAULT_COMPRESSION;
    out->compr_changed	= pdc_false;

    out->opaque		= opaque;

    memcpy(out->id[0], out->id[1], MD5_DIGEST_LENGTH);


    if (!pdc_init_stream(pdc, out, filename, fp, writeproc))
	return pdc_false;

    /* Write the document header */
    if (compatibility == PDC_1_5)
	pdc_puts(out, "%PDF-1.5\n");
    else if (compatibility == PDC_1_4)
	pdc_puts(out, "%PDF-1.4\n");
    else
	pdc_puts(out, "%PDF-1.3\n");

    /* binary magic number */
#define PDC_MAGIC_BINARY "\045\344\343\317\322\012"
    pdc_write(out, PDC_MAGIC_BINARY, sizeof(PDC_MAGIC_BINARY) - 1);

    return pdc_true;
}