bool RenderDocument(BaseEngine *engine, const WCHAR *renderPath, float zoom=1.f, bool silent=false) { if (!CheckRenderPath(renderPath)) return false; if (str::EndsWithI(renderPath, L".txt")) { str::Str<WCHAR> text(1024); for (int pageNo = 1; pageNo <= engine->PageCount(); pageNo++) text.AppendAndFree(engine->ExtractPageText(pageNo, L"\r\n", NULL, Target_Export)); if (silent) return true; ScopedMem<WCHAR> txtFilePath(str::Format(renderPath, 0)); ScopedMem<char> textUTF8(str::conv::ToUtf8(text.Get())); ScopedMem<char> textUTF8BOM(str::Join(UTF8_BOM, textUTF8)); return file::WriteAll(txtFilePath, textUTF8BOM, str::Len(textUTF8BOM)); } if (str::EndsWithI(renderPath, L".pdf")) { if (silent) return false; ScopedMem<WCHAR> pdfFilePath(str::Format(renderPath, 0)); return engine->SaveFileAsPDF(pdfFilePath, true) || PdfCreator::RenderToFile(pdfFilePath, engine); } bool success = true; for (int pageNo = 1; pageNo <= engine->PageCount(); pageNo++) { RenderedBitmap *bmp = engine->RenderBitmap(pageNo, zoom, 0); success &= bmp != NULL; if (!bmp && !silent) ErrOut("Error: Failed to render page %d for %s!", pageNo, engine->FileName()); if (!bmp || silent) { delete bmp; continue; } ScopedMem<WCHAR> pageBmpPath(str::Format(renderPath, pageNo)); if (str::EndsWithI(pageBmpPath, L".png")) { Bitmap gbmp(bmp->GetBitmap(), NULL); CLSID pngEncId = GetEncoderClsid(L"image/png"); gbmp.Save(pageBmpPath, &pngEncId); } else if (str::EndsWithI(pageBmpPath, L".bmp")) { size_t bmpDataLen; ScopedMem<char> bmpData((char *)SerializeBitmap(bmp->GetBitmap(), &bmpDataLen)); if (bmpData) file::WriteAll(pageBmpPath, bmpData, bmpDataLen); } else { // render as TGA for all other file extensions size_t tgaDataLen; ScopedMem<unsigned char> tgaData(tga::SerializeBitmap(bmp->GetBitmap(), &tgaDataLen)); if (tgaData) file::WriteAll(pageBmpPath, tgaData, tgaDataLen); } delete bmp; } return success; }
void ide_device::text_utf8(double x, double y, const char *str, double rot, double hadj, const pGEcontext gc) { auto dev = get_or_create_file_device(); if (dev->textUTF8 != nullptr) { dev->textUTF8(x, y, str, rot, hadj, gc, dev); } }