Ejemplo n.º 1
0
 public PdfConvertWorkItem(
     IHtmlToPdfDocument document,
     Func <int, Stream> streamFunc)
     : base(streamFunc)
 {
     Document = document ?? throw new ArgumentNullException(nameof(document));
 }
Ejemplo n.º 2
0
        internal (IntPtr converterPtr, IntPtr globalSettingsPtr, List <IntPtr> objectSettingsPtrs) CreateConverter(
            IHtmlToPdfDocument document)
        {
            if (document is null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            var globalSettings = WkHtmlToPdfModule.CreateGlobalSettings();

            ApplyConfig(globalSettings, document.GlobalSettings, isGlobal: true);
            var converter         = WkHtmlToPdfModule.CreateConverter(globalSettings);
            var objectSettingsPtr = new List <IntPtr>();

            foreach (var obj in document.ObjectSettings)
            {
                if (obj == null)
                {
                    continue;
                }

                var objectSettings = WkHtmlToPdfModule.CreateObjectSettings();
                objectSettingsPtr.Add(objectSettings);

                ApplyConfig(objectSettings, obj, isGlobal: false);

                AddContent(converter, objectSettings, obj);
            }

            return(converter, globalSettings, objectSettingsPtr);
        }
Ejemplo n.º 3
0
        public Task <bool> ConvertAsync(
            IHtmlToPdfDocument document,
            Func <int, Stream> createStreamFunc,
            CancellationToken token)
        {
            var item = new PdfConvertWorkItem(document, createStreamFunc);

            _engine.AddConvertWorkItem(item, token);
            return(item.TaskCompletionSource.Task);
        }
Ejemplo n.º 4
0
        public bool Convert(IHtmlToPdfDocument document, Func <int, Stream> createStreamFunc)
        {
            if (document is null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            if (createStreamFunc is null)
            {
                throw new ArgumentNullException(nameof(createStreamFunc));
            }

            if (document.ObjectSettings.Count == 0)
            {
                throw new ArgumentException(
                          "No objects is defined in document that was passed. At least one object must be defined.");
            }

            ProcessingDocument = document;

            var(converterPtr, globalSettingsPtr, objectSettingsPtrs) = CreateConverter(document);

            RegisterEvents(converterPtr);

            try
            {
                var converted = WkHtmlToPdfModule.Convert(converterPtr);

                if (converted)
                {
                    WkHtmlToPdfModule.GetOutput(converterPtr, createStreamFunc);
                }

                return(converted);
            }
            finally
            {
                for (int i = objectSettingsPtrs.Count - 1; i >= 0; i--)
                {
                    WkHtmlToPdfModule.DestroyObjectSetting(objectSettingsPtrs[i]);
                }

                WkHtmlToPdfModule.DestroyGlobalSetting(globalSettingsPtr);
                WkHtmlToPdfModule.DestroyConverter(converterPtr);

                ProcessingDocument = null;
            }
        }