unit CarbonPrinting; interface uses Types, QuickDraw, Events, Windows, Dialogs, Fonts, DiskInit, Devices, TextEdit, Traps, Memory, SegLoad, Scrap, ToolUtils, Events, OSUtils, Menus, Segload, Printing, Lists, Processes, Resources, TextUtils, Controls, StandardFile, Files, ShutDown, Script, Sound, Icons, ColorPicker, Folders, PMCore, PMApplication, ControlDefinitions, Directives, GestaltEQU; function InitializePrintingSupport: boolean; function HandlePageSetup: boolean; function HandlePrintWindow(var printSettings: PMPrintSettings; jobTitle: Str255): boolean; function ReadyPrinting(var printSettings: PMPrintSettings): Rect; procedure ReadyPrintingNoPageOpen(var printSettings: PMPrintSettings); function PrintingOpenNextPage: Rect; function PrintingClosePage: boolean; function PrintingCloseDocument: boolean; var g_PrintSession: PMPrintSession; g_PageFormat: PMPageFormat; implementation function InitializePrintingSupport: boolean; var iErr: OSErr; begin iErr:= PMCreateSession(g_PrintSession); iErr:= PMCreatePageFormat(g_PageFormat); if (iErr = noErr) then iErr:= PMSessionDefaultPageFormat(g_PrintSession, g_PageFormat); InitializePrintingSupport:= (iErr = noErr); end; { InitializePrintingSupport } function HandlePageSetup: boolean; var returnValue: boolean; iErr: OSErr; begin iErr:= PMSessionPageSetupDialog(g_PrintSession, g_PageFormat, returnValue); HandlePageSetup:= returnValue; end; { HandlePageSetup } function HandlePrintWindow(var printSettings: PMPrintSettings; jobTitle: Str255): boolean; var returnValue: boolean; iErr: OSErr; myPMRect: PMRect; windowTitleRef: CFStringRef; begin HandlePrintWindow:= false; returnValue:= false; printSettings:= nil; iErr:= PMCreatePrintSettings(printSettings); if (iErr = 0) then iErr:= PMSessionDefaultPrintSettings(g_PrintSession, printSettings); if (iErr <> 0) then begin Exit(HandlePrintWindow); end; returnValue:= true; windowTitleRef:= CFStringCreateWithPascalString(nil, jobTitle, kCFStringEncodingMacRoman); iErr:= PMSetJobNameCFString(printSettings, windowTitleRef); CFRelease(CFTypeRef(windowTitleRef)); iErr:= PMSessionPrintDialog (g_PrintSession, printSettings, g_PageFormat, returnValue); HandlePrintWindow:= returnValue; end; { HandlePrintWindow } function ReadyPrinting(var printSettings: PMPrintSettings): Rect; { Opens the print job and page, sets the port correctly, returns the page rect } var iErr: OSErr; pageRect: Rect; ignoreRect: RectPtr; myPMRect: PMRect; string1: Str255; printingContext: ptr; kPMGraphicsContextQuickdraw: CFStringRef; begin string1:= 'com.apple.graphicscontext.quickdraw'; kPMGraphicsContextQuickdraw:= CFStringCreateWithPascalString(nil, string1, kCFStringEncodingMacRoman); iErr:= PMSessionBeginDocument (g_PrintSession, printSettings, g_PageFormat); myPMRect.top:= 0; myPMRect.left:= 0; myPMRect.bottom:= 200; myPMRect.right:= 200; iErr:= PMSessionBeginPage(g_PrintSession, g_PageFormat, myPMRect); iErr:= PMSessionGetGraphicsContext(g_PrintSession, kPMGraphicsContextQuickdraw, printingContext); CFRelease(CFTypeRef(kPMGraphicsContextQuickdraw)); SetPort(CGrafPtr(printingContext)); ignoreRect:= GetPortBounds(CGrafPtr(printingContext), pageRect); ReadyPrinting:= pageRect; end; { ReadyPrinting } procedure ReadyPrintingNoPageOpen(var printSettings: PMPrintSettings); { This opens the print job without opening a page } var iErr: OSErr; string1: Str255; kPMGraphicsContextQuickdraw: CFStringRef; begin string1:= 'com.apple.graphicscontext.quickdraw'; kPMGraphicsContextQuickdraw:= CFStringCreateWithPascalString(nil, string1, kCFStringEncodingMacRoman); iErr:= PMSessionBeginDocument (g_PrintSession, printSettings, g_PageFormat); end; { ReadyPrintingNoPageOpen } function PrintingOpenNextPage: Rect; { Opens a new page, then returns the drawing rect } var iErr: OSErr; pageRect: Rect; ignoreRect: RectPtr; myPMRect: PMRect; string1: Str255; printingContext: ptr; kPMGraphicsContextQuickdraw: CFStringRef; begin string1:= 'com.apple.graphicscontext.quickdraw'; kPMGraphicsContextQuickdraw:= CFStringCreateWithPascalString(nil, string1, kCFStringEncodingMacRoman); myPMRect.top:= 0; myPMRect.left:= 0; myPMRect.bottom:= 200; myPMRect.right:= 200; iErr:= PMSessionBeginPage(g_PrintSession, g_PageFormat, myPMRect); iErr:= PMSessionGetGraphicsContext(g_PrintSession, kPMGraphicsContextQuickdraw, printingContext); CFRelease(CFTypeRef(kPMGraphicsContextQuickdraw)); SetPort(CGrafPtr(printingContext)); ignoreRect:= GetPortBounds(CGrafPtr(printingContext), pageRect); PrintingOpenNextPage:= pageRect; end; { PrintingOpenNextPage } function PrintingClosePage: boolean; var iErr: OSErr; begin iErr:= PMSessionEndPage(g_PrintSession); PrintingClosePage:= (iErr = noErr); end; { PrintingClosePage } function PrintingCloseDocument: boolean; var iErr: OSErr; begin iErr:= PMSessionEndDocument(g_PrintSession); PrintingCloseDocument:= (iErr = noErr); end; { PrintingCloseDocument } end. { CarbonPrinting }