SkDocument* SkDocument::CreatePDF(const char path[], SkScalar dpi) { SkFILEWStream* stream = SkNEW_ARGS(SkFILEWStream, (path)); if (!stream->isValid()) { SkDELETE(stream); return NULL; } auto delete_wstream = [](SkWStream* stream, bool) { SkDELETE(stream); }; return SkNEW_ARGS(SkDocument_PDF, (stream, delete_wstream, dpi)); }
/** Write the output of pdf renderer to a file. * @param outputDir Output dir. * @param inputFilename The skp file that was read. * @param renderer The object responsible to write the pdf file. */ static SkWStream* open_stream(const SkString& outputDir, const SkString& inputFilename) { if (outputDir.isEmpty()) { return SkNEW(SkDynamicMemoryWStream); } SkString outputPath; if (!make_output_filepath(&outputPath, outputDir, inputFilename)) { return NULL; } SkFILEWStream* stream = SkNEW_ARGS(SkFILEWStream, (outputPath.c_str())); if (!stream->isValid()) { SkDebugf("Could not write to file %s\n", outputPath.c_str()); return NULL; } return stream; }
bool SkFontManager::savePreData() { SkStream * inStream = openReadStream( SYSTEM_DL_PREDATA_FILE ); SkFILEWStream * outStream = NULL; preDataHeader header = { 1, __key(), 0 }; SkString permission; if( !inStream ) { setUpdateVersion( 2 ); header.updateVersion++; header.count = mDownloadFonts.numFonts(); goto SAVE0; } else { inStream->read( &header, SYSTEM_DL_PREDATA_HEADER_LEN ); if( header.tag != __key() ) { header.updateVersion = 1; header.tag = __key(); header.count = mDownloadFonts.numFonts(); goto SAVE1; } header.count = mDownloadFonts.numFonts(); header.updateVersion++; if( header.updateVersion >= 0xFFFFFFFE ) header.updateVersion = 2; } SAVE1: SkDELETE( inStream ); inStream = NULL; SAVE0: outStream = openWriteStream( SYSTEM_DL_PREDATA_FILE ); if( !outStream ) { if( permission_denied() ) goto SKIP_ERROR0; HyLogef( "outStream is null" ); goto ERROR0; } outStream->write( &header, SYSTEM_DL_PREDATA_HEADER_LEN ); for( uint32_t n = 0 ; n < header.count ; n++ ) { SkFontData * font = mDownloadFonts.getFont( n ); font->writePreData( outStream ); } SkDELETE( outStream ); outStream = NULL; //setUpdateVersion( header.updateVersion ); permission.set( SYSTEM_FONT_PERMISSION_SET ); permission.append( SYSTEM_DL_PREDATA_FILE ); system( permission.c_str() ); HyLogi( "Font Configuration Data (%d), saved.", header.updateVersion ); return true; SKIP_ERROR0: return false; ERROR0: if( outStream ) SkDELETE( outStream ); return false; }