Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何在python reportlab platypus框架内实现文本包装和单词分离?_Python 3.x_Reportlab_Platypus - Fatal编程技术网

Python 3.x 如何在python reportlab platypus框架内实现文本包装和单词分离?

Python 3.x 如何在python reportlab platypus框架内实现文本包装和单词分离?,python-3.x,reportlab,platypus,Python 3.x,Reportlab,Platypus,我想从文本和数据创建一些pdf文件。 我用platypus reportlab设置了一些框架,但当我尝试填充它们时,文本只是在单个框架中写在页面边距之外 使用ParagraphStyle()类中的多个选项不会将文本换行到帧的末尾 但是,由于给定的文本似乎有某种包装操作,我相信这也会在框架边界内起作用 另一件困扰我的事是,我只能在一个框架上写字。 使用不同的“故事”可以让我写下所有的故事 有人知道我为什么要面对这些麻烦吗 下面的脚本生成以下pdf文件片段: 任何帮助都会得到报答。 问候 我不能在

我想从文本和数据创建一些pdf文件。 我用platypus reportlab设置了一些框架,但当我尝试填充它们时,文本只是在单个框架中写在页面边距之外

使用ParagraphStyle()类中的多个选项不会将文本换行到帧的末尾

但是,由于给定的文本似乎有某种包装操作,我相信这也会在框架边界内起作用

另一件困扰我的事是,我只能在一个框架上写字。 使用不同的“故事”可以让我写下所有的故事

有人知道我为什么要面对这些麻烦吗

下面的脚本生成以下pdf文件片段:

