2011-05-20 3 views
2

Je crée un pdf à partir d'un UIView dans mon application iPad. Il a la taille 768 * 2000. Quand je crée pdf alors il crée avec la même taille et montre tout le contenu sur une page. Donc, je suis confronté à un problème lorsque je l'imprime à partir de l'iPad. je suis en utilisant le code suivant pour la création de pdf: -Problème de création de pdf depuis UIView dans iPad Application

-(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  
} 

Quelqu'un peut-il me suggérer comment puis-je réduire la taille pdf et il a plusieurs pages?

Merci d'avance.

+0

Avez-vous trouvé la solution? –

Répondre

0

Voir exemple dans le

https://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/GeneratingPDF/GeneratingPDF.html#//apple_ref/doc/uid/TP40010156-CH10-SW1

En gros, dans l'exemple de code 4-1 « Guide de dessin et d'impression pour iOS », ils ont un do while et prendre remarquez comment il commence un nouveau PDF page dans la boucle:

...

// Mark the beginning of a new page. 
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil); 

...

Dans votre méthode actuelle, vous n'avez appelé qu'une seule fois l'une des méthodes de début de page, c'est pourquoi vous n'aurez qu'une seule page.

0

Vous devez appeler UIGraphicsBeginPDFPage pour chaque nouvelle page PDF que vous souhaitez créer. En supposant que vous avez un UIView de hauteur variable, voici comment vous le décomposer en autant de pages PDF que nécessaire pendant l'exécution:

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();