フィルター「本当の」注釈を出力し、CGはそれを実行できません。CGPDF - FlateDecodeで保存する画像は、私が仕事のためのPDFパーサを書いている、と私たちはコールバックですべてのデータを読み込むためにコアグラフィックスを使用して、私たちのクライアントが書き込む必要があるので、Libの春にそれを書いている
はまあ、私は私が(私はそれらを描画するために開始する直前に、私はそれをやっていることを確認すると、ファイルにそれらを保存)画像を取得していますポイントに得ていると私はこの問題に遭遇しました。私は、リソースディクショナリのうち、画像XObjectsの全てを取得し、このコードObjectStreamのはのXObjectを抽出するためにCGPDFDictionaryGetStreamを使用している
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSData *imageFileData = (NSData *)CGPDFStreamCopyData(objectStream, CGPDFDataFormatRaw);
NSString *fileName = [NSString stringWithFormat:@"%@/%s.png", documentsDir, name];
[imageFileData writeToFile:fileName atomically:YES];
でそれらを保存しようとしています。ウェルフィルターは「DCTDecode」であるとき、それが正常に動作しますが、フィルターは「FlateDecode」であるときはいつでも、保存されている画像が壊れていると開きません。
this post CGPDFStreamCopyDataはFlateDecodeでテキストを解読できますが(コメント内の投稿の最後まで)、CGPDFDataFormatsには3つのデータフォーマットしかなく、どれも動作しません。
私はまたFlatDecodeでエンコードされたテキストの問題を抱えていると信じています。誰かがこれをデコードする方法についての提案はありますか?確かにCGPDFにはこれを処理するものがあります。なぜなら、私が開こうとしたほぼすべてのpdfに現れているからです(私はそれを見つけることができませんでした)。
編集:私はzlibのを使用して、それを解凍することもでき、いくつかの場所で読んで、私は、私はそれを行う方法については見つけることができた。このコードを試してみました:
NSData* uncompressedImageData;
if ([imageFileData length] == 0)
uncompressedImageData = imageFileData;
else
{
z_stream strm;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
strm.total_out = 0;
strm.next_in=(Bytef*)[imageFileData bytes];
strm.avail_in = [imageFileData length];
// Compresssion Levels: // Z_NO_COMPRESSION // Z_BEST_SPEED // Z_BEST_COMPRESSION // Z_DEFAULT_COMPRESSION
if (deflateInit(&strm, Z_DEFAULT_COMPRESSION) != Z_OK)
uncompressedImageData = nil;
NSMutableData *compressed = [NSMutableData dataWithLength:16384]; // 16K chuncks for expansion
do
{
if (strm.total_out >= [compressed length])
[compressed increaseLengthBy: 16384];
strm.next_out = [compressed mutableBytes] + strm.total_out; strm.avail_out = [compressed length] - strm.total_out;
deflate(&strm, Z_FINISH);
}
while (strm.avail_out == 0);
deflateEnd(&strm);
[compressed setLength: strm.total_out];
uncompressedImageData = [NSData dataWithData: compressed];
}
if(uncompressedImageData != nil)
[uncompressedImageData writeToFile:fileName atomically:YES];
コード」はdidnの私はそれを実行したときに任意の例外をスローしますが、結果の画像はまだ判読できませんでした。