gpt4 book ai didi

ios - 如何生成必须以特定尺寸(以英寸为单位)打印的 PDF?

转载 作者:行者123 更新时间:2023-12-03 17:01:39 24 4
gpt4 key购买 nike

我有一张用相机拍摄的照片,这张照片的像素为 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 用户单位(假设使用 UserUnit 条目的默认值)。

在您的数学中,720 x 720 图像不是 144 x 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 文档尺寸的假设。请仔细检查这些假设,如果问题仍然存在,请澄清您的问题。

关于ios - 如何生成必须以特定尺寸(以英寸为单位)打印的 PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39967395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com