ความกว้างของ ItextPdf ไม่ขยายสำหรับเพจแนวนอน

ฉันกำลังพยายามวางตารางบนหน้า PDF ที่ถูกหมุนเป็นแนวนอนใน 'PdfPageEventHelper' ของฉัน:

public void onStartPage(PdfWriter writer_,Document document_) {
        writer_.addPageDictEntry(PdfName.ROTATE,PdfPage.LANDSCAPE);
    }

ดูเหมือนว่าส่วนนั้นจะใช้งานได้ แต่เมื่อฉันสร้างตารางที่มี 10 คอลัมน์ ดูเหมือนว่าการตั้งค่าความกว้างจะไม่ทำงาน:

float sizeY=page.getWidth();
PdfPTable table=new PdfPTable(10);
table.setTotalWidth(sizeY);
float[] widths=new float[] {1.f,1.5f,4.f,1.f,1.f,1.f,1.f,1.f,1.f,1.f};
table.setWidths(widths);

ดูเหมือนว่าความกว้างของตารางจะเป็นค่าเริ่มต้นเสมอ (80% ของความกว้างของหน้าแนวตั้ง) ฉันจะทำให้ตารางใช้ความกว้างของหน้าแนวนอนได้อย่างไร ทีไอเอ.


person Wt Riker    schedule 27.11.2017    source แหล่งที่มา
comment
โค้ดเหตุการณ์หน้าของคุณเหมาะสำหรับสถานการณ์ที่คุณต้องการเติมหน้าในการวางแนวเอกสารปกติ จากนั้นหมุนหน้าที่เติมให้เต็ม (เพื่อให้มีหน้าแนวนอนที่มีข้อความที่ไม่ตั้งตรงในที่สุด) หากคุณต้องการใช้รูปแบบแนวนอนที่มีข้อความตั้งตรง เพียงตั้งค่าขนาดเอกสารเป็นรูปแบบแนวนอนก่อนที่จะสร้างหน้าที่เป็นปัญหา (สำหรับหน้าแรกก่อนที่จะ opening อินสแตนซ์ Document ด้วยซ้ำ)   -  person mkl    schedule 27.11.2017
comment
ขอบคุณ. ฉันทำอย่างนั้นตั้งแต่แรก แต่ยังคงได้ผลลัพธ์เหมือนเดิม ตารางจะไม่ขยายเกินมิติที่เล็กที่สุด ไม่ว่าในกรณีใดการทำเช่นนั้นจะทำให้เกิดการวางแนวในแนวตั้ง ฉันต้องหมุนมันด้วยโปรแกรมดู PDF แทนที่จะแสดงในแนวนอนเพื่อเริ่มต้น วิธีนี้จะแสดงในแนวนอนโดยไม่ต้องหมุนกับผู้ดู   -  person Wt Riker    schedule 27.11.2017


คำตอบ (1)


คุณกำลังใช้ iText 5 แบบเก่า มีนิสัยแปลกๆ มากมายใน iText 5 ที่แก้ไขได้ใน iText 7

ใน iText 7 เรามีแนวคิดของ UnitValue ซึ่งช่วยให้ iText พิจารณาว่าบางสิ่งเป็นค่าสัมบูรณ์ (ในหน่วยผู้ใช้ / คะแนน) หรือค่าสัมพัทธ์ (เปอร์เซ็นต์)

ใน iText 5 แนวคิดนี้ไม่เป็นที่รู้จัก คลาส PdfPTable มีสองพารามิเตอร์สำหรับความกว้างของตาราง:

  • ความกว้างเป็นเปอร์เซ็นต์: 80% โดยค่าเริ่มต้น
  • ความกว้างสัมบูรณ์

ตามค่าเริ่มต้น จะใช้ความกว้างเป็นเปอร์เซ็นต์ หากคุณต้องการใช้ความกว้างสัมบูรณ์ คุณจะต้อง "ดึงสวิตช์" ด้วยเมธอด setLockedWidth():

table.setTotalWidth(sizeY);
table.setLockedWidth(true);

ฉันรู้ว่ามันแปลก แต่ขอย้ำอีกครั้งว่าคุณกำลังใช้ iText เวอร์ชัน เก่า หากคุณต้องการ API ที่สอดคล้องกันมากขึ้น โปรดใช้ iText 7 การอัพเกรดนั้นสำคัญมาก เราใช้เวลาและเงินไปมากมายในการปรับปรุง iText ดังนั้นจึงเป็นเรื่องน่าหงุดหงิดที่เห็นว่านักพัฒนา iText รายใหม่เลือกที่จะทำงานกับ iText 5 แทนที่จะเป็น iText 7

person Bruno Lowagie    schedule 27.11.2017
comment
บิงโก นั่นก็คือมัน ขอบคุณ. ตอนนี้ฉันต้องรู้ก่อนว่าเหตุใด Eclipse จึงไม่อัปเดตเป็น iText 7 แต่นั่นคือปัญหาของฉันตอนนี้ - person Wt Riker; 27.11.2017
comment
iText 7 เป็นการเขียน iText 5 ใหม่ทั้งหมด หากคุณเพิ่งอัปเกรด คุณจะทำลายโค้ดที่มีอยู่ - person Bruno Lowagie; 27.11.2017
comment
อืม เนื่องจากฉันเพิ่งเริ่มโค้ดนี้ ฉันจึงอาจจำเป็นต้องดำเนินการตอนนี้ ฉันเดาว่าฉันต้องนำเข้าการพึ่งพา Maven อื่น - person Wt Riker; 28.11.2017
comment
ทั้งหมดนี้อยู่ที่นี่: developers.itextpdf.com/itext7/download-and- ข้อมูลการติดตั้ง/ - person Bruno Lowagie; 28.11.2017