2017-08-30 81 views
0

我需要在內存中創建PDF文檔我正在使用pdfbox。在內存中創建pdf文檔

這是我的代碼,但它在磁盤上創建文檔。

public PDDocument generatePDF(String name, String v1, String v2, String v3, String v4) { 
     PDPageContentStream contentStream = null; 
     PDDocument document = null; 
     try { 
      document = new PDDocument(); 
      PDPage page = new PDPage(); 
      document.addPage(page); 
      contentStream = new PDPageContentStream(document, page); 


      fillDataInPDF(...); 
      corpPDF(page); 
     } catch (IOException err) { 
      LOG.error("Error occured ."); 
     } finally { 
      if (contentStream != null) { 
       try { 
        contentStream.close(); 
       } catch (IOException e) { 
        LOG.error("Error occured ."); 
       } 
      } 
     } 
     return document; 
    } 
+0

好的。我贊同你在記憶中創造它的慾望。你真的做到了,或做了一些沒有用的東西? –

+0

我已經創建了磁盤,不知道如何在內存中繼續。 – singhal

+2

您的代碼示例中沒有任何內容會暗示它是在光盤上創建的。 –

回答

0

正如@ M.Prokhorov在你的問題中留言已經說過,沒有什麼您的代碼示例中,將表明,它是在光盤上創建。特別是PDDocument構造此處使用

document = new PDDocument(); 

document = new PDDocument(MemoryUsageSetting.setupMainMemoryOnly()); 

設置緩衝存儲器使用的簡短形式,只使用不以限制主存儲器(沒有臨時文件)尺寸。

因此,除非有一些隱藏在fillDataInPDFcorpPDF寫入到一個文件,你的方法完全在內存中創建一個PDF對象模型。

正如我不認爲你會隱藏這麼明顯的文件寫入,您的要求,該文件在磁盤上創建最有可能意味着你的方法generatePDF的來電者是序列化模型作爲PDF文件保存到磁盤,例如這樣

PDDocument doc = generatePDF(name, v1, v2, v3, v4); 
doc.save("SOME_FILE_PATH_ON_DISC"); 

由於@TilmanHausherr指出您可以保存PDF爲ByteArrayOutputStream和一個可以轉換爲字節數組,例如而不是上面你應該使用

PDDocument doc = generatePDF(name, v1, v2, v3, v4); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
doc.save(baos); 
byte[] pdfBytes = baos.toByteArray(); 

所以保留序列化的PDF文件在內存中。