Как форматировать столбцы с помощью iText7

Я пишу программу, которая позволит мне печатать теги продаж в моем магазине Bowling Pro Shop. В настоящее время я делаю их вручную, но стараюсь упростить создание. Я создал программу с VS2015, которая запрашивает все поля и сохраняет их в базе данных Access, а также распечатывает их в созданном мною шаблоне. Проблема, с которой я столкнулся, заключается в форматировании текста так, чтобы он выглядел так, как если бы я делал его в Photoshop. Даже если он немного выключен, это нормально, но в настоящее время я не могу понять, как написать это в шаблоне так, как я хочу. Это шаблон, на который я пытаюсь распечатать, нижняя часть отформатирована с помощью Photoshop, а верхняя пустая. Думаю, проще всего будет создать одно изображение и добавить его в pdf (5 раз).

Вот мой код:

    private void print()
    {
        string dest = @"C:\Users\bwilliams\Desktop\balltest1.pdf";
        string src = @"C:\Users\bwilliams\Desktop\BallTags.pdf";
        Rectangle[] columns = new Rectangle[]
        {
            new Rectangle(100,500,150,200),
            new Rectangle(250,500,150,200),
            new Rectangle(400,500,150,200),
            new Rectangle(550,500,150,200)

        };
        PdfWriter writer = new PdfWriter(dest);
        PdfDocument pdf = new PdfDocument(new PdfReader(src), writer);
        Document doc = new Document(pdf,PageSize.A4.Rotate());               
        doc.SetRenderer(new ColumnDocumentRenderer(doc, columns));          
        doc.Add(new Paragraph("Ebonite").SetPaddings(150, 60, 0, 0).SetFontSize(24).SetFont(Arial).SetFixedLeading(24));
        doc.Add(new Paragraph("GB2 MVP").SetPaddings(150, 0, 0, 0).SetFontSize(24).SetFixedLeading(24));
        doc.Add(new Paragraph("$114.95").SetPaddings(150, 0, 0, 0).SetFontSize(24).SetFixedLeading(24));
        doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
        doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
        doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
        doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
        doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
        doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));
        doc.Add(new Paragraph("").SetPaddings(0, 0, 0, 0).SetFontSize(24));







        doc.Close();
    }

У меня просто жестко запрограммирована информация, вместо того, чтобы использовать ввод из текстовых полей. Здесь - это то, что вы получаете, когда нажимаете кнопку «Печать».

Я не уверен, как отформатировать следующую строку для CORE: COVER: FINISH: RG: DIFF:

Я также не уверен, как добавить шрифт Arial (Black) в iText7 Font Factory.

Спасибо, Брэндон


person Bwill    schedule 17.01.2017    source источник


Ответы (1)


Ваш пост содержит разные вопросы.

Шрифты:

Вы хотите создать PdfFont в iText 7. Это делается совершенно другим (и намного более простым) способом по сравнению с iText 5. В iText 5 у вас были классы Font и BaseFont. В этом больше нет необходимости. Вы просто делаете это:

PdfFont font = PdfFontFactory.CreateFont(pathToArialBlack, true);

В этой строке pathToArialBlack - это путь к ARIBLK.TTF, например C:\WINDOWS\Fonts\ARIBLK.TTF.

Столбцы:

Вопрос о столбцах неверен. Глядя на желаемый результат. Я не могу представить, зачем вы использовали ColumnDocumentRenderer. Я бы создал объект Canvas для каждого прямоугольника и передал этот объект Canvas методу, который добавляет содержимое на холст. Убедитесь, что вы добавили байты изображения только один раз, передав объект Image в метод, а не создавая Image в методе столько раз, сколько у вас есть Canvas объектов.

person Bruno Lowagie    schedule 17.01.2017
comment
Как добавить текст на холст, если вы не хотите создавать список? - person Bwill; 17.01.2017
comment
Не могли бы вы уточнить этот вопрос? Почему ты говоришь о List? Как вы думаете, зачем нужен List? Ваш вопрос звучит очень странно. - person Bruno Lowagie; 18.01.2017
comment
Причина моего вопроса в том, что единственный пример, который я нашел на вашем сайте, - это тот, который использует IList в примере «Звездных войн». В своем исходном ответе вы рекомендуете создать холст для каждого текстового поля, которое я хочу иметь? Например. У Ebonite есть собственный холст, у Gamebreaker 2 есть свой холст и т. Д. - person Bwill; 18.01.2017
comment
Я имел в виду главу, в которой обсуждается Canvas: developers.itextpdf.com/content/itext-7-building-blocks/ Я не знаю, что такое Ebonite и Gamebreaker 2. - person Bruno Lowagie; 18.01.2017
comment
Есть ли способ изменить вертикальное выравнивание внутри прямоугольника холста на Среднее, чтобы текст начинал писать в абсолютном центре прямоугольника холста? - person Bwill; 18.01.2017
comment
Привет @Bruno, ссылка сейчас мертвая и интересен вопрос по вертикальному выравниванию .. А можно немного обновить? TIA .. - person TaW; 10.10.2020