Пример #1
0
 public static extern void wkhtmltopdf_set_warning_callback(
     IntPtr converter,
     wkhtmltopdf_str_callback cb);
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
 public static extern void wkhtmltopdf_set_warning_callback(IntPtr converter, [MarshalAs(UnmanagedType.FunctionPtr)] wkhtmltopdf_str_callback cb);
Пример #4
0
		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);
				}
			}
		}