iOS在多列中将HTML绘制为PDF

Sea*_*anR 11 html pdf ios

我正在使用下面的代码将HTML绘制为PDF.当HTML呈现给设备时,我使用css列将HTML布局在两列中,但当它呈现为PDF时,它只在一列中.有没有办法可以将多列中的HTML呈现为PDF?我猜测UIPrintPageRenderer不支持列,但无法找到任何确认.

我使用css列的原因是内容的长度可变,我希望它动态地溢出到下一列.

这是我的代码.content是一个String包含HTML.我发送完全相同的字符串UIWebView.loadHTMLString(_:baseURL:),它在两列中呈现.

    let renderer = UIPrintPageRenderer()
    renderer.headerHeight = 36
    renderer.footerHeight = 36

    let htmlFormatter = UIMarkupTextPrintFormatter(markupText: content)
    htmlFormatter.startPage = 0
    htmlFormatter.contentInsets = UIEdgeInsetsMake(0, 36, 0, 36)
    renderer.addPrintFormatter(htmlFormatter, startingAtPageAtIndex: 0)

    let paperRect = CGRectMake(0, 0, 612, 792)
    let printableRect = CGRectInset(paperRect, 0, 0)
    renderer.setValue(NSValue.init(CGRect: paperRect), forKey: "paperRect")
    renderer.setValue(NSValue.init(CGRect: printableRect), forKey: "printableRect")

    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, metadata)

    for i in 0 ..< renderer.numberOfPages() {
        UIGraphicsBeginPDFPage()
        let bounds = UIGraphicsGetPDFContextBounds()
        renderer.drawPageAtIndex(i, inRect: bounds)
    }
    UIGraphicsEndPDFContext()
Run Code Online (Sandbox Code Playgroud)

用于渲染UIWebView.loadHTMLString(_:baseURL:)但不适用于PDF的列的CSS 如下所示.我@media有点只在较小的屏幕上显示一列.但是我已经尝试删除这个并添加一个@media print部分无济于事:它仍然只打印为PDF的单个列.

    .content {
        -webkit-columns: auto 2; /* Chrome, Safari, Opera */
        -moz-columns: auto 2; /* Firefox */
        columns: auto 2;
    }
    @media screen and (max-width: 736px) {
        .content {
            width: 100%;
            -webkit-columns: auto 1; /* Chrome, Safari, Opera */
            -moz-columns: auto 1; /* Firefox */
            columns: auto 1;
        }
    }
Run Code Online (Sandbox Code Playgroud)

小智 1

尝试这样做,而不是使用 css 列,尝试使用 html 列,并使用 css 设置列的样式。我认为 UIGraphics 只会获取 HTML 结构。

<table>
  <tr>
     <td>YourStuffHere</td>
     <td>YourStuffHere</td>
  </tr>
 </table>
Run Code Online (Sandbox Code Playgroud)