微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决这个 itext v5 pdf 格式错误?

如何解决如何解决这个 itext v5 pdf 格式错误?

使用 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,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,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,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 看起来像这样。

enter image description here

代替

enter image description here

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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。