TweetFollow Us on Twitter

June 96 - Print Hints: The Top 10 Printing Crimes Revisited

Print Hints: The Top 10 Printing Crimes Revisited

DAVE POLASCHEK

They say some things never change. Although it's been four years since Pete "Luke" Alexander wrote about the top 10 printing crimes in develop, people are still committing some of the same crimes. There are also a few new crimes to add to the list. So, here they are, the updated top 10 printing crimes (ordered on a combined frequency and hideousness scale):


    10. Having insufficient free memory at print time.

    9. Coloring outside the lines.

    8. Misusing the PostScriptHandle picture comment.

    7. Calling PrintDefault or PrValidate before PrOpen.

    6. Avoiding the print dialogs, especially PrJobDialog.

    5. Accessing undocumented fields in the print record.

    4. Not checking error return values.

    3. Making low-level Printing Manager calls.

    2. Not using QuickDraw GX print dialogs if QuickDraw GX is present.

    1. Adding printing to your application last.

Now let's look at how to avoid these crimes. The solutions are relatively easy.

SOLVING THE PRINTING CRIMES

10. Having insufficient free memory at print time.

Some printer drivers use a lot of memory. When a driver runs out of memory, the results are usually pretty bad, so you should give printer drivers as much memory as possible. Unfortunately, memory requirements vary from driver to driver, so it's hard to predict how much memory a driver will need.

Solution: Unload all unneeded code and resources before printing.

9. Coloring outside the lines.

Many applications draw outside the printable area of the page when printing. This can happen if the user has extended objects beyond the printable area. Drawing unneeded objects causes extra work for the driver and the printer, which affects performance. In some cases, the driver also needs to allocate extra memory to hold the objects or the enclosing rectangle.

Solution: Draw only the portions of objects that will appear on the page. This can be determined by looking at the rPage field in the printer information record (which is in the prInfo field of the print record).

8. Misusing the PostScriptHandle picture comment.

The PostScriptHandle picture comment is designed to add PostScript (TM) code to a page containing QuickDraw graphics. It's not designed to send multiple pages of pre-generated PostScript code to a printer (for that, you need to use the Pap.WorkStation.o library).

Solution: Use the PostScriptHandle picture comment only to draw a self-contained image, which will be added to any QuickDraw graphics already on the page. If the PostScript code needs to change the graphics state, it should save and restore the state. Think of the picture comment as a way to include an EPS image, with all the restrictions placed on EPS by Adobe (TM) (as specified in Appendix H of the PostScript Language Reference Manual, second edition). The PostScript code should be compatible with both Level 1 and Level 2 PostScript, and you should include a QuickDraw version of the graphic so that your users can print to a non-PostScript printer.

    For more information on how to use the PostScriptHandle picture comment, see Technote 1032, "Mixing QuickDraw & PostScript Printing from Your App: Some Gotchas," and Appendix B of Inside Macintosh: Imaging With QuickDraw.*

7. Calling PrintDefault or PrValidate before PrOpen.

The documentation for the Printing Manager (Chapter 9 of Inside Macintosh: Imaging With QuickDraw) mentions that you need to call PrOpen before calling any other Printing Manager functions. Unfortunately, the descriptions for PrintDefault and PrValidate don't repeat this warning.

Solution: Always call PrOpen before calling any other Printing Manager calls.

6. Avoiding the print dialogs, especially PrJobDialog.

Some applications try to avoid print dialogs because either user interaction isn't possible or the developer thinks the user will make a mistake. Because all of the many options for the current drivers, most notably LaserWriter 8, cannot be stored in the print record, you need to call PrJobDialog so that the driver can read in the options from where they're stored (usually in the preferences file). If you don't call PrJobDialog, the driver can't set up the print record correctly, and you might not get the output you expected. The solution should be to call PrJobMerge, but in many drivers PrJobMerge does a less than perfect job.

Solution: Call PrJobDialog before printing to set up your print record correctly, or use QuickDraw GX, which supports dialog-free printing.

5. Accessing undocumented fields in the print record.

Many of the fields in the print record are undocumented or documented as private. Printer drivers can use these fields however they choose. What works for one driver might cause another to crash or to print zillions of pages you don't want.

Solution: Use only the fields in the print record that are documented as public in Chapter 9 of Inside Macintosh: Imaging With QuickDraw.

4. Not checking error return values.

After any call to a Printing Manager function, you should check PrError. If you're calling PrGeneral, you should also check the iError field in the TGnlData structure. Be aware that newer drivers return errors that older drivers didn't. For example, PrStlDialog in LaserWriter 8 can return an error if the preferences file is missing or corrupted; many applications don't check for this error, and later crash when they've pushed the driver completely off the cliff.

Solution: Always check and handle printing errors. See the Macintosh Technical Note "A Printing Loop That Cares..." (PR 10) and the article "Meet PrGeneral" in develop Issue 3.

3. Making low-level Printing Manager calls.

