0

我计划使用pdf.js通过带有 Javascript 的浏览器获取 PDF 上下文。问题是我正在使用的某些 PDF 需要具有特定版本的 Adob​​e 阅读器。pdf.js 还不(曾经?)支持这些欺骗。我需要知道的是 C# 中是否有办法打开 PDF 并删除这些阅读器和版本要求以及如何做到这一点。我正计划使用itextsharp在服务器端进行其他 PDF 操作,因此使用它的示例将是最有帮助的。我计划通过 MVC 4 将这些作为ActionResultajax 请求提供,因此MemoryStream在此操作结束时最有帮助。

4

2 回答 2

2

所以最终pdf.js也无法做我需要的事情,但是,我能够做的是将 转换Xfa/PdfC#对象,然后根据需要通过 Json 将页面发送到我的 Javascript 以在HTML5 Canvas. 下面的代码采用 xfa-in-a-pdf 文件并借助以下代码将其转换为 C# 对象itextsharp

    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());
    }
于 2013-03-01T06:42:26.077 回答
1

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

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

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

这实际上表明了启用 XFA 的查看器的作用,它根据 XFA XML 数据中的信息呈现一些页面并显示它而不是 PDF 样式的页面描述。

虽然由 Adob​​e 专有定义,但PDF 规范 ISO 32000-1描述了如何将 XFA 数据嵌入到 PDF 文档中,参见。第 12.7.8 节XFA 表格。

如果您只需要那些处于展平状态的表单,您可能需要查看iText 演示:PDF 中的动态 XFA 表单

于 2013-02-17T20:54:05.137 回答