3

私は初心者の質問 (答えるのは簡単なはずです) を持っています。これは、過去 1 日ほど私を悩ませてきました。私がやろうとしているのは、同じドキュメントで横向きから縦向きに切り替えることだけです。これにより、機能のテーブル (テーブル内のこれらの写真へのリンクを含む) を作成し、リンクできるように写真を配置できます。

これは、単純なプロセスであるべきことを容易にするために、これまでに思いついたコードです。

from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY
from reportlab.lib import colors
from reportlab.lib.pagesizes import letter, landscape
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, Frame,
                   Table, TableStyle, NextPageTemplate, PageTemplate, BaseDocTemplate
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
from reportlab.platypus.flowables import Flowable, PageBreak
from pyPdf import PdfFileReader, PdfFileWriter
import glob, os
from reportlab.lib.pagesizes import letter, A4

doc = BaseDocTemplate("M:\GIS Mapping Services\Promotional\Automated Reports\PDF_ReportLab\NextPageExample.pdf",showBoundary=1,pagesize=landscape(letter))
elements = []
styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name='normal', fontSize=6, leading = 7, alignment=TA_LEFT))

ptemplate = PageTemplate(id='portrait', pagesize=portrait(letter))
elements.append(Paragraph("Table is here.",styles["normal"]))
elements.append(NextPageTemplate('portrait'))
elements.append(PageBreak())
elements.append(Paragraph("Pictures are to be placed here.",styles["normal"]))

doc.build(elements)
del elements

ヒントがある場合、またはこれについて私を助けたい場合は、具体的に言って、私が間違っていることを正確に示してください。

よろしくお願いいたします。

ウィン

4

2 に答える 2

7

ここで見つけた答えに基づいたハックがあります。

from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY
from reportlab.lib import colors
from reportlab.lib.pagesizes import letter, landscape
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, Frame,Table, TableStyle, NextPageTemplate, PageTemplate, BaseDocTemplate
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
from reportlab.platypus.flowables import Flowable, PageBreak
from pyPdf import PdfFileReader, PdfFileWriter
import glob, os
from reportlab.lib.pagesizes import letter, A4

def make_portrait(canvas,doc):
    canvas.setPageSize(letter)

def make_landscape(canvas,doc):
    canvas.setPageSize(landscape(letter))

doc = BaseDocTemplate("NextPageExample.pdf",showBoundary=1)
elements = []
styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name='normal', fontSize=6, leading = 7, alignment=TA_LEFT))


frame1 = Frame(doc.leftMargin, doc.height-5*inch,
                doc.width, 5*inch,
                leftPadding = 0, rightPadding = 0,
                topPadding = 0, bottomPadding = 0,
                id='frame1')

ptemplate = PageTemplate(id='portrait',frames =[frame1], onPage=make_portrait)
ltemplate = PageTemplate(id='landscape',frames =[frame1], onPage=make_landscape)
doc.addPageTemplates([ptemplate, ltemplate])
elements.append(Paragraph("Table is here.",styles["normal"]))
elements.append(NextPageTemplate('landscape'))
elements.append(PageBreak())
elements.append(Paragraph("Pictures are to be placed here.",styles["normal"]))

doc.build(elements)
del elements

カモノハシで作業する場合、キャンバスを操作する最も簡単な方法は、テキストの非フロー部分を実装できる PageTemplate の onPage 設定を使用することです。ここでは、横向きまたは縦向きのテンプレートに何かを描画する前に、キャンバスのサイズを目的のサイズに変更します。

于 2013-03-13T00:39:59.667 に答える
4

上記をさらに単純化できます。回転したキャンバスを設定するための 2 つの追加関数は必要ありません。

    p_frame = Frame(0.5 * inch, 0.5 * inch, 7.5 * inch, 10 * inch,
                   leftPadding=0, rightPadding=0,
                   topPadding=0, bottomPadding=0,
                   id='portrait_frame')

    l_frame = Frame(0.5 * inch, 0.5 * inch, 10 * inch, 7.5 * inch,
                    leftPadding=0, rightPadding=0,
                    topPadding=0, bottomPadding=0,
                    id='landscape_frame')

    portrait_tmpl = PageTemplate(id='portrait_tmpl', frames=[p_frame], pagesize=letter)
    landscape_tmpl = PageTemplate(id='landscape_tmpl', frames=[l_frame], pagesize=landscape(letter))

それはもう少し維持可能です。ただし、2 つの別々のフレームを設定する方法は見つかりませんでした。

答えにあるフレームは、ローテーションで機能しませんでした。

于 2015-01-10T23:34:52.903 に答える