java - UTF-8字符html内容字符串转pdf

标签 java maven itext

必须转换 html 字符串 pdf。Html 字符串包含 utf-8 字符。它不是英语。我已经尝试过现有的解决方案

这是我的maven代码。这里我使用1.3版本的itext和5.5.6版本的xmlworker。

<dependency>
    <groupId>itext</groupId>
    <artifactId>itext</artifactId>
    <version>${itext.version}</version>
</dependency>
<dependency>
    <groupId>com.itextpdf.tool</groupId>
    <artifactId>xmlworker</artifactId>
    <version>${xmlworker.version}</version>
</dependency>
<itext.version>1.3</itext.version>
<xmlworker.version>5.5.6</xmlworker.version>    

这是我的java代码。该代码对于英语来说运行良好。它不适用于其他语言。它显示该位置的空白区域。

document = new Document();
PdfWriter docWriter = PdfWriter.getInstance(document, new FileOutputStream(file));
document.setMargins(5, 5, 25, 5);
document.setMarginMirroring(false);
Rectangle rect = new Rectangle(30, 30, 500, 800);
document.setPageSize(PageSize.A4);
rect.setBorder(Rectangle.BOX);
docWriter.setBoxSize("footer", rect);
document.open();

CSSResolver cssResolver = new StyleAttrCSSResolver();
CssFile cssFile = XMLWorkerHelper.getCSS(new ByteArrayInputStream("body {font-family:Arial, Arial Unicode MS, sans-serif}".getBytes()));
cssResolver.addCss(cssFile);
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontProvider.register("D:/opt/data/files/ttf/arialuni.ttf");
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
// HTML
HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
// Pipelines
ElementList elements = new ElementList();
ElementHandlerPipeline pdf = new ElementHandlerPipeline(elements, null);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
InputStream inputStream = new ByteArrayInputStream(pdfFormatData.getBytes(Charset.forName("UTF-8")));

// XML Worker
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
p.parse(inputStream, Charset.forName("UTF-8"));

PdfPTable table = new PdfPTable(1);
PdfPCell cell = new PdfPCell(); 
cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
for (Element e : elements) {
cell.addElement(e);
}
table.addCell(cell);
document.add(table);

这是我的 html 内容

<!DOCTYPE html>
<html>

<head></head>

