FROM : Tom Bunch
DATE : Thu Mar 13 01:02:56 2008
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_removed>)
>>
>> 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:
>> http://lists.apple.com/mailman/options/cocoa-dev/<email_removed>
>>
>> This email sent to <email_removed>
>>
>
DATE : Thu Mar 13 01:02:56 2008
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_removed>)
>>
>> 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:
>> http://lists.apple.com/mailman/options/cocoa-dev/<email_removed>
>>
>> This email sent to <email_removed>
>>
>
| Related mails | Author | Date |
|---|---|---|
| Mike Wright | Mar 12, 22:47 | |
| Tom Bunch | Mar 13, 01:01 | |
| Tom Bunch | Mar 13, 01:02 | |
| Mike Wright | Mar 13, 02:31 |






Cocoa mail archive

