Проблема при создании pdf из UIView в приложении для iPad

Я создаю PDF-файл из UIView в своем приложении для iPad. Он имеет размер 768 * 2000. Когда я создаю pdf, он создается с таким же размером и показывает все содержимое на одной странице. Поэтому я сталкиваюсь с проблемой, когда печатаю с iPad. я использую следующий код для создания pdf: -

-(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, и он имеет несколько страниц?

Заранее спасибо.


person Deepika    schedule 20.05.2011    source источник


Ответы (2)


См. пример в «Руководстве по рисованию и печати для iOS».

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

По сути, в примере кода в листинге 4-1 у них есть цикл do while, и они обращают внимание на то, как он запускает новую страницу PDF в цикле:

...

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

...

В вашем текущем методе вы только один раз вызвали один из методов начальной страницы, поэтому у вас всегда будет только одна страница.

person Albert Tong    schedule 30.05.2011

Вам нужно вызывать UIGraphicsBeginPDFPage для каждой новой страницы PDF, которую вы хотите создать. Предполагая, что у вас есть 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();
person etayluz    schedule 08.09.2014