任何帮助都会得到报答。 问候

  • 我不能在所有的框架上都写,因为我的文本不能正确地放在它们上面
  • 文本换行不起作用,因为(这是一个猜测)我在创建帧时弄乱了正确的宽度值,也没有设置明确的边距填充
  • 下面的代码现在生成此PDF作为示例:

    现在,有没有办法在画面中找到剩余的空间? 我想根据这个剩余空间检查来减少文本大小,因为我必须在一个DIN A4页面上保存我试图生成的任何配方

    from reportlab.pdfgen import canvas
    from reportlab.lib.pagesizes import A4
    from reportlab.platypus import Paragraph, Frame, Spacer
    from reportlab.lib.colors import Color
    from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
    from reportlab.lib.units import cm
    from reportlab.lib.enums import TA_JUSTIFY, TA_LEFT, TA_CENTER
    
    
    c = canvas.Canvas('platypus_text_to_pdf.pdf', pagesize=(A4))
    
    styles = getSampleStyleSheet() 
    
    styleN = styles["BodyText"]
    styleN.alignment = TA_LEFT 
    
    styleH = styles["Heading2"]
    styleH.alignment = TA_LEFT
    
    
    #Recipe Image
    recipie_image = "recipe_images/Rote Beete Carpaccio mit Walnüssen und Pinienkernen.png"
    c.drawImage(recipie_image, 0, A4[2]*2/3, A4[2]/3, A4[2]/3)
                                                          
    
    dn_frame = Frame(A4[2]/3, A4[2]-100, A4[0]-A4[2]/3, 100, leftPadding=6, bottomPadding=6, rightPadding=6, topPadding=6, showBoundary=1) #Dish name and serves
    ingr_frame = Frame(A4[2]/3, 100+(A4[2]*1/3), A4[0]-A4[2]/3, A4[2]-100-(100+(A4[2]*1/3)), leftPadding=6, bottomPadding=6, rightPadding=6, topPadding=6, showBoundary=1) #ingredients
    blw_pic_frame = Frame(0, 100+(A4[2]*1/3), A4[2]*(1/3), A4[2]/3-100, leftPadding=6, bottomPadding=6, rightPadding=6, topPadding=6, showBoundary=1)
    facts_frame = Frame(0, 0,100,100+(A4[2]*1/3), leftPadding=6, bottomPadding=6, rightPadding=6, topPadding=6, showBoundary=1)
    todo_frame = Frame(100, 0,A4[0]-100,100+(A4[2]*1/3), showBoundary=1)
    
    
    
    
    text= '''
            „Lorem ipsum dolor sit amet, consectetur adipisici elit, …" ist ein Blindtext, der nichts bedeuten soll, sondern als Platzhalter im Layout verwendet wird, um einen Eindruck vom fertigen Dokument zu erhalten. Die Verteilung der Buchstaben und der Wortlängen des pseudo-lateinischen Textes entspricht in etwa der natürlichen lateinischen Sprache. Der Text ist absichtlich unverständlich, damit der Betrachter nicht durch den Inhalt abgelenkt wird.
        '''
    dn_text = Paragraph('Rote Beete Carpaccio mit Walnüssen und Pinienkernen', styleH)
    dn_subtext = Paragraph('Rezept für 4 Portionen', styleN)     
    dn_story = []
    dn_story.append(dn_text)
    dn_story.append(Spacer(1,0.2*cm))
    dn_story.append(dn_subtext)
    dn_frame.addFromList(dn_story,c)
    
    ingr_story = []
    ingr_text = Paragraph(text, styleN)
    ingr_story.append(Paragraph('Zutaten', styleH))
    ingr_story.append(ingr_text)
    ingr_story.append(Spacer(1,0.2*cm))
    ingr_story.append(ingr_text)
    ingr_story.append(Spacer(1,0.2*cm))
    ingr_story.append(ingr_text)
    ingr_frame.addFromList(ingr_story,c)
    
    blw_pic_story = []
    blw_pic_text = Paragraph(text, styleN)
    blw_pic_story.append(Paragraph('Health Data', styleH))
    blw_pic_story.append(blw_pic_text)
    blw_pic_story.append(Spacer(1,0.2*cm))
    blw_pic_frame.addFromList(blw_pic_story,c)
    
    facts_story = []
    s=0
    while s < 4:
        facts_story.append(Paragraph("Preis $$$\n Kochzeit: 40 min",styleN))
        facts_story.append(Paragraph('Hier kommt ein Bild', styleH))
        facts_story.append(Paragraph("Why so serious?",styleN))
        s=s+1
    facts_frame.addFromList(facts_story,c)
    
    todo_story = []
    j=0
    while j < 4:
        todo_story.append(Paragraph('Schritt: '+str(j+1)+'\n',styleH))
        todo_story.append(Paragraph(10* "Schütteln sie den Salat ",styleN))
        j=j+1
    todo_frame.addFromList(todo_story,c)
    
    c.save()
    
    从reportlab.pdfgen导入画布
    从reportlab.lib.pagesizes导入A4
    从reportlab.platypus导入段落、框架、间隔符
    从reportlab.lib.colors导入颜色
    从reportlab.lib.styles导入getSampleStyleSheet、ParagraphStyle
    从reportlab.lib.units导入cm
    从reportlab.lib.enums导入TA_JUSTIFY、TA_LEFT、TA_CENTER
    c=canvas.canvas('platypus_text_to_pdf.pdf',pagesize=(A4))
    styles=getSampleStyleSheet()
    styleN=样式[“正文”]
    styleN.alignment=TA_左
    styleH=样式[“标题2”]
    styleH.alignment=TA_左
    #配方图像
    recipie_image=“recipe_images/Rote bete Carpaccio mit Walnüssen und Pinienkernen.png”
    c、 drawImage(交互图像,0,A4[2]*2/3,A4[2]/3,A4[2]/3)
    dn#u frame=frame(A4[2]/3,A4[2]-100,A4[0]-A4[2]/3100,leftPadding=6,bottomPadding=6,righpadding=6,topPadding=6,showBoundary=1)#菜名和服务
    ingr_frame=frame(A4[2]/3100+(A4[2]*1/3),A4[0]-A4[2]/3,A4[2]-100-(100+(A4[2]*1/3)),leftPadding=6,bottomPadding=6,righpadding=6,topPadding=6,showBoundary=1)#
    blw_picu_frame=frame(0,100+(A4[2]*1/3),A4[2]*(1/3),A4[2]/3-100,左填充=6,下填充=6,右填充=6,顶部添加=6,显示边界=1)
    facts_frame=frame(0100100+(A4[2]*1/3),leftPadding=6,bottomPadding=6,righpadding=6,topPadding=6,showBoundary=1)
    todo_帧=帧(100,0,A4[0]-100100+(A4[2]*1/3),显示边界=1)
    文本='''
    “Lorem ipsum dolor sit amet,adipisici精英奉献…“这是一篇盲目的文字,它是一个独立的平台,它的布局非常复杂,因为它是一个独立的平台。布赫斯塔本和伪晚成文本在斯普拉切国家晚成文本中的垂直分布。文本是一个不完整的文本,它是一个不完整的文本。
    '''
    dn_text=段落('Walnüssen和Pinienkernen的死记硬背)
    dn_subtext=段落('Rezept für 4 Portionen',styleN)
    dn_故事=[]
    dn_story.append(dn_文本)
    dn_附加层(间隔层(1,0.2*cm))
    dn_story.append(dn_子文本)
    dn_frame.addFromList(dn_故事,c)
    ingr_故事=[]
    ingr_text=段落(文本,样式)
    ingr_story.追加(段落('Zutaten',styleH))
    ingr_故事。附加(ingr_文本)
    ingr_层附加(间隔层(1,0.2*cm))
    ingr_故事。附加(ingr_文本)
    ingr_层附加(间隔层(1,0.2*cm))
    ingr_故事。附加(ingr_文本)
    ingr_frame.addFromList(ingr_故事,c)
    blw_picu_story=[]
    blw_pic_text=段落(文本,样式)
    blw_picu story.追加(段落(“健康数据”,样式H))
    blw_pic_story.append(blw_pic_text)
    blw_图片_故事附加(间隔(1,0.2*cm))
    blw_pic_frame.addFromList(blw_pic_story,c)
    事实与故事=[]
    s=0
    当s<4时:
    事实与故事。附加(段落(“Preis$$$\n Kochzeit:40分钟”,styleN))
    事实和故事。附加(段落('Hier kommt ein Bild',styleH))
    事实和故事。附加(段落(“为什么如此严重?”,styleN))
    s=s+1
    事实与框架。addFromList(事实与故事,c)
    todo_故事=[]
    j=0
    当j<4时:
    todo_story.append(段落('Schritt:'+str(j+1)+'\n',styleH))
    todo_story.追加(第10段*“Schütteln sie den Salat”,styleN))
    j=j+1
    todo_frame.addFromList(todo_故事,c)
    c、 保存()
    
    您可以使用framename来查找剩余的帧空间。\u啊 通过使用floatcontentname.wrap(todo\u frame.\u aW,todo\u frame.\u aH)[1]的浮动对象可以了解空间需求

    我的ingr_框架示例:

    #create the frame
    ingr_frame = Frame(A4[1]/3, 100+(A4[1]*1/3), A4[0]-A4[1]/3, A4[1]-100-(100+(A4[1]*1/3))-50, showBoundary=0)
    #create a text
    ingr_text = Paragraph('hello', styleN)
    #get text heigth requirement
    ingr_text.wrap(ingr_frame._aW,ingr_frame._aH)[1]
    #get available frame heigh space
    ingr_frame._aH 
    
    #create the frame
    ingr_frame = Frame(A4[1]/3, 100+(A4[1]*1/3), A4[0]-A4[1]/3, A4[1]-100-(100+(A4[1]*1/3))-50, showBoundary=0)
    #create a text
    ingr_text = Paragraph('hello', styleN)
    #get text heigth requirement
    ingr_text.wrap(ingr_frame._aW,ingr_frame._aH)[1]
    #get available frame heigh space
    ingr_frame._aH