2017-10-04 205 views
1

我試過itextPdf_page_orientation但問題是 - 只有第一頁是適當的休息所有頁面打印在半面積。 這是一張可以幫助你理解問題的圖像。 enter image description here橫向打印多頁使用iText pdf

我已經嘗試設置頁面大小PdfPage.A4.rotate()並將事件設置爲PdfWritter。
這是代碼snipet。

@Override 
    protected String doInBackground(Void... params) { 
    final String PARENT_PATH = 
    Environment.getExternalStorageDirectory().getPath() + "/.GSTInvoice"; 
    Document document = null; 
    try { 
     File file = new File(PARENT_PATH); 
     if (!file.exists()) { 
      file.mkdirs(); 
     } 
     File pdfFile = new File(file, "last_sales_summary"); 

     document = new Document(); 
     document.setPageSize(PageSize.A4.rotate()); 
     event = new RotateEvent(); 

     PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pdfFile)); 
     writer.setPageEvent(event); 
     document.open(); 
     event.setOrientation(PdfPage.LANDSCAPE); 
     taxList = new ArrayList<>(); 

     PdfContentByte cb = writer.getDirectContent(); 
     printPage(document, writer, cb); 

     if (document != null && document.isOpen()) { 
      document.close(); 
     } 
     return pdfFile.getPath(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (document != null && document.isOpen()) { 
      document.close(); 
     } 
    } 
    return null; 
} 


private void printPage(Document document, PdfWriter pdfWriter, PdfContentByte pdfContentByte) throws Exception{ 


    int noOfPages = getNoOfPages(); 
    BaseFont latoLight = BaseFont.createFont("assets/Lato-Light.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
    Font light = new Font(latoLight, 8); 
    for (int i=1;i<=noOfPages;i++) { 
     if (i != 1) { 

      document.newPage(); 
      pdfWriter.setPageSize(PageSize.A4.rotate()); 
      event.setOrientation(PdfPage.LANDSCAPE); 
      document.setPageSize(PageSize.A4.rotate()); 
     } 

     addTopPart(document); 

     addMiddleTable(document, i); 

     if (noOfPages>1) { 
      Paragraph paragraph = new Paragraph(new Phrase("Page " + i + "/" + noOfPages, light)); 
      paragraph.setAlignment(Element.ALIGN_CENTER); 
      paragraph.setSpacingBefore(8f); 
      ColumnText.showTextAligned(pdfContentByte, Element.ALIGN_CENTER, 
        paragraph, 
        (document.right() - document.left())/2 + document.leftMargin(), 
        document.bottom() - 10, 0); 
     } 
     event.setOrientation(PdfPage.LANDSCAPE); 
    } 
} 


任何輸入可以理解

+0

你有沒有在'document.open()'之前嘗試'event.setOrientation(PdfPage.LANDSCAPE)'? – mkl

+0

是的,它不工作。我認爲方向是正確的,這是導致此問題的頁面大小或維度。 –

+0

請分享有問題的PDF。 – mkl

回答

1

PDF的唯一特點是,第一頁具有爲0的頁面旋轉,而第二個具有90

頁旋轉

這是由於我在第一條評論中暗示的:通過在document.open()之後做event.setOrientation(PdfPage.LANDSCAPE),第一頁不會被事件偵聽器旋轉,只會被後續的事件偵聽器旋轉。除此之外,所有頁面都有一個帶有旋轉頁面填充內容的縱向A4頁面的媒體箱。

當您指出更改event.setOrientationdocument.open的順序不會改變行爲時,問題的打印管理器似乎是錯誤的。

您可能會嘗試刪除所有event.setOrientation(PdfPage.LANDSCAPE)調用;這應該導致所有頁面變得像第一個頁面。

或者您可能想要刪除所有代碼設置和更改旋轉,而是使用new Document(new RectangleReadOnly(842,595))實例化文檔文檔,即根本沒有任何旋轉;因爲打印管理器似乎沒有正確處理旋轉,這也可能導致期望的行爲。

正如評論報道的OP,

您使用RectangleReadOnly(842,595)建議的工作。