10

我正在使用 ReportLab 做我的第一个程序,我事先不知道分页符会落在哪里,我遇到了麻烦。为了简单起见,我使用SimpleDocTemplate. 我的 flowables 看起来像这样:

flowables = [Paragraph("Some title", style=headerParagraphStyle),
             Spacer(0, 10),
             Paragraph("first paragraph", style=bodyParagraphStyle),
             Paragraph("second paragraph", style=bodyParagraphStyle),
             ...
             Paragraph("nth paragraph", style=bodyParagraphStyle),
             PageBreak(),
             Paragraph("Some title", style=headerParagraphStyle),
             Spacer(0, 10),
             Paragraph("first paragraph", style=bodyParagraphStyle),
             Paragraph("second paragraph", style=bodyParagraphStyle),
             ...
             Paragraph("mth paragraph", style=bodyParagraphStyle),
             PageBreak(),
             ...]

当我构建我的 PDF 时,只要我的nm许多正文段落适合一页,一切都会正常进行,但如果它们超出,我会收到如下错误:

reportlab.platypus.doctemplate.LayoutError: Flowable <Paragraph at 0xb79800 frame=normal>20th paragraph: too large on page 3

似乎无法找到为什么这种情况不断发生在我身上的充分理由。有什么建议么?即使我删除了 PageBreaks(),它也会这样做。所有的段落都相对较短,大多少于一个句子/行。

ETA:我发布了所有为我生成错误的代码(去除了次要标识符)。我已经将它转换为读取 CSV 文件,所以我也发布了它的内容。当我运行此代码时,它为我生成的确切错误是:

回溯(最近一次通话最后):
  文件“./spice_dev.py”,第 355 行,在
    departmentReportDoc.build(eachDepartment.report, onFirstPage=onReportPage, onLaterPages=onReportPage)
  文件“/usr/local/lib/python2.6/site-packages/reportlab/platypus/doctemplate.py”,第 1010 行,在构建中
    BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)
  文件“/usr/local/lib/python2.6/site-packages/reportlab/platypus/doctemplate.py”,第 777 行,在构建中
    self.handle_flowable(flowables)
  文件“/usr/local/lib/python2.6/site-packages/reportlab/platypus/doctemplate.py”,第 694 行,在 handle_flowable
    引发 LayoutError(ident)
reportlab.platypus.doctemplate.LayoutError: Flowable 其他改进意见和建议:第 3 页太大

一些调试工作表明该错误是由于本段(尽管它可能是其他可流动的,取决于内容长度)尝试拆分,被推迟,然后在调用handle_frameEnd(). 建议?

香料.py:

#!/usr/local/bin/python
# vim: set fileencoding=latin-1

#import csv
import os
import os.path
import time

import numpy
import scipy.stats._support

#for debugging
import sys
import traceback

# imports for reportlab

from reportlab.platypus import *
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.pagesizes import LETTER, landscape, portrait
from reportlab.lib.units import inch
from reportlab.lib import colors
from reportlab.pdfgen import canvas
from reportlab.lib.enums import *

##########################
####### Constants ########
##########################

kNumberOfQuestions = 4

##########################
####### Reportlab ########
##########################

def _doNothing(canv, doc):
    pass

