如何生成由iText的PdfReader读取的Base64编码的PDF

时间:2016-04-15 08:58:34

标签: base64 itext

我正在使用iText阅读现有PDF(INPUT):

PdfReader reader = new PdfReader(INPUT);

我正在使用此reader实例来操作PDF,但最终结果需要进行Base64编码(我需要将其作为文本BLOB插入到db2数据库中)。如何确保iText的输出是Base64编码?

1 个答案:

答案 0 :(得分:0)

你的问题不清楚,或者至少含糊不清。

询问如何在Base64中转换PdfReader pdfReader?没有任何意义,这就是为什么你的问题不清楚的原因。您的问题可能是您使用Base64编码的输入,或者您想要使用Base64编码的输出。这使你的问题含糊不清。

如果INPUTString代表使用Base64编码的PDF文件,那么您可以像这样对其进行解码:

import com.itextpdf.text.pdf.codec.Base64;
...
PdfReader reader = new PdfReader(Base64.decode(INPUT));

如果INPUT是您要操作的PDF文件(路径),而PDF文件被编码为Base64字符串,那么您可以这样做:

import com.itextpdf.text.pdf.codec.Base64;
PdfReader reader = new PdfReader(INPUT);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(reader, baos);
// do stuff with stamper
stamper.close();
String base64 = Base64.encode(baos.toByteArray());

可能还有其他方法可以生成Base64输出,例如:使用某种Base64OutputStream,但我更喜欢使用iText附带的Base64类。

如果您不需要操作PDF,则甚至不需要iText。您只需使用此问题的答案:Out of memory when encoding file to base64

<强>更新

在对这个答案的评论中,你写道:

我有这个:

byte[] bdata = blob.getBytes(1, (int) blob.length());
InputStream inputStream = blob.getBinaryStream();
String recuperataDaDb = convertStreamToString(inputStream);
byte[] decompilata = Base64.decode(recuperataDaDb);

我想在pdf文件whit itext.jar

中写下这个“decompilata”

您有两种选择:

[1。]你不需要iText。您只需将byte[]写入文件,如下所述:byte[] to file in Java

FileOutputStream stream = new FileOutputStream(path);
try {
    stream.write(bytes);
} finally {
    stream.close();
}

[2.]你读到了这个问题的答案:

PdfReader reader = new PdfReader(decompilata);
FileOutputStream fos = new FileOutputStream(pathToFile);
PdfStamper stamper = new PdfStamper(reader, fos);
stamper.close();

您对使用iText的渴望感到非常惊讶。你真的不需要iText来满足你的要求。您所需要的只是教授如何编写Java代码来执行一些简单的I / O.