Can Ubercart be adapted to print a letter? When an order is received through Ubercart, the details can be viewed and printed, but can the print order option be expanded to do more? When I ship product, I like to include a personalised letter in addition to the standard order form.

Can I craft such a letter, so that it prints out after the order page, showing letterhead, date, customers address, and separate envelope?
Yes. In D7 there's a 2 step process to this.


Copy ubercart/uc_order/uc_order-invoice-page.tpl.php to your current theme directory and flush your cache; this will let you create your own custom version of the the order template. 
Add this snippet to your new template after &lt;?php print $content; ?&gt;; this will add some markup/CSS that will be rendered as a new page when treated as a printable document.

&lt;?php /* Print only from administration page*/ ?&gt;
&lt;?php if(preg_match('/admin\\/store\\/orders\\/\\d+\\/invoice\\/print/', current_path()) == 1): ?&gt;
  &lt;div style="page-break-after: always;"&gt;&lt;/div&gt;
  &lt;div id="letter-region"&gt;
    &lt;p&gt;NEW PAGE&lt;/p&gt;
  &lt;/div&gt;
&lt;?php endif; ?&gt;



If you're running a D6 site, it's a little more of pain (D6 UC ignores some theming conventions). 


You'll need to copy ubercart/uc_order/templates/uc_order-customer.tpl.php to ubercart/uc_order/templates/uc_order-custom.tpl.php
Have a module define a new custom template via hook_uc_invoice_templates(): function MYMODULE_uc_invoice_templates() { return array('custom'); }
Set the new invoice in order setting page (admin/store/settings/orders/edit/basic).
Use the code in the above D7 example inside uc_order-custom.tpl.php. You'll have to modify since I don't think current_path() exists in D6. However, the same frontend logic still exists (add some extra markup in the template with CSS to generate a 2nd page). 


There might be a better way to do this, but I've not touched D6 UC templating in a long time.