如何生成由 iText 的 PdfReader 读取的 Base64 编码的 PDF
How can I produce a Base64 encoded PDF that is read by iText's PdfReader
我正在使用 iText 阅读现有的 PDF (INPUT
):
PdfReader reader = new PdfReader(INPUT);
我正在使用此 reader
实例来操作 PDF,但最终结果需要进行 Base64 编码(我需要将其作为文本 BLOB 插入到 db2 数据库中)。如何确保 iText 的输出是 Base64 编码的?
你的问题不清楚,或者至少是模棱两可的。
询问 How can I convert PdfReader pdfReader in Base64? 没有任何意义,这就是为什么你的问题不清楚。您的问题可能是您拥有使用 Base64 编码的 input,或者您想要使用 Base64 编码的 output。这让你的问题模棱两可。
如果INPUT
是String
表示使用Base64编码的PDF文件,那么你可以这样解码它:
import com.itextpdf.text.pdf.codec.Base64;
...
PdfReader reader = new PdfReader(Base64.decode(INPUT));
如果 INPUT
是一个 PDF 文件(到的路径),您想要处理的结果是一个编码为 Base64 字符串的 PDF,那么您可以这样做:
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 class。
如果你不需要操作 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);
我想把这个 "decompilata " 写成 pdf 文件 itext.jar
您有两个选择:
[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.
我正在使用 iText 阅读现有的 PDF (INPUT
):
PdfReader reader = new PdfReader(INPUT);
我正在使用此 reader
实例来操作 PDF,但最终结果需要进行 Base64 编码(我需要将其作为文本 BLOB 插入到 db2 数据库中)。如何确保 iText 的输出是 Base64 编码的?
你的问题不清楚,或者至少是模棱两可的。
询问 How can I convert PdfReader pdfReader in Base64? 没有任何意义,这就是为什么你的问题不清楚。您的问题可能是您拥有使用 Base64 编码的 input,或者您想要使用 Base64 编码的 output。这让你的问题模棱两可。
如果INPUT
是String
表示使用Base64编码的PDF文件,那么你可以这样解码它:
import com.itextpdf.text.pdf.codec.Base64;
...
PdfReader reader = new PdfReader(Base64.decode(INPUT));
如果 INPUT
是一个 PDF 文件(到的路径),您想要处理的结果是一个编码为 Base64 字符串的 PDF,那么您可以这样做:
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 class。
如果你不需要操作 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);
我想把这个 "decompilata " 写成 pdf 文件 itext.jar
您有两个选择:
[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.