Re: No-frills print to label printer help please
Re: No-frills print to label printer help please
- Subject: Re: No-frills print to label printer help please
- From: "Boaz Stuller" <email@hidden>
- Date: Sun, 25 May 2008 23:20:38 -0400
I wrote almost this exact same program about 2 years ago. Looking back at
the code, here's what I did:
1) To suppress the print dialog, I called [printOperation
setShowsPrintPanel:NO] between when I create the print operation and when I
call runOperation
2) To fit the label to the edges I used the
printOperationWithView:printInfo: variant with a custom print info, and used
the print info fixer function below to make it print landscape and fit to
the margins.:
void FixPrintInfo(NSPrintInfo* thePInfo)
{
[thePInfo setOrientation:NSLandscapeOrientation];
[thePInfo setVerticallyCentered:YES];
[thePInfo setVerticalPagination:NSFitPagination];
[thePInfo setHorizontallyCentered:YES];
[thePInfo setHorizontalPagination:NSFitPagination];
NSRect pageBounds = [thePInfo imageablePageBounds];
NSSize pageSize = [thePInfo paperSize];
float topBottomMargin = MAX(MAX(NSMinY(pageBounds), pageSize.height -
NSMaxY(pageBounds)), 0);
float leftRightMargin = MAX(MAX(NSMinX(pageBounds), pageSize.width -
NSMaxX(pageBounds)), 0);
[thePInfo setBottomMargin:topBottomMargin];
[thePInfo setLeftMargin:leftRightMargin];
[thePInfo setTopMargin:topBottomMargin];
[thePInfo setRightMargin:leftRightMargin];
}
The printInfo supports the NSCoding protocol so I just archived it as data
after fixing it up and saved it as a preference. That way you don't need to
save the printer or the paper size or any of that separately; you just load
the data from prefs, unarchive it to get the NSPrintInfo object and pass
that to the printoperation setup routine.
One other thing I did which might help is, instead of drawing strings into a
view manually, I set up a custom view in Interface builder with text fields
and used bindings to fill in the information. That way I could use IB to
layout my label, and still just have a custom view to pass to the print
operation when it was time to print.
Best wishes,
Bo
PS Keep in mind that the printer's resolution is generally irrelevant as one
inch is considered 72 point
On Sun, May 25, 2008 at 1:42 PM, Rick Mann <email@hidden> wrote:
> I'm writing a small app to print labels. Currently I'm targeting a Dymo
> LabelWriter 400 Turbo (a little USB printer) using a small 2.3" X 4" label.
> I created a view in my app that uses that aspect ratio (I have yet to find
> out the printer's actual resolution) at about 315 X 182. I draw a number of
> NSStrings in the view at different sizes and fonts.
>
> My first pass at a print routing just calls
>
> [[NSPrintOperation printOperationWithView: mLabelView]
> runOperation];
>
> and it prints, but presents the print dialog and shows a tiny version of my
> view in the center of the page with the wrong orientation (if I select
> "scale to fit paper size" in the Paper Handling section of the print dialog;
> if I don't select "Scale to fit paper size," it shoots out one blank label).
>
> What I want is for my view to scale to fit the entire label, rotated to
> print wide, and i don't want the user to have to deal with the print dialog.
> There will be hundreds of individual labels being printed, but all in the
> same fashion. (There will be a pref for setting the printer/label size one
> time.)
>
> I'm still reading through the printing docs, but maybe someone can point me
> to the specific things I need to look at to do this right? I'm sure there
> are many ways. For example, I could get the page size from the print info
> record, make the view that size, rotate my text and draw. But it seems like
> there should be an easier way to have my view rotated and scaled to fit the
> page (programmatically).
>
> TIA,
> --
> Rick
>
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden