Ios 如何生成必须以特定尺寸(英寸)打印的PDF?
我用相机拍了一张照片,这张照片是720x720像素。 我需要生成包含此图片的PDF。 当我以600 dpi打印此PDF时,我需要图片精确到2x2英寸(如果图像必须放大一点,则没有问题) 我创建了PDF上下文,并将其写入如下内容:Ios 如何生成必须以特定尺寸(英寸)打印的PDF?,ios,macos,cocoa,pdf-generation,Ios,Macos,Cocoa,Pdf Generation,我用相机拍了一张照片,这张照片是720x720像素。 我需要生成包含此图片的PDF。 当我以600 dpi打印此PDF时,我需要图片精确到2x2英寸(如果图像必须放大一点,则没有问题) 我创建了PDF上下文,并将其写入如下内容: CGFloat ratio = 600.0f/72.0f; CGFloat contextWidth = floorf(imageWidth * ratio); CGFloat contextHeight = floorf(imageHeight * ratio);
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);
当我以600 dpi打印此代码创建的PDF时,打印的图像有2.4 x 2.4英寸,而不是2 x 2英寸
有什么想法吗
编辑:这是我用于打印的代码。是的,我正在将比例因子设置为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英寸,而不是2x2英寸。测量为2 x 2英寸的PDF是测量为144 x 144用户单位的PDF(假设使用了
UserUnit
条目的默认值)
在数学中,720 x 720图像不是144 x 144个用户单位:
720 * 600 / 72 = 6000
6000 / 72 = 83.333
你在混合各种测量方法。默认情况下,用户单位等于点:1英寸=72用户单位=72点。但也涉及像素,像素不是点:
您还提到“打印”,但如果忘记将缩放设置为“无缩放”,打印通常会更改分辨率。也见
简言之:您做出了一些可能不正确的假设,例如像素与用户单位相同的假设,以及打印机尊重PDF文档尺寸的假设。请仔细检查这些假设,如果问题仍然存在,请澄清您的问题。OP写道“我有一张由相机拍摄的照片,这张照片是720x720像素”——这些像素没有固有的“大小”。不管OPs的问题是什么,它肯定不会把它们当作Windows默认的屏幕像素的1/96英寸。我的答案不是确定的答案。我只是想指出一些事情。我无法解释为什么720 x 720像素的图像会产生2.4 x 2.4英寸的PDF。我也不知道OP讨论的是打印尺寸(可能由打印机缩放)还是查看者报告的尺寸。我已经用我用来打印PDF的代码更新了这个问题。
points = pixels * 72 / 96