2017-10-04 208 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)建议的工作。