我计划使用pdf.js通过带有 Javascript 的浏览器获取 PDF 上下文。问题是我正在使用的某些 PDF 需要具有特定版本的 Adobe 阅读器。pdf.js 还不(曾经?)支持这些欺骗。我需要知道的是 C# 中是否有办法打开 PDF 并删除这些阅读器和版本要求以及如何做到这一点。我正计划使用itextsharp在服务器端进行其他 PDF 操作,因此使用它的示例将是最有帮助的。我计划通过 MVC 4 将这些作为ActionResult
ajax 请求提供,因此MemoryStream
在此操作结束时最有帮助。
问问题
1070 次
2 回答
2
所以最终pdf.js
也无法做我需要的事情,但是,我能够做的是将 转换Xfa/Pdf
为C#
对象,然后根据需要通过 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
使用Adobe XML Forms Architecture (XFA)。这意味着您需要一个也支持XFA的查看器,而 pdf.js 似乎不支持。
这样的 PDF 通常包含一些标准的 PDF 内容,这表明 PDF 需要一些支持 XFA 的查看器。在您的情况下,内容包含
如果此消息最终没有被文档的正确内容替换,您的 PDF 查看器可能无法显示此类文档。
这实际上表明了启用 XFA 的查看器的作用,它根据 XFA XML 数据中的信息呈现一些页面并显示它而不是 PDF 样式的页面描述。
虽然由 Adobe 专有定义,但PDF 规范 ISO 32000-1描述了如何将 XFA 数据嵌入到 PDF 文档中,参见。第 12.7.8 节XFA 表格。
如果您只需要那些处于展平状态的表单,您可能需要查看iText 演示:PDF 中的动态 XFA 表单。
于 2013-02-17T20:54:05.137 回答