Sorry to be so late to the party.

What Ken suggested will work. But generally, watermarks, header, and footers 
are drawn via your own -drawPageBorderWithSize: method.

http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Printing/Tasks/PaginatingViews.html%23//apple_ref/doc/uid/20000912-BBCHHAHI

-raleigh

On Jan 15, 2011, at 1:18 PM, Ken Ferry wrote:

> Hi Olivier,
> 
> Unless I misread this, this section cannot be doing anything helpful:
> 
> NSImageView *tempIm = [[NSImageView alloc] initWithFrame:frontRect];
>> [tempIm setImage:[cusThumbFront image]];
>> 
>> NSData* theData = [tempIm dataWithPDFInsideRect:[tempIm bounds]];
>> NSPDFImageRep* pdfRep = [NSPDFImageRep imageRepWithData:theData];
>> 
>> // Create a new image to hold the PDF representation.
>> NSImage* pdfImage = [[NSImage alloc] initWithSize:IMG_SIZE];
>> [pdfImage addRepresentation:pdfRep];
> 
> 
> 
> Have you tried just using [cusThumbFront image] instead of going through
> this?  The system cannot create data where there isn't any, so the pdfImage
> cannot contain any data that wasn't already in the cusThumbFrontImage.
> 
> Okay, that aside, it happens I haven't implemented printing before, so
> forgive me if it turns out this is a non-standard way to do things.
> 
> It is the subview hierarchy that is printed.  If you want to put a watermark
> on top of an image, have a view that draws the base image and then draws the
> watermark image.  Or, make a subview of the view that draws the base that
> draws the watermark.
> 
> It is possible to produce an NSImage that has the watermark and still has
> all the quality available in the original, I just suspect it isn't the most
> straightforward way to do what you'd like to here.
> 
> The way you'd make such an image is to subclass NSImageRep.  Subclassing
> NSImageRep is pretty much the same as subclassing NSView.  Where in NSView
> you override drawRect:, in NSImageRep you override -draw.  The main
> difference between an image and a view is in the guarantees on how they
> scale.  If you stretch a button horizontally, the text doesn't stretch out,
> it stays centered.  An image scales… like an image (i.e. linearly).
> 
> So here's how you might make an NSImageRep that drew a base image and an
> overlay without rasterizing anything, even though I think this isn't the
> best way to solve your problem.
> 
> @interface CompositeImageRep : NSImageRep {
> 
>    NSImage *_baseImage;
> 
>    NSImage *_overlayImage;
> 
> 
> 
>    NSRect _overlayFrame;
> 
> }
> 
> 
> - (id)initWithBaseImage:(NSImage *)baseImage
> overlayImage:(NSImage*)overlayImage overlayFrame:(
> NSRect)overlayFrame;
> 
> 
> @property (readonly) NSImage *baseImage;
> 
> @property (readonly) NSImage *overlayImage;
> 
> @property (readonly) NSRect overlayFrame;
> 
> 
> @end
> 
> @implementation CompositeImageRep
> 
> 
> - (id)initWithBaseImage:(NSImage *)baseImage
> overlayImage:(NSImage*)overlayImage overlayFrame:(
> NSRect)overlayFrame {
> 
>    NSParameterAssert(baseImage != nil);
> 
> 
> 
>    self = [super init];
> 
>    if (self) {
> 
>        {
> 
>            _baseImage = [baseImage retain];
> 
>            _overlayImage = [overlayImage retain];
> 
>            _overlayFrame = overlayFrame;
> 
> 
>            [self setSize:[baseImage size]];
> 
>        }
> 
>    }
> 
> 
> 
>    return self;
> 
> }
> 
> 
> -(void)dealloc {
> 
>    [_baseImage release];
> 
>    [_overlayImage release];
> 
>    [super dealloc];
> 
> }
> 
> 
> 
> - (BOOL)draw {
> 
>    NSRect bounds = (NSRect){NSZeroPoint, [self size]};
> 
> 
> 
>    [_baseImage drawInRect:bounds fromRect:NSZeroRect operation:
> NSCompositeSourceOver fraction:1.0];
> 
>    [_overlayImage drawInRect:_overlayFrame fromRect:NSZeroRect operation:
> NSCompositeSourceOver fraction:1.0];
> 
>    return YES;
> 
> }
> 
> 
> - (id)copyWithZone:(NSZone *)zone {
> 
>    CompositeImageRep *rep = [super copyWithZone:zone];
> 
>    // careful - superclass uses NSCopyObject. :-(
> 
>    rep->_baseImage = [_baseImage retain];
> 
>    rep->_overlayImage = [_baseImage retain];
> 
>    rep->_overlayFrame = _overlayFrame;
> 
>    return rep;
> 
> }
> 
> 
> @synthesize baseImage=_baseImage, overlayImage=_overlayImage,
> overlayFrame=_overlayFrame;
> 
> 
> @end
> 
> 
> 
> On Tue, Jan 11, 2011 at 7:57 AM, Olivier Palliere <
> oliv...@sunprotectingfactory.com> wrote:
> 
>> Hi Guys,
>> 
>> 
>> 
>> I'm working on an app for my personal use that needs to print images I drag
>> on an NSImageView to display a thumbnail.
>> 
>> 
>> 
>> Source images are about 500x500 at 300dpi for most.
>> 
>> 
>> 
>> When I want to print them, I use this snippet of code from Apple's
>> doc:
>> 
>> frontRect = NSMakeRect(0,0,500, 500);
>> 
>> 
>> 
>> NSImageView *tempIm = [[NSImageView alloc] initWithFrame:frontRect];
>> [tempIm setImage:[cusThumbFront image]];
>> 
>> NSData* theData = [tempIm dataWithPDFInsideRect:[tempIm bounds]];
>> NSPDFImageRep* pdfRep = [NSPDFImageRep imageRepWithData:theData];
>> 
>> // Create a new image to hold the PDF representation.
>> NSImage* pdfImage = [[NSImage alloc] initWithSize:IMG_SIZE];
>> [pdfImage addRepresentation:pdfRep];
>> 
>> 
>> 
>> When I add this image to a NSImageView and give it to a printOperation, it
>> is printed crystal clear with the right resolution.
>> 
>> 
>> 
>> If I try however, to draw this image in a new one to add my borders like
>> this:
>> 
>> 
>> [compositeImage lockFocus];
>> [pdfRep drawInRect:frontRect fromRect:NSZeroRect
>>                        operation:NSCompositeSourceOver
>>                         fraction:1.0];
>> 
>> fpath = [NSBezierPath bezierPathWithRect:frontRect];
>> [fpath setLineWidth:1];
>> [[NSColor blackColor] set];
>> [fpath stroke];
>> [compositeImage unlockFocus];
>> 
>> 
>> 
>> (I tried to drawInRect both the PDFImageRep or the NSImage directly with
>> the same failed results)
>> 
>> 
>> 
>> The resulting image looses the printing resolution and the printed image
>> is blurry. I read similar posts that explains that
>> lockFocus/unlockFocus rasterizes the image, and that I should use PDFKit
>> but the doc on that one is sparse (to me at least). I also found some
>> post indicating I should use bestRepresentationForDevice but this method
>> is deprecated in 10.6 which is my target system.
>> 
>> 
>> 
>> 
>> 
>> What would be the best way to have my high res picture print with my
>> watermark on it?
>> 
>> 
>> 
>> I know from my unsuccessful searches for the past weeks that this theme
>> has been addressed several times but I just can't seem to find an easy
>> answer to my problem.
>> 
>> 
>> 
>> Many thanks for your help,
>> 
>> Olivier./.
>> 
>> _______________________________________________
>> 
>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>> 
>> 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/kenferry%40gmail.com
>> 
>> This email sent to kenfe...@gmail.com
>> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> 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/ledet%40apple.com
> 
> This email sent to le...@apple.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to