2013-02-15 54 views
0

我打算使用pdf.js来通过带有Javascript的浏览器使用PDF上下文。问题是,我正在使用的一些PDF需要Adobe Reader提供特定的版本。 pdf.js确实还没有(曾经?)支持欺骗这些。我需要知道的是,如果C#中有办法打开PDF并删除这些Reader和Version需求以及如何执行此操作。我打算使用itextsharp来做其他PDF操作服务器端,所以使用这个例子将是最有用的。我计划通过MVC 4从ajax请求中将这些作为ActionResult提供,因此MemoryStream在此操作结束时最有帮助。将Adobe Reader和版本要求从PDF输出到浏览器之前

+0

你将不得不打开PDF(在内存中),然后使用保存副本里面不断用于在C#程序中阅读pdf的过程。如果您能控制PDF文件(我假设您没有),您也可以使用Acrobat来执行此操作。 – 2013-02-15 22:14:52

+0

我了解这部分内容...我很好奇的是我必须从'In Memory'副本中删除以删除版本和读卡器要求 – 2013-02-15 22:20:26

+0

好吧 - 所以您不想删除版本号: - )。我会删除我的答案。 – 2013-02-15 23:06:16

回答

1

您的PDF文件n-400.pdf使用Adobe XML Forms Architecture (XFA)。这意味着您需要一个也支持XFA的查看器,而pdf.js似乎不支持。

这样的PDF通常包含一些标准的PDF内容,这表明PDF需要一些支持XFA的查看器。在您的情况下,内容包含

如果此邮件最终没有被正确的文档内容替换,您的PDF查看器可能无法显示此类文档。

这实际上表示XFA使能的浏览器所做的事情,它根据XFA XML数据中的信息呈现一些页面,并显示它而不是PDF样式页面描述。

虽然被Adobe专门定义,但PDF specification ISO 32000-1描述了如何将XFA数据嵌入到PDF文档中,参见参考资料。第12.7.8节XFA表单。

如果您只需要这些表单处于扁平状态,则可能需要查看iText Demo: Dynamic XFA forms in PDF

到底 pdf.js
+0

我会接受你的回答,因为它回答我的问题,但请参阅我的回答,以了解我真正想要的内容...... – 2013-03-01 06:37:15

+0

@SerjSagan你确定在您的用例中将XFA内容平铺为常规PDF是否可以吗?如果是这样,您应该仔细研究* iText Demo的展平功能:PDF中的动态XFA表单,它演示了该功能。这种展平的结果很可能被pdf.js显示。如果您在答案中提到的程序适用于您,那也没关系。 – mkl 2013-03-01 09:40:06

2

所以无法做什么,我需要它太,但是,我能够做的是转换Xfa/PdfC#对象,然后发送的页面通过JSON为需要我的javascript在渲染HTML5 Canvas。下面的代码需要一个XFA-IN-A-PDF文件,并与itextsharp的帮助下把它变成一个C#对象:

PdfReader.unethicalreading = true; 
    PdfReader reader = new PdfReader(new FileStream(Statics.PdfUploadLocation + PdfFileName, FileMode.Open, FileAccess.Read)); 

    XfaForm xfaForm = new XfaForm(reader); 
    XDocument xDoc = XDocument.Parse(xfaForm.DomDocument.InnerXml); 

    string xfaNamespace = @"{http://www.xfa.org/schema/xfa-template/2.6/}"; 


    List<XElement> formPages = xDoc.Descendants(xfaNamespace + "subform").Descendants(xfaNamespace + "subform").ToList(); 
    TotalPages = formPages.Count(); 


    var fieldIndex = 0; 
    RawPdfFields = new List<XfaField>(); 

    for (int page = 0; page < formPages.Count(); page++) 
    { 
     RawPdfFields.AddRange(formPages[page].Descendants(xfaNamespace + "field") 
        .Select(x => new XfaField 
        { 
         Page = page, 
         Index = fieldIndex++, 
         Name = (string)x.Attribute("name"), 
         Height = GetUnitFromPossibleString((string)x.Attribute("h")), 
         Width = GetUnitFromPossibleString((string)x.Attribute("w")), 
         XPosition = GetUnitFromPossibleString((string)x.Attribute("x")), 
         YPosition = GetUnitFromPossibleString((string)x.Attribute("y")), 
         Reference = GetReference(x.Descendants(xfaNamespace + "traverse")), 
         AssistSpeak = GetAssistSpeak(x.Descendants(xfaNamespace + "speak")) 
        }).ToList()); 
    } 
相关问题