Я хочу сохранить свое изображение в формате PDF в каталоге документа. Пожалуйста, предложите мне сохранить формат. Я знаю только формат сохранения PNG и JPEG в iOS.Как сохранить UIImage в формате PDF в iOS?
ответ
Сначала мы вычисляем размер страницы 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.
Вы можете использовать этот учебник 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];
Надеется, что это помогает.
Попробуйте следующие два варианта: - http://stackoverflow.com/a/2445451/942966 - http://stackoverflow.com/a/3880883/942966 – Roshit