Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何生成必须以特定尺寸(英寸)打印的PDF?_Ios_Macos_Cocoa_Pdf Generation - Fatal编程技术网

Ios 如何生成必须以特定尺寸(英寸)打印的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);

我用相机拍了一张照片,这张照片是720x720像素。 我需要生成包含此图片的PDF。 当我以600 dpi打印此PDF时,我需要图片精确到2x2英寸(如果图像必须放大一点,则没有问题)

我创建了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);
当我以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