Когда я использую объект pdfCanvas, у меня есть метод MoveText
, где я могу установить координаты x и y, но я не вижу этого в объекте Paragraph? Во-вторых, зачем мне нужен объект прямоугольника. Я не добавляю прямоугольник в pdf только текст. Где я хочу, чтобы текст занимал всю ширину страницы. Могу ли я получить размер шрифта и текста, а затем вычислить centeredWidth и centeredHeight, если у меня есть только метод MoveText в pdfCanvas?
for (int i = 1; i <= numberOfPages; i++)
{
PdfPage pdfPage = pdfDocument.GetPage(i);
iText.Kernel.Geom.Rectangle pageSizeWithRotation = pdfPage.GetPageSizeWithRotation();
float n2 = 15F;
float n3 = pageSizeWithRotation.GetHeight() - 10F;
float frontSize = 6.25f;
PdfCanvas pdfCanvas = new PdfCanvas(pdfPage);
iText.Kernel.Geom.Rectangle rectangle = new iText.Kernel.Geom.Rectangle(100, 100, 100, 100);
Canvas canvas = new Canvas(pdfCanvas, rectangle);
PdfFont font = PdfFontFactory.CreateFont("C:\\Windows\\Fonts\\ARIALN.TTF");
Paragraph p = new Paragraph()
.Add(disclaimerText)
.SetFont(font)
.SetFontSize(frontSize)
.SetTextAlignment(TextAlignment.CENTER);
canvas.Add(p);
canvas.Close();
//pdfCanvas.BeginText()
// .SetFillColorRgb(0, 0, 0)
// .SetFontAndSize(PdfFontFactory.CreateFont("C:\\Windows\\Fonts\\ARIALN.TTF"), frontSize)
// .MoveText(n2, n3)
// .ShowText(disclaimerText)
// .EndText();
}
Прежде всего, имейте в виду, что вы используете разные части iText API с PdfCanvas
с одной стороны и Canvas
с другой:
PdfCanvas
— это просто тонкая обертка для инструкций, записанных в PDF. При использовании этого класса вы должны сами определить, где вы хотите начать текстовые строки, где разорвать строки, сколько пробелов добавить между символами, словами и строками и т. д.
Canvas
(и Document
), с другой стороны, имеет свой собственный механизм компоновки, вы только инициализируете его с PdfCanvas
для работы и диапазонами координат, в которых вы хотите, чтобы он работал, а затем вы загружаете его абзацами, таблицами и т. д., которые Canvas
правильно устроит.
Таким образом, у вас, по сути, есть выбор, хотите ли вы в первую очередь организовать все самостоятельно, или вы в первую очередь хотите оставить эту задачу iText.
При этом давайте посмотрим на ваши вопросы:
When I use the pdfCanvas object I have the
MoveText
method where I can set the x and y coordinate but I don't see that in the Paragraph object?
Paragraph
s в основном предназначены для автоматической верстки Canvas
и Document
. Тем не менее, вы можете статически расположить их по заданным координатам, используя перегрузки SetFixedPosition
.
Second thing is why do I need the rectangle object I am not adding any Rectangle to the pdf just Text.
Вам нужен прямоугольник, чтобы сказать Canvas
, где на (теоретически бесконечной) PdfCanvas
координатной плоскости он должен расположить объекты, которые вы ему даете.
Where I want the text to take the full width of the page.
Затем используйте поле полной обрезки этой страницы, предполагая, что вы имеете в виду полную ширину видимый страницы на экране или конечного печатного продукта. Вы можете получить его, используя PdfPage
метод GetCropBox
.
Если вы не уверены, какие существуют «полные ширины страницы», взгляните на этот ответ.
Can I get the size of the font and text and then calculate the centeredWidth and centeredHeight if I only have MoveText method in pdfCanvas?
Вы не получить размер шрифта, вы набор его (используя SetFontAndSize
, как показано в вашем коде). Вы также устанавливаете шрифт. И объект PdfFont
, который вы установили, имеет хорошие перегрузки GetWidth
для определения ширины текста, нарисованного с использованием этого шрифта. Это в сочетании с упомянутым выше полем обрезки и тривиальной математикой позволяет вам рассчитать все, что вам нужно для простого рисования текста.
Это смотря какой текст. Если это всего лишь одно слово в фиксированной позиции, возможно, PdfCanvas
напрямую. Если больше текста, возможно, с соответствующим форматированием, то Canvas
. Что-то промежуточное... ну, зависит от моего настроения... ;)
Вы рекомендуете использовать «Canvas» вместо «PdfCanvas», если это просто текст.