Как правильно добавить арабский текст в поле акроформы в ITEXT 7/9 (.NET), чтобы он оставался правильным после сглаживанC#

Место общения программистов C#
Anonymous
Как правильно добавить арабский текст в поле акроформы в ITEXT 7/9 (.NET), чтобы он оставался правильным после сглаживан

Сообщение Anonymous »

Я работаю с ITEXT 9.3.0 для .NET и должен заполнить поле формы PDF (PDFTextFormfield) с арабским текстом, а затем выравниваю его, чтобы текст стал постоянным. < /p>
Однако, когда я устанавливал арабский текст напрямую, буквы, не подходящие (не соединенные) после того, что вместо правильного съемного арабского арабского. Версия моего кода: < /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();
}
}
Я не знаю, как добавить/прикрепить/загрузить здесь файл PDF, но любой файл PDF будет отображать тот же результат.

Подробнее здесь: https://stackoverflow.com/questions/797 ... -net-so-it

Вернуться в «C#»