1

我正在使用 iTextSharp DLLin asp.net。

PdfReader reader = new PdfReader(path);
        //create footer
        MemoryStream outStream = new MemoryStream();
        PdfStamper textStamp = new PdfStamper(reader, outStream);
        BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, Encoding.ASCII.EncodingName, false);
        for (int i = 1; i <= reader.NumberOfPages; i++)
        {
            PdfContentByte pdfPageContents = textStamp.GetOverContent(i);            
//How to convert the PdfContentByte  to array of bytes here?
}

我想将 PDF 的每一页转换为 JPEG。如何在此处将 PdfContentByte 转换为字节数组?

4

3 回答 3

2

试试这个:

PdfReader reader = new PdfReader(path);
MemoryStream outStream = new MemoryStream();
PdfStamper textStamp = new PdfStamper(reader, outStream);
byte[] content = outStream.ToArray();
于 2013-09-06T07:31:48.773 回答
2

我认为你的计划不会奏效。并非所有看起来都存在于“页面”上的东西实际上都存在于页面上,有些东西存在于全球共享位置。所以提取页面的字节会给你一个损坏的文档。您可以将 PDF 中的每一页提取为单独的文件,这些文件将带来这些共享资源,但仍然是 PDF 格式。如果您已经编写了 PDF 到 JPEG 的例程,那么也许您没问题。如果您还没有,那么 iTextSharp 将无法为您提供帮助。

iTextSharp 不(当前)“知道” PDF“看起来”是什么样的,它只知道 PDF 的内容。它“知道”存在一系列文本,但它不“知道”应该如何在视觉上呈现。它“知道”PDF 可能有两个图像,但不“知道”甚至不在乎它们是否重叠,这又是渲染器的问题。

再一次,如果您编写了 PDF 到 JPEG 例程,那么请忽略我所说的一切。但是 PDF 的字节与 JPEG 的字节没有任何共同之处。尽管 PDF 可能包含 JPEG,但它也可以包含许多其他类型的二进制数据。而且这些数据也可能被压缩在流中。

现在,如果您只想从 PDF 中提取图像,那么 iTextSharp 可以为您提供帮助。

于 2013-09-06T13:17:27.100 回答
0

你可以得到如下byte[]的 a :PdfContentByte

pdfPageContents.getInternalBuffer().toByteArray();
于 2020-02-19T02:20:23.040 回答