Iphone 在iPad应用程序中从UIView创建pdf时出现的问题
我正在iPad应用程序中从UIView创建pdf。它的尺寸是768*2000。当我创建pdf时,它以相同的大小创建,并在一个页面上显示所有内容。所以,当我从iPad上打印它时,我面临着一个问题。我使用以下代码创建pdf:-Iphone 在iPad应用程序中从UIView创建pdf时出现的问题,iphone,ios,ipad,uiview,airprint,Iphone,Ios,Ipad,Uiview,Airprint,我正在iPad应用程序中从UIView创建pdf。它的尺寸是768*2000。当我创建pdf时,它以相同的大小创建,并在一个页面上显示所有内容。所以,当我从iPad上打印它时,我面临着一个问题。我使用以下代码创建pdf:- -(void)drawPdf:(UIView *)previewView{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, Y
-(void)drawPdf:(UIView *)previewView{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"Waypoint Data.pdf"];
//CGRect tempRect = CGRectMake(0, 0, 768, 1068);
CGContextRef pdfContext = [self createPDFContext:previewView.bounds path:(CFStringRef)writableDBPath];
CGContextBeginPage (pdfContext,nil); // 6
//turn PDF upsidedown
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformMakeTranslation(0, previewView.bounds.size.height);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
CGContextConcatCTM(pdfContext, transform);
//Draw view into PDF
[previewView.layer renderInContext:pdfContext];
CGContextEndPage (pdfContext);// 8
CGContextRelease (pdfContext);
}
//Create empty PDF context on iPhone for later randering in it
-(CGContextRef) createPDFContext:(CGRect)inMediaBox path:(CFStringRef) path{
CGContextRef myOutContext = NULL;
CFURLRef url;
url = CFURLCreateWithFileSystemPath (NULL, // 1
path,
kCFURLPOSIXPathStyle,
false);
if (url != NULL) {
myOutContext = CGPDFContextCreateWithURL (url,// 2
&inMediaBox, NULL);
CFRelease(url);// 3
}
return myOutContext;// 4
}
有谁能建议我如何减少pdf的大小,并且它有多个页面
提前感谢。请参阅“iOS绘图和打印指南”中的示例
基本上在清单4-1的代码示例中,他们有一个do-while循环,并注意它如何在循环中启动一个新的PDF页面:
在当前的方法中,您只调用了一个begin page方法,因此只有一个页面。请参阅“iOS绘图和打印指南”中的示例
基本上在清单4-1的代码示例中,他们有一个do-while循环,并注意它如何在循环中启动一个新的PDF页面:
在当前的方法中,您只调用了一个begin page方法,因此您只有一个页面。您需要为要创建的每个新PDF页面调用UIGraphicsBeginPDPage。假设您有一个可变高度的UIView,下面是如何在运行时将其分解为所需的任意多个PDF页面:
NSInteger pageHeight = 792; // Standard page height - adjust as needed
NSInteger pageWidth = 612; // Standard page width - adjust as needed
/* CREATE PDF */
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, CGRectMake(0,0,pageWidth,pageHeight), nil);
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
for (int page=0; pageHeight * page < theView.frame.size.height; page++)
{
UIGraphicsBeginPDFPage();
CGContextTranslateCTM(pdfContext, 0, -pageHeight * page);
[theView.layer renderInContext:pdfContext];
}
UIGraphicsEndPDFContext();
NSInteger pageHeight=792;//标准页面高度-根据需要进行调整
NSInteger pageWidth=612;//标准页面宽度-根据需要进行调整
/*创建PDF*/
NSMutableData*pdfData=[NSMutableData];
UIGraphicsBeginPDFContextToData(pdfData,CGRectMake(0,0,pageWidth,pageHeight),nil);
CGContextRef pdfContext=UIGraphicsGetCurrentContext();
对于(int page=0;pageHeight*page
您需要为要创建的每个新PDF页面调用UIGraphicsBeginPDPage。假设您有一个可变高度的UIView,下面是如何在运行时将其分解为所需的任意多个PDF页面:
NSInteger pageHeight = 792; // Standard page height - adjust as needed
NSInteger pageWidth = 612; // Standard page width - adjust as needed
/* CREATE PDF */
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, CGRectMake(0,0,pageWidth,pageHeight), nil);
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
for (int page=0; pageHeight * page < theView.frame.size.height; page++)
{
UIGraphicsBeginPDFPage();
CGContextTranslateCTM(pdfContext, 0, -pageHeight * page);
[theView.layer renderInContext:pdfContext];
}
UIGraphicsEndPDFContext();
NSInteger pageHeight=792;//标准页面高度-根据需要进行调整
NSInteger pageWidth=612;//标准页面宽度-根据需要进行调整
/*创建PDF*/
NSMutableData*pdfData=[NSMutableData];
UIGraphicsBeginPDFContextToData(pdfData,CGRectMake(0,0,pageWidth,pageHeight),nil);
CGContextRef pdfContext=UIGraphicsGetCurrentContext();
对于(int page=0;pageHeight*page