【问题标题】:How can I produce a Base64 encoded PDF that is read by iText's PdfReader如何生成由 iText 的 PdfReader 读取的 Base64 编码 PDF
【发布时间】:2016-04-15 08:58:34
【问题描述】:

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

PdfReader reader = new PdfReader(INPUT);

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

【问题讨论】:

  • 你必须澄清,因为现在你的问题没有意义。 PdfReader 不会生成 PDF,因此解释您的问题的一种方法是:如何让 PdfReader 接受使用 base64 编码的 INPUT。这个问题很容易回答。 PdfReader 与生成 PDF 的编写器类(PdfCopyPdfStamper、...)结合使用。解释您的问题的另一种方法是您想要生成以 base64 编码的 PDF。这也很容易实现,但与第一种解释完全不同。总而言之,这个问题的质量很低。
  • 我用 PdfReader 阅读了一个 PDF,我必须将它转换为 base64 以插入到 db2 中的表中
  • 那你当初为什么不这么说呢?请阅读我的第二个答案。另外:如果您不需要更改 PDF,那么为什么要使用 iText 对 PDF 进行编码???我重写了你的问题,但有可能你甚至不需要 iText。
  • 因为如果我使用 inputStream/outStream pdf 将无法很好地重新创建
  • 所以你不需要 iText。您只想将文件编码为 Base64 字符串。我看看能不能结束这个问题。

标签: base64 itext


【解决方案1】:

您的问题不清楚,或者至少是模棱两可的。

询问如何在 Base64 中转换 PdfReader pdfReader? 没有任何意义,这就是您的问题不清楚的原因。您的问题可能是您有使用 Base64 编码的 input,或者您想要使用 Base64 编码的 output。这让你的问题变得模棱两可。

如果INPUTString 代表使用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 类。

如果您不需要处理 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 中写这个“反编译”

你有两个选择:

[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。

【讨论】:

  • 你又问了一个没有意义的问题。 byte[]的内容是什么?如果你不回答这个问题,你就不应该期待答案。也许就像这里解释的一样简单:stackoverflow.com/questions/4350084/byte-to-file-in-java 当然,如果byte[] 不是一个实际的 PDF 文件(例如它是 Base64 编码的),那么答案会有所不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多