Я использую для этого ASP, и мне пришлось создавать отчеты в формате PDF и отправлять файл обратно клиентам, чтобы они могли его загрузить.
Я сделал отчеты с помощью библиотеки MigraDoc, и они были великолепны, но после того, как я попробовал это с арабским текстом, я обнаружил, что тексты были в LTR, а символы были разрозненными, поэтому я сделал этот код, чтобы проверить это.
...............
MigraDoc.DocumentObjectModel.Document reportDoc = new MigraDoc.DocumentObjectModel.Document();
reportDoc.Info.Title = "test";
sec = reportDoc.AddSection();
string fileName = "test.pdf";
addformattedText(sec, "العبارة", true);
PdfDocumentRenderer renderer = new PdfDocumentRenderer(true);
renderer.Document = reportDoc;
renderer.RenderDocument();
MemoryStream pdfStream = new MemoryStream();
renderer.PdfDocument.Save(pdfStream);
byte[] bytes = pdfStream.ToArray();
...............
private void addformattedText(Section sec,string text, bool shouldBeBold = false)
{
var tf = sec.AddTextFrame();
var p = tf.AddParagraph(text);
p.Format.Font.Name = "Tahoma";
if (shouldBeBold) p.Format.Font.Bold = true;
}
Я попытался закодировать текст и сделать его строкой юникода, используя этот код
private string getEscapedString(string text)
{
if (true || HasArabicCharacters(text))
{
string uString = "";
byte[] utfBytes = Encoding.Unicode.GetBytes(text);
foreach (var u in utfBytes)
{
if (u != 0)
{
uString += String.Format(@"\u{0:x4}", u);
}
}
return uString;
}
else
return text;
}
и получите возвращенную строку в абзац и сохраните документы PDF с параметром unicode, установленным в true
Но это все равно.
Я не могу понять, как это сделать.
Отчеты были сделаны с использованием библиотеки MigraDoc 1.50.5147.
Unicode in PDF
, метаданные могут быть в формате Unicode, но отображаемый текст требует доработки. Если вы получаете перевернутую строку, это означает, что PdfSharp уже обрабатывает глифы Unicode, но не языки RTL. - person Panagiotis Kanavos   schedule 17.11.2020