Greetings Programs!
The following method works flawlessly in v7.0.0 for any url (application or external) but it breaks in v7.1.0 for any application url. It converts external urls as expected so there's nothing wrong with the conversion itself.
public virtual void ConvertUrlToPDF(string url, string filename, string authToken = null, int minPageLoadTime = 30, string pageSize = "Letter", string orientation = "Portrait", int webPageWidth = 1024, int webPageHeight = 0, int marginTop = 20, int marginBottom = 20, int marginLeft = 20, int marginRight = 20)
{
var pdfPageSize = PdfPageSize.Letter;
var pdfOrientation = (PdfPageOrientation)Enum.Parse(typeof(PdfPageOrientation), orientation, true);
var settings = new WebKitConverterSettings
{
WebKitPath = Path.Combine(hostingEnvironment.ContentRootPath, "QtBinariesWindows"),
WebKitViewPort = new Size(webPageWidth, webPageHeight),
AdditionalDelay = minPageLoadTime * 1000,
Margin = new PdfMargins { Left = marginLeft, Right = marginRight, Top = marginTop, Bottom = marginBottom },
Orientation = pdfOrientation,
PdfPageSize = pdfPageSize,
SplitImages = false,
SplitTextLines = true,
TempPath = Path.GetTempPath()
};
if (!authToken.IsNullOrWhiteSpace())
{
settings.HttpRequestHeaders.Add("Authorization", $"bearer {authToken}");
}
//Initialize HTML to PDF converter and assign WebKit settings to HTML converter
var htmlConverter = new HtmlToPdfConverter { ConverterSettings = settings };
//Convert URL to PDF
var document = htmlConverter.Convert(url);
var stream = new MemoryStream();
document.Save(stream);
using (var file = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write))
{
stream.WriteTo(file);
}
}
I generate the url and get the token from the cookie:
let formUrl = AppConsts.appBaseUrl + '/#/app/main/form/' + this.form.formType.code.toLowerCase() + '/' + this.form.id + '/print';
let authToken = abp.utils.getCookieValue('Abp.AuthToken');
The error is thrown by the converter:
Syncfusion.Pdf.PdfException: Failed to convert the webpage
at Syncfusion.HtmlConverter.HtmlToPdfConverter.Convert(String url)
I'm thinking it might have something to do with the authorization header and token.
Thanks,
Wg
7 Answer(s)
-
0
Hi @wizgod
- Are there any useful information in the full error message ?
- Are there any other error message on the server side log file ?
-
0
Hi @ismcagdas,
Here is the log excerpt from the moment the export method is called to the resulting SyncFusion exception.
Thanks,
Wg
INFO 2019-08-27 08:24:32,086 [50 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 OPTIONS http://localhost:22742/api/services/app/Form/ExportFormToPdf INFO 2019-08-27 08:24:32,086 [50 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-08-27 08:24:32,086 [50 ] soft.AspNetCore.Hosting.Internal.WebHost - Request finished in 0.2814ms 204 INFO 2019-08-27 08:24:32,366 [50 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 POST http://localhost:22742/api/services/app/Form/ExportFormToPdf application/json 1096 INFO 2019-08-27 08:24:32,367 [50 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-08-27 08:24:32,369 [50 ] uthentication.JwtBearer.JwtBearerHandler - Successfully validated the token. WARN 2019-08-27 08:24:32,370 [50 ] calization.RequestLocalizationMiddleware - AbpUserRequestCultureProvider returned the following unsupported cultures 'null'. WARN 2019-08-27 08:24:32,370 [50 ] calization.RequestLocalizationMiddleware - AbpUserRequestCultureProvider returned the following unsupported UI Cultures 'null'. WARN 2019-08-27 08:24:32,370 [50 ] calization.RequestLocalizationMiddleware - AbpDefaultRequestCultureProvider returned the following unsupported cultures 'null'. WARN 2019-08-27 08:24:32,370 [50 ] calization.RequestLocalizationMiddleware - AbpDefaultRequestCultureProvider returned the following unsupported UI Cultures 'null'. INFO 2019-08-27 08:24:32,370 [50 ] ft.AspNetCore.Routing.EndpointMiddleware - Executing endpoint 'Wizgod.Forms.FormAppService.ExportFormToPdf (Wizgod.Application)' INFO 2019-08-27 08:24:32,397 [50 ] ore.Mvc.Internal.ControllerActionInvoker - Route matched with {area = "app", action = "ExportFormToPdf", controller = "Form"}. Executing controller action with signature System.Threading.Tasks.Task`1[Wizgod.Dto.FileDto] ExportFormToPdf(Wizgod.Forms.Dto.ExportFormInput) on controller Wizgod.Forms.FormAppService (Wizgod.Application). INFO 2019-08-27 08:24:32,397 [50 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-08-27 08:24:32,487 [50 ] ore.Mvc.Internal.ControllerActionInvoker - Executing action method Wizgod.Forms.FormAppService.ExportFormToPdf (Wizgod.Application) - Validation state: Valid INFO 2019-08-27 08:26:00,760 [50 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 OPTIONS http://localhost:22742/AbpUserConfiguration/GetAll?d=1566915960687 0 INFO 2019-08-27 08:26:00,760 [50 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-08-27 08:26:00,760 [50 ] soft.AspNetCore.Hosting.Internal.WebHost - Request finished in 0.3483ms 204 INFO 2019-08-27 08:26:00,770 [50 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 GET http://localhost:22742/AbpUserConfiguration/GetAll?d=1566915960687 INFO 2019-08-27 08:26:00,770 [50 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-08-27 08:26:00,771 [50 ] uthentication.JwtBearer.JwtBearerHandler - Successfully validated the token. WARN 2019-08-27 08:26:00,771 [50 ] calization.RequestLocalizationMiddleware - AbpUserRequestCultureProvider returned the following unsupported cultures 'null'. WARN 2019-08-27 08:26:00,771 [50 ] calization.RequestLocalizationMiddleware - AbpUserRequestCultureProvider returned the following unsupported UI Cultures 'null'. WARN 2019-08-27 08:26:00,771 [50 ] calization.RequestLocalizationMiddleware - AbpLocalizationHeaderRequestCultureProvider returned the following unsupported cultures 'null'. WARN 2019-08-27 08:26:00,771 [50 ] calization.RequestLocalizationMiddleware - AbpLocalizationHeaderRequestCultureProvider returned the following unsupported UI Cultures 'null'. WARN 2019-08-27 08:26:00,771 [50 ] calization.RequestLocalizationMiddleware - AbpDefaultRequestCultureProvider returned the following unsupported cultures 'null'. WARN 2019-08-27 08:26:00,771 [50 ] calization.RequestLocalizationMiddleware - AbpDefaultRequestCultureProvider returned the following unsupported UI Cultures 'null'. INFO 2019-08-27 08:26:00,772 [50 ] ft.AspNetCore.Routing.EndpointMiddleware - Executing endpoint 'Abp.AspNetCore.Mvc.Controllers.AbpUserConfigurationController.GetAll (Abp.AspNetCore)' INFO 2019-08-27 08:26:00,778 [50 ] ore.Mvc.Internal.ControllerActionInvoker - Route matched with {action = "GetAll", controller = "AbpUserConfiguration", area = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.JsonResult] GetAll() on controller Abp.AspNetCore.Mvc.Controllers.AbpUserConfigurationController (Abp.AspNetCore). INFO 2019-08-27 08:26:00,778 [50 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-08-27 08:26:00,779 [50 ] ore.Mvc.Internal.ControllerActionInvoker - Executing action method Abp.AspNetCore.Mvc.Controllers.AbpUserConfigurationController.GetAll (Abp.AspNetCore) - Validation state: Valid INFO 2019-08-27 08:26:00,818 [50 ] ore.Mvc.Internal.ControllerActionInvoker - Executed action method Abp.AspNetCore.Mvc.Controllers.AbpUserConfigurationController.GetAll (Abp.AspNetCore), returned result Microsoft.AspNetCore.Mvc.JsonResult in 39.0194ms. INFO 2019-08-27 08:26:00,828 [66 ] matters.Json.Internal.JsonResultExecutor - Executing JsonResult, writing value of type 'Abp.Web.Models.AjaxResponse'. INFO 2019-08-27 08:26:00,830 [66 ] ore.Mvc.Internal.ControllerActionInvoker - Executed action Abp.AspNetCore.Mvc.Controllers.AbpUserConfigurationController.GetAll (Abp.AspNetCore) in 52.0226ms INFO 2019-08-27 08:26:00,830 [66 ] ft.AspNetCore.Routing.EndpointMiddleware - Executed endpoint 'Abp.AspNetCore.Mvc.Controllers.AbpUserConfigurationController.GetAll (Abp.AspNetCore)' INFO 2019-08-27 08:26:00,831 [66 ] soft.AspNetCore.Hosting.Internal.WebHost - Request finished in 60.9641ms 200 application/json; charset=utf-8 INFO 2019-08-27 08:26:00,992 [50 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 OPTIONS http://localhost:22742/api/services/app/Session/GetCurrentLoginInformations 0 INFO 2019-08-27 08:26:00,994 [50 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-08-27 08:26:00,995 [50 ] soft.AspNetCore.Hosting.Internal.WebHost - Request finished in 3.1187ms 204 INFO 2019-08-27 08:26:01,121 [66 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 GET http://localhost:22742/api/services/app/Session/GetCurrentLoginInformations INFO 2019-08-27 08:26:01,121 [66 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-08-27 08:26:01,122 [66 ] uthentication.JwtBearer.JwtBearerHandler - Successfully validated the token. WARN 2019-08-27 08:26:01,122 [66 ] calization.RequestLocalizationMiddleware - AbpUserRequestCultureProvider returned the following unsupported cultures 'null'. WARN 2019-08-27 08:26:01,122 [66 ] calization.RequestLocalizationMiddleware - AbpUserRequestCultureProvider returned the following unsupported UI Cultures 'null'. WARN 2019-08-27 08:26:01,122 [66 ] calization.RequestLocalizationMiddleware - AbpDefaultRequestCultureProvider returned the following unsupported cultures 'null'. WARN 2019-08-27 08:26:01,122 [66 ] calization.RequestLocalizationMiddleware - AbpDefaultRequestCultureProvider returned the following unsupported UI Cultures 'null'. INFO 2019-08-27 08:26:01,125 [66 ] ft.AspNetCore.Routing.EndpointMiddleware - Executing endpoint 'Wizgod.Sessions.SessionAppService.GetCurrentLoginInformations (Wizgod.Application)' INFO 2019-08-27 08:26:01,146 [66 ] ore.Mvc.Internal.ControllerActionInvoker - Route matched with {area = "app", action = "GetCurrentLoginInformations", controller = "Session"}. Executing controller action with signature System.Threading.Tasks.Task`1[Wizgod.Sessions.Dto.GetCurrentLoginInformationsOutput] GetCurrentLoginInformations() on controller Wizgod.Sessions.SessionAppService (Wizgod.Application). INFO 2019-08-27 08:26:01,147 [66 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-08-27 08:26:01,156 [66 ] ore.Mvc.Internal.ControllerActionInvoker - Executing action method Wizgod.Sessions.SessionAppService.GetCurrentLoginInformations (Wizgod.Application) - Validation state: Valid INFO 2019-08-27 08:26:01,181 [64 ] ore.Mvc.Internal.ControllerActionInvoker - Executed action method Wizgod.Sessions.SessionAppService.GetCurrentLoginInformations (Wizgod.Application), returned result Microsoft.AspNetCore.Mvc.ObjectResult in 24.458ms. INFO 2019-08-27 08:26:01,184 [64 ] .Mvc.Infrastructure.ObjectResultExecutor - Executing ObjectResult, writing value of type 'Abp.Web.Models.AjaxResponse'. INFO 2019-08-27 08:26:01,184 [64 ] ore.Mvc.Internal.ControllerActionInvoker - Executed action Wizgod.Sessions.SessionAppService.GetCurrentLoginInformations (Wizgod.Application) in 37.9763ms INFO 2019-08-27 08:26:01,185 [64 ] ft.AspNetCore.Routing.EndpointMiddleware - Executed endpoint 'Wizgod.Sessions.SessionAppService.GetCurrentLoginInformations (Wizgod.Application)' INFO 2019-08-27 08:26:01,185 [64 ] soft.AspNetCore.Hosting.Internal.WebHost - Request finished in 64.0329ms 200 application/json; charset=utf-8 ERROR 2019-08-27 08:26:18,936 [66 ] Mvc.ExceptionHandling.AbpExceptionFilter - Failed to convert the webpage Syncfusion.Pdf.PdfException: Failed to convert the webpage at Syncfusion.HtmlConverter.HtmlToPdfConverter.Convert(String url) at Wizgod.Forms.FormAppService.ConvertUrlToPDF(String url, String filename, String authToken, Int32 minPageLoadTime, String pageSize, String orientation, Int32 webPageWidth, Int32 webPageHeight, Int32 marginTop, Int32 marginBottom, Int32 marginLeft, Int32 marginRight) in F:\Wizgod\aspnet-core\src\Wizgod.Application\Forms\FormAppService.cs:line 929 at Castle.Proxies.Invocations.FormAppService_ConvertUrlToPDF.InvokeMethodOnTarget() at Castle.DynamicProxy.AbstractInvocation.Proceed() at Abp.Domain.Uow.UnitOfWorkInterceptor.PerformSyncUow(IInvocation invocation, UnitOfWorkOptions options) in D:\Github\aspnetboilerplate\src\Abp\Domain\Uow\UnitOfWorkInterceptor.cs:line 68 at Castle.DynamicProxy.AbstractInvocation.Proceed() at Castle.DynamicProxy.AbstractInvocation.Proceed() at Castle.DynamicProxy.AbstractInvocation.Proceed() at Wizgod.Forms.FormAppService.ExportFormToPdf(ExportFormInput input) in F:\Wizgod\aspnet-core\src\Wizgod.Application\Forms\FormAppService.cs:line 825 at Abp.Threading.InternalAsyncHelper.AwaitTaskWithPostActionAndFinallyAndGetResult[T](Task`1 actualReturnValue, Func`1 postAction, Action`1 finalAction) at lambda_method(Closure , Object ) at Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable.Awaiter.GetResult() at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at System.Threading.Tasks.ValueTask`1.get_Result() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync() INFO 2019-08-27 08:26:18,947 [66 ] .Mvc.Infrastructure.ObjectResultExecutor - Executing ObjectResult, writing value of type 'Abp.Web.Models.AjaxResponse'. INFO 2019-08-27 08:26:18,950 [66 ] ore.Mvc.Internal.ControllerActionInvoker - Executed action Wizgod.Forms.FormAppService.ExportFormToPdf (Wizgod.Application) in 106552.3423ms INFO 2019-08-27 08:26:18,950 [66 ] ft.AspNetCore.Routing.EndpointMiddleware - Executed endpoint 'Wizgod.Forms.FormAppService.ExportFormToPdf (Wizgod.Application)' INFO 2019-08-27 08:26:18,950 [66 ] soft.AspNetCore.Hosting.Internal.WebHost - Request finished in 106583.9302ms 500 application/json; charset=utf-8
-
0
And here is the log of a successful export to pdf in v7.0.0:
Thanks,
Wg
INFO 2019-06-10 10:09:29,243 [61 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 POST http://localhost:22742/api/services/app/Form/ExportFormToPdf application/json 854 INFO 2019-06-10 10:09:29,243 [61 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-06-10 10:09:29,244 [61 ] uthentication.JwtBearer.JwtBearerHandler - Successfully validated the token. WARN 2019-06-10 10:09:29,245 [61 ] calization.RequestLocalizationMiddleware - AbpUserRequestCultureProvider returned the following unsupported cultures 'null'. WARN 2019-06-10 10:09:29,245 [61 ] calization.RequestLocalizationMiddleware - AbpUserRequestCultureProvider returned the following unsupported UI Cultures 'null'. WARN 2019-06-10 10:09:29,245 [61 ] calization.RequestLocalizationMiddleware - AbpDefaultRequestCultureProvider returned the following unsupported cultures 'null'. WARN 2019-06-10 10:09:29,245 [61 ] calization.RequestLocalizationMiddleware - AbpDefaultRequestCultureProvider returned the following unsupported UI Cultures 'null'. INFO 2019-06-10 10:09:29,245 [61 ] ft.AspNetCore.Routing.EndpointMiddleware - Executing endpoint 'Wizgod.Forms.FormAppService.ExportFormToPdf (Wizgod.Application)' INFO 2019-06-10 10:09:29,248 [61 ] ore.Mvc.Internal.ControllerActionInvoker - Route matched with {area = "app", action = "ExportFormToPdf", controller = "Form"}. Executing action Wizgod.Forms.FormAppService.ExportFormToPdf (Wizgod.Application) INFO 2019-06-10 10:09:29,248 [61 ] pNetCore.Cors.Infrastructure.CorsService - CORS policy execution successful. INFO 2019-06-10 10:09:29,257 [61 ] ore.Mvc.Internal.ControllerActionInvoker - Executing action method Wizgod.Forms.FormAppService.ExportFormToPdf (Wizgod.Application) with arguments (Wizgod.Forms.Dto.ExportFormInput) - Validation state: Valid INFO 2019-06-10 10:09:29,347 [61 ] ore.Mvc.Internal.ControllerActionInvoker - Executed action method Wizgod.Forms.FormAppService.ExportFormToPdf (Wizgod.Application), returned result Microsoft.AspNetCore.Mvc.ObjectResult in 89.7744ms. INFO 2019-06-10 10:09:29,351 [61 ] .Mvc.Infrastructure.ObjectResultExecutor - Executing ObjectResult, writing value of type 'Abp.Web.Models.AjaxResponse'. INFO 2019-06-10 10:09:29,351 [61 ] ore.Mvc.Internal.ControllerActionInvoker - Executed action Wizgod.Forms.FormAppService.ExportFormToPdf (Wizgod.Application) in 103.3478ms INFO 2019-06-10 10:09:29,352 [61 ] ft.AspNetCore.Routing.EndpointMiddleware - Executed endpoint 'Wizgod.Forms.FormAppService.ExportFormToPdf (Wizgod.Application)' INFO 2019-06-10 10:09:29,352 [61 ] soft.AspNetCore.Hosting.Internal.WebHost - Request finished in 108.7065ms 200 application/json; charset=utf-8 INFO 2019-06-10 10:09:29,449 [105 ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 GET http://localhost:22742/File/DownloadTempFile?fileType=application/pdf&fileToken=a1fdf3ce733e4bf7b5fb431e541a21fb&fileName=EA-011671.pdf INFO 2019-06-10 10:09:29,450 [105 ] ft.AspNetCore.Routing.EndpointMiddleware - Executing endpoint 'Wizgod.Web.Controllers.FileController.DownloadTempFile (Wizgod.Web.Core)' INFO 2019-06-10 10:09:29,454 [105 ] ore.Mvc.Internal.ControllerActionInvoker - Route matched with {action = "DownloadTempFile", controller = "File", area = ""}. Executing action Wizgod.Web.Controllers.FileController.DownloadTempFile (Wizgod.Web.Core) INFO 2019-06-10 10:09:29,455 [105 ] ore.Mvc.Internal.ControllerActionInvoker - Executing action method Wizgod.Web.Controllers.FileController.DownloadTempFile (Wizgod.Web.Core) with arguments (Wizgod.Dto.FileDto) - Validation state: Valid INFO 2019-06-10 10:09:29,456 [105 ] ore.Mvc.Internal.ControllerActionInvoker - Executed action method Wizgod.Web.Controllers.FileController.DownloadTempFile (Wizgod.Web.Core), returned result Microsoft.AspNetCore.Mvc.FileContentResult in 0.5669ms. INFO 2019-06-10 10:09:29,456 [105 ] Infrastructure.FileContentResultExecutor - Executing Microsoft.AspNetCore.Mvc.FileContentResult, sending file with download name 'EA-011671.pdf' ... INFO 2019-06-10 10:09:29,456 [105 ] ore.Mvc.Internal.ControllerActionInvoker - Executed action Wizgod.Web.Controllers.FileController.DownloadTempFile (Wizgod.Web.Core) in 1.9169ms INFO 2019-06-10 10:09:29,456 [105 ] ft.AspNetCore.Routing.EndpointMiddleware - Executed endpoint 'Wizgod.Web.Controllers.FileController.DownloadTempFile (Wizgod.Web.Core)' INFO 2019-06-10 10:09:29,456 [105 ] soft.AspNetCore.Hosting.Internal.WebHost - Request finished in 7.6059ms 200 application/pdf
-
0
Is it possible to share a reproduction project via email (to [email protected]) ? It is hard to understand the problem using these logs.
Thanks,
-
0
I'll do my best to put something together.
-
0
Thanks @wizgod
Would be great :)
-
0
Hi @wizgod
I'm closing this issue. You can send the project to [email protected] when it is ready.