HTML 使用 iText 转换为 PDF,格式问题

HTML to PDF using iText, formatting issues

我在 java 中使用 iText 编写 PDF 文件。我正在尝试写一个像标题这样的段落,然后文本在同一行的标题之后开始,如

标题: 这是现在的段落...

标题为粗体,段落为普通文本,但我无法使用 iText 执行此操作。我尝试使用:

fonts[2] = new Font(Font.HELVETICA, 8, Font.BOLD);
Paragraph paranumber = new Paragraph(
    fonts[2].getCalculatedLeading(1),
    headingText.trim()
                + " ", fonts[0]);

Paragraph para = new Paragraph(
    fonts[0].getCalculatedLeading(1), contentText.trim(), fonts[0]);
        para.setAlignment(Element.ALIGN_JUSTIFIED);
        para.setSpacingAfter(3f);

//Now adding the para to paraNumber that is having the heading and expecting
//that it will be added very after the heading, but this does not show correct 
//result, formatting issue.

paranumber.add(para);
mct.addElement(paranumber);

我还尝试创建一个新段落并将两个段落(标题段落和普通文本段落)添加到新段落中,但这也没有显示正确的结果。请参阅下面的块。

Paragraph newPara = new Paragraph();
newPara.add(paranumber);
newPara.add(para);

但这也没有显示正确的格式。

或者如果有人可以 建议我使用其他方法从 HTML 创建 PDF 那也很好,这样我就可以重写模块来创建需要PDF。请指教

段落通常使用 indentation and increased leading 之类的概念在视觉上将它们区分开来。它们是块级元素,而不是内联元素。 在另一个段落中添加一个段落没有意义。添加的段落通常会另起一行,本质上是一个单独的段落。

要获得具有不同字体的段落,如您的示例,您可以在 iText 中使用 Chunks。 Chunk 基本上是一段带有关联字体的文本。

Font fontbold = new Font(BaseFont.createFont(BaseFont.HELVETICA_BOLD,
    BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 12);
Font fontregular = new Font(BaseFont.createFont(BaseFont.HELVETICA,
    BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 12);
Chunk header = new Chunk("Heading: ", fontbold);
Chunk content = new Chunk("this is a para now ...", fontregular);
Paragraph paragraph = new Paragraph();
paragraph.add(header);
paragraph.add(content);
document.add(paragraph);

结果如下所示:

从您的问题和代码示例中不清楚 HTML 是如何涉及的。我假设您正在以某种方式解析 HTML 输入并使用 iText Elements 将解析的内容转换为 PDF。这是一种有效的方法。或者,您可以查看 iText XML Worker,它执行 XHTML (+CSS) 到 PDF 的转换。