Установка шрифта в абзац в pdf с помощью iText java

Я пытался создать pdf с помощью iText в java. И я потерпел неудачу, когда попытался установить шрифт в абзац. Точная проблема заключается только в том, что размер шрифта не применяется. Я использовал следующий код.

StringReader strReader = new StringReader(content);
arrList = HTMLWorker.parseToList(strReader, null);

Font font = new Font(BaseFont.createFont("c:\\ARIALUN0.ttf", BaseFont.IDENTITY_H, 
    BaseFont.EMBEDDED), 6, Font.BOLD, new Color(0, 0, 0));

Paragraph para = new Paragraph();  
para.setFont(font);
for (int k = 0; k < arrList.size(); ++k) {                   
    para.add((com.lowagie.text.Element)arrList.get(k)); 
}

Может ли кто-нибудь помочь мне найти решение?


person Nims    schedule 28.04.2011    source источник


Ответы (5)


//используйте этот код.Иногда setfont() не будет работать с абзацем

try
{

    FileOutputStream out=new FileOutputStream(name);
    Document doc=new Document();
    PdfWriter.getInstance(doc, out);
    doc.open();

    Font f=new Font(FontFamily.TIMES_ROMAN,50.0f,Font.UNDERLINE,BaseColor.RED);
    Paragraph p=new Paragraph("New PdF",f);

    p.setAlignment(Paragraph.ALIGN_CENTER);

    doc.add(p);
    doc.close();
    }
    catch(Exception e)
    {
        System.out.println(e);
    }
}
person Bijin P Thomas    schedule 01.10.2013
comment
Это действительно странно, но это работает, при настройке выравнивания шрифт должен быть установлен в конструкторе - person Mateus Viccari; 24.04.2015

Я был довольно смущен и чуть не опубликовал неправильный ответ на этот вопрос.

Ваш абзац имеет правильный шрифт. Просто попробуйте вставить строку, чтобы увидеть.

Ваша проблема заключается в вашем цикле for. К абзацу вы добавляете объекты Element. Элемент состоит из объектов Chunk, каждый из которых имеет свои собственные данные Font.

Попробуйте установить шрифт фрагментов в ваших элементах при их создании. Это должно решить вашу проблему.

person Zach    schedule 28.04.2011
comment
Я анализирую данные с помощью HTMLWorker и сохраняю в arrayList. Чанки позволяют использовать только строковые данные. Если элементы массива преобразуются в строку, то теги html не применяются в документе должным образом. - person Nims; 28.04.2011
comment
В вашем (Элементе) arrList.get(k) вы добавляете элемент, который состоит из фрагментов. В чанках уже есть данные шрифта. Попробуйте создать фрагменты, изменить шрифт и перекомпоновать элемент. Из-за конфликта я не думаю, что есть другой способ сделать это с iText. - person Zach; 28.04.2011
comment
@Nims: @Zach: У меня та же проблема, но я не понял, как мне разыгрывать куски? можно какой-нибудь пример? Спасибо. - person user590586; 03.05.2011

Попробуйте это, это сохранит стиль текста:

 Paragraph _p = new Paragraph();

         _p.setFont(regular);

        ArrayList htmlObjs = (ArrayList) HTMLWorker.parseToList(new StringReader(text_), null);

        for (int k = 0; k < htmlObjs.size(); ++k)
        {
            ArrayList<Chunk> chunk = ((Paragraph) htmlObjs.get(k)).getChunks();
            for (int l = 0; l < chunk.size(); l++)
            {
                Font _original_chunk_font = chunk.get(l).getFont();
                Font _newchunk_font = new Font(unicode);

                _newchunk_font.setFamily(_original_chunk_font.getFamilyname());
                _newchunk_font.setStyle(_original_chunk_font.getStyle());
                _newchunk_font.setSize(_original_chunk_font.getSize());
                _newchunk_font.setColor(_original_chunk_font.getColor());

                chunk.get(l).setFont(_newchunk_font);
            }
            _p.add((Element)htmlObjs.get(k));
        }
person user590586    schedule 08.05.2011
comment
Работал отлично! Спасибо, что спасли мой день! - person Gláucio Leonardo Sant'ana; 25.11.2018

Я новичок в этом.
но я покажу вам самый простой способ установить шрифт для абзаца.

document.open();
document.add(new Paragraph(" Hello World ", FontFactory.getFont(FontFactory.TIMES_ROMAN,18, Font.BOLD, BaseColor.BLACK)));
document.close();

Таким образом, я меняю шрифт, размер шрифта, цвет и т. д.

это сработало для меня..

Удачного кодирования..

person Sujeet Kumar    schedule 03.04.2017

Для добавления Font в itextpdf Paragraph вы можете просто использовать Chunk, затем вы можете установить Font в Chunk, а затем добавить Chunk в Paragraph.

Пример:

Font f3 = new Font(Font.FontFamily.TIMES_ROMAN, 18.0f, Font.BOLD, BaseColor.BLACK);
Chunk c3 = new Chunk("INVOICE", f3);
c3.setBackground(BaseColor.WHITE);       
Paragraph p3 = new Paragraph(c3);
p3.setAlignment(Element.ALIGN_CENTER);
person CyberAbhay    schedule 11.05.2016