public MultiplexingImageConverter()
        {
            lock (_worker)
            {
                // XXX: We need to keep a converter instance alive during the whole application
                //		lifetime due to some underlying's library bug by which re-initializing
                //		the API after having deinitiaized it, causes all newlly rendered pdf
                //		file to be corrupted. So we will keep this converter alive to avoid
                //		de-initialization until app's shutdown. (pruiz)
                // See: http://code.google.com/p/wkhtmltopdf/issues/detail?id=511
                if (_initiWorkAround == null)
                {
                    _Log.InfoFormat("Initializing converter infrastructure..");
                    _worker.Invoke((Action)(() => _initiWorkAround = new WkHtmlToImageConverter()));
                    _Log.InfoFormat("Initialized converter infrastructure..");

                    AppDomain.CurrentDomain.ProcessExit += (o, e) =>
                        _worker.Invoke((Action)(() =>
                        {
                            _Log.InfoFormat("Disposing converter infraestructure..");
                            _initiWorkAround.Dispose();
                            _initiWorkAround = null;
                            _Log.InfoFormat("Disposed converter infraestructure..");
                        }));
                }
            }

            _worker.Invoke((Action)(() => _converter = new WkHtmlToImageConverter()));
        }
Exemplo n.º 2
0
        private void btnGo_Click(object sender, EventArgs e)
        {
            BackgroundWorker bgw = new BackgroundWorker();
            bgw.WorkerReportsProgress = true;

            //string address = tbHttpAddress.Text;
            string outputFile = tbOutputFile.Text;

            bgw.ProgressChanged += (o, args) => {
                progressBar1.Value = args.ProgressPercentage;
                lblProgress.Text = args.UserState as string;
            };

            if (outputFile.EndsWith(".pdf")) {
                bgw.DoWork += (o, args) => {
                    Tuple<string, string> t = args.Argument as Tuple<string, string>;

                    string address = t.Item1;
                    string outFile = t.Item2;

                    WkHtmlToPdfConverter conv = new WkHtmlToPdfConverter();
                    conv.ObjectSettings.Page = address;
                    conv.GlobalSettings.Out = outFile;
                    conv.ProgressChanged += (sender1, eventArgs) => bgw.ReportProgress(eventArgs.Value, eventArgs.Value2);
                    conv.PhaseChanged += (sender1, eventArgs) => this.Invoke(new Action(() => { lblPhase.Text = string.Format("Phase {0}: {1}", eventArgs.Value, eventArgs.Value2); }));

                    conv.Convert();

                    conv.Dispose();
                };
            } else if (outputFile.EndsWith(".jpg") || outputFile.EndsWith(".png")) {
                bgw.DoWork += (o, args) => {
                    Tuple<string, string> t = args.Argument as Tuple<string, string>;

                    string address = t.Item1;
                    string outFile = t.Item2;

                    WkHtmlToImageConverter conv = new WkHtmlToImageConverter();
                    conv.GlobalSettings.In = address;
                    conv.GlobalSettings.Out = outFile;
                    conv.ProgressChanged += (sender1, eventArgs) => bgw.ReportProgress(eventArgs.Value, eventArgs.Value2);
                    conv.PhaseChanged += (sender1, eventArgs) => this.Invoke(new Action(() => { lblPhase.Text = string.Format("Phase {0}: {1}", eventArgs.Value, eventArgs.Value2); }));

                    conv.Convert();

                    conv.Dispose();
                };
            }

            bgw.RunWorkerCompleted += (o, args) => bgw.Dispose();

            bgw.RunWorkerAsync(new Tuple<string, string>(tbHttpAddress.Text, outputFile));
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            if (args.Length != 2) {
                PrintInstructions();
                return;
            }

            if (args[1].EndsWith(".pdf")) {
                WkHtmlToPdfConverter conv = new WkHtmlToPdfConverter();
                conv.GlobalSettings.Out = args[1];
                conv.ObjectSettings.Page = args[0];

                int phaseLine = Console.CursorTop + 1;
                int progressLine = phaseLine + 1;

                conv.PhaseChanged += (sender, eventArgs) => { Console.CursorTop = phaseLine; Console.CursorLeft = 0; Console.Write("Phase: {0} - {1}", eventArgs.Value, eventArgs.Value2); };
                conv.ProgressChanged += (sender, eventArgs) => { Console.CursorTop = progressLine; Console.CursorLeft = 0; Console.Write("Progress: {0} - {1}", eventArgs.Value, eventArgs.Value2); };
                conv.Finished += (sender, eventArgs) => { Console.CursorTop = progressLine + 2; Console.CursorLeft = 0; };

                conv.Convert();

                conv.Dispose();
            } else {
                WkHtmlToImageConverter conv = new WkHtmlToImageConverter();
                conv.GlobalSettings.Out = args[1];
                conv.GlobalSettings.In = args[0];

                int phaseLine = Console.CursorTop + 1;
                int progressLine = phaseLine + 1;

                conv.PhaseChanged += (sender, eventArgs) => { Console.CursorTop = phaseLine; Console.CursorLeft = 0; Console.Write("Phase: {0} - {1}", eventArgs.Value, eventArgs.Value2); };
                conv.ProgressChanged += (sender, eventArgs) => { Console.CursorTop = progressLine; Console.CursorLeft = 0; Console.Write("Progress: {0} - {1}", eventArgs.Value, eventArgs.Value2); };
                conv.Finished += (sender, eventArgs) => { Console.CursorTop = progressLine + 2; Console.CursorLeft = 0; };

                conv.Convert();

                conv.Dispose();
            }
        }
        public void Dispose()
        {
            if (_converter != null)
                _worker.Invoke((Action)(() => _converter.Dispose()));

            _converter = null;
        }