Estoy llenando un documento de Word usando DocumentFormat.OpenXml en .Net Core 5.0, el texto proviene de una base de datos, en algún momento el texto incluye texto en árabe con pocas palabras en inglés, las palabras no aparecen en el orden correcto, por ejemplo si esto es un texto árabe y el segundo trabajo es inglés "uno DOS tres" aparecerá en un documento de Word como este "tres DOS uno", si copio el mismo texto de la base de datos y lo pego en Word aparecerá en el orden correcto .
Creo que Word está dividiendo el texto que estoy pegando en diferentes ejecuciones y las coloca en el orden correcto, pero en mi código estoy colocando el texto completo en una sola ejecución, ¿hay alguna manera de procesar esto automáticamente con OpenXML o tengo que hacerlo? hacerlo manualmente?
aquí está mi código:
int rowNo = 2; foreach (DataLine line in data.Lines) { TableRow row = table.Elements<TableRow>().ElementAt(rowNo++); Paragraph p1 = row.Elements<TableCell>().ElementAt(0).Elements<Paragraph>().First(); Run r1 = new(); Text t1 = new(line.AmountString); r1.AddChild(t1); p1.AddChild(r1); Paragraph p2 = row.Elements<TableCell>().ElementAt(1).Elements<Paragraph>().First(); Run r2 = new(); Text t2 = new(line.Description); r2.AddChild(t2); p2.AddChild(r2); ParagraphProperties pp = p2.ChildElements.First<ParagraphProperties>(); BiDi bidi = new BiDi(); pp.TextDirection = new TextDirection() { Val = TextDirectionValues.TopToBottomRightToLeft }; pp.Append(bidi); }Las últimas 4 líneas no hacen ninguna diferencia.
Tenga en cuenta que el documento de trabajo está bien formateado con la dirección del texto y las fuentes correctas.
Saludos
Amén
Resultó que es posible poner texto RTL y LTR en una sola Ejecución, las siguientes RunPropoetries me funcionaron:
run.RunProperties = new RunProperties { RunFonts = new RunFonts { ComplexScript = "Calibri" }, RightToLeftText = new RightToLeftText(), Languages = new Languages() { Bidi = new StringValue("ar-IQ"), Val = new StringValue("en-US") } };Extraje los valores de un documento de Word creado en MS Word, pero allí el párrafo estaba separado en 3 Ejecuciones.
El crédito es para (amiry jd) que tuvo el mismo problema hace 5 años, consulte esta publicación