public PdfConvertWorkItem( IHtmlToPdfDocument document, Func <int, Stream> streamFunc) : base(streamFunc) { Document = document ?? throw new ArgumentNullException(nameof(document)); }
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); }
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); }
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; } }