Добавление абсолютного позиционного текста
Я пытаюсь создать письмо, оставляя пустое место, а затем вставляю поверх него адрес, в зависимости от того, где будет окно конверта.
Итак, я начинаю делать это:
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();
Я надеялся, что смогу добавить текст в эти координаты, но я не мог понять, как... кто-нибудь знает способ сделать это?
Ответы
Ответ 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 вы уклоняетесь от прямоугольника и размещаете текст самостоятельно.