首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在横向模式下使用xhtml2pdf生成PDF

在横向模式下使用xhtml2pdf生成PDF
EN

Stack Overflow用户
提问于 2012-04-05 17:38:42
回答 2查看 2K关注 0票数 2

如何使用xhtml2pdf创建一个三色的景观布局?

我试过这样的方法,但不起作用。我应该从一开始就使用框架吗?

代码语言:javascript
复制
@page {
    size: a4 landscape;

    @frame left {
        -pdf-frame-content: left;
        -pdf-frame-border: 1;
        width: 9.9cm;
        text-align: left;
    }
    @frame middle {
        -pdf-frame-content: middle;
        -pdf-frame-border: 1;
        width: 9.9cm;
        text-align: left;
    }
    @frame right {
        -pdf-frame-content: left;
        -pdf-frame-border: 1;
        width: 9.9cm;
        text-align: left;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-11 09:27:08

我不认为用xhtml2pdf可以做到这一点,即使它是基于reportlab的,它允许你这样做。

在处理了一段时间之后,下面的代码片段生成了下面的图像:http://imgur.com/d4zRH

代码语言:javascript
复制
def badge(request):
    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'

    # Create the PDF object, using the StringIO object as its "file."
    pagesize = pagesizes.landscape(letter)
    pagewidth, pageheight = pagesize
    doc = platypus.BaseDocTemplate(filename=response, pagesize=pagesize,
            showBoundary=1)
    newHeight = doc.bottomMargin + doc.topMargin + doc.height
    newWidth = doc.leftMargin + doc.rightMargin + doc.width

    # reset margins
    doc.leftMargin = 0
    doc.bottomMargin = 0
    doc.rightMargin = 0
    doc.topMargin = 0

    # create the frames
    frames = []
    left_frame_1 = Frame(doc.leftMargin,
            doc.bottomMargin,
            newWidth / 3,
            newHeight / 6,
            showBoundary=1,
            id="left_frame_1")
    left_frame_2 = Frame(doc.leftMargin,
            doc.bottomMargin + newHeight / 6,
            newWidth / 3,
            newHeight / 6,
            showBoundary=1,
            id="left_frame_2")
    left_frame_3 = Frame(doc.leftMargin,
            doc.bottomMargin + newHeight / 6 * 2,
            newWidth / 3,
            newHeight / 6,
            showBoundary=1,
            id="left_frame_3")
    left_frame_4 = Frame(doc.leftMargin,
            doc.bottomMargin + newHeight / 6 * 3,
            newWidth / 3,
            newHeight / 6,
            showBoundary=1,
            id="left_frame_4")
    left_frame_5 = Frame(doc.leftMargin,
            doc.bottomMargin + newHeight / 6 * 4,
            newWidth / 3,
            newHeight / 6,
            showBoundary=1,
            id="left_frame_5")
    left_frame_6 = Frame(doc.leftMargin,
            doc.bottomMargin + newHeight / 6 * 5,
            newWidth / 3,
            newHeight / 6,
            showBoundary=1,
            id="left_frame_6")
    mid_frame_1 = Frame(doc.leftMargin + newWidth / 3,
            doc.bottomMargin,
            newWidth / 3,
            newHeight / 6 * 4,
            showBoundary=1,
            id="mid_frame_1")
    mid_frame_2 = Frame(doc.leftMargin + newWidth / 3,
            doc.bottomMargin + newHeight / 6 * 4,
            newWidth / 3,
            newHeight / 6 * 2,
            showBoundary=1,
            id="mid_frame_2")
    right_frame_1 = Frame(doc.leftMargin + newWidth / 3 * 2,
            doc.bottomMargin,
            newWidth / 3,
            newHeight / 6 * 2,
            showBoundary=1,
            id="right_frame_1")
    right_frame_2 = Frame(doc.leftMargin + newWidth / 3 * 2,
            doc.bottomMargin + newHeight / 6 * 2,
            newWidth / 3,
            newHeight / 6 * 3,
            showBoundary=1,
            id="right_frame_2")
    right_frame_3 = Frame(doc.leftMargin + newWidth / 3 * 2,
            doc.bottomMargin + newHeight / 6 * 5,
            newWidth / 3,
            newHeight,
            showBoundary=1,
            id="right_frame_3")

    frames.append(left_frame_1)
    frames.append(left_frame_2)
    frames.append(left_frame_3)
    frames.append(left_frame_4)
    frames.append(left_frame_5)
    frames.append(left_frame_6)
    frames.append(mid_frame_1)
    frames.append(mid_frame_2)
    frames.append(right_frame_1)
    frames.append(right_frame_2)
    frames.append(right_frame_3)

    Elements = []

    styles = getSampleStyleSheet()

    # LEFT COL CONTENT
    Elements.append(Paragraph("LEFT1, " * 10,
        styles['Normal']))
    Elements.append(FrameBreak())
    Elements.append(Paragraph("LEFT2, " * 10,
        styles['Normal']))
    Elements.append(FrameBreak())
    Elements.append(Paragraph("LEFT3, " * 10,
        styles['Normal']))
    Elements.append(FrameBreak())
    Elements.append(Paragraph("LEFT4, " * 10,
        styles['Normal']))
    Elements.append(FrameBreak())
    Elements.append(Paragraph("LEFT5, " * 10,
        styles['Normal']))
    Elements.append(FrameBreak())
    Elements.append(Paragraph("LEFT6, " * 10,
        styles['Normal']))
    Elements.append(FrameBreak())

    # MID COL CONTENT
    Elements.append(Paragraph("MID_2, " * 20,
        styles['Normal']))
    Elements.append(FrameBreak())
    Elements.append(Paragraph('''
    <para><b>NOTE</b><br />
    (1) Please check the registration handy kit to ensure you have received
    the item(s) as marked on the cover. <br />
    (2) The official receipt(s) for the payments you have made are enclosed.
    Please check to ensure that it was issued correctly. <br />
    (3) You will be requested to present the appropriate coupon(s)/ ticket (s)
    for admission to lunch, banquet or other events. <br />
    (4) The organizer nor its appointed Professional Conference Organiser shall
    not be responsible for any loss or damage to this kit <br />
    </para>
    ''', styles['Normal']))
    Elements.append(FrameBreak())

    # RIGHT COL CONTENT
    Elements.append(Paragraph("RIGHT_1 " * 30,
        styles['Normal']))
    Elements.append(FrameBreak())
    Elements.append(Paragraph('''
    <para><b><font size="16">REGISTRATION Handy Kit</font></b> <br />
    This kit contains the checked items: <br />
    [] Namebadge <br />
    [] Official Receipt(s) <br />
    [] Lunch Coupon(s) <br />
    [] Banquet Ticket & Reply Slip <br />
    [] Others: <br />
    _________________________________
    _________________________________
    _________________________________
    _________________________________
    <br />
    <br />
    <br /> 
    <i>If any of the checked items are missing in your kit, please inform the
    registration counter staff</i>
    </para>
    ''', styles['Normal']))
    Elements.append(FrameBreak())
    Elements.append(Paragraph("RIGHT_3, " * 10,
        styles['Normal']))

    doc.addPageTemplates(platypus.PageTemplate(id="TwoCol", frames=frames))
    doc.build(Elements)

    return response
票数 1
EN

Stack Overflow用户

发布于 2019-08-03 03:15:58

xhtml2pdf现在支持景观,只需添加此样式即可。

代码语言:javascript
复制
<style>
@page {
    size: letter landscape;
    margin: 2cm;
}
</style>

source

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10026207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档