簡體   English   中英

如何計算多列(colspan)HTML表格的寬度?

[英]How to calculate the widths of multi-column (colspan) HTML-tables?

我正在嘗試在編寫的Java程序longtabu HTML表解析為LaTeX代碼(使用longtabu因為它支持自定義列寬設置)。 我的代碼運行得非常穩定,直到現在為止,輸出似乎還可以。 我必須支持表的colspan -feature(我現在暫時跳過rowspan),這就是問題所在。 導致問題的表如下所示:

<table>
<tr>
    <td width="385" colspan="3">
        Content
    </td>
    <td width="359" colspan="3">
        Content
    </td>
    <td width="151">
        Content
    </td>
</tr>
<tr>
    <td width="24">
        Content
    </td>
    <td width="361" colspan="2">
        Content
    </td>
    <td width="359" colspan="3">
        Content
    </td>
    <td width="151">
        Content
    </td>
</tr>
<tr>
    <td width="24">
        Content
    </td>
    <td width="276">
        Content
    </td>
    <td width="85">
        Content
    </td>
    <td width="198" colspan="2">
        Content
    </td>
    <td width="161">
        Content
    </td>
    <td width="151">
        Content
    </td>
</tr>

我發現了一個事實,就是沒有一個表行定義所有列寬。

以我的理解,我需要一個線性方程組來解決單列寬度的計算...我是對的還是我錯過了什么?

用Java解決這種方程組的最佳方法是什么?

假設源表沒有過度約束,約束不足或不一致約束,我建議:

  • 定義一個事實表,列出確定后每一列的已知寬度
  • 為每個colspan條目定義一個Constraint對象的集合,這些條目指定起始列,列跨度和總寬度。
  • 遍歷整個表定義,收集事實和約束。
  • 然后遍歷事實表,對於未定義的每個列,遍歷所有約束,並查看在定義了所有其他列的一組列上是否存在約束。 這樣的約束將為當前考慮的列產生一個值。
  • 每次發現新的列值時,您就從事實表的開頭重新開始,掃描未知列,並為每次掃描再次重新設置整個約束集。

這是一個n平方(或更差的算法),但是只要表沒有一萬行或一列就可以了。 如果表格正確約束,則將到達定義所有列寬的位置。 諸如此類的蠻力算法的優點是,它相對容易調試並且應該穩定。

如果表約束不足,則到達傳遞點的位置,並且仍存在未計算的列寬。 如果要處理此問題,請添加另一遍,這一次要采用涉及未計算表列的任意約束,該約束還必須包含一個或多個其他未計算表列,並在其中的所有未計算列中平均分配剩余空間約束。 由於這是一個任意約束,因此您可能會在不同的運行中得到不同的答案...但是表受到限制...這有關系嗎?

完成后,您將擁有一個具有所有列寬的完整事實表,然后可以使用指定的所有表列生成LaTeX代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM