Добавление абсолютного позиционного текста - программирование
Подтвердить что ты не робот

Добавление абсолютного позиционного текста

Я пытаюсь создать письмо, оставляя пустое место, а затем вставляю поверх него адрес, в зависимости от того, где будет окно конверта.

Итак, я начинаю делать это:

Document doc = new Document(PageSize.LETTER, 72, 72, 72, 72);
var w = PdfWriter.GetInstance(doc, output);
Font font = FontFactory.GetFont("arial", 10);
doc.Open();
doc.Add(new Paragraph("date", font) { SpacingAfter = 5 });
doc.Add(new Paragraph("\n\n\n\n\n\n", font));//empty spot
doc.Add(new Paragraph("long\n paragraph\ns panning\ multiple\n lines\n", font) { SpacingAfter = 5 });
doc.Add(new Paragraph("long\n paragraph\ns panning\ multiple\n lines\n", font) { SpacingAfter = 5 });
doc.Add(new Paragraph("long\n paragraph\ns panning\ multiple\n lines\n", font) { SpacingAfter = 5 });
doc.Add(new Paragraph("long\n paragraph\ns panning\ multiple\n lines\n", font) { SpacingAfter = 5 });
doc.Add(new Paragraph("long\n paragraph\ns panning\ multiple\n lines\n", font) { SpacingAfter = 5 });

float llx = 63f, lly = 450f, urx = 387f, ury = 531f;
?? Somehow add "name\n address line 1\n address line2\n city state zip"

doc.Close();

Я надеялся, что смогу добавить текст в эти координаты, но я не мог понять, как... кто-нибудь знает способ сделать это?

4b9b3361

Ответ 1

Нашел ответ "здесь". (Ниже приводится цитата из Янник Смитс)

===============

Попробуйте следующее:

ColumnText ct = new ColumnText(cb);
Phrase myText = new Phrase("TEST paragraph\nNewline");
ct.SetSimpleColumn(myText, 34, 750, 580, 317, 15, Element.ALIGN_LEFT);
ct.Go();

параметры SetSimpleColumn:

  • фраза
  • левый нижний-х
  • нижний левый-й
  • upper-right-x (llx + width)
  • upper-right-y (lly + height)
  • leading (количество пробелов между строками печати)
  • выравнивание.

Ответ 2

Вы также можете использовать ContentByte с текстовой матрицей для рисования текста везде, где хотите.

PdfContentByte cb = writer.DirectContent;
cb.BeginText();
BaseFont f_cn = BaseFont.CreateFont("c:\\windows\\fonts\\calibri.ttf", BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.SetFontAndSize(f_cn, 6);
cb.SetTextMatrix(475, 15);  //(xPos, yPos)
cb.ShowText("Some text here and the Date: " + DateTime.Now.ToShortDateString());
cb.EndText();

Преимущество состоит в том, что если вам не нужно нарисовать полный размер поля, в который войдет текст. С помощью Simple Column вы рисуете прямоугольник в документе и позиционируете текст внутри него. С ContentByte вы уклоняетесь от прямоугольника и размещаете текст самостоятельно.