ios - 如何从 NSData 源写入 PDF 文件

标签 ios pdf nsdata cgpath

我有一个方法可以像这样从 CGPathRef 返回 NSData ...

+ (NSData *) createPDFDataWithCGPath: (CGPathRef) path mediaBox: (CGRect) mediaBox
{
  CFMutableDataRef data = NULL;
  if (path) {
    CFAllocatorRef allocator = NULL;
    data = CFDataCreateMutable(allocator, 0);
    CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData(data);
    CGContextRef context = CGPDFContextCreate(consumer, &mediaBox, NULL);
    CFTypeRef keys[1] = { kCGPDFContextMediaBox };
    CFTypeRef values[1] = { CFDataCreate(allocator, (const UInt8 *)&mediaBox, sizeof(CGRect)) };
    CFDictionaryRef pageInfo = CFDictionaryCreate(allocator, keys, values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);

    CGPDFContextBeginPage(context, pageInfo);
    CGContextScaleCTM(context, 1, -1);
    CGContextTranslateCTM(context, 0, -mediaBox.size.height);
    CGContextAddPath(context, path);
    CGContextSetRGBFillColor(context, 0, 0, 0, 1);
    CGContextFillPath(context);
    CGPDFContextEndPage(context);

    CFRelease(pageInfo);
    CFRelease(values[0]);
    CGPDFContextClose(context);
    CGContextRelease(context);
    CGDataConsumerRelease(consumer);
  }
  return (NSData *)data;
}

当我尝试使用它并根据数据编写 PDF 文件时,我得到了正确大小的文件,但路径没有绘制到 PDF 中……它基本上是一个空文档。

这样写文件就够了吗...

[maskData writeToFile: DOCUMENTS_PATH_WITH_STRING(@"maskData.pdf") atomically: YES];

还是他们需要更多努力才能将其写成 PDF?

最佳答案

你是对的。 如果您在 NSData 对象中有数据,那么您可以将其写入磁盘。但是您应该添加正确的扩展名(在您的情况下为 .pdf)。 它适用于所有内容(视频、图片等...)

关于ios - 如何从 NSData 源写入 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603298/

相关文章:

ios - 我可以只从 plist 中读取 key 吗?

javascript - 在 Chrome 的新标签/窗口中打开 jsPDF 创建的 pdf

iphone - 将 NSString 转换为 NSData 而不更改数据

ios - 在解析中访问日期列 - Swift IoS 开发

javascript - iOS WKWebView 音频仅播放一次

iphone - 触摸计数检测和执行功能

javascript - 将 PHP 与 Google 图表和表格导出为 PDF

c# - 在 C#.Net 中打开、编辑和保存 PDF 文件

ios - 将 NSSecureCoding 转换为 NSData - Xcode - Swift

react-native - 如何将图像数据传递给 React Native 中的原生模块?