The low-level Printing Manager routines, such as PrDrvrOpen, are obsolete and unsupported.

Solution: Never call the low-level routines.

2. Not using QuickDraw GX print dialogs if QuickDraw GX is present.

When you call the classic Printing Manager functions and QuickDraw GX is active, the user gets the old-style "compatibility dialogs," which lack many of the features that are provided in the QuickDraw GX print dialogs. There are two problems with this: the user doesn't have access to all of the QuickDraw GX features; and when some applications call the QuickDraw GX print dialog functions and others don't, two very different printing experiences are presented to the user.

Solution: Call the QuickDraw GX print dialog functions in your print loop if QuickDraw GX is present. For help, see the article "Adding QuickDraw GX Printing to QuickDraw Applications" in develop Issue 19. The complete documentation can be found in Inside Macintosh: QuickDraw GX Printing.

1. Adding printing to your application last.

Four years later, this is still the number-one printing crime. A lot of developers leave printing until near the end of the product development cycle. When problems are encountered, Developer Technical Support gets messages like: "My application can't print, and I've got to ship today. Please answer as soon as possible."

Solution: Hook up your print loop as early as possible. As you add each new feature to your application, print a page or two. Make sure that things are still working as expected. When you take this approach, any features that cause printing problems get noticed early, and you'll have time to fix them.

A CLOSING NOTE

If you're committing any of the crimes on this list, your customers are probably seeing things they don't like when they print. This list is also far from comprehensive, as people continue to find new and unique ways to abuse the Macintosh print architecture.

Looking ahead, printing will be changing in a big way. Mac OS 8 will use QuickDraw GX as the printing model. As changes occur, there will be Technotes, develop articles, and other sources of information. So keep your eyes open, and remember, don't commit too many printing crimes. Crime doesn't pay.

DAVE POLASCHEK supports printing and font-related issues in Apple's Developer Technical Support group. Dave was last seen wandering the halls muttering, "This will all be better in Mac OS 8" and laughing maniacally.*

Thanks to Pete "Luke" Alexander, Paul Danbold, Dave Hersey, and Jim Zandee for reviewing this column.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

WebSnapperPro 2.0.5 - $20.00
WebSnapperPro lets you capture full web pages exactly as they appear in your browser, with a single mouse click, without the need to "stitch" or cut-and-paste. Save the page as an image file or as... Read more
Cocktail 11.3.1 - General maintenance an...
Cocktail is a general purpose utility for macOS that lets you clean, repair and optimize your Mac. It is a powerful digital toolset that helps hundreds of thousands of Mac users around the world get... Read more
Fantastical 2.4.6 - Create calendar even...
Fantastical 2 is the Mac calendar you'll actually enjoy using. Creating an event with Fantastical is quick, easy, and fun: Open Fantastical with a single click or keystroke Type in your event... Read more
Fantastical 2.4.6 - Create calendar even...
Fantastical 2 is the Mac calendar you'll actually enjoy using. Creating an event with Fantastical is quick, easy, and fun: Open Fantastical with a single click or keystroke Type in your event... Read more
Cocktail 11.3.1 - General maintenance an...
Cocktail is a general purpose utility for macOS that lets you clean, repair and optimize your Mac. It is a powerful digital toolset that helps hundreds of thousands of Mac users around the world get... Read more
WebSnapperPro 2.0.5 - $20.00
WebSnapperPro lets you capture full web pages exactly as they appear in your browser, with a single mouse click, without the need to "stitch" or cut-and-paste. Save the page as an image file or as... Read more
VOX 3.2.1 - Music player that supports m...
VOX just sounds better! The beauty is in its simplicity, yet behind the minimal exterior lies a powerful music player with a ton of features and support for all audio formats you should ever need.... Read more
Evernote 7.0 - Create searchable notes a...
Evernote allows you to easily capture information in any environment using whatever device or platform you find most convenient, and makes this information accessible and searchable at anytime, from... Read more
Hopper Disassembler 4.3.16- - Binary dis...
Hopper Disassembler is a binary disassembler, decompiler, and debugger for 32- and 64-bit executables. It will let you disassemble any binary you want, and provide you all the information about its... Read more
VOX 3.2.1 - Music player that supports m...
VOX just sounds better! The beauty is in its simplicity, yet behind the minimal exterior lies a powerful music player with a ton of features and support for all audio formats you should ever need.... Read more

Latest Forum Discussions

See All

