WordsProcessing: Invalid font size when exporting to pdf.
Workaround:
var runs = document.EnumerateChildrenOfType<Run>();HtmlFormatProvider treats <script type="text/javascript"> as document elements and inserts the content (js code) as text in the document. The issue is observed when CDATA is used as well.
We are using the Telerik Xamarin UI components, which were released on 18th March 2020, for one of our micro-services hosted in Azure cloud, to convert rtf text to raw text. Currently we have Linux containers in Azure. The code which we are using is as follows -
var rtfFormatProvider = new RtfFormatProvider();
var txtFormatProvider = new TxtFormatProvider();
RadFlowDocument doc = null;
doc = rtfFormatProvider.Import(<<Base64_Inputstring>>.DecodeFromBase64String());
string result = txtFormatProvider.Export(doc);
However, we observed that the output of the above code is different when run on Windows platform as compared to when run on Linux platform. For Linux, the CR characters are not included in the raw text. We would like to see the same output for Linux as what we get for Windows, that is raw text with the CR characters. Is this something which can be fixed? Can you suggest a work-around for this issue?
I am attaching a sample input along with this mail, as well as the Windows output and the Linux output, for your reference.
Thanks,
Deepa
This results in a missing paragraph. For example, having a table with three cells and Page field in the footer of a document and exporting it to PDF, will not export the last paragraph.
As a workaround add new run after the last field character in the cell's table before exporting the document to PDF.
BlockCollection footerContent = this.document.Sections.First().Footers.Default.Blocks;
Table footerTable = footerContent.First() as Table;
var cells = footerTable.Rows.Last().Cells.Where(x => x.EnumerateChildrenOfType<FieldCharacter>().Any());
foreach (var cell in cells)
{
cell.Blocks.AddParagraph().Inlines.AddRun();
}
string html = File.ReadAllText("Source.html");
string newHtml = html.Replace("<br>", "[br]");
File.WriteAllText("NewSource.html", newHtml);
using (Stream stream = File.OpenRead("NewSource.html"))
{
HtmlFormatProvider htmlFormatProvider = new HtmlFormatProvider();
flowDocument = htmlFormatProvider.Import(stream);
TxtFormatProvider txtFormatProvider = new TxtFormatProvider();
string text = txtFormatProvider.Export(flowDocument);
string newText = text.Replace("[br]", "\r\n");
}
The current implementation uses System.Windows.Media.Imaging.BitmapImage class in order to take the image pixels for the PDF export. However, BitmapImage class throws NotSupportedException when being initialized with a WMF or EMF image. WORKAROUND: WMF and EMF images may be converted to PNG images before the PDF export. The following code snippet shows how to convert all inline WMF image to PNG images by using System.Drawing.Image class:private
static
void
ConvertInlineWmfImagesToPng(RadFlowDocument document)
{
foreach
(ImageInline image
in
document.EnumerateChildrenOfType<ImageInline>())
{
if
(image.Image.ImageSource.Extension.Equals(
"wmf"
, StringComparison.InvariantCultureIgnoreCase))
{
using
(MemoryStream wmfImageStream =
new
MemoryStream(image.Image.ImageSource.Data))
{
using
(MemoryStream pngImageStream =
new
MemoryStream())
{
var imageDrawing = System.Drawing.Image.FromStream(wmfImageStream);
imageDrawing.Save(pngImageStream, ImageFormat.Png);
byte
[] pngBytes = pngImageStream.ToArray();
image.Image.ImageSource =
new
ImageSource(pngBytes,
"png"
);
}
}
}
}
}
I have created a very simple template (see attached file), import it, add my contents and later try to do a MailMerge.
However, the call to this function fails with the following exception:System.ArgumentException
HResult=0x80070057
Message=The document element is already associated with a parent.
Parametername: item
Source=Telerik.Windows.Documents.Flow
StackTrace:
at Telerik.Windows.Documents.Flow.Model.Collections.DocumentElementCollection`2.VerifyDocumentElementOnInsert(T item) in c:\DeveloperTooling_Agent13\_work\91\s\Documents\Flow\Flow\Model\Collections\DocumentElementCollection.cs:line 69
at Telerik.Windows.Documents.Core.Data.DocumentElementCollectionBase`2.InsertRange(Int32 index, IEnumerable`1 items) in c:\DeveloperTooling_Agent13\_work\91\s\Documents\Core\Core\Core\Data\DocumentElementCollectionBase.cs:line 129
at Telerik.Windows.Documents.Flow.Model.InlineRangeEditor.InsertInlinesInRange(InlineBase start, IEnumerable`1 inlines) in c:\DeveloperTooling_Agent13\_work\91\s\Documents\Flow\Flow\Model\InlineRangeEditor.cs:line 132
at Telerik.Windows.Documents.Flow.Model.Fields.FieldInfo.UpdateFieldCore(FieldUpdateContext context) in c:\DeveloperTooling_Agent13\_work\91\s\Documents\Flow\Flow\Model\Fields\FieldInfo.cs:line 236
at Telerik.Windows.Documents.Flow.Model.Fields.FieldInfo.UpdateFieldInternal(FieldUpdateContext context) in c:\DeveloperTooling_Agent13\_work\91\s\Documents\Flow\Flow\Model\Fields\FieldInfo.cs:line 186
at Telerik.Windows.Documents.Flow.Model.MailMergeProcessor.ExecuteMailMerge(RadFlowDocument document, Object record) in c:\DeveloperTooling_Agent13\_work\91\s\Documents\Flow\Flow\Model\MailMergeProcessor.cs:line 57
at Telerik.Windows.Documents.Flow.Model.MailMergeProcessor.Execute(RadFlowDocument document, IEnumerable collection) in c:\DeveloperTooling_Agent13\_work\91\s\Documents\Flow\Flow\Model\MailMergeProcessor.cs:line 25
at Telerik.Windows.Documents.Flow.Model.RadFlowDocument.MailMerge(IEnumerable collection) in c:\DeveloperTooling_Agent13\_work\91\s\Documents\Flow\Flow\Model\RadFlowDocument.cs:line 337
at JOIM.TextExport.DocumentGenerator.Export(String outputPath) in P:\Tolaris\JOIM.Common\JOIM.TextExport\DocumentGenerator.cs:line 581
using Telerik.Windows.Documents.Flow.FormatProviders.Docx; using Telerik.Windows.Documents.Flow.Model; using Telerik.Windows.Documents.Spreadsheet.Model; ... using (StreamfileStream = File.Open(templatePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { var provider = newDocxFormatProvider(); _document = provider.Import(fileStream); } ... _document = Document.MailMerge(new [] { MergeFieldData });
When nested div elements are imported the WordsProcessing library creates separate paragraph elements for each div. However, if the outer div doesn't contain any inline children preceding the inner div element, the first created paragraph will be removed and only the second paragraph will be left. This leads to losing any style properties of the outer div.
Example:
<div style="margin-top: 50px;">
<div>Text</div>
</div>