【问题标题】:Setting font to paragraph in pdf using iText java使用iText java将字体设置为pdf中的段落
【发布时间】:2011-08-14 15:21:55
【问题描述】:

我试图在 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)); 
}

谁能帮我找到解决办法?

【问题讨论】:

    标签: java fonts itext paragraph


    【解决方案1】:

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

    【讨论】:

    • 这真的很奇怪,但它有效,当设置对齐方式时,必须在构造函数中设置字体
    【解决方案2】:

    我很困惑,几乎发布了错误的答案。

    您的段落的字体设置正确。只需尝试插入一个字符串即可查看。

    您的问题在于您的 for 循环。在段落中,您要添加一个 Element 对象。 Element 由 Chunk 对象组成,每个对象都有自己的 Font 数据。

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

    【讨论】:

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

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

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

    【讨论】:

    • 完美运行!谢谢你拯救了我的一天!
    【解决方案4】:

    我是新手。
    但我向你展示了一种将字体设置为的最简单方法 段。

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

    通过这种方式,我正在更改字体、字体大小、颜色等。

    这对我有用..

    编码愉快..

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2012-02-27
        • 2015-06-13
        • 2016-03-04
        • 2011-02-07
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多