我打算使用pdf.js来通过带有Javascript的浏览器使用PDF上下文。问题是,我正在使用的一些PDF需要Adobe Reader提供特定的版本。 pdf.js确实还没有(曾经?)支持欺骗这些。我需要知道的是,如果C#中有办法打开PDF并删除这些Reader和Version需求以及如何执行此操作。我打算使用itextsharp来做其他PDF操作服务器端,所以使用这个例子将是最有用的。我计划通过MVC 4从ajax请求中将这些作为ActionResult
提供,因此MemoryStream
在此操作结束时最有帮助。将Adobe Reader和版本要求从PDF输出到浏览器之前
回答
您的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
我会接受你的回答,因为它回答我的问题,但请参阅我的回答,以了解我真正想要的内容...... – 2013-03-01 06:37:15
@SerjSagan你确定在您的用例中将XFA内容平铺为常规PDF是否可以吗?如果是这样,您应该仔细研究* iText Demo的展平功能:PDF中的动态XFA表单,它演示了该功能。这种展平的结果很可能被pdf.js显示。如果您在答案中提到的程序适用于您,那也没关系。 – mkl 2013-03-01 09:40:06
所以无法做什么,我需要它太,但是,我能够做的是转换Xfa/Pdf
为C#
对象,然后发送的页面通过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());
}
- 1. 在没有Adobe Reader的情况下将pdf文件显示到浏览器
- 2. 在Adobe Reader中打开PDF,而不是在浏览器
- 3. 约PDF表单,Acrobat Reader软件,浏览器插件和JavaScript
- 4. 强制网页浏览器仅在Adobe Acrobat Reader上显示PDF文件
- 5. 从Adobe Acrobat Reader和DejaVu Reader进程中提取当前页面?
- 6. MongoDB输出到浏览器
- 7. 使用Javascript获取Adobe Reader版本
- 8. 检测操作系统,浏览器,Adobe Reader,带宽等
- 9. WPF web浏览器中打开在Adobe Reader窗口
- 10. 当前浏览器版本检测
- 11. 检测从浏览器安装Adobe Acrobat Reader的最佳方法是什么?
- 12. 在mpdf输出PDF文件到浏览器
- 13. 将PDF流式传输到浏览器并利用Adobe PDF参数(如#search,#zoom,#page)
- 14. Actionscript 3浏览器要求
- 15. 基于浏览器版本
- 16. 转换PDF文件使用Adobe Reader时
- 17. 用Adobe Reader显示PDF文件
- 18. Rail3 - 浏览器被要求输入用户名和密码时
- 19. 如何将文本从word文件传输到浏览器
- 20. 通过servlet将pdf流式传输到浏览器
- 21. Python - 从当前浏览器操作和读取浏览器
- 22. 如何让浏览器(IE和Chrome)在脚本之前请求图像?
- 23. PHP,Apache。在脚本完成之前对浏览器的输出响应
- 24. Matlab浏览器版本
- 25. Flash版本跨浏览器
- 26. 浏览器版本检测
- 27. 浏览器版本jQuery中
- 28. 浏览器版本测试
- 29. itextsharp - PDF的 - 这些应该与哪些版本的Adobe Reader兼容?
- 30. ColdFusion 8生成PDF所需的最低Adobe Reader版本是什么?
你将不得不打开PDF(在内存中),然后使用保存副本里面不断用于在C#程序中阅读pdf的过程。如果您能控制PDF文件(我假设您没有),您也可以使用Acrobat来执行此操作。 – 2013-02-15 22:14:52
我了解这部分内容...我很好奇的是我必须从'In Memory'副本中删除以删除版本和读卡器要求 – 2013-02-15 22:20:26
好吧 - 所以您不想删除版本号: - )。我会删除我的答案。 – 2013-02-15 23:06:16