I was working on some acroforms and wherever I needed a space I kept on getting a different letter (Ê). On debugging the problem seems to be in the TryGetCharCode function of OpenTypeFontSource
Version: 2019.3.917
Below is copy of function
public override bool TryGetCharCode(int unicode, out int charCode)
{
bool result = false;
ushort glyphId;
charCode = CMap.MISSING_GLYPH_ID;
if (this.TryGetGlyphId(unicode, out glyphId))
{
ushort uCharCode = CMap.MISSING_GLYPH_ID;
CMapTable table = this.CMap.GetCMapTable(3, 0);
if (table != null)
{
result = table.TryGetCharId(glyphId, out uCharCode);
}
table = this.CMap.GetCMapTable(1, 0);
if (table != null)
{
result = table.TryGetCharId(glyphId, out uCharCode);
}
charCode = uCharCode;
return result;
}
return false;
}
The font used has 2 cmap tables: one with platformid of 3 and encodingid of 1, the other with platformid 1 and encodingid 0. According to https://docs.microsoft.com/en-us/typography/opentype/spec/cmap platform id 3 and encoding 1 is correct for windows so not sure why the first call to getcmaptable looks for encodingid 0.
Second of all even if I change it to the following
CMapTable table = this.CMap.GetCMapTable(3, 1);
if there is a second cmap with platformid of 1 whatever the result of the call with regards to platformid 3, the result will be overridden
I can say that if I add some checks so that if the first call succeeds it doesn't attempt the 2nd I do get the expected behaviour in the pdf and get spaces
As a note the FontFamily property of the OpenTypeFontSource is "Arial"
When a TrueType font is defined, the mapping of character codes to glyph indices depends on the built-in cmap table mappings defined in the font and the Encoding property defined in the PDF dictionary.
However, the current implementation maps all characters with cmap tables for Microsoft Symbolic and Macintosh Roman, which causes incorrect mapping results, e.g. space characters are mapped to an Ê glyph.
The issue is also described in the following public item: TryGetCharCode for OpenTypeFont uses wrong cmap and returns wrong charcode.
Workaround: Change the font of the TextBoxField's widget appearance:
foreach (var widget in field.Widgets)
{
widget.TextProperties.Font = FontsRepository.Helvetica;
}
I would like to request an example of the RadPdfProcessing library utilizing a Line Chart similar to how the Bar Chart is drawn in this example.
Additionally, it would be great if there was an example with multiple charts on one page.
Thank you!
ImageSource imageSource = new ImageSource(new MemoryStream(this.ConvertWmfImageToPng(stream)));document.Pages.AddPage().Content.AddImage(imageSource);...private byte[] ConvertWmfImageToPng(Stream wmfImageStream){ byte[] pngBytes; using (MemoryStream pngImageStream = new MemoryStream()) { System.Drawing.Image imageDrawing = System.Drawing.Image.FromStream(wmfImageStream); imageDrawing.Save(pngImageStream, System.Drawing.Imaging.ImageFormat.Png); pngBytes = pngImageStream.ToArray(); } return pngBytes;}When there is long text that is out of the used cell range area, this text should be included in page splitting calculations.
Also, when a cell has text that overflows its width, the text is again clipped by the cell boundaries and is not visible in the exported PDF. In a similar case Excel exports the surrounding cells to ensure that the content is visible.
Workaround: Extend the used cell range to include all the cells which the text content spans.