使用iText Java将字体设置为PDF段落

5

我试图使用Java中的iText创建PDF文件。但是当我尝试为段落设置字体时失败了。确切的问题是只有字体大小没有被应用。我使用了以下代码:

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)); 
}

有人能帮我找到解决方案吗?

5个回答

12

//使用此代码。有时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);
    }
}

这真的很奇怪,但它能工作。在设置对齐方式时,字体必须在构造函数中设置。 - Mateus Viccari

3

我曾经很困惑,差点回答错了。

你的段落字体已经正确设置。只需尝试插入字符串即可。

问题出在你的for循环上。向段落添加元素对象时,每个元素都由块对象组成,每个块对象都有自己的字体数据。

尝试在实例化元素时设置块中的字体。这应该可以解决你的问题。


我正在使用HTMLWorker解析数据并存储在ArrayList中。 Chunks只允许字符串数据。如果将ArrayList项转换为字符串,则HTML标记无法正确应用于文档中。 - Nims
在您的(Element)arrList.get(k)中,您正在添加一个由块组成的元素。这些块已经具有字体数据。尝试将块强制转换,更改字体并重新组合元素。由于冲突,我认为使用iText没有其他方法可以做到这一点。 - Zach
@Nims: @Zach:我也有同样的问题,但我不明白我应该如何转换这些块?你能给个例子吗?谢谢。 - user590586

2

尝试这个,它将保存文本的样式:

 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));
        }

完美地工作了!感谢您挽救了我的一天! - Gláucio Leonardo Sant'ana

1

我是新手。
但我会向您展示一种最简单的方法来设置段落字体。

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

通过这种方式,我可以改变字体、字号、颜色等。

对我很有效。

愉快的编程。


0

如果要将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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接