PdfDocument 到 byte[] 使用 PdfMerger iText7
PdfDocument to byte[] using PdfMerger iText7
我有一个要求,我要使用 iText 7.1.11
生成不同的 pdf'。我正在使用 PdfMerger
即时合并所有 pdf。我能够在我的本地系统上成功生成 pdf,但应用程序需要发送 bye[]
作为响应。我找到的解决方案 here and here 。但问题是 PdfMerger
不接受 Document
对象,我不确定我是否将我的代码恢复为使用 Document
而不是 PdfDocument
是否有效。
以下是我尝试过的代码。
public static void createPdf(List<String> src, String dest, PageSize pageSize, boolean rotate, String baseUri) throws IOException {
ConverterProperties properties = new ConverterProperties();
properties.setBaseUri(baseUri);
FontProvider fontProvider = new DefaultFontProvider(false,false,true);
properties.setFontProvider(fontProvider);
/** tried this to make return byte[] in response
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfDocument pdf = new PdfDocument(new PdfWriter(byteArrayOutputStream));
Document doc = new Document(pdfDoc); **/
///////////// Working on Local/////
PdfWriter writer = new PdfWriter(dest); // 'dest' is local file system path
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
for (String html : src) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument temp = new PdfDocument(new PdfWriter(baos));
if(rotate) {
temp.setDefaultPageSize(pageSize.rotate()); /** Page Size and Orientation */
} else {
temp.setDefaultPageSize(pageSize); /** Page Size and Orientation */
}
HtmlConverter.convertToPdf(html, temp, properties);
temp = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
merger.merge(temp, 1, temp.getNumberOfPages());
temp.close();
}
pdf.close();}
请帮帮我,这个简单的事情似乎很难实现
这就是您初始化 PdfMerger
的方式:
PdfWriter writer = new PdfWriter(dest); // 'dest' is local file system path
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
即您明确写入本地文件系统,甚至在评论中强调这一事实。
如果你想把合并的 PDF 最后放在 byte[]
中,你为什么不在这里简单地使用 ByteArrayOutputStream
(因为你声称你之前已经尝试过几行) :
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(byteArrayOutputStream );
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
...
pdf.close();
byte[] bytes = byteArrayOutputStream.toByteArray();
我有一个要求,我要使用 iText 7.1.11
生成不同的 pdf'。我正在使用 PdfMerger
即时合并所有 pdf。我能够在我的本地系统上成功生成 pdf,但应用程序需要发送 bye[]
作为响应。我找到的解决方案 here and here 。但问题是 PdfMerger
不接受 Document
对象,我不确定我是否将我的代码恢复为使用 Document
而不是 PdfDocument
是否有效。
以下是我尝试过的代码。
public static void createPdf(List<String> src, String dest, PageSize pageSize, boolean rotate, String baseUri) throws IOException {
ConverterProperties properties = new ConverterProperties();
properties.setBaseUri(baseUri);
FontProvider fontProvider = new DefaultFontProvider(false,false,true);
properties.setFontProvider(fontProvider);
/** tried this to make return byte[] in response
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfDocument pdf = new PdfDocument(new PdfWriter(byteArrayOutputStream));
Document doc = new Document(pdfDoc); **/
///////////// Working on Local/////
PdfWriter writer = new PdfWriter(dest); // 'dest' is local file system path
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
for (String html : src) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument temp = new PdfDocument(new PdfWriter(baos));
if(rotate) {
temp.setDefaultPageSize(pageSize.rotate()); /** Page Size and Orientation */
} else {
temp.setDefaultPageSize(pageSize); /** Page Size and Orientation */
}
HtmlConverter.convertToPdf(html, temp, properties);
temp = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
merger.merge(temp, 1, temp.getNumberOfPages());
temp.close();
}
pdf.close();}
请帮帮我,这个简单的事情似乎很难实现
这就是您初始化 PdfMerger
的方式:
PdfWriter writer = new PdfWriter(dest); // 'dest' is local file system path
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
即您明确写入本地文件系统,甚至在评论中强调这一事实。
如果你想把合并的 PDF 最后放在 byte[]
中,你为什么不在这里简单地使用 ByteArrayOutputStream
(因为你声称你之前已经尝试过几行) :
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(byteArrayOutputStream );
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
...
pdf.close();
byte[] bytes = byteArrayOutputStream.toByteArray();