HTML/CSS 报告 - RTL 语言

HTML/CSS Report - RTL Language

在 html 布局方面,我不是很专业。

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

打印尺寸必须为 13.9 厘米 x 22.8 厘米

但我觉得很难过,因为它是阿拉伯语,而阿拉伯语是 Web 开发的纯粹噩梦,而那是我的第一个阿拉伯语项目。

我试过 pdfmake 的 angular 库,它提供了生成此类报告的更好方法,但它不支持阿拉伯字体:(!

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

比原版丑多了;并且很难在此处打印相同的页面尺寸。

我的 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>

我的问题:

因此,当谈到构建类似这样的东西时,我建议使用 Flexbox or CSS 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>