2017-06-19 110 views
0

我正在創建adf項目並使用itextpdf 5.1.3生成報告。 例如: - 我的表客戶有3000行。在我的jspx頁面有客戶表&按鈕有文件下載列表程序那裏我只是簡單地調用報告。 只有前50行(最多4頁)纔會生成報告。 爲什麼剩餘的行不在報告中?itextpdf中的最大頁面大小

private void generatePDFFile(FacesContext facesContext, java.io.OutputStream outputStream) { 
    try { 
     DCBindingContainer dcBindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry(); 
     DCIteratorBinding iterBind1 = (DCIteratorBinding)dcBindings.get("CustomerView1Iterator"); 

     Document document = new Document(); 
     PdfWriter.getInstance(document, new FileOutputStream(FILE)); \\file path local disk D:\mywork\customer.pdf   
     document.open(); 
     Row[] rows= iterBind1.getAllRowsInRange(); 
     for(Row row:rows){ 
     custcode = (String) row.getAttribute("CustomerCode"); 
     custname = (String) row.getAttribute("CustomerNameE"); 
     addgroup(document); 
     } 
     document.close(); 
     facesContext = facesContext.getCurrentInstance(); 
     ServletContext context = (ServletContext)facesContext.getExternalContext().getContext(); 
     File file = new File(FILE); 
     FileInputStream fileInputStream; 
     byte[] b; 
     System.out.println(file.getCanonicalPath()); 
     System.out.println(file.getAbsolutePath()); 
     fileInputStream = new FileInputStream(file); 
     int n = fileInputStream.available(); 
     while (n > 0) { 
      b = new byte[n]; 
      //b = new byte[8192]; 
      int result = fileInputStream.read(b); 
      outputStream.write(b, 0, b.length); 
      if (result == -1) 
       break; 
     } 
     outputStream.flush(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
private static void addgroup(Document document) throws DocumentException{ 

    Paragraph preface1 = new Paragraph(); 
    Paragraph preface2 = new Paragraph(); 
    preface1.add(new Chunk("\n")); 
    preface1.add(new Chunk("Customer : "+custcode+"  "+custname,BlueFont)); 
    preface1.add(new Chunk("\n")); 
    document.add(preface1); 
    document.add(preface2); 

} 
+2

真是個壞問題。你能改善它嗎? –

+0

嗨布魯諾, 我的表有3000行。當調用pdf代時只有前50行纔會來。爲什麼? 以下是我的代碼.... –

+1

您的代碼不在下面。成千上萬的開發者使用iText創建了超過3000行的PDF。如果你問我*爲什麼*你的應用程序只渲染50行,答案很簡單:因爲你做錯了什麼。你在做什麼錯了?也許你不應該使用近6年前的iText版本。你有沒有嘗試升級? –

回答

0

通過14,400個用戶單位,PDF文檔中頁面的最大大小爲14,400。查看博文Help, I only see blank pages in my PDF。這不是iText引入的限制;這是PDF閱讀器(如Adobe Reader)中存在的限制。其他觀衆(如Apple Preview)在顯示較大頁面的PDF時沒有問題。

這會回覆您帖子主題行中的問題。

您帖子的正文包含完全不同的問題。也許你不是在問頁面大小,而是關於文件大小。過去也回答了這個問題。見What is the size limit of pdf file?

請允許我總結了答案:

  • 與年紀比PDF 1.5大約10千兆字節的某個版本的PDF的最大尺寸。
  • 使用壓縮交叉引用流的PDF版本爲1.5或更高版本的PDF的最大大小僅取決於處理PDF的軟件的限制。
  • 使用5.3之前的iText版本創建的PDF的最大大小爲2千兆字節。使用iText版本5.3和更高版本創建的PDF的最大大小爲1 TB。

由於您使用的是iText 5.1.3,因此您可以創建2 GB的PDF。它打敗了我,爲什麼你使用的是2011年11月的iText版本,而不是更新的版本,但沒有理由不能將包含3000行的表格放在PDF中,這樣的表格可以同樣大爲2 GB。

有可能是你的代碼非常糟糕。不幸的是,你不會向我們展示你的代碼。您是否閱讀過有關如何創建Large Tables的文檔?

我不能在這裏你說的部分評論:

在我JSPX頁面有客戶表&按鈕有文件下載聽者有我只是打電話報告。

這似乎沒有在您的問題的上下文中相關。