【问题标题】:how to resolve this itext v5 pdf format error?如何解决此 itext v5 pdf 格式错误?
【发布时间】:2021-05-19 00:50:33
【问题描述】:

使用 itext 和 xmlworker 版本 5.5.13.2

我需要将带有基本 CSS 的静态 HTML 转换为 pdf。但生成的 PDF 格式/间距/位置不正确。有人可以通过指出我所做的错误或我在代码部分中遗漏的内容来帮助我。

HTML

<!DOCTYPE html>
<html>
​
<head>

</head>
​
<body>
  <div style="margin:5px; width:100%">
    <div style="border:1px solid black;padding: 25px;">
      <div class="row1">
        <div class="floatR" style="min-width: 33%;width: 33%;min-height: 1px; float: right;">
          <h3>
            Tax Invoice/Bill Of Supply/ Cash Memo
          </h3>
          (Original for Recipient)
        </div>
      </div>
      <div class="row1 marginT50p">
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
          <h4>
            Sold By:
            ArtisanIndia Shoppping Private Limited,
          </h4>
          Shop On Plot No. 7 and 8, 41 and 42, Vijay Nagar,
          Patrakar Colony Road, Mansarovar,
          Jaipur - 302020, Rajasthan
          State/UT Code: 08
          Country: India
        </div>
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;"></div>
        <div style="min-width: 33%;width: 33%;min-height: 1px ;float: left;">
          <h4>
            Sold By:
            ArtisanIndia Shoppping Private Limited,
          </h4>
          Shop On Plot No. 7 and 8, 41 and 42, Vijay Nagar,
          Patrakar Colony Road, Mansarovar,
          Jaipur - 302020, Rajasthan
          State/UT Code: 08
          Country: India
        </div>
      </div>
      <div class="row1 marginT25">
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
          <label class="textUnderline">Comapny GSTIN:</label>JKDHFBGKJDJHJ
          <br />
          <label class="textUnderline">Comapny PAN:</label>SDJKHFGB
        </div>
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;"></div>
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
          <label class="textUnderline">Biller GSTIN:</label>JKDHFBGKJDJHJ
          <br />
          <label class="textUnderline">Biller PAN:</label>SDJKHFGB
        </div>
      </div>
​
      <div class="row1 marginT25">
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
          <label class="textBold">Order ID:</label>235235
          <br />
          <label class="textBold">Order Date:</label>12/12/1912
        </div>
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;"></div>
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
          <label class="textBold">Shipping Address:</label>
          <br />
          <label class="textBold"> </label>
          <br />
          Shop On Plot No. 7 and 8, 41 and 42, Vijay Nagar,
          Patrakar Colony Road, Mansarovar,
          Jaipur - 302020, Rajasthan
          State/UT Code: 08
          Country: India
        </div>
      </div>
​
      <div class="row1 marginT25">
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
​
          <label class="textBold">Invoice Date:</label>12/12/1912
          <br />
          <label class="textBold">Order ID:</label>AI/2012/907656767
​
        </div>
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;"></div>
        <div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
          <label class="textBold">Place Of Supply:</label> Maharastra
          <br />
          <label class="textBold">Place Of Delivery:</label>Maharastra
​
        </div>
      </div>
​
      <div class="row1 marginT25">
        <table style="width:100%">
          <tr>
            <th>Sr. No.</th>
            <th>Product</th>
            <th>Description</th>
            <th>HSN</th>
            <th>GST %</th>
            <th>QTY</th>
            <th>Gross Amount</th>
            <th>Discount</th>
            <th>Taxable value</th>
            <th>CGST</th>
            <th>SGST</th>
            <th>IGST</th>
            <th>Total</th>
          </tr>
          <tr>
            <td>1</td>
            <td>Product Description</td>
            <td>Item Description</td>
            <td>123456</td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
          </tr>
          <tr>
            <td>2</td>
            <td>Product Description</td>
            <td>Item Description</td>
            <td>123456</td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
          </tr>
          <tr>
            <td>3</td>
            <td>Product Description</td>
            <td>Item Description</td>
            <td>123456</td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
          </tr>
