Apache FOP- จำเป็นต้องสร้างตารางหลายหน้าโดยเริ่มจากตรงกลางของหน้าแรก

ฉันใช้ FOP เวอร์ชัน 2.0 เทมเพลตของฉันมีย่อหน้าข้อความบางย่อหน้าในหน้าแรก หลังจากนั้นจะมีตารางไดนามิกที่มี n จำนวนแถว

...
</fo:block-container>
      <fo:block-container height="0.5cm" width="7.40cm" top="8.80cm"
                          left="0.3cm" padding=".4mm" position="absolute">
        <fo:block text-align="start" space-after.optimum="3pt"
                  line-height="14pt" font-family="sans-serif" font-size="12pt">Header
                                                                               Options</fo:block>
      </fo:block-container>
      <fo:block-container border-style="solid" border-width=".5mm"
                          height="1.00cm" width="16.40cm" top="8.80cm"
                          left="3.40cm" padding=".4mm" position="absolute">
        <fo:block text-align="start" space-after.optimum="3pt"
                  line-height="14pt" font-family="sans-serif" font-size="12pt">$header.miscInfo</fo:block>
      </fo:block-container>
      <fo:block-container width="17.40cm" top="10.30cm"
                          left="0.40cm" padding=".4mm" >
        <fo:block page-break-before="always">
        <fo:table border-top-style="solid" border-top-width="thick">
          <fo:table-body font-size="12pt" font-family="sans-serif">
            <fo:table-row border-bottom-style="solid" border-bottom-color="#000"
                          border-bottom-width="thick">
...

ตารางถูกล้อมรอบด้วย fo:block และล้อมรอบด้วย fo:block-container ฉันรวม <fo:block page-break-before="always"> เพื่อแบ่งตารางยาวออกเป็นหลายหน้า แต่เมื่อใช้สิ่งนี้ ตารางจะเริ่มต้นจากหน้าที่ 2 และพื้นที่ที่เหลือในหน้าแรกยังคงว่างเปล่า

ฉันต้องการให้ตารางของฉันเริ่มต้นจากหน้าแรกหลังจากคอนเทนเนอร์แบบบล็อกก่อนหน้า


person Akash    schedule 24.05.2016    source แหล่งที่มา
comment
ฉันใช้ ‹fo:block page-break-before=always› เพื่อแยกตารางยาวออกเป็นหลายๆ หน้า แต่นี่ทำให้ตารางเริ่มต้นจากหน้าที่ 2 และพื้นที่ที่เหลือในหน้าแรกยังคงว่างเปล่า ฉันต้องการให้ตารางของฉันเริ่มต้นจากหน้าแรกหลังจากบล็อกคอนเทนเนอร์ก่อนหน้า   -  person Akash    schedule 24.05.2016


คำตอบ (2)


ฉันพบปัญหาสองสามอย่างในเทมเพลตของคุณที่ส่งผลต่อการวางและการพังโต๊ะ

บล็อกที่อยู่ในตำแหน่งที่แน่นอน

ย่อหน้า "ส่วนหัว" จะถูกวางไว้ภายในบล็อกที่มีตำแหน่งที่แน่นอน: ซึ่งหมายความว่าในระหว่างการประมวลผล ย่อหน้าเหล่านั้นจะถูกนำออกจากโฟลว์ปกติ และไม่มีผลกระทบต่อเลย์เอาต์ของย่อหน้าในภายหลัง (ดูคำแนะนำ XSL-FO)

วิธีแก้ปัญหา: ลบ position="absolute" top="..." left="..." และใช้ช่องว่าง / ระยะขอบแทน (โปรดทราบว่าแอตทริบิวต์ top และ left บน fo:block-container รอบๆ ตารางไม่มีผลใดๆ เนื่องจากบล็อกนั้นไม่ได้อยู่ในตำแหน่งที่แน่นอน) คุณสามารถหลีกเลี่ยงการใช้ fo:block-container พร้อมกันได้ และใช้องค์ประกอบ fo:block ปกติได้

พัก

คุณสมบัติ page-break-before="always" บนองค์ประกอบ fo:block มีผลต่อการวางตัวแบ่งหน้าก่อนเนื้อหาของบล็อกนั้น ซึ่งเป็นสิ่งที่คุณพยายามหลีกเลี่ยง

วิธีแก้ปัญหา: ลบคุณสมบัติตัวแบ่งออก

ด้วยการเปลี่ยนแปลงที่แนะนำ ส่วนหัวและตารางจะเป็นส่วนหนึ่งของกระแสเนื้อหาปกติและเนื้อหาจะถูกวางติดต่อกันในหน้าต่างๆ

person lfurini    schedule 24.05.2016
comment
ขอบคุณสำหรับคำแนะนำ ฉันลบ block-container ที่ล้อมรอบ fo:table และใช้คุณสมบัติมาร์จิ้นของบล็อกและลบแอตทริบิวต์ตัวแบ่งหน้าออก นี่เป็นการหลอกลวงและตอนนี้ตารางของฉันเริ่มต้นจากหน้าแรกหลังจากข้อความก่อนหน้า อย่างไรก็ตาม ฉันกำลังเผชิญกับปัญหาเล็กๆ อีกประการหนึ่ง เค้าโครงตารางสมบูรณ์แบบจนถึงแถวในหน้าแรก แต่เมื่อดำเนินการต่อในหน้าที่ 2 คอลัมน์จะเลื่อนไปทางขวาตามระยะขอบและคอลัมน์สุดท้ายจะมองไม่เห็น ข้อมูลเชิงลึกใด ๆ เกี่ยวกับเรื่องนี้สิ่งที่อาจเป็นเหตุผล? ขอบคุณอีกครั้ง. - person Akash; 25.05.2016
comment
@Akash มันค่อนข้างยากที่จะบอกว่าอาจเกิดอะไรขึ้นโดยไม่ต้องดูตารางที่แก้ไขและต้นแบบของหน้า นอกจากนี้ นี่น่าจะเป็นคำถามใหม่ - person lfurini; 25.05.2016
comment
ขอบคุณสำหรับการตอบกลับของคุณ. ฉันได้ตั้งคำถามอื่นเกี่ยวกับเรื่องนี้พร้อมรายละเอียดเพิ่มเติมได้ที่ stackoverflow.com/questions/37442963/ โปรดดู ขอบคุณล่วงหน้า. - person Akash; 25.05.2016

คุณกำลังระบุว่าคุณต้องการตัวแบ่งหน้าก่อนหน้านั้นโดยใช้แอตทริบิวต์นั้น เพียงรีโมตแอตทริบิวต์ page-break-before

person Kevin Brown    schedule 24.05.2016
comment
ขอบคุณเควิน ไม่จำเป็นต้องมีแอตทริบิวต์ตัวแบ่งหน้าก่อน ปัญหาได้รับการแก้ไขแล้ว แต่มีปัญหาอื่นที่ฉันกำลังเผชิญซึ่งฉันได้สะกดไว้ในความคิดเห็นของคำตอบอื่น ๆ โปรดดูสิ่งนั้นและดูว่าคุณสามารถแนะนำบางสิ่งบางอย่างได้หรือไม่ ขอบคุณอีกครั้ง. - person Akash; 25.05.2016
comment
ใช่ หากคำตอบสามารถแก้ไขปัญหาของคุณได้ ให้พิจารณายอมรับคำตอบและถามคำถามอื่น - person Kevin Brown; 03.06.2016