我正在使用此代码使用iText生成PDF。首先,它将HTML转换为PDF,然后将其转换为字节数组或BLOB或字节数组中的PDF。 我不想在我的服务器上创建任何pdf实体店。首先,我想使用itext将HTML转换为PDF的blob,之后我想将这个blob存储在我的数据库中(我将在DB中存储)。
String userAccessToken=requests.getSession()
.getAttribute("access_token").toString();
Document document = new Document(PageSize.LETTER);
String name="/pdf/invoice.pdf";
PdfWriter pdfWriter = PdfWriter.getInstance
(document, new FileOutputStream(requests.getSession().getServletContext().getRealPath("")+"/assets"+name));
document.open();
document.addAuthor("Real Gagnon");
document.addCreator("Real's HowTo");
document.addSubject("Thanks for your support");
document.addTitle("Please read this ");
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
//data is an html string
String str = data;
worker.parseXHtml(pdfWriter, document, new StringReader(str));
document.close();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfWriter.getInstance(document, byteArrayOutputStream);
byte[] pdfBytes = byteArrayOutputStream.toByteArray();
link=name;
System.out.println("Byte array is "+pdfBytes);
问题: - 使用itext将html转换为pdf BLOB,没有PDF的物理存在。
答案 0 :(得分:0)
写入ByteArrayOutputStream
(而不是FileOutputStream
):
PdfWriter pdfWriter = PdfWriter.getInstance
(document, new ByteArrayOutputStream());
答案 1 :(得分:0)
这个问题的另一个答案几乎是正确的,但并不完全正确。
您可以在创建OutputStream
时使用任何PdfWriter
。如果要完全在内存中创建文件,可以使用ByteArrayOutputStream
这样的内容:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document document = new Document();
PdfWriter.getInstance(document, baos);
document.open();
// add stuff
document.close();
byte[] pdf = baos.toByteArray();
简而言之:您首先创建ByteArrayOutputStream
,将此OutputStream
传递给PdfWriter
,文档关闭后,您可以从OutputStream
获取字节
(在另一个答案中,没有办法检索字节。另外:在文档关闭之前,不要尝试检索字节。)