使用多页将多个图像转换为pdf

时间:2012-05-07 18:07:02

标签: ios pdf-generation

在我的应用程序中,有一个带有HTML内容的WebView。 WebView中的内容为3页。 现在我想转换PDF格式的WebView内容。我从WebView内容创建了3个图像。现在我想用这3张图片创建pdf。每张图片应该是一页PDF。但它导致单页图像。因此,当我打印时,内容被切断。 我正在使用它,

CGSize pageSize = CGSizeMake(612, 2324);
NSString *fileName = @"Demo.pdf";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];

UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);

// Mark the beginning of a new page.
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil);

double currentHeight = 0.0;

for (int index = 1; index <= imageName ; index++)
{
    NSString *pngPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", index]];
    UIImage *pngImage = [UIImage imageWithContentsOfFile:pngPath];

    [pngImage drawInRect:CGRectMake(0, currentHeight, pageSize.width, pngImage.size.height)];        
    currentHeight += pngImage.size.height;
}

UIGraphicsEndPDFContext();

我在使用此代码时遇到了什么问题。

感谢

3 个答案:

答案 0 :(得分:0)

/*For call method*/

 [self createPdfWithName:@"sam" array:[NSArray arrayWithObjects:[UIImage imageNamed:@"01.png"],[UIImage imageNamed:@"02.png"], nil]];

/*Create New Pdf*/

- (NSString *)createPdfWithName: (NSString *)name array:(NSArray*)images
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docspath = [paths objectAtIndex:0];
    NSString *pdfFileName = [docspath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.pdf",name]];
    UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);
    for (int index = 0; index <[images count] ; index++)
    {
        UIImage *pngImage=[images objectAtIndex:index];;
        UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, (pngImage.size.width), (pngImage.size.height)), nil);
        [pngImage drawInRect:CGRectMake(0, 0, (pngImage.size.width), (pngImage.size.height))];
    }
    UIGraphicsEndPDFContext();
    return pdfFileName;
}

答案 1 :(得分:0)

func createPDFS(arrImages: [UIImage]) -> NSData? {

        var pageHeight = 0.0
        var pageWidth = 0.0

        for img in arrImages
        {
            pageHeight =  pageHeight+Double(img.size.height)

            if Double(img.size.width) > pageWidth
            {
                pageWidth = Double(img.size.width)
            }
        }

        let pdfData = NSMutableData()
        let pdfConsumer = CGDataConsumer(data: pdfData as CFMutableData)!

       var mediaBox = CGRect.init(x: 0, y: 0, width: pageWidth, height: pageHeight)

       let pdfContext = CGContext(consumer: pdfConsumer, mediaBox: &mediaBox, nil)!

        for img in arrImages
        {
            var mediaBox2 = CGRect.init(x: 0, y: 0, width: img.size.width, height: img.size.height)

                   pdfContext.beginPage(mediaBox: &mediaBox2)
            pdfContext.draw(img.cgImage!, in: CGRect.init(x: 0.0, y: 0, width: pageWidth, height: Double(img.size.height)))

              pdfContext.endPage()
        }

        return pdfData
    }

答案 2 :(得分:-1)

CGSize pageSize = CGSizeMake(612, 2324);
NSString *fileName = @"Demo.pdf";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];

UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);       

double currentHeight = 0.0;

for (int index = 1; index <= imageName ; index++)
{
    NSString *pngPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", index]];
    UIImage *pngImage = [UIImage imageWithContentsOfFile:pngPath];

// TODO: See Here
// Mark the beginning of a new page.
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pngImage.size.height), nil);

    [pngImage drawInRect:CGRectMake(0, currentHeight, pageSize.width, pngImage.size.height)];        
    //currentHeight += pngImage.size.height;
}

UIGraphicsEndPDFContext();