2013-05-28 3 views
-1

Я хочу сохранить свое изображение в формате PDF в каталоге документа. Пожалуйста, предложите мне сохранить формат. Я знаю только формат сохранения PNG и JPEG в iOS.Как сохранить UIImage в формате PDF в iOS?

+1

Попробуйте следующие два варианта: - http://stackoverflow.com/a/2445451/942966 - http://stackoverflow.com/a/3880883/942966 – Roshit

ответ

2

Сначала мы вычисляем размер страницы PDF. В зависимости от размера изображения и разрешения, мы хотим нарисовать изображение, размер страницы вычисляется следующим образом (для гибкости различных горизонтальных и вертикальных разрешений поддерживаются):

double pageWidth = image.size.width * image.scale * 72/horzRes; 
double pageHeight = image.size.height * image.scale * 72/vertRes; 

Теперь мы готовы создать PDF файл. Он может быть создан непосредственно на диске или в памяти. Для гибкости создадим его в памяти.

NSMutableData *pdfFile = [[NSMutableData alloc] init]; 
CGDataConsumerRef pdfConsumer = 
    CGDataConsumerCreateWithCFData((CFMutableDataRef)pdfFile); 
// The page size matches the image, no white borders. 
CGRect mediaBox = CGRectMake(0, 0, pageWidth, pageHeight); 
CGContextRef pdfContext = CGPDFContextCreate(pdfConsumer, &mediaBox, NULL); 

создается контекст PDF, теперь мы можем выполнить преобразование:

CGContextBeginPage(pdfContext, &mediaBox); 
CGContextDrawImage(pdfContext, mediaBox, [image CGImage]); 
CGContextEndPage(pdfContext); 

работа сделана, завершить файл PDF и освободить используемые объекты.

CGContextRelease (pdfContext); CGDataConsumerRelease (pdfConsumer);

PDF-файл теперь доступен в переменной pdfFile. я поместил все выше код в convertImageToPDF: withHorizontalResolution: verticalResolution: статический метод в служебном классе PDFImageConverter, он может быть использован как это:

NSData *pdfData = [PDFImageConverter convertImageToPDF: image 
    withHorizontalResolution: 300 verticalResolution: 300]; 
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents/image.pdf"]; 
[pdfData writeToFile:path atomically:NO]; 

Иногда необходимо преобразовать изображение в формат PDF и использовать предопределенный размер страницы, например Letter или A4. Также для изображения может быть указан максимальный ограничивающий прямоугольник, поэтому он помещается в определенную позицию на странице и не выходит из страницы. В этой ситуации размер изображения должен быть отрегулирован (увеличено разрешение), чтобы изображение соответствовало данному прямоугольнику.

double imageWidth = image.size.width * image.scale * 72/resolution; 
double imageHeight = image.size.height * image.scale * 72/resolution; 

double sx = imageWidth/boundsRect.size.width; 
double sy = imageHeight/boundsRect.size.height; 

// At least one image edge is larger than maxBoundsRect, reduce its size. 
if ((sx > 1) || (sy > 1)) { 
    double maxScale = sx > sy ? sx : sy; 
    imageWidth = imageWidth/maxScale; 
    imageHeight = imageHeight/maxScale; 
} 


// Put the image in the top left corner of the bounding rectangle 
CGRect imageBox = CGRectMake(
    boundsRect.origin.x, boundsRect.origin.y + boundsRect.size.height - imageHeight, 
    imageWidth, imageHeight); 

Имея последнюю коробку, изображение может быть преобразовано в PDF с использованием кода в первой половине статьи. Код для нового способа преобразования помещается в convertImageToPDF: withResolution: maxBoundsRect: PAGESIZE: статический метод в служебный класс PDFImageConverter, он используется так:

CGSize pageSize = CGSizeMake(612, 792); 
CGRect imageBoundsRect = CGRectMake(50, 50, 512, 692); 

NSData *pdfData = [PDFImageConverter convertImageToPDF: image 
    withResolution: 300 maxBoundsRect: imageBoundsRect pageSize: pageSize]; 

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents/image.pdf"]; 
[pdfData writeToFile:path atomically:NO]; 

Также вы можете загрузить исходный код form Here.

0

Вы можете использовать этот учебник convert-an-image-to-pdf-on-the-iphone-and-ipad

Затем сохраните PDF-файл в каталоге документов с помощью:

//******** Method To Copy Image to Directory ******** // 

- (void) copyFileToDocuments:(NSString *)fileURL 
{ 
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

    NSString *destinationPath = [documentsDirectory stringByAppendingFormat:@"/convertedImage.pdf"]; 
    NSError *error; 
    [[NSFileManager defaultManager] copyItemAtURL:[NSURL fileURLWithPath:fileURL] toURL:[NSURL fileURLWithPath:destinationPath] error:&error]; 

} 

затем вызвать

[self copyFileToDocuments:moviePath]; 

Надеется, что это помогает.