public static extern void wkhtmltopdf_set_progress_changed_callback( IntPtr converter, wkhtmltopdf_int_callback cb);
public static extern void wkhtmltopdf_set_finished_callback( IntPtr converter, wkhtmltopdf_int_callback cb);
private byte[] _Convert(string inputHtml) { var converter = IntPtr.Zero; var inputHtmlUtf8Ptr = IntPtr.Zero; var errorCb = new wkhtmltopdf_str_callback(OnError); var warnCb = new wkhtmltopdf_str_callback(OnWarning); var phaseCb = new wkhtmltopdf_void_callback(OnPhaseChanged); var progressCb = new wkhtmltopdf_int_callback(OnProgressChanged); var finishCb = new wkhtmltopdf_bool_callback(OnFinished); try { var gSettings = _BuildGlobalSettings(); var oSettings = _BuildObjectsettings(); inputHtmlUtf8Ptr = Marshaller.StringToUtf8Ptr(inputHtml); converter = _BuildConverter(gSettings, oSettings, inputHtmlUtf8Ptr); _errorString = new StringBuilder(); wkhtmltopdf_set_error_callback(converter, errorCb); wkhtmltopdf_set_warning_callback(converter, warnCb); wkhtmltopdf_set_phase_changed_callback(converter, phaseCb); wkhtmltopdf_set_progress_changed_callback(converter, progressCb); wkhtmltopdf_set_finished_callback(converter, finishCb); OnBegin(wkhtmltopdf_phase_count(converter)); if (!wkhtmltopdf_convert(converter)) { var msg = string.Format("HtmlToPdf conversion failed: {0}", _errorString.ToString()); throw new ApplicationException(msg); } if (!string.IsNullOrEmpty(GlobalSettings.Out)) { return(null); } _Log.Debug("CONVERSION DONE.. getting output."); // Get output from internal buffer.. IntPtr tmp = IntPtr.Zero; var len = wkhtmltopdf_get_output(converter, out tmp); var output = new byte[len]; Marshal.Copy(tmp, output, 0, output.Length); return(output); } finally { if (converter != IntPtr.Zero) { wkhtmltopdf_set_error_callback(converter, null); wkhtmltopdf_set_warning_callback(converter, null); wkhtmltopdf_set_phase_changed_callback(converter, null); wkhtmltopdf_set_progress_changed_callback(converter, null); wkhtmltopdf_set_finished_callback(converter, null); wkhtmltopdf_destroy_converter(converter); } if (inputHtmlUtf8Ptr != IntPtr.Zero) { Marshaller.FreeUtf8Ptr(inputHtmlUtf8Ptr); } } }
public static extern void wkhtmltopdf_set_progress_changed_callback(IntPtr converter, [MarshalAs(UnmanagedType.FunctionPtr)] wkhtmltopdf_int_callback cb);
private byte[] _Convert(string inputHtml) { var converter = IntPtr.Zero; var inputHtmlUtf8Ptr = IntPtr.Zero; var errorCb = new wkhtmltopdf_str_callback(OnError); var warnCb = new wkhtmltopdf_str_callback(OnWarning); var phaseCb = new wkhtmltopdf_void_callback(OnPhaseChanged); var progressCb = new wkhtmltopdf_int_callback(OnProgressChanged); var finishCb = new wkhtmltopdf_bool_callback(OnFinished); try { var gSettings = _BuildGlobalSettings(); var oSettings = _BuildObjectsettings(); inputHtmlUtf8Ptr = Marshaller.StringToUtf8Ptr(inputHtml); converter = _BuildConverter(gSettings, oSettings, inputHtmlUtf8Ptr); _errorString = new StringBuilder(); wkhtmltopdf_set_error_callback(converter, errorCb); wkhtmltopdf_set_warning_callback(converter, warnCb); wkhtmltopdf_set_phase_changed_callback(converter, phaseCb); wkhtmltopdf_set_progress_changed_callback(converter, progressCb); wkhtmltopdf_set_finished_callback(converter, finishCb); OnBegin(wkhtmltopdf_phase_count(converter)); if (!wkhtmltopdf_convert(converter)) { var msg = string.Format("HtmlToPdf conversion failed: {0}", _errorString.ToString()); throw new ApplicationException(msg); } if (!string.IsNullOrEmpty(GlobalSettings.Out)) return null; _Log.Debug("CONVERSION DONE.. getting output."); // Get output from internal buffer.. IntPtr tmp = IntPtr.Zero; var len = wkhtmltopdf_get_output(converter, out tmp); var output = new byte[len]; Marshal.Copy(tmp, output, 0, output.Length); return output; } finally { if (converter != IntPtr.Zero) { wkhtmltopdf_set_error_callback(converter, null); wkhtmltopdf_set_warning_callback(converter, null); wkhtmltopdf_set_phase_changed_callback(converter, null); wkhtmltopdf_set_progress_changed_callback(converter, null); wkhtmltopdf_set_finished_callback(converter, null); wkhtmltopdf_destroy_converter(converter); } if (inputHtmlUtf8Ptr != IntPtr.Zero) { Marshaller.FreeUtf8Ptr(inputHtmlUtf8Ptr); } } }