​
          <tr>
            <td colspan="5">Total</td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
          </tr>
        </table>
​
      </div>
      <div class="row1">
        <div style="min-width: 25%; width: 25%; min-height: 1px;float: left;">
          <label class="textUnderline textBold">
            Seller Registered Address:
            ArtisanIndia Shoppping Private Limited,
          </label>
          Shop On Plot No. 7 and 8, 41 and 42, Vijay Nagar,
          Patrakar Colony Road, Mansarovar,
          Jaipur - 302020, Rajasthan
          State/UT Code: 08
          Country: India
        </div>
      </div>
​
      <div class="row1 marginT50p">
        <div style="min-width: 25%; width: 25%; min-height: 1px;float: left;">
          E. & O. E.
​
        </div>
        <div class=" floatR" style="min-width: 25%; width: 25%; min-height: 1px; float: right;">
          <div class="signbox">
            Sign/Stamp
          </div>
          <span> Ordered Through
          </span>
          <span class="textUnderline">
​
            ArtisanIndia Shoppping Pvt Limited
​
            <br />
            Authorized Signature
          </span>
        </div>
      </div>
    </div>
  </div>
​
</body>
​
</html>

CSS

    * {
      font-family: sans-serif;
      font-size:8px
    }

    .width33 {
      min-width: 33%;
      width: 33%;
      min-height: 1px;
      border:1px solid red
    }

    .width25 {
      min-width: 25%;
      width: 25%;
      min-height: 1px;
      border: 1px solid green;

    }

    .row1:after {
      content: "";
      display: table;
      clear: both;
    }

    .floatL {
      float: left;
    }

    .floatR {
      float: right;
    }

    .marginT25 {
      margin-top: 25px;
    }

    .marginT50p {
      margin-top: 50px
    }

    .textUnderline {
      text-decoration: underline;
    }

    .textBold {
      font-weight: bold;
    }

    table,
    th,
    td {
      border: 1px solid black;
      border-collapse: collapse;
font-size: 10px;
    }

    th,
    td {
      height: 40px;
      text-align: center;
    }

    .signbox {
      vertical-align: middle;
      text-align: center;
      height: 50px;
      border: 1px solid black;
      /* margin: auto; */
    }

Java

        UploadUtil s3Upload = new UploadUtil();
        PdfWriter pdfWriter = null;
        
        ByteArrayOutputStream gg = new ByteArrayOutputStream();
        try{
            Document document = new Document();       

            PdfWriter.getInstance(document, gg);
            document.open();
            XMLWorkerHelper xmlWorkerHelper = XMLWorkerHelper.getInstance();

            
            xmlWorkerHelper.parseXHtml(pdfWriter, document, new FileInputStream("C:\\Users\\jj\\Desktop\\asdf\\tt.html"), new FileInputStream("C:\\Users\\jj\\Desktop\\asdf\\ttt.css"));
            
            document.close();
            FileOutputStream fos = new FileOutputStream("C:\\Users\\jj\\Desktop\\asdf\\test.pdf");
            fos.write(gg.toByteArray());
            fos.close();
            
                        }
        catch(Exception e){
            System.out.println("asdf");
        }

生成的 pdf 文件如下所示。

而不是

这里有人可以指出发生这种情况的原因或我错过了什么或做错了什么吗?

【问题讨论】:

    标签: java spring itext itext7


    【解决方案1】:

    iText 5.5.13.2 是 iText 产品的旧版本,不再支持。很可能在 html 或 css 中有一些不受支持的功能。我可以猜测不支持浮动属性。可能存在百分比宽度问题。您可以尝试使用 html 和 css 文件来尝试使 pdf 看起来可以接受,但最简单的方法是使用 iText 产品的最新版本,即 iText 7

    【讨论】:

    • 需要一个免费的替代品,因此我使用的是 v5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2017-12-12
    • 2012-02-14
    • 2015-04-12
    • 2016-06-21
    • 2020-11-16
    相关资源
    最近更新 更多