---
name: "XmPrintToFile"
section: "3"
platform: "linux"
package: "openmotif"
version: "2.3.8-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/XmPrintToFile"
---

# XmPrintToFile(3)

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

## NAME

**XmPrintToFile** — 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)](/XmPrintSetup/3.md), [**XmPrintShell**(3)](/XmPrintShell/3.md), [**XmRedisplayWidget**(3)](/XmRedisplayWidget/3.md), [**XmPrintPopupPDM**(3)](/XmPrintPopupPDM/3.md)
