HTML / CSS报告-RTL语言

时间:2018-09-21 20:43:03

标签: html css angularjs pdfmake

关于html布局,我根本不是很熟练。

我正在尝试生成看起来像这样的发票报告:

打印尺寸必须为13.9cm x 22.8 cm

enter image description here

但是由于使用阿拉伯语,所以我感到非常困难,而阿拉伯语是Web开发中的纯噩梦,这是我第一个使用阿拉伯语的项目。

我尝试了pdfmake的Angular库,它提供了一种更好的方式来生成此类报告,但是它不支持阿拉伯字体:(!

因此,我正在尝试在html / css中复制相同的布局:

enter image description here

看起来比原来的难看得多;而且很难在此处打印出相同的页面尺寸。

我的html布局:

<div ng-if="printVar === true " style="width:13.9cm; height:22.8cm; border:1px solid black;">

            <style>
                    .navbar-primary {

                            display: none !important;
                    }

                    .navbar {
                            display: none !important;
                    }
            </style>




            <h3 style="text-align: center"> شركة ففف فف ش.م.ل </h3>
            <br>
            <br>
            <div  style= "text-align: center;"> 
             الدورة - شارع الضمان الاجتماعي - لبنان 

             هاتف: ٠١\فففف- فففف</div>
            <hr>

             <div style="margin:0px 30px 0px 20px; text-align: right">
            <span style="float: right;">:المرجع</span>    <span  style="padding:20px"> {{reference}}   </span>  <br>
                <span style="float: right;">:التاريخ</span>    <span  style="padding:20px"> {{datenow |date: "MM/dd/yy" }}   </span>  <br>

             <hr>
            <br>


            <div style="margin:0px 30px 0px 20px; text-align: right">
                    <br>
                    <br>  <span style="float: right;">رقم الشاحنة</span>    <span style="padding:20px"> {{truckNumber}}   </span>
                    <br>
                    <br> <span style="float: right;"> الشركة </span>   <span style="padding:20px"> {{company}} </span>
                    <br>
                    <br> <span style="float: right;"> السائق </span> <span style="padding:20px">{{driverName}} </span>
                    <br>
                    <br>  <span style="float: right;"> نوع البضاعة  </span>     <span style="padding:20px"> {{commodity}}</span>
                    <br>
                    <br> <span style="float: right;">شركة الشحن </span>    <span style="padding:20px">{{freightCompany}}</span> 
                    <br>
                    <br>
                    <br>

                    <div style="border:1px solid black;">

                            <br>     <span style="float: right;">   :(الوزنة الأولى (كلغ</span>   &nbsp&nbsp    <span style="padding:20px">    {{firstWeight}} </span>

                            <br>      {{firstWeightDate|date: "MM/dd/yy - hh:mm:ss"}}  


                          <br> <br>     <span style="float: right;"> :(الوزنة  الثانية (كلغ   </span>   &nbsp&nbsp  <span style="padding:20px">    {{secondWeight}} </span>

                          <br>      {{secondWeightDate|date: "MM/dd/yy - hh:mm:ss"}}  
                            <br> 
                       <span style="float: right;">:الوزن الصافي </span>     <span style="padding:20px"> {{secondWeight- firstWeight}}    </span> 

                    </div>

                    <br> <br> <br> 



                    <div style= "width:150px; height: 110px; border:1px solid black; float:left; text-align:center; margin-right:60px" >
                    إمضاء المسؤول عن الموقع</div> 

                    <div  style= "width:150px; height: 110px ;border:1px solid black; float:left ;text-align:center" > 
                    إمضاء السائق </div> 



            </div>


    </div>

我的问题:

  • 我应该采用什么方法来改善布局并使其与原始布局更相似?

  • 是否有支持阿拉伯语的pdfmake替代品?我已经尝试了pdfkit和jspdf,但都无法正确产生阿拉伯字母,是否有人可以在任何这些库中使用rtl语言实现它?

1 个答案:

答案 0 :(得分:1)

因此,在构造类似这样的内容时,我建议使用FlexboxCSS Grid。它将自行处理相当多的对齐方式,并假设您的HTML结构正确,则可以使页面外观漂亮。

我整理了一个简短的示例,以帮助您开始使用Flexbox。如果这似乎是您想走的路线,我建议您仔细阅读。

h2,
h4 {
  text-align: center;
}

.bordered {
  border: 1px solid black;
}

.centered {
  text-align: center;
  display: block;
}

.container {
  margin-bottom: 1em;
}

.row {
  display: flex;
  justify-content: space-between;
  margin-bottom: 0.5em;
}
.row.right {
  justify-content: flex-end;
}

.cell {
  margin: 0 0.5em;
}

.expanded {
  min-width: 45%;
  height: 100px;
}

.sub-header {
  border-left: none;
  border-right: none;
  padding: 0.5em 2em;
}
<div ng-if="printVar === true ">

  <style>
    .navbar-primary {
      display: none !important;
    }
    
    .navbar {
      display: none !important;
    }
  </style>

  <h2> شركة ففف فف ش.م.ل </h2>
  <h4>الدورة - شارع الضمان الاجتماعي - لبنان هاتف: ٠١\فففف- فففف</h4>

  <div class="container bordered sub-header">
    <div class="row">
      <span class="cell"> {{datenow |date: "MM/dd/yy" }}</span>
      <span class="cell">التاريخ</span>
      <span class="cell">{{reference}}</span>
      <span class="cell">المرجع</span>
    </div>
  </div>

  <div class="container text-body">
    <div class="row right">
      <span class="cell">{{truckNumber}}</span>
      <span class="cell">رقم الشاحنة</span>
    </div>
    <div class="row right">
      <span class="cell">{{company}}</span>
      <span class="cell">الشركة</span>
    </div>
    <div class="row right">
      <span class="cell">{{driverName}}</span>
      <span class="cell">السائق</span>
    </div>
    <div class="row right">
      <span class="cell"> {{commodity}}</span>
      <span class="cell">نوع البضاعة</span>
    </div>
    <div class="row right">
      <span class="cell">{{freightCompany}}</span>
      <span class="cell">شركة الشحن</span>
    </div>
  </div>

  <div class="container bordered">
    <div class="row">
      <span>{{firstWeightDate|date: "MM/dd/yy - hh:mm:ss"}}</span>
      <span>{{firstWeight}}</span>
      <span>(الوزنة الأولى (كلغ</span>
    </div>
    <div class="row">
      <span>{{secondWeightDate|date: "MM/dd/yy - hh:mm:ss"}}</span>
      <span>{{secondWeight- firstWeight}}</span>
      <span>الوزن الصافي</span>
    </div>
  </div>

  <div class="row">
    <div class="cell bordered expanded">
      <span class="centered">إمضاء المسؤول عن الموقع</span>
    </div>

    <div class="cell bordered expanded">
      <span class="centered">إمضاء السائق</span>
    </div>
  </div>
</div>