ios - 将 PDF 转换为一页 PDF 原因是 PDF 页面没有相同的页面高度

标签 ios objective-c pdf pdf-generation

<分区>

我有一个 PDF,我想将它缩小到一页。

这不起作用:

//pages
size_t pages = CGPDFDocumentGetNumberOfPages(document);
pageRect.size.height = pageRect.size.height*pages;
CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData(mutableData);
CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &pageRect, NULL);

CGPDFContextBeginPage(pdfContext, NULL);
for (int i =1; i<=pages; i++)
{
   CGPDFPageRef pageRef = CGPDFDocumentGetPage(document, i);
   CGContextDrawPDFPage(pdfContext, pageRef);
}
CGPDFContextEndPage(pdfContext);

最佳答案

您的代码在同一位置打印所有页面,一个在另一个之上。如果万一页面有明显的白色背景,那么您将只能看到最后一页。
解决方法是在页面绘制完成后用已经绘制的页面高度平移坐标系。
更新:这是完整的代码。它假定源文件中的所有页面都具有相同的大小和旋转:

NSURL *pdfURL = [[NSBundle mainBundle] URLForResource:@"source.pdf" withExtension:nil];
pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);

int pageCount = CGPDFDocumentGetNumberOfPages(pdf);
CGPDFPageRef pageRef = CGPDFDocumentGetPage(pdf, 1);
CGRect pageRect = CGPDFPageGetBoxRect(pageRef, kCGPDFMediaBox);
float pageHeight = pageRect.size.height;
pageRect.size.height = pageRect.size.height * pageCount;

NSMutableData* pdfData = [[NSMutableData alloc] init];
CGDataConsumerRef pdfConsumer = CGDataConsumerCreateWithCFData((CFMutableDataRef)pdfData);
CGContextRef pdfContext = CGPDFContextCreate(pdfConsumer, &pageRect, NULL);

CGPDFContextBeginPage(pdfContext, NULL);
CGContextTranslateCTM(pdfContext, 0, pageRect.size.height);
for (int i = 1; i <= pageCount; i++) {
    pageRef = CGPDFDocumentGetPage(pdf, i);
    CGContextTranslateCTM(pdfContext, 0, -pageHeight);
    CGContextDrawPDFPage(pdfContext, pageRef);
}
CGPDFContextEndPage(pdfContext);
CGPDFContextClose(pdfContext);

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfFile = [documentsDirectory stringByAppendingPathComponent:@"destination.pdf"];

[pdfData writeToFile: pdfFile atomically: NO];
[pdfData release];

关于ios - 将 PDF 转换为一页 PDF 原因是 PDF 页面没有相同的页面高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17025701/

相关文章:

ios - 阻塞直到 reverseGeocode 返回

ios - 在父级中查找某种类型的 View

ios - GCD中线程和队列是什么关系?

ios - 将 UIInterfaceOrientation 更改通知其他 viewController 的最佳方式

hadoop - 如何解析多个pdf转换成hadoop(例子)

reactjs - 使用react-pdf-js从Base64数据加载PDF

r - 当我将 R 图保存为 pdf 时,轴文本 "℃"变成点 "..."。为什么?我使用的是Windows平台和福昕阅读器

ios - 如何设置 UIButton 背景颜色 forState : UIControlState. 在 Swift 中突出显示

ios - 将多个 View 连接到一个 segue 的优雅方式

ios - 控制台数据问题