У меня есть фото, снятое камерой, и это изображение размером 720x720 пикселей. Мне нужно создать PDF-файл, содержащий эту картинку. Когда я печатаю этот PDF с разрешением 600 dpi, мне нужно, чтобы изображение было ровно в 2х2 дюйма (без проблем, если изображение должно немного увеличиться).Как создать PDF-файл, который должен печатать с определенным размером в дюймах?
Я создал контекст PDF и записать это так:
CGFloat ratio = 600.0f/72.0f;
CGFloat contextWidth = floorf(imageWidth * ratio);
CGFloat contextHeight = floorf(imageHeight * ratio);
CGSize PDFContextSize = CGSizeMake(contextWidth, contextHeight);
CGRect mediaBox = CGRectZero;
mediaBox.size = PDFContextSize;
CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &mediaBox, auxillaryInformation);
CGImageRef imageRef = [image CGImage];
CGPDFContextBeginPage(pdfContext, NULL);
CGContextDrawImage(pdfContext, CGRectMake(0.0f, 0.0f, mediaBox.size.width, mediaBox.size.height), imageRef);
CGPDFContextEndPage(pdfContext);
CGPDFContextClose(pdfContext);
CGContextRelease(pdfContext);
При печати в PDF, созданный этим кодом на 600 точек на дюйм печатное изображение имеет 2,4 х 2,4 дюйма, вместо 2 х 2 дюймов.
Любые идеи?
EDIT: Это код, который я использую для печати. Да, я устанавливаю масштабный коэффициент равным 1, чтобы предотвратить масштабирование изображения.
PDFDocument *pdfDoc = [[PDFDocument alloc] initWithData:pdfData];
NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];
NSRect printRect = [printInfo imageablePageBounds];
PDFPage *firstPage = [pdfDoc pageAtIndex:0];
NSRect bounds = [firstPage boundsForBox:kPDFDisplayBoxMediaBox];
NSSize pixelSize = bounds.size;
NSRect frame = NSMakeRect(0.0f, 0.0f, 0.0f, 0.0f);
frame.size = pixelSize;
PDFView *pdfView = [[PDFView alloc] initWithFrame:frame];
[pdfView setScaleFactor:1.0f];
[pdfView setDocument: pdfDoc];
[printInfo setTopMargin:verticalMargin];
[printInfo setBottomMargin:verticalMargin];
[printInfo setLeftMargin:horizontalMargin];
[printInfo setRightMargin:horizontalMargin];
[printInfo setHorizontalPagination:NSFitPagination];
[printInfo setVerticalPagination:NSFitPagination];
[printInfo setVerticallyCentered:YES];
[printInfo setHorizontallyCentered:YES];
[printInfo setScalingFactor:1.0f];
NSPrintOperation *myop = [NSPrintOperation printOperationWithView:pdfView printInfo:printInfo];
[myop runOperation];
изображение напечатано этим кодом 2.4x2.4 inches вместо 2x2 inches.
OP писал: «У меня есть фотография, сделанная камерой, а это изображение 720x720 пикселей» - эти пиксели не имеют собственного «размера». Какова бы ни была проблема OPs, она, конечно же, не перестает относиться к ним как к стандарту Windows, равному 1/96 дюйма для пикселей экрана. – CRD
Мой ответ не является окончательным ответом. Я просто хотел кое-что указать. Я не мог объяснить, почему изображение с разрешением 720 x 720 пикселей получается в формате 2.4 x 2.4 дюйма в формате PDF. Я также не знаю, говорит ли OP о напечатанном размере (возможно, масштабируется принтером) или о размере, о котором сообщает зритель. –
Я обновил вопрос с помощью кода, который я использую для печати PDF. – SpaceDog