IText7 MoveText и прямоугольный объект

Когда я использую объект 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();
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Прежде всего, имейте в виду, что вы используете разные части iText API с PdfCanvas с одной стороны и Canvas с другой:

PdfCanvas — это просто тонкая обертка для инструкций, записанных в PDF. При использовании этого класса вы должны сами определить, где вы хотите начать текстовые строки, где разорвать строки, сколько пробелов добавить между символами, словами и строками и т. д.

CanvasDocument), с другой стороны, имеет свой собственный механизм компоновки, вы только инициализируете его с 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?

Paragraphs в основном предназначены для автоматической верстки 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 для определения ширины текста, нарисованного с использованием этого шрифта. Это в сочетании с упомянутым выше полем обрезки и тривиальной математикой позволяет вам рассчитать все, что вам нужно для простого рисования текста.

Вы рекомендуете использовать «Canvas» вместо «PdfCanvas», если это просто текст.

Jefferson 16.03.2022 21:16

Это смотря какой текст. Если это всего лишь одно слово в фиксированной позиции, возможно, PdfCanvas напрямую. Если больше текста, возможно, с соответствующим форматированием, то Canvas. Что-то промежуточное... ну, зависит от моего настроения... ;)

mkl 16.03.2022 23:29

Другие вопросы по теме