<body>
    <table class="table table-responsive borderless datapaneDetailsInfo" style="border: 0px none; width: 100%; border-collapse: collapse;" cellspacing="1" cellpadding="5" align="center">
        <tbody>
            <tr style="border: 0px solid #000; border-collapse: collapse; border-left: 1px solid #000;">
                <td style="border-left: 1px solid #000; border-right: 0px solid #000; border-top: 1px solid #000; border-bottom: 0px solid #000; border-collapse: collapse; display: block;" colspan="1">
                    <p style="margin: 0; text-align: right;"><img style="width: 100px; height: 75px;" src="https://app.bizbee.io/images/orgs/brandings/logo_orig635.png" alt="" /></p>
                </td>
                <td style="border-right: 1px solid #000; border-top: 1px solid #000; border-bottom: 1px solid #000; border-collapse: collapse;" colspan="9">
                    <p style="margin: 0; text-align: center;"><strong style="font-size: 16px;">aa Malvia Nagar</strong></p>
                    <p style="margin: 0; text-align: center;">JBREDDY NILAYAM, 14-20, 677/584, Hyderabad, 500018, 56565656801 </p>
                    <p style="margin: 0; text-align: center;"> GSTIN : GSTIN00993315 </p>
                </td>
            </tr>
            <tr style="border: 1px solid #000; border-collapse: collapse;">
                <td style="border-left: 1px solid #000; border-bottom: 1px solid #000; border-collapse: collapse;">
                    <p style="margin: 0; text-align: center;"><strong style="font-size: 15px;">SO-725</strong></p>
                </td>
                <td style="border-collapse: collapse; border-bottom: 1px solid #000;">
                    <p style="margin: 0; text-align: center; font-size: 15px;"><strong>26 Jul 2019 Fri</strong></p>
                </td>
                <td style="border-collapse: collapse; border-bottom: 1px solid #000; text-align: center;">
                    <p style="margin: 0;"><strong style="color: blue;">CLEAN</strong></p>
                </td>
                <td style="border-collapse: collapse; border-bottom: 1px solid #000; text-align: center;">
                    <p style="margin: 0px;"><strong style="color: red;"></strong><strong style="color: green;"> PAID </strong></p>
                    <p style="margin: 0px; color: green; font-size: 10px;"></p>
                </td>
                <td style="border-right: 1px solid #000; border-collapse: collapse; bor der-bottom: 1px solid #000;" colspan="2">
                    <p style="margin: 0px;"><strong> Gggg-6666663322</strong></p>
                    <p style="margin: 0px;"><strong>14-20-677/583/A</strong></p>
                    <p style="margin: 0px;"><strong>Tulasi Nagar,Ranga Reddy</strong></p>
                    <p style="margin: 0px;"> <strong>5678932</strong> </p>
                </td>
            </tr>
            <tr style="border-collapse: collapse;">
                <td style="border-right: 1px solid #000; border-left: 1px solid #000; border-collapse: collapse; border-bottom: 1px solid #000; width: 20%;">
                    <p style="margin: 0; text-align: center;">AUD : 107585.36
                        <br /> Previous Due</p>
                </td>
                <td style="border-right: 1px solid #000; border-collapse: collapse; border-bottom: 1px solid #000; width: 20%;">
                    <p style="margin: 0; text-align: center;">AUD : 0.00
                        <br /> Bill Amount</p>
                </td>
                <td style="border-right: 1px solid #000; border-collapse: collapse; border-bottom: 1px solid #000; width: 40%;" colspan="2">
                    <p style="margin: 0; text-align: center;">AUD : 0.00
                        <br /> Paid Amount</p>
                </td>
                <td style="border-right: 1px solid #000; border-collapse: collapse; border-bottom: 1px solid #000; width: 20%;">
                    <p style="margin: 0; text-align: center;">AUD : 107585.36
                        <br /> Balance Due</p>
                </td>
            </tr>
            <tr style="border: 1px solid #000; border-collapse: collapse;">
                <td style="border-right: 1px solid #000; border-left: 1px solid #000; border-collapse: collapse; border-bottom: 1px solid #000;">
                    <p style="margin: 0;"></p>
                    <p style="margin: 0;"><strong>Total Pcs :  3.00 </strong></p>
                </td>
                <td style="border-right: 1px solid #000; border-collapse: collapse; border-bottom: 1px solid #000;">
                    <p style="margin: 0; text-align: center;"><strong>Type :  Regular  </strong></p>
                </td>
                <td style="border-right: 1px solid #000; border-collapse: collapse; border-bottom: 1px solid #000;" colspan="2">
                    <p style="margin: 0; text-align: center;"><strong>Created Time: </strong> 26 Jul 2019 Fri 05:45 PM</p>
                </td>
                <td style="border-right: 1px solid #000; border-collapse: collapse; border-bottom: 1px solid #000;" colspan="1">
                    <p style="margin: 0; text-align: center;"><strong>Due Date : </strong> 30 Jul 2019 Tue</p>
                </td>
            </tr>
        </tbody>
    </table>
    <table class="table table-responsive borderless datapaneDetailsInfo" style="border: 0px none; width: 100%; border-collapse: collapse;" cellspacing="1" cellpadding="5" align="center">
        <tbody>
            <tr style="border-top: 0px solid #000; border-left: 1px solid #000; border-right: 1px solid #000; border-collapse: collapse;">
                <td style="width: 15%; border-left: 1px solid #000; border-collapse: collapse;">
                    <p style="margin: 0;"><strong>Pcs</strong></p>
                </td>
                <td style="width: 30%; border-collapse: collapse;">
                    <p style="margin: 0;"><strong>Qty</strong></p>
                </td>
                <td style="width: 80%; border-collapse: collapse;" colspan="2">
                    <p style="margin: 0;"><strong>Particular's</strong></p>
                </td>
                <td style="width: 100%; border-collapse: collapse; border-right: 1px solid #000;">
                    <p style="margin: 0; text-align: right;"><strong>Amount</strong></p>
                </td>
            </tr>
        </tbody>
    </table>
    <p style="margin: 0;"> </p>
    <table class="table table-responsive borderless datapaneDetailsInfo" style="border: 0px none; width: 100%; border-collapse: collapse;" cellspacing="1" cellpadding="5" align="center">
        <tbody>
            <tr style="border-left: 1px solid #000; border-right: 1px solid #000; border-collapse: collapse;">
                <td style="width: 15%; border-collapse: collapse; border-left: 1px solid #000;">
                    <p style="margin: 0;"><strong> 1.0 </strong></p>
                </td>
                <td style="width: 30%; border-collapse: collapse;">
                    <p style="margin: 0;"><strong>1.0</strong></p>
                </td>
                <td style="width: 80%; border-collapse: collapse;" colspan="2">
                    <p style="margin: 0;"><strong>డ్రై క్లీన్ - पतलून (DC/DC)</strong>@0.00 </p>
                </td>
                <td style="width: 100%; border-collapse: collapse; border-right: 1px solid #000;">
                    <p style="margin: 0; text-align: right;"><strong>0.00</strong></p>
                </td>
            </tr>
        </tbody>
    </table>
    <p style="margin: 0;"></p>
    <p style="margin: 0;"> </p>
    <table class="table table-responsive borderless datapaneDetailsInfo" style="border: 0px none; width: 100%; border-collapse: collapse;" cellspacing="1" cellpadding="5" align="center">
        <tbody>
            <tr style="border-left: 1px solid #000; border-right: 1px solid #000; border-collapse: collapse;">
                <td style="width: 15%; border-collapse: collapse; border-left: 1px solid #000;">
                    <p style="margin: 0;"><strong> 1.0 </strong></p>
                </td>
                <td style="width: 30%; border-collapse: collapse;">
                    <p style="margin: 0;"><strong>1.0</strong></p>
                </td>
                <td style="width: 80%; border-collapse: collapse;" colspan="2">
                    <p style="margin: 0;"><strong>డ్రై క్లీన్ - టవుజర్ (DC/DC)</strong>@0.00 </p>
                </td>
                <td style="width: 100%; border-collapse: collapse; border-right: 1px solid #000;">
                    <p style="margin: 0; text-align: right;"><strong>0.00</strong></p>
                </td>
            </tr>
        </tbody>
    </table>
    <p style="margin: 0;"></p>
    <p style="margin: 0;"> </p>
    <table class="table table-responsive borderless datapaneDetailsInfo" style="border: 0px none; width: 100%; border-collapse: collapse;" cellspacing="1" cellpadding="5" align="center">
        <tbody>
            <tr style="border-left: 1px solid #000; border-right: 1px solid #000; border-collapse: collapse;">
                <td style="width: 15%; border-collapse: collapse; border-left: 1px solid #000;">
                    <p style="margin: 0;"><strong> 1.0 </strong></p>
                </td>
                <td style="width: 30%; border-collapse: collapse;">
                    <p style="margin: 0;"><strong>1.0</strong></p>
                </td>
                <td style="width: 80%; border-collapse: collapse;" colspan="2">
                    <p style="margin: 0;"><strong>డ్రై క్లీన్ - Top (DC/DC)</strong>@0.00 </p>
                </td>
                <td style="width: 100%; border-collapse: collapse; border-right: 1px solid #000;">
                    <p style="margin: 0; text-align: right;"><strong>0.00</strong></p>
                </td>
            </tr>
        </tbody>
    </table>
    <p style="margin: 0;"></p>
    <p style="margin: 0;"></p>
    <table class="table table-responsive borderless datapaneDetailsInfo" style="border: 0px none; width: 100%; border-collapse: collapse;" cellspacing="1" cellpadding="5" align="center">
        <tbody>
            <tr style="border: 0px solid #000; border-collapse: collapse;">
                <td style="width: 33.33%; border-left: 1px solid #000; border-collapse: collapse; border-top: 1px solid #000;">
                    <p style="margin: 0;"></p>
                </td>
                <td style="width: 33.33%; border-collapse: collapse; border-top: 1px solid #000;" colspan="4">
                    <p style="margin: 0;"><strong>Booked by : Malik</strong></p>
                </td>
                <td style="width: 33.33%; border-right: 1px solid #000; border-collapse: collapse; border-top: 1px solid #000;">
                    <p style="margin: 0; text-align: right;"><strong>Sub Total : 0.00</strong></p>
                </td>
            </tr>
        </tbody>
    </table>
    <p style="margin: 0;"></p>
    <p style="margin: 0;"></p>
    <p style="margin: 0;"></p>
    <p style="margin: 0;"></p>
    <table class="table table-responsive borderless datapaneDetailsInfo" style="border: 0px none; width: 100%; border-collapse: collapse;" cellspacing="1" cellpadding="5" align="center">
        <tbody>
            <tr style="border: 0px solid #000; border-collapse: collapse;">
                <td style="width: 40%; border-left: 1px solid #000; border-collapse: collapse; border-bottom: 1px solid #000;">
                    <p style="margin: 0; font-size: 10px;"></p>
                </td>
                <td style="width: 30%; border-collapse: collapse; border-bottom: 1px solid #000;">
                    <p style="margin: 0;"></p>
                </td>
                <td style="width: 30%; border-right: 1px solid #000; border-collapse: collapse; border-bottom: 1px solid #000;">
                    <p style="margin: 0; text-align: right;"><strong>Current Due : 0.00</strong></p>
                </td>
            </tr>
        </tbody>
    </table>
    <p style="margin: 0;"></p>
    <table style="width: 100%;" cellpadding="5">
        <tbody>
            <tr>
                <td align="center"></td>
            </tr>
        </tbody>
    </table>
</body>

</html>

最佳答案

我认为,你应该将 utf-8 添加到你的 html 内容中,例如

<head>
  <meta charset="UTF-8">
</head>

关于java - UTF-8字符html内容字符串转pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57425355/

相关文章:

java - 环绕字符中的字符

spring - 无法使用最新的 Firebase SDK 依赖项解析 FirebaseOptions

java - 'java.util.concurrent.ExecutionException : org. apache.catalina.LifecycleException:'

java - iText - 如何将书签名称与特定页码链接

c# - 部分填写后 PDF 表单不再可编辑

java - 在另一台机器上的 JAR 文件中显示 jLabel 图标时出现问题

java - Hibernate一对一关系错误

java - 如何捕获 iframe 重定向?

java - 无法部署eclipse导出的war文件

java - 如何将可滚动的 JPanel 导出为 pdf 文件