Our top 5 characters from casual RPG Cre...
Creature Quest definitely lives up to its name with a host of collectible creatures based on fantasy tales and world mythologies. To celebrate Creature Quest’s first birthday, we’re going to lay out what we think are the five best characters in the... | Read more »
Around the Empire: What have you missed...
Did you know that Steel Media has a whole swathe of other sites dedicated to all aspects of mobile gaming? Sure you'll get the very best iPhone news, reviews, and opinions right here at 148Apps, but we don't want you missing out on a single piece... | Read more »
All the best games on sale for iPhone an...
Oh hi there, and welcome to our round-up of the best games that are currently on sale for iPhone and iPad. You thought I didn't see you there, did you, skulking behind the bushes? Trust me though, the bushes aren't where the best deals are. The... | Read more »
The Battle of Polytopia Guide - How to H...
A new update just released for The Battle of Polytopia (formerly Super Tribes), which introduces online multiplayer. For all the fans of Midjiwan’s lite take on Civilization, this is certainly welcome news, but playing online isn’t as easy and... | Read more »
Here are the very best mobile games to p...
It's Valentine's Day! Did you get loads of cards and chocolates and other tacky, simple expressions of human affection? Did you send out tat because you find it almost impossible to express emotion unless there's a section dedicated to it at your... | Read more »
Florence (Games)
Florence 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Florence is an interactive storybook from the award-winning lead designer of Monument Valley about the heart-racing highs and... | Read more »
Purrfect Date (Games)
Purrfect Date 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Cats are a lil’ like marmite. Either you absolutely head-over-heels love’ em, or… nahhh, who are we kidding?! Everyone... | Read more »
More monsters to collect and evolve in C...
A laid-back mix of RPG and TCG, Creature Quest is all about building your deck, evolving your creatures and winning in battle. It’s the creation of VC Mobile, set up by Might and Magic producer Jon Van Caneghem. There are elements of that classic... | Read more »
Check out this awesome hands-on with the...
Well, PlayerUnknown's Battlegrounds has come out on mobile. This isn't a clone, this isn't a riff on the battleroyale mechanics of the game, it's the official mobile port by Tencent. But there's a little bit of a hitch. [Read more] | Read more »
Hostage Negotiator (Entertainment)
Hostage Negotiator 1.1.0 Device: iOS Universal Category: Entertainment Price: $3.99, Version: 1.1.0 (iTunes) Description: Official app of the board game by AJ Porfirio and Van Ryder Games. In Hostage Negotiator, you play the part of... | Read more »

Price Scanner via MacPrices.net

13″ 3.1GHz/256GB Silver Touch Bar MacBook Pro...
Amazon has the Silver 13″ 3.1GHz/256GB Touch Bar MacBook Pro (MPXX2LL/A) on sale for $1649.99 including free shipping. Their price is $150 off MSRP, and it’s the lowest price available for a new 13″... Read more
Saturday Sale: Amazon offers 13″ 1.8GHz/256GB...
Amazon has the 13″ 1.8GHz/256B Apple MacBook Air on sale today for $250 off MSRP including free shipping: – 13″ 1.8GHz/256GB MacBook Air (MQD42LL/A): $949.99, $250 off MSRP Their price is the lowest... Read more
Roundup of Apple Certified Refurbished 12″ Ma...
Apple has Certified Refurbished 2017 12″ Retina MacBooks available for $200-$240 off the cost of new models. Apple will include a standard one-year warranty with each MacBook, and shipping is free.... Read more
Apple offers Certified Refurbished 10″ and 12...
Apple is now offering Certified Refurbished 2017 10″ and 12″ iPad Pros for $100-$190 off MSRP, depending on the model. An Apple one-year warranty is included with each model, and shipping is free: –... Read more
Apple Canada offers Certified Refurbished Mac...
 Canadian shoppers can save up to $560 on the purchase of a 2017 current-generation MacBook Pro, MacBook, or MacBook Air with Certified Refurbished models at Apple Canada. Apple’s refurbished prices... Read more
Sale! 13″ MacBook Airs for up to $180 off MSR...
B&H Photo has 13″ MacBook Airs on sale for $50-$120 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 13″ 1.8GHz/128GB MacBook Air (MQD32LL/A): $899, $... Read more
Sale! New 8-core iMac Pro for $4799, $200 off...
Adorama has the 8-core iMac Pro on sale for $4799 including free shipping plus NY & NJ sales tax only. Their price is $200 off MSRP, and it’s the currently lowest price available for an iMac Pro. Read more
Sale! Walmart lowers prices even more on 9″ i...
Walmart has lowered their sale price on 9.7″ Apple iPads to $80 off MSRP for a limited time. Sale prices are for online orders only, in-store prices may vary: – 9″ 32GB iPad: $249.99 $80 off – 9″... Read more
Roundup of 13″ MacBook Pro sales, models avai...
B&H Photo has 13″ MacBook Pros on sale for up to $200 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only. Their prices are the lowest available for these... Read more
Roundup of 15″ MacBook Pros sale, models up t...
B&H Photo has 15″ MacBook Pros on sale for up to $200 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 15″ 2.8GHz Touch Bar MacBook Pro Space Gray (... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Solutions Consultant - Apple (United...
# Apple Solutions Consultant Job Number: 113501424 Norman, Oklahoma, United States Posted: 15-Feb-2018 Weekly Hours: 40.00 **Job Summary** Are you passionate about Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.