samedi 30 juillet 2016

Struggles with html code in Apple's PrintController

I am using html to create a list of items, ready to be printed. Each list is exactly one 4A page long. Printing multiple of those lists results in something like this: http://ift.tt/2aRJBsq As you can see the top and bottom parts are kind of messed up and altogether the printer sometimes uses margins and sometimes don't. I perfect page would look like the 3rd page in my example without these vertical lines sticking from the bottom. Can someone point me in the right direction to create just nice looking pages? My page-creating-code looks like this:

    for i in 0...DataManager.sharedManager.savedLists()!.count-1 {
            DataManager.sharedManager.loadList(i)
            markupText += htmlString()
    }


    let formatter = UIMarkupTextPrintFormatter(markupText: markupText)
    formatter.contentInsets = UIEdgeInsets(top: 20, left: 20, bottom: 10, right: 20)
    formatter.perPageContentInsets = UIEdgeInsets(top: 20, left: 20, bottom: 10, right: 20)

    let printController = UIPrintInteractionController.sharedPrintController()
    printController.printInfo = printInfo
    printController.showsNumberOfCopies = true
    printController.printFormatter = formatter

private func htmlString() -> String {
    guard let user = DataManager.sharedManager.user else  {
        return "nil"
    }

    var html = "<body>
<style>
    html {
        font-family: 'verdana';
    }

    h2 {
        margin: 0px;
    }

    table,
    th,
    td {
        border-collapse: collapse;
        border: 1px solid black;
        padding: 2px;
        height: 20px;
        font-size: 12px;
    }

    th {
        text-align: right;
    }

    tr#r02 {
        text-align: center;
    }

    .contentTR {
        height: 26px;
    }

    .trFoot {
        height: 50px;
        vertical-align: top;
    }

    tr#used {
        width: 20px;
    }
</style>
<table style='width:100%'>
    <tr>
        <th colspan='2'>
            <h2>Materialausgabeliste</h2>
        </th>
        <th colspan='3'>
            <h2>Bauvorhaben</h2><br/>\(user.cause)
        </th>
    </tr>
    <tr id='r02'>
        <td>
            <h4>Menge</h4>
        </td>
        <td>
            <h4>Bezeichnung</h4>
        </td>
        <td>
            <h4>EAN</h4>
        </td>
        <td id='used'>
            <h4>Verbrauchte Menge</h4>
        </td>
    </tr>"


    if(!DataManager.sharedManager.items.isEmpty) {
        for item in DataManager.sharedManager.items {
            html += "<tr class='contentTR' style='page-break-inside:avoid;'>
<td>
    <p>\(item.amount)</p>
</td>
<td>
    <p>\(item.name)</p>
</td>
<td>
    <p>\(item.ean)</p>
</td>
<td></td>
</tr>"
        }

    }

    //SWIFT 2 UPDATE
    for _ in (1...24-DataManager.sharedManager.items.count).reverse() {
        html += "<tr class='contentTR' style='page-break-inside:avoid;'>
<td>
    <p></p>
</td>
<td>
    <p></p>
</td>
<td>
    <p></p>
</td>
<td>
    <p></p>
</td>
</tr>"
    }

    let formatter = NSDateFormatter()
    formatter.locale = NSLocale(localeIdentifier: "de_DE")
    formatter.dateStyle = .FullStyle

    html += "<tfoot>
<tr class='trFoot'>
    <td rowspan='2' colspan='2'>Datum:
        <br/>
        <br/>
        <br/>\(formatter.stringFromDate(NSDate()))</td>
    <td colspan='3'>Name:
        <br/>
        <br/>\(user.name)</td>
</tr>
<tr class='trFoot'>
    <td colspan='3'>Unterschrift:</td>
</tr>
</tfoot>
</table>
</body>"

    return html
}




Aucun commentaire:

Enregistrer un commentaire