I am rendering a report with multiple large images in PDF. The rendering fails with the following error:
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.IO.MemoryStream.set_Capacity(Int32 value)
at System.IO.MemoryStream.EnsureCapacity(Int32 value)
at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.BinaryWriter.Write(Byte[] buffer)
at System.Runtime.Serialization.Formatters.Binary.__BinaryWriter.WriteSingleArray(NameInfo memberNameInfo, NameInfo arrayNameInfo, WriteObjectInfo objectInfo, NameInfo arrayElemTypeNameInfo, Int32 length, Int32 lowerBound, Array array)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteArray(WriteObjectInfo objectInfo, NameInfo memberNameInfo, WriteObjectInfo memberObjectInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
at Telerik.Reporting.Cache.SerializationUtils.Serialize(Object value)
at Telerik.Reporting.Services.Engine.PersistableObject.SetObject(String key, Object value)
at Telerik.Reporting.Services.Engine.DocumentResources.AddResource(RenderingResource resource)
at Telerik.Reporting.Services.Engine.Rendering.StoreRenderingStream(RenderingStream renderingStream)
at Telerik.Reporting.Services.Engine.RenderingStream.Finish()
at Telerik.Reporting.ImageRendering.DocumentPdf.EndDocument()
at Telerik.Reporting.Writing.DocumentWriter.Telerik.Reporting.BaseRendering.IWriter.WriteEndDocument()
at Telerik.Reporting.BaseRendering.PageHandler.Telerik.Reporting.Paging.IPageHandler.EndDocument(Boolean output)
at Telerik.Reporting.Paging.PageCompositionBase.<>c__DisplayClass110_0.<CreatePageContentOutputTask>b__0()
An error has occurred while rendering the report: System.OperationCanceledException: The operation was canceled.
at System.Threading.CancellationToken.ThrowOperationCanceledException()
at System.Threading.ManualResetEventSlim.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.SpinThenBlockingWait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.InternalWait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at Telerik.Reporting.Paging.PageCompositionBase.SeparateThreadOutputBehavior.Finish()
at Telerik.Reporting.Paging.PageCompositionBase.CreatePages()
at Telerik.Reporting.Paging.PagerBase.Telerik.Reporting.Paging.IPager.CreatePages(IPageHandler handler, LayoutElement root)
at Telerik.Reporting.BaseRendering.RenderingExtensionBase.Render(LayoutElement root, Hashtable renderingContext, Hashtable deviceInfo, CreateStream createStreamCallback, EvaluateHeaderFooterExpressions evalHeaderFooterCallback, PageSettings pageSettings)
When a report is rendered by the REST Service, and that report has an element with applied 'Navigate To Report'-action, the full path of that file is being used as a reference, instead of a relative path or just the report-name.
Error: Can not resolve assembly from Telerik.ReportViewer.Wpf.Design.Resources.Telerik.Windows.Data.dll Error: System.ArgumentException: The path is not of a legal form.at System.IO.Path.NewNormalizePath(String path, Int32 maxPathLength, Boolean expandShortPaths)at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)at System.IO.Path.GetFullPathInternal(String path)at System.Reflection.AssemblyName.GetAssemblyName(String assemblyFile)at Telerik.ReportViewer.Wpf.Design.Resources.GetResourceAssemblyName(ITracer tracer, String asmName) Error: System.NullReferenceException: Object reference not set to an instance of an object.at Telerik.ReportViewer.Wpf.Design.ItemTemplateWizard.CheckTelerikWpfReferences()at Telerik.ReportViewer.Wpf.Design.ItemTemplateWizard.RunStartedCore(Dictionary`2 replacementsDictionary)
To store reports, the Web Report Designer offers FileDefinitionStorage as an out-of-the-box solution for the DefinitionStorage. this FileDefinitionStorage does not support relative paths or sub-directories.
While the UriReportSourceResolver, which is used in the REST Service for rendering reports, does support sub-directories. These two services will often be used together, and for this reason, should behave consistently.
Hi Telerik Team,
I am using telerik reporting watermark to put some "design" in our report template for all the pages, but a small image with a size of 50kb as watermark generates additional 200-300MB of memory usage during the rendering of the report.
Please reduce the memory consumption since this behavior limits the number of user that can access the report simultaneously
Thanks
Ways to reproduce the problem:
1. Create simple one table one column report, with right horizontal text alignment in the column.
2. Set a data source with multiple rows, with different lengths for the string, displayed in the table's column.
3. Render the report under Windows and under Linux - the column text on different rows will not be aligned properly on linux, but will be shifted to the left or right depending on string's contents and length.
I've done a bit reserch on PDF rendering, concerning libgdiplus "MeasureString" method deficiencies, and here's what I discovered so far:
1. The source of the problem is the fact that libgdiplus ends up using cairo to measure string glyphs, and it does it's font metric in whole pixels (integer), using the DPI of the context it is called in. In short, if the context is using 96DPI, cairo will use these 96DPI to calculate (and round) the font metrics, and to write strings eventually.
2. When libgdiplus is compiled to use pango, the problem is much smaller (several millimeter differences become part of the millimeter), because internally pango scales the measurement 1024 times, but it appears that this is not enough to resolve the problem.
3. When using libgdiplus (with or without pango inbetween it and cairo) for both "DrawString" and "MeasureString", everything is perfect, but the fundamental problem in Relerik Reporting to PDF is that it renders in a vector format, but uses text metering for pixel format - it uses System.Graphics.MeasureString which is a DPI vased metering (on Linux at least) but uses proprietary "PdfRenderer.DrawString" of the "PdfRendered" class, not the native Graphics.DrawString. Since cairo rounds every character glyph metrics to an integer value, the longer the string is, the larger the discrepancy will be between string rendering when PDF is viewed (based on floats/doubles) and Graphics.MeasureString (based on integers, at least on Linux).
Ways to resolve the issue:
1. The best way to resolve the issue is not to call Graphics.MeasureString at all, when rendering to vector based format, because it measures string based on the DPI on graphics context it is in. In other words, proprietary "PdfRenderer.MeasureString" must be implemented, which works with font glyphs directly, entirely using single or double precision math to calculate glyph dimensions and string dimensions.
2. Another, not so perfect, but HUGELY EASIER way is to set DPI of the rendering context of the PDF to a higher value, here's how:
For the moment, PdfContext's constructor looks like thispublic PdfContext(string ownerPassword, string userPassword)
{
this.dataFormatter = string.IsNullOrWhiteSpace(ownerPassword) ?
new DataFormatter() :
new DataFormatterEncypted(ownerPassword, userPassword);
this.bmp = new Bitmap(1, 1);
this.graphics = Graphics.FromImage(this.bmp);
this.hdc = this.graphics.GetHdc();
this.pdfFontCache = new PdfFontCache();
}
public PdfContext(string ownerPassword, string userPassword)
{
this.dataFormatter = string.IsNullOrWhiteSpace(ownerPassword) ?
new DataFormatter() :
new DataFormatterEncypted(ownerPassword, userPassword);
this.bmp = new Bitmap(1, 1);
bmp.SetResolution(9600, 9600); //ADDED
this.graphics = Graphics.FromImage(this.bmp);
this.hdc = this.graphics.GetHdc();
this.pdfFontCache = new PdfFontCache();
}
I need to set a structured heading tags like <h2><h3> (https://www.w3.org/TR/WCAG20-TECHS/PDF9.html) so the pdf file can have those tags.
Please make the Reporting support more various tags so pdf files can have structured tags.
Hello,
I am using the Blazor Web Report Designer on a page that is not the default route, i.e. "/". When I am at step 2 in the WebServiceDataSource wizard to add parameters, if I click the Add Parameter button it routes to the home page.
I believe this is caused by the href="#' empty route. Below is an animation of what I mean. This is also reproduced in the BlazorIntegrationDemo in the installation directory.
Error: Unable to cast object of type 'Telerik.Reporting.Processing.Expressions.ProcessingEvalProvider' to type 'Telerik.Reporting.Expression.IValueObject'
is thrown on previewing the data source results in the WebServiceDataSource when the Runtime or Design time expressions are left completely empty or the runtime value is a report parameter with an empty Value property.
The following error is thrown when inserting a new column on merged columns in a crosstab/table and then trying to select that column:
"Value cannot be null. Parameter name: components"
I like the new open dialog for the Web Report Designer, but now my report names are all truncated and I can't tell what anything is. Can you please off a list view in the Open Dialog so all my names aren't "Company R..."
Currently, the Web Report Designer does not allow one to insert a report item in place of a table cell textbox.
Meanwhile, the Standalone Designer does allow such operations.