c# - 试图从 pdfstamper 获取内存流到 pdfreader 但得到 : "PDF startxref not found"

标签 c# pdf itext

我正在用 c# 编写一个应用程序,它填写一堆 pdf 表单,将它们连接起来,然后输入一些页码。我在处理 pdfstamper 的内存流结果时遇到困难。如果我将内存流更改为文件流,它可以正常工作,但我不想使用文件系统。我创建了以下重现我的错误的代码片段:

    public static void TestStreams(string filepath)
    {
        PdfReader reader = new PdfReader(filepath);
        MemoryStream ms = new MemoryStream();
        PdfReader.unethicalreading = true;
        PdfStamper stamper = new PdfStamper(reader, ms);
        byte[] result = ms.ToArray();
        //The error is in the following line
        PdfReader reader2 = new PdfReader(result);
    }

错误是:

iTextSharp.text.exceptions.InvalidPdfException was unhandled
  HResult=-2146232800
  Message=Rebuild failed: trailer not found.; Original message: PDF startxref not found.
  Source=itextsharp

我该如何解决?

最佳答案

你忘记了一行:

public static void TestStreams(string filepath) {
    PdfReader reader = new PdfReader(filepath);
    MemoryStream ms = new MemoryStream();
    PdfReader.unethicalreading = true;
    PdfStamper stamper = new PdfStamper(reader, ms);
    stamper.Close();
    byte[] result = ms.ToArray();
    //The error is in the following line
    PdfReader reader2 = new PdfReader(result);
}

当您在未先关闭stamper 的情况下执行ms.ToArray() 时,您得到的PDF 不完整。 PDF 以 %PDF- 开头,但没有 %%EOF,没有预告片,没有目录。 PdfReader 无法读取不完整的 PDF。

关于c# - 试图从 pdfstamper 获取内存流到 pdfreader 但得到 : "PDF startxref not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36745333/

相关文章:

c# - 如何从pdf文档中的文本框注释中获取值

c# - 仅数字和斜杠(日期)文本框 asp.net

c# - Console.Read() 和 Console.ReadLine() 问题

java - 如何给 JTable 单元格边框(左、右、上、下)不同的颜色?

javascript - 基于多个分隔符解析为数组

c# - 如何使用 C# 从 HTML 转换为 PDF?

c# - 如何根据姓氏和名字在 Active Directory 中搜索用户?

c# - Nhibernate Map 复合元素

c# - HTML 到 PDF 动态添加目录 (TOC)

pdf-generation - 在 iTextSharp 中对矩形进行分组