0

我在前端使用富文本编辑器让用户创建 PDF 文件(使用 java + itext)。问题是当用户输入大量空格(按空格键)时,会导致文本超出 PDF 文件的右边距。

普通文字: 在此处输入图像描述

PDF: 在此处输入图像描述

现在我添加了很多空格: 在此处输入图像描述

PDF: 在此处输入图像描述

这是我用来生成 PDF 的 HTML 模板:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <style>@page { size: A4; margin: 15mm 15mm 30mm 15mm; @bottom-left { font-family: Verdana; font-size: 10.0pt; content: "P&aacute;gina " counter(page) " de " counter(pages); } } body { font-family: Verdana; font-size: 10.0pt; } table { border-collapse: collapse; border-spacing: 0; table-layout: auto; -fs-table-paginate: paginate;}
    </style>
</head>
<body>
    <table style="width: 100%;">
        <thead>
            <tr>
                <th style="width: 100%;">
                    some header
                </th>
            </tr>
        </thead>
        <tfoot>
            <tr>
                <td style="width: 100%;">
                    some footer
                </td>
            </tr>
        </tfoot>
        <tbody>
            <tr>
                <td>
                    text from rich editor goes here
                </td>
            </tr>
        </tbody>
    </table>
</body>
</html>

我已经尝试将表格和正文设置为以像素为单位的特定宽度,但它会生成具有相同问题的 PDF。

这是生成 PDF 的代码:

private void createPdfFile(Documento documento, String pathPdf) throws DocumentException, IOException {
    PdfWriter pdfWriter = new PdfWriter(new FileOutputStream(pathPdf));
    PdfDocument pdfDocument = new PdfDocument(pdfWriter);

    PdfDocumentInfo pdfInfo = pdfDocument.getDocumentInfo();
    pdfInfo.setCreator(creatorText);

    if (!StringUtils.isEmpty(documento.getTitleMetadata())) {
        pdfInfo.setTitle(documento.getTitleMetadata());
    }
    if (!StringUtils.isEmpty(documento.getAuthorMetadata())) {
        pdfInfo.setAuthor(documento.getAuthorMetadata());
    }
    if (!StringUtils.isEmpty(documento.getSubjectMetadata())) {
        pdfInfo.setSubject(documento.getSubjectMetadata());
    }

    ConverterProperties converterProperties = new ConverterProperties();
    HtmlConverter.convertToPdf(htmlHeader + documento.getBodyHtml() + htmlFooter, pdfDocument, converterProperties);

    pdfDocument.close();
}
4

1 回答 1

0

我将 CSS 属性“table-layout”设置为“fixed”,它现在可以工作了。完整的 HTML 模板是:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <style>@page { size: A4; margin: 15mm 15mm 30mm 15mm; @bottom-left { font-family: Verdana; font-size: 10.0pt; content: "P&aacute;gina " counter(page) " de " counter(pages); } } body { font-family: Verdana; font-size: 10.0pt; } table { border-collapse: collapse; border-spacing: 0; table-layout: auto; -fs-table-paginate: paginate;}
    </style>
</head>
<body>
    <table style="width: 100%; table-layout: fixed;">
        <thead>
            <tr>
                <th style="width: 100%;">
                    some header
                </th>
            </tr>
        </thead>
        <tfoot>
            <tr>
                <td style="width: 100%;">
                    some footer
                </td>
            </tr>
        </tfoot>
        <tbody>
            <tr>
                <td>
                    text from rich editor goes here
                </td>
            </tr>
        </tbody>
    </table>
</body>
</html>
于 2018-07-04T14:12:44.403 回答