Однако, когда я устанавливал арабский текст напрямую, буквы, не подходящие (не соединенные) после того, что вместо правильного съемного арабского арабского. Версия моего кода: < /p>
Код: Выделить всё
using var inputStream = new MemoryStream(templateBytes);
using var outputStream = new MemoryStream();
using var pdfReader = new iText.Kernel.Pdf.PdfReader(inputStream);
using var pdfWriter = new PdfWriter(outputStream);
using var pdfDoc = new iText.Kernel.Pdf.PdfDocument(pdfReader, pdfWriter);
var form = PdfAcroForm.GetAcroForm(pdfDoc, true);
using var layoutDoc = new Document(pdfDoc);
var field = form.GetField("arabicField");
try
{
if (IsArabicText(value.Value))
{
var fontFile = Path.Combine(_fontsDir, "Almarai-Regular.ttf");
//PdfFont pdfFont = PdfFontFactory.CreateFont(fontFile, PdfEncodings.IDENTITY_H, EmbeddingStrategy.FORCE_EMBEDDED);
// Set Arabic value
field.SetValue(value.Value);
// Align right for RTL
field.SetJustification(2); // right aligned
// Regenerate field appearance
}
else
{
field.SetValue(value.Value);
}
field.RegenerateField();
}
catch (Exception ex)
{
_logger.LogWarning(ex, "Failed to set text for field {FieldId}", value.Id);
}
form.FlattenFields();
layoutDoc.Close();
< /code>
** Что я попробовал
**
внедрить арабский шрифт (например, almarai, noto naskh arabic). < /p>
Установка поля. Setjustification (2) для правого выравнивания. < /p>
Calling Field. Form.SetNeDAppeArances (true).
Появляется текст, но арабские буквы не соединены и не появляются как отдельные глифы, когда -то сплющенные.
[b] Что я хочу [/b]
Арабский текст, как «Выписываемое» и «Общая цена» и «Общая цена» и «Общая цена) Поле сплюснутой формы. < /p>
В идеале это должно работать так же, как статический арабский текст работает при добавлении через документ.using System.IO;
using iText.Forms;
using iText.Forms.Fields;
using iText.Kernel.Pdf;
using iText.Kernel.Font;
public class ArabicFieldTest
{
public byte[] FillArabic(byte[] templateBytes, string fieldName, string arabicValue, string fontsDir)
{
using var inputStream = new MemoryStream(templateBytes);
using var outputStream = new MemoryStream();
using var pdfReader = new PdfReader(inputStream);
using var pdfWriter = new PdfWriter(outputStream);
using var pdfDoc = new PdfDocument(pdfReader, pdfWriter);
var form = PdfAcroForm.GetAcroForm(pdfDoc, true);
form.SetNeedAppearances(false);
form.SetGenerateAppearance(true);
string fontPath = Path.Combine(fontsDir, "NotoNaskhArabic-Regular.ttf");
PdfFont arabicFont = PdfFontFactory.CreateFont(fontPath, PdfEncodings.IDENTITY_H);
PdfFormField field = form.GetField(fieldName);
field.SetFont(arabicFont);
field.SetValue(arabicValue);
pdfDoc.Close();
return outputStream.ToArray();
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -net-so-it