Re: How does -drawPageBorderWithSize: place pageHeader?
Re: How does -drawPageBorderWithSize: place pageHeader?
- Subject: Re: How does -drawPageBorderWithSize: place pageHeader?
- From: Tom Bunch <email@hidden>
- Date: Wed, 12 Mar 2008 17:02:56 -0700
The astute reader will realize that I swapped the origin.y for the
header and the footer.
-Tom
On Mar 12, 2008, at 5:01 PM, Tom Bunch wrote:
Mike,
I've messed around with this and boy has it been a head scratcher.
Still haven't got it accounting properly for all combinations of
scale, print size, and margins.
The default implementation of drawPageBorderWithSize: seems to want
to print about 1/3 of the way from the margin to the edge of the
page without regard to for printable area.
Instead of using -[NSPrinter imageRectForPaper:], see if -
[NSPrintInfo imageablePageBounds] gives you what you're looking for.
Here's a little boost in code to get you part way done implementing
drawPageBorderWithSize:, but as I noted, it has bugs w/ various page
setup attributes. If you should happen to fix them, lemme know!
NSTextStorage *header, *footer;
// stick something useful in header & footer
NSRect pageRect = [self rectForPage:[[NSPrintOperation
currentOperation] currentPage]];
[header drawAtPoint:(NSPoint){pageRect.origin.x, pageRect.origin.y
+ [printInfo topMargin] / 3.0f}];
[footer drawAtPoint:(NSPoint){pageRect.origin.x, pageRect.origin.y
+ borderSize.height - [footer size].height - [printInfo
bottomMargin] / 3.0f}];
Trying to put a topLeftHeader and a topRightHeader into one
NSTextStorage using page with info and NSRightTabStops was kind of a
pain. I think if I do it again I'll just use separate text storages.
Hope this helps.
-Tom
On Mar 12, 2008, at 2:47 PM, Mike Wright wrote:
I have an app (Universal, compiled using XCode 2.5, running on an
Intel iMac, under Leopard) that lets the user set page margins when
printing. It also lets them specify the printing of headers and
footers.
The odd thing I'm seeing with this is that the placement of the
pageHeader string varies with the frame of the NSTextView subclass
that I'm printing.
When the view frame's origin.y is set to the default value of 72,
the left end of the pageHeader is about a quarter-inch in, and the
entire header string has about a quarter-inch of space above it.
That works fine with my printer.
As origin.y is reduced, the page header not only moves up--it also
expands the the left and right. With a topMargin of 14.4, the
header string has only about a sixteenth-inch of space to the left,
to the right, and above it. This moves it into the non-printable
margins of the paper.
I implemented -drawPageBorderWithSize:borderSize in my printing
view (just calling super), and borderSize is always the paper size,
regardless of any changes in the view's frame due to the margin
settings.
This width change looks like a bug to me, as does the vertical
position change. I can see no motivation for them, since all the
changes do is to push the header out of the printable area of the
paper. I've searched the documentation, but I don't see anything
about how the default method determines where to place the header.
(I tried explicitly reducing borderSize in -
drawPageBorderWithSize:borderSize, but the result is that the
header string still prints at the same left position--but with the
overall width of the string reduced, so that the date is moved to
the right by the amount that borderSize was reduced.)
Unless someone can explain why it's not a bug, I guess I'll report
it.
And, even if it is, should I go ahead and try writing my own -
drawPageBorderWithSize:borderSize--assuming that there won't be a
quick fix--or even any fix at all for Tiger?
I'm not sure how to approach that, since NSPrinter's -
imageRectForPaper:paperName is deprecated, with no replacement that
I can see. Is there some other way to find out where I should NOT
place the header and footer?
As it is, the default footer shows up in Preview, but is down in
the middle of the bottom margin for my printer, so it doesn't
actually print. I assume that this is because the built-in -
drawPageBorderWithSize:borderSize also has no way of determining
the printable area of a page. (I found a post asking about this
from 3 Nov 2005, but no replies.)
Thanks,
Mike Wright
http://www.idata3.com/
_______________________________________________
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