【发布时间】: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对象中。我不知道任何需要 iTextDocument对象才能将 PDF 渲染到屏幕的 Windows 应用程序,因为 iText 不进行渲染。我认为您将 iTextDocument类与其他产品混淆了。如果有人使用 iTextDocument类来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