【问题标题】:Returning PDFDocument object from PDFStamper itextsharp从 PDFStamper itextsharp 返回 PDFDocument 对象
【发布时间】:2014-12-07 08:40:09
【问题描述】:

我想从下面的代码中返回 Document 对象。 目前我得到一个文档没有页面异常。

private static Document GeneratePdfAcroFields(PdfReader reader, Document docReturn)
    {

         if (File.Exists(System.Configuration.ConfigurationSettings.AppSettings["TEMP_PDF"]))
            File.Delete(System.Configuration.ConfigurationSettings.AppSettings["TEMP_PDF"]);


        PdfStamper stamper = new PdfStamper(reader, new FileStream(System.Configuration.ConfigurationSettings.AppSettings["TEMP_PDF"],FileMode.Create));
        AcroFields form = stamper.AcroFields;

        ///INSERTING TEXT DYNAMICALLY JUST FOR EXAMPLE.
        form.SetField("topmostSubform[0].Page16[0].topmostSubform_0_\\.Page78_0_\\.TextField3_9_[0]", "This value was dynamically added.");
        stamper.FormFlattening = false;

        stamper.Close();

        FileStream fsRead = new FileStream(System.Configuration.ConfigurationSettings.AppSettings["TEMP_PDF"], FileMode.Open);

        Document docret = new Document(reader.GetPageSizeWithRotation(1));

        return docret;
    }

【问题讨论】:

  • 你的问题真的没有意义。您正在使用PdfStamper 来填写并可能在现有 PDF 上标记一些文本。到目前为止,一切都很好。但是为什么你需要一个Document 实例呢? Document 用于从头开始创建 PDF。很明显,您从头开始创建的文档没有页面。
  • 您好布鲁诺,感谢您的快速回复。实际上,我想将 PDF 压模创建的文件实例加载到 Document 对象中。我正在使用的 Windows 应用程序需要一个 Document 实例,以便最终创建的 pdf 可以呈现到用户屏幕。我正在使用 PDFStamper,因为我的 pdf 有 acroform。早期的函数使用 AddTemplate & Imported 页面并返回一个文档,但表单字段在生成后变得扁平(禁用)。请帮忙。
  • 不可能将文件加载到 iText Document 对象中。我不知道任何需要 iText Document 对象才能将 PDF 渲染到屏幕的 Windows 应用程序,因为 iText 不进行渲染。我认为您将 iText Document 类与其他产品混淆了。如果有人使用 iText Document 类来render 文档,我会感到非常惊讶。这种设计将存在严重缺陷。您的应用程序的上下文是什么?它是 Web 应用程序还是桌面应用程序?
  • No Bruno,itext 不用于渲染 pdf,pdf 是通过简单的 c# 渲染以从目录中打开文件。它是一个桌面应用程序。我正在使用 itext 向 acroforms pdf 文档添加一些内容,然后将文档保存在新位置。然而,农田变得平坦。让我试试你指向的代码:stackoverflow.com/questions/26174675/copy-pdf-with- annotations-using-itext
  • 只是重申@BrunoLowagie 所说的话,传递Document 对象几乎没有意义。不管名字听起来像什么,Document 无论如何都不代表 PDF。调用 ToString()GetBytes()(如果该方法确实存在)不会为您提供 PDF。 Document 只是一个单向漏斗,用于将人类友好的命令传递给实际写入原始 PDF 令牌的引擎。但是,该引擎甚至也不是 PDF。唯一真正是 PDF 的是正在写入的流的原始字节。

标签: pdf itextsharp itext


【解决方案1】:

谢谢克里斯。

只是重申@BrunoLowagie 所说的,传递 Document 对象几乎没有意义。尽管名称听起来像什么,但 Document 并不代表 PDF。调用 >ToString() 或 GetBytes() (如果该方法实际存在)不会为您提供 PDF。文档只是一个单向漏斗,用于将人性化的命令传递给实际编写原始 PDF >token 的引擎。但是,该引擎甚至也不是 PDF。唯一真正是 PDF 的是正在写入的流的原始 >字节。 ——克里斯·哈斯

【讨论】:

    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2015-11-09
    • 2015-01-27
    相关资源
    最近更新 更多