เรามีแอปที่มีรายงานจำนวนมาก และรายงานบางส่วนมีลูปการพิมพ์ที่ซับซ้อน
ย้อนกลับไปในสมัยนั้น (IE PowerPlant , Carbon, Core Printing) เราใช้ในการสร้างลูปการพิมพ์ที่มีคู่ BeginPage() / EndPage() บ่อยครั้ง คู่เหล่านั้นถูกฝังอยู่ในตรรกะการวนรอบการพิมพ์รายงาน
ผลกระทบสุทธิก็คือรายงานจำนวนมากไม่ได้แบ่งหน้าก่อนการพิมพ์ แต่จะมีการแบ่งหน้าตามที่พิมพ์ รายงานเหล่านี้วนซ้ำผ่านออบเจ็กต์หลายพันรายการและเติมเต็มหน้าเว็บให้มากที่สุดเท่าที่จะเป็นไปได้ จากนั้นเรียกว่า EndPage() จากนั้นดำเนินการต่อในหน้าถัดไปโดยการเรียก BeginPage() ทั้งหมดนี้ในขณะเดียวกันก็รักษา "สถานะ" ที่ซับซ้อนของข้อมูลใน- รายงานความคืบหน้าการพิมพ์
เนื่องจาก Core Printing ส่วนใหญ่เลิกใช้งานแล้ว ดูเหมือนว่าด้วยตรรกะของ NSPrint วิธีการพิมพ์รายงานที่ขับเคลื่อนการแบ่งหน้าจึงเป็นไปไม่ได้ NSPrintOperation ค่อนข้างอยากจะขอหน้าเต็มสำหรับ DrawRect ของ NSView แบบกำหนดเองเพื่อวาด และ NSView แบบกำหนดเองนั้นสามารถเริ่มต้นจากหน้าใดก็ได้ดีกว่า นั่นหมายความว่าทุกรายงานจะต้องมีการแบ่งหน้าล่วงหน้าใช่หรือไม่
ดูเหมือนว่าจะมีวิธีการอื่นที่เป็นส่วนหนึ่งของการแบ่งหน้า "อัตโนมัติ":
- (void)adjustPageHeightNew:(CGFloat *)newBottom top:(CGFloat)oldTop bottom:(CGFloat)oldBottom limit:(CGFloat)bottomLimit;
หากฉันอ่านเอกสารอย่างถูกต้อง สมมติว่าฉันมีรายงาน 10 หน้าซึ่งต้องหาที่ที่เหมาะสมในการแบ่ง ดูเหมือนว่าฉันสามารถถือว่ารายงานนั้นเป็นมุมมองแบบยาวได้ จากนั้นเรียกใช้เมธอดข้างต้นในขณะที่ฉันอยู่ใน DrawRect ทำให้หน้าที่ฉันกำลังวาดสั้นลง และด้วยเหตุนี้จึงผลักเนื้อหาออกไปที่หน้าถัดไป
เอกสารไม่ได้ให้รายละเอียดมากนักว่าการปรับเปลี่ยนดังกล่าวจะเผยแพร่ไปยังหลายสิบหน้า (หรือหลายร้อย) หน้าอย่างไร
มีวิธีอื่นใดในการขับเคลื่อนการพิมพ์และการแบ่งหน้าจากโค้ดการสร้างรายงาน แทนที่จะเป็นวิธีแบบพาสซีฟที่อธิบายไว้ข้างต้นหรือไม่