headerParagraphStyle = ParagraphStyle("Header", fontName="Helvetica-Bold", fontSize=16, spaceAfter = .05*inch, alignment=TA_CENTER)
header2ParagraphStyle = ParagraphStyle("Header2", fontName="Helvetica-Bold", fontSize=14, spaceAfter = .1*inch, spaceBefore=.5*inch, alignment=TA_CENTER)
subheaderInfoParagraphStyle = ParagraphStyle("Subheader Info", fontName="Helvetica-Bold", fontSize=10, alignment=TA_CENTER)
questionParagraphStyle = ParagraphStyle("Question header", fontName="Helvetica-Bold", fontSize = 10, alignment=TA_LEFT)
commentParagraphStyle = ParagraphStyle("Comment", fontName="Helvetica", fontSize = 10, alignment=TA_LEFT)
instructorParagraphStyle = ParagraphStyle("Instructor Header", fontName="Helvetica", fontSize=10, alignment=TA_LEFT)
basicTableStyle = TableStyle(
        [('FONT', (0, 0), (-1, 0), 'Helvetica-Bold', 9),
         ('ALIGN', (0, 0), (-1, 0), 'CENTER'),
         ('LINEBELOW', (0, 0), (-1, 0), 1, colors.black),
         ('INNERGRID', (0, 0), (-1, 0), 1, colors.black),
         ('FONT', (0, 1), (-1, -1), 'Helvetica', 9),
         ('ALIGN', (0, 1), (-1, 1), 'LEFT'),
         ('ALIGN', (1, 1), (-1, -1), 'CENTER'),
         ('LINEAFTER', (0, 1), (0, -1), 1, colors.black),
         ('LINEBEFORE', (1, 1), (-1, -1), 1, colors.black),
         ('ROWBACKGROUNDS', (0, 1), (-1, -1), (colors.white, (.9, .9, .9))),
         ('TOPPADDING', (1, 1), (-1, -1), 8)
        ])
statTableStyle = TableStyle(
        [('FONT', (0, 0), (0, -1), 'Helvetica-Bold', 9),
         ('ALIGN', (0, 0), (0, -1), 'RIGHT'),
         ('INNERGRID', (0, 0), (-1, -1), 1, colors.black),
         ('FONT', (1, 0), (1, -1), 'Helvetica', 9),
         ('ALIGN', (1, 0), (1, -1), 'LEFT')
        ])
headerTableStyle = TableStyle(
        [('FONT', (0, 0), (-1, 0), 'Helvetica', 8),
         ('FONT', (0, 1), (-1, 1), 'Helvetica-Bold', 8),
         ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
         ('LINEBELOW', (0, 0), (-1, 0), 1, colors.black),
         ('LINEAFTER', (0, 0), (-1, -1), 20, colors.white),
         ('LEFTPADDING', (0,0), (-1, -1), 15),
         ('RIGHTPADDING', (0, 0), (-1, -1), 15)
        ])

##########################
######## Classes #########
##########################

class Course:
    def __init__(self):
        self.prefix = ""
        self.number = ""
        self.section = ""
        self.instructor = ""
        self.email = ""
        self.name = "None Found"
        self.enrollment = 0
        self.semester = ""
        self.report = [] # subreport for the course
        self.dataFile = []

    def __repr__(self):
        return self.prefix + " " + self.number + " " + self.section + " " + self.instructor

class Instructor:
    def __init__(self):
        self.name = ""
        self.email = ""
        self.courses = dict([])
        self.report = []
        self.dataFile = []

    def __repr__(self):
        return self.name + " " + self.email

class Department:
    def __init__(self):
        self.name = ""
        self.instructors = dict([]) #contains Instructor objects
        self.report = [] #subreport for the department
        self.dataFile = []

    def __repr__(self):
        return self.name

class College:
    def __init__(self):
        self.name = ""
        self.departments = dict([]) #contains Department objects
        self.report = [] #subreport for the college
        self.dataFile = []

    def __repr__(self):
        return self.name + ":" + `self.departments`

class University:
    def __init__(self):
        self.name = ""
        self.colleges = dict([]) #contains College objects

    def __repr__(self):
        return self.name + ":" + `self.colleges`

#########################
### Utility Functions ###
#########################

def onReportPage(canv, doc):
    #display general info at the top of every page
    canv.setFont('Courier', 10)
    canv.drawString(inch, 10.5*inch, "Wassamata U")
    canv.drawString(inch, 10.35*inch, "Student Comments")

    canv.drawString(5.75*inch, 10.5*inch, "Year/Term:  " + uSemesterYear + "/" + uSemesterTerm)
    canv.drawString(5.75*inch, 10.35*inch, " Semester:  " + `semesterNumber`)

def xmlify(text):
    return text.replace('&','&amp;').replace('<','&lt;').replace('>','&gt;')

def semesterDescription(semesterNumber):
    # reference semester is Spring 1964, i.e. semester 0
    semesterNumber = semesterNumber / 10
    year = `1964 + (semesterNumber / 3)`
    term = "Spring"
    if semesterNumber % 3 == 1:
        term = "Summer"
    elif semesterNumber % 3 == 2:
        term = "Fall"

    return year, term

#########################
######### Main ##########
#########################

# set up some options
# should have a ui later

# ugly, but quick
# used to get them on the top of every page
global uSemesterYear
global uSemesterTerm

print "\n"

university = University()
university.name = "Wassamata U"

commentsFile = open("spireport2.csv", "rb").read()
commentRecords = commentsFile.split("ô\r\n")
commentsArray = []
for commentRecord in commentRecords:
    commentsArray.append(commentRecord.split("æ"))
commentsArray.pop()

print "Reading in the SPI file"
#read in data from file
for row in commentsArray:
    #print row
    # college
    currentCollege = university.colleges.get(row[0])
    if currentCollege == None:
        currentCollege = College()
        currentCollege.name = row[0].replace("/", " ")
        university.colleges[row[0]] = currentCollege

    #department
    currentDepartment = currentCollege.departments.get(row[1])
    if currentDepartment == None:
        currentDepartment = Department()
        currentDepartment.name = row[1].replace("/", " ")
        currentCollege.departments[row[1]] = currentDepartment

    #instructor
    currentInstructor = currentDepartment.instructors.get(row[2] + row[3])
    if currentInstructor == None:
        currentInstructor = Instructor()
        currentInstructor.name = row[3].replace("/", " ")
        currentInstructor.email = row[2].replace("/", " ")
        currentDepartment.instructors[row[2] + row[3]] = currentInstructor

    #course
    currentCourse = currentInstructor.courses.get(row[5] + row[6] + row[7])
    if currentCourse == None:
        currentCourse = Course()
        currentCourse.prefix = row[5][:3]
        currentCourse.number = row[5][3:]
        currentCourse.section = row[6]
        currentCourse.instructor = row[3]
        currentCourse.email = row[2]
        currentCourse.name = row[4]
        currentCourse.semester = row[7]
        currentCourse.enrollment = int(row[8])
        currentInstructor.courses[row[5] + row[6] + row[7]] = currentCourse

    data = row[9:9+kNumberOfQuestions]

    currentCollege.dataFile.append(data) #split the data file by college for later
    currentInstructor.dataFile.append(data)
    currentDepartment.dataFile.append(data)
    currentCourse.dataFile.append(data)

semesterNumber = int(university.colleges.values()[0].departments.values()[0].instructors.values()[0].courses.values()[0].semester)
uSemesterYear, uSemesterTerm = semesterDescription(semesterNumber)

reportDocContent = []

print "Processing the SPI comments"

for eachCollege in university.colleges.values():
    print "\tProcessing " + eachCollege.name
    collegeReportStartingIndex = len(reportDocContent)

    reportDocContent.append(Spacer(0, 100))
    reportDocContent.append(Paragraph("Student comments for " + eachCollege.name, headerParagraphStyle))
    reportDocContent.append(PageBreak())

    for eachDepartment in eachCollege.departments.values():
        print "\t\tProcessing " + eachDepartment.name
        departmentReportStartingIndex = len(reportDocContent)

        reportDocContent.append(Spacer(0, 100))
        reportDocContent.append(Paragraph("Student comments for " + eachDepartment.name, headerParagraphStyle))
        reportDocContent.append(PageBreak())

        for eachInstructor in eachDepartment.instructors.values():
            print "\t\t\tProcessing " + eachInstructor.name
            instructorReportStartingIndex = len(reportDocContent)

            reportDocContent.append(Spacer(0, 100))
            reportDocContent.append(Paragraph("Student comments for " + eachInstructor.name + ", " + eachInstructor.email, headerParagraphStyle))
            reportDocContent.append(PageBreak())

            for eachCourse in eachInstructor.courses.values():
                courseReportStartingIndex = len(reportDocContent)

                reportDocContent.append(Paragraph("<para leftIndent=54><b>Instructor Name:</b>  " + eachCourse.instructor + "</para>", instructorParagraphStyle))
                reportDocContent.append(Spacer(0, 10))

                headerTableContent1 = [[eachDepartment.name + "/" + eachCollege.name, eachCourse.prefix + eachCourse.number + eachCourse.section, eachCourse.name], ["Department/School", "Course-Section Number", "Course Name"]] 
                headerTableContent2 = [[eachCourse.enrollment if eachCourse.enrollment > 0 else "Unknown",
                                        len(eachCourse.dataFile),
                                        ("%.2f" % (float(len(eachCourse.dataFile))/eachCourse.enrollment*100) if eachCourse.enrollment != 0 else "0.00")],
                                       ["Number of Students Enrolled", "Number Responding", "% of Response"]]
                reportDocContent.append(Table(headerTableContent1, style=headerTableStyle))
                reportDocContent.append(Spacer(0, 10))
                reportDocContent.append(Table(headerTableContent2, style=headerTableStyle))

                i = 0
                for i in range(0, kNumberOfQuestions):
                    question = ""
                    if i == 0:
                        question = "The thing(s) I like the MOST about this course:"
                    elif i == 1:
                        question = "The thing(s) I like the LEAST about this course:"
                    elif i == 2:
                        question = "What is your reaction to the method of evaluating your mastery of the course (i.e., testing, grading, out of class assignments (term papers), instructor feedback, etc.):"
                    elif i == 3:
                        question = "Additional comments and suggestions for improvement:"

                    reportDocContent.append(Spacer(0, 10))
                    reportDocContent.append(Paragraph(question, style=questionParagraphStyle))
                    reportDocContent.append(Spacer(0, 5))

                    commentParagraph = ""
                    for comments in eachCourse.dataFile:
                        if comments[i] != "":
                            commentParagraph += unicode(comments[i], 'latin-1') + "<br/>"
                    reportDocContent.append(Paragraph(commentParagraph, style=commentParagraphStyle))

                eachCourse.report = reportDocContent[courseReportStartingIndex:]
                reportDocContent.append(PageBreak())

            eachInstructor.report = reportDocContent[instructorReportStartingIndex:]

        eachDepartment.report = reportDocContent[departmentReportStartingIndex:]

    eachCollege.report = reportDocContent[collegeReportStartingIndex:]

# build directory structure to put reports in
for eachCollege in university.colleges.values():
    if (not os.path.exists(eachCollege.name)):
        os.mkdir(eachCollege.name)
    for eachDepartment in eachCollege.departments.values():
        if (not os.path.exists(os.path.join(eachCollege.name, eachDepartment.name))):
            os.mkdir(os.path.join(eachCollege.name, eachDepartment.name))
        for eachInstructor in eachDepartment.instructors.values():
            if (not os.path.exists(os.path.join(eachCollege.name, eachDepartment.name, eachInstructor.name + " - " + eachInstructor.email))):
                os.mkdir(os.path.join(eachCollege.name, eachDepartment.name, eachInstructor.name + " - " + eachInstructor.email))

print "Building Comments Report PDFs"
for eachCollege in university.colleges.values():
    print "\tBuilding Comments Report for " + eachCollege.name

    collegeReportDoc = SimpleDocTemplate(os.path.join(eachCollege.name, eachCollege.name + " SPI Comments Report.pdf"), pagesize=portrait(LETTER), allowSplitting=1)
    collegeReportDoc.leftMargin = .25*inch
    collegeReportDoc.rightMargin = .25*inch
    collegeReportDoc.bottomMargin = .25*inch

    collegeReportDoc.build(eachCollege.report, onFirstPage=onReportPage, onLaterPages=onReportPage)

    for eachDepartment in eachCollege.departments.values():
        print "\t\tBuilding Comments Report for " + eachDepartment.name

        departmentReportDoc = SimpleDocTemplate(os.path.join(eachCollege.name, eachDepartment.name, eachDepartment.name + " SPI Comments Report.pdf"), pagesize=portrait(LETTER), allowSplitting=1)
        departmentReportDoc.leftMargin = .25*inch
        departmentReportDoc.rightMargin = .25*inch
        departmentReportDoc.bottomMargin = .25*inch

#       import pdb; pdb.set_trace()
        departmentReportDoc.build(eachDepartment.report, onFirstPage=onReportPage, onLaterPages=onReportPage)

        print "\t\t\tBuilding Comments Reports for individual instructors"
        for eachInstructor in eachDepartment.instructors.values():
            instructorReportDoc = SimpleDocTemplate(os.path.join(eachCollege.name, eachDepartment.name, eachInstructor.name + " - " + eachInstructor.email, eachInstructor.name + " SPI Comments Report.pdf"), pagesize=portrait(LETTER), allowSplitting=1)
            instructorReportDoc.leftMargin = .25*inch
            instructorReportDoc.rightMargin = .25*inch
            instructorReportDoc.bottomMargin = .25*inch

            instructorReportDoc.build(eachInstructor.report, onFirstPage=onReportPage, onLaterPages=onReportPage)
#we do this one last because it's the biggest; otherwise it'd be at the beginning of the pdf report generation process
print "\tBuilding SPI Report for University"
reportDoc = SimpleDocTemplate("SPI Comments Report.pdf", pagesize=portrait(LETTER), allowSplitting=1)
reportDoc.leftMargin = .25*inch
reportDoc.rightMargin = .25*inch
reportDoc.bottomMargin = .25*inch

reportDoc.build(reportDocContent, onFirstPage=onReportPage, onLaterPages=onReportPage)

spireport2.csv:

College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ示例评论ææi like itæô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205æ一个换行符;让我们看看会发生什么æææ奇怪的字符áÈ-{ô
卫生与公共事务学院刑事司法/法律研究æsample@mail.comæAn InstructoræFOUNDATIONS OF LAW ENFORCEMENTæCJE5021æ0001æ1370æ 7ææææô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205ææææô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205ææææô
College of Health & Public AffæHealth Info Mgmtæexample@example.comæAn InstructoræMEDICAL TERMINOLOGYæHSC3537æ0M01æ1370æ 205ææææô
艺术与人文学院æEnglishæspam@me.comæAn InstructoræHARLEM, HAITI, AND HAVANAæAML3615æ0001æ1370æ 35ææææô
艺术与人文学院æEnglishæspam@me.comæAn InstructoræCONT AMERICAN WOMEN S FICTIONæAML3283æ0001æ1370æ 35ææææô
艺术与人文学院æEnglishæspam@me.comæAn InstructoræPOST-WORLD WAR II FICTIONæLIT4303æ0M01æ1370æ 32ææææô
艺术与人文学院æEnglishæbill@gates.comæAn InstructoræMAJOR AMERICAN AUTHORSæAML4300æ0001æ1370æ 33ææææô
艺术与人文学院æEnglishæspam@me.comæAn InstructoræPRACTICAL CRITCISMæENG3010æ0001æ1370æ 36ææææô
4

2 回答 2

2

自己找到了解决方法。基于rst2pdf 中所做的一些代码更改,我能够让我的代码可靠地工作。解决方案虽然丑陋,但将我的所有内容包装在为学生评论Paragraphs创建的代码部分中。例如,我将一个相关行更改为:ParagraphsKeepTogether

reportDocContent.append(KeepTogether(Paragraph(commentParagraph, style=commentParagraphStyle)))

现在它可以工作了(至少,在尝试了大量样本数据之后,我还无法破解它)。

于 2009-12-14T17:30:24.787 回答
1

看起来这是一个老问题,但我最近遇到了同样的错误,并来到这里寻求一些建议。我所做的修复是使垫片尺寸为旧尺寸的一半。它以前是 Spacer(1,0.2*inch),我将其更改为 Spacer(1,0.1*inch)。然后不再有这样的错误。

仅供参考,我收到的错误消息是

  File "/opt/python2.7/lib/python2.7/site-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/platypus/doctemplate.py", line 1117, in build
    BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)
  File "/opt/python2.7/lib/python2.7/site-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/platypus/doctemplate.py", line 880, in build
    self.handle_flowable(flowables)
  File "/opt/python2.7/lib/python2.7/site-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/platypus/doctemplate.py", line 793, in handle_flowable
    raise LayoutError(ident)
reportlab.platypus.doctemplate.LayoutError: Flowable <Spacer at 0xf01440 frame=normal>...(1 x 14.4) too large on page 10 in frame 'normal'(439.275590551 x 628.28976378) of template 'Later'
于 2014-12-20T13:25:42.220 回答