2016-10-10 3 views
1

У меня есть фото, снятое камерой, и это изображение размером 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.

ответ

2

PDF, который измеряет 2 x 2 дюйма, представляет собой PDF, который измеряет 144 на 144 пользовательских устройства (при условии, что используется значение по умолчанию для записи UserUnit).

В вашей математике, 720 х 720 изображение не 144 х 144 пользовательских единиц:

720 * 600/72 = 6000 
6000/72 = 83.333 

Вы смешивания всех видов измерений. По умолчанию пользовательские единицы эквивалентны точкам: 1 дюйм = 72 пользовательских единицы = 72 балла. Но вы также включать пиксели и пиксели не являются точками: Convert Pixels to Points

points = pixels * 72/96 

Также вы упомянули, что вы «печать», но печать часто меняет разрешение, если вы забыли установить не масштабирование в нет масштабирования. См How can I override PDF print dialog settings with iTextSharp, а также Chrome: How to print PDF with original size (100%, no scaling/shrinking)

Короче говоря: вы делаете несколько предположений, которые не могут быть правильными, например, в предположении, что пиксели идентичны единицам пользователей, а также предположения, что принтеры уважающих размеры в PDF документе. Пожалуйста, дважды проверьте эти предположения, и если проблема не устранена, уточните свой вопрос.

+0

OP писал: «У меня есть фотография, сделанная камерой, а это изображение 720x720 пикселей» - эти пиксели не имеют собственного «размера». Какова бы ни была проблема OPs, она, конечно же, не перестает относиться к ним как к стандарту Windows, равному 1/96 дюйма для пикселей экрана. – CRD

+0

Мой ответ не является окончательным ответом. Я просто хотел кое-что указать. Я не мог объяснить, почему изображение с разрешением 720 x 720 пикселей получается в формате 2.4 x 2.4 дюйма в формате PDF. Я также не знаю, говорит ли OP о напечатанном размере (возможно, масштабируется принтером) или о размере, о котором сообщает зритель. –

+0

Я обновил вопрос с помощью кода, который я использую для печати PDF. – SpaceDog

 Смежные вопросы

  • Нет связанных вопросов^_^