XmPrintToFile - Man Page

Retrieves and saves data that would normally be printed by the X Print Server​.

Synopsis

#include <Xm/Print​.h>
XtEnumXmPrintToFile(
Display*dpy,
Stringfilename,
XPFinishProcfinish_proc,
XtPointerclient_data);

Description

XmPrintToFile hides the details of X display connection and XpGetDocumentData to the Motif application programmer​.

This function is a convenience routine that hides the details of the X and Xp internals to the application programmer by calling the XpGetDocumentData function with appropriate save and finish callbacks​.

This is used in the context of X Printing when the user has specified the "print-to-file" option from a regular Print Setup Dialog box​.

XmPrintToFile first tries to open the given filename for writing and returns False if it can​'t​. Else, it uses XpGetDocumentData, giving it a save proc that writes the data received in the file and a finish proc that closes the file or removes it on an unsuccessful termination​. It calls finish_proc at that point, passing it the argument received from the Xp layer (status == XPGetDocFinished means the file is valid and was closed, otherwise the file was removed)​.

XmPrintToFile is non-blocking; if it returns successfully, it just means the file was opened successfully, not that all the data was received​.

dpy

Print display connection​.

filename

Name of the file to put the print data in​.

finish_proc

Called when all the data has been received​.

client_data

Passed with the finish_proc​.

Return Value

Returns False if the filename could not be created or opened for writing, True otherwise​.

Errors/Warnings

Not applicable

Examples

A typical OK callback from a DtPrintSetupBox:

PrintOKCallback(widget​.​.​.)
/*-------------*/
{   int save_data = XPSpool;

    pshell = XmPrintSetup (widget, pbs->print_screen,
                                   "Print", NULL, 0);

    XtAddCallback(pshell, XmNstartJobCallback, startJobCB, data);

    if (pbs->destination == DtPRINT_TO_FILE)
                 save_data = XPGetData;

    /* start job must precede XpGetDocumentData in XmPrintToFile */
    XpStartJob(XtDisplay(pshell), save_data);
    XFlush(XtDisplay(pshell));  /* maintain the sequence
                                 between startjob and getdocument */

    /* setup print to file */
    if (pbs->destination == DtPRINT_TO_FILE)
        XmPrintToFile(XtDisplay(pshell),
                                 pbs->dest_info, FinishPrintToFile, NULL);
    }

}

static void
startJobCB(Widget, XtPointer call_data, XtPointer client_data)
{
  print(p);   /* rendering happens here */

  XpEndJob(XtDisplay(p->print_shell));

  /* clean up */
  XtDestroyWidget(p->print_shell);
          XtCloseDisplay(XtDisplay(p->print_shell));
}

See Also

XmPrintSetup(3), XmPrintShell(3), XmRedisplayWidget(3), XmPrintPopupPDM(3)

Referenced By

XmPrintPopupPDM(3), XmPrintSetup(3), XmPrintShell(3).