- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近在现有应用程序中添加了一个 fop pdf 生成器。在本地一切正常,但当我部署到 Azure 上时,出现以下错误:
org.apache.fop.apps.FOPException: .fop (Access is denied)
java.io.FileNotFoundException: .fop (Access is denied)
我很困惑为什么当 fopfactory 写入 ByteOutputstream 时似乎发生异常时我会收到文件访问错误
发生catch的函数是
public static void GeneratePDF(string foFile, HttpContext context) {
StringBuilder sbDebug = new StringBuilder();
sbDebug.AppendLine("Start");
ByteArrayOutputStream os = new java.io.ByteArrayOutputStream();
try
{
sbDebug.AppendLine("Got to 1");
com.sun.org.apache.xerces.@internal.jaxp.SAXParserFactoryImpl s = new com.sun.org.apache.xerces.@internal.jaxp.SAXParserFactoryImpl();
sbDebug.AppendLine("Got to 2");
FopFactory fopFactory = FopFactory.newInstance(new java.io.File(System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/Test.xconf")));
sbDebug.AppendLine("Got to 3 - file ").AppendLine(System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/Test.xconf"));
Fop fop = fopFactory.newFop("application/pdf", os);
sbDebug.AppendLine("Got to 4");
javax.xml.transform.TransformerFactory factory = javax.xml.transform.TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = factory.newTransformer();
javax.xml.transform.Source src = new javax.xml.transform.stream.StreamSource(new java.io.StringReader(foFile));
javax.xml.transform.Result res = new javax.xml.transform.sax.SAXResult(fop.getDefaultHandler());
sbDebug.AppendLine("Got to 5");
transformer.transform(src, res);
context.Response.ContentType = "application/pdf";
context.Response.BinaryWrite(os.toByteArray());
//context.Response.BinaryWrite(System.Text.Encoding.UTF8.GetBytes(os.ToString()));
}
catch (Exception ex) {
throw new Exception(sbDebug.AppendLine(ex.ToString()).ToString());
}
finally {
os.close();
}
}
您可以看到我添加了一些调试行,因为我不得不求助于老式调试来查看发生了什么。其输出是:
Catch Error: System.Exception: Start
Got to 1
Got to 2
Got to 3 - file
D:\home\site\wwwroot\App_Data\Test.xconf
org.apache.fop.apps.FOPException: .fop (Access is denied)
java.io.FileNotFoundException: .fop (Access is denied)
所以我可以看到异常发生在这一行:
Fop fop = fopFactory.newFop("application/pdf", os);
除了读取 xconf 文件之外,我希望所有事情都发生在内存中。
更新 21/02/2017 我现在已经验证 xconf 文件存在于正确的位置使用
string curFile = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/Test.xconf");
if (System.IO.File.Exists(curFile)) //Used System.IO prefix as without it compiler complains of ambiguity with java.io
{
sbDebug.AppendLine("Got to 3a - file found");
}
else
{
sbDebug.AppendLine("Got to 3a - file NOT found");
}
而且它可以使用阅读
BufferedReader br = new BufferedReader(new FileReader(curFile));
sbDebug.AppendLine("Got to 3b");
String sJIObrOut = br.readLine();
sbDebug.AppendLine("Got to 3c");
while ((sJIObrOut = br.readLine()) != null)
{
sbDebug.Append("3d: ").AppendLine(sJIObrOut);
}
这表明 fopfactory 正在尝试访问不同的文件,但我不知道是什么。
感谢收到的任何帮助。
更新 2 22/3/17我没有成功使用 Azure 云服务,因此决定构建一个本地 Web 应用程序,将 xslfo 文档转换为 pdf 并将其作为 Web 服务运行。这在本地完美运行,因此在我们用于其他客户端的服务器上发布了服务。这不起作用,我得到的错误与我原来的帖子完全一样。这意味着这不是 Azure 的问题 - 有人有任何其他想法吗?
最佳答案
非常感谢@mondjunge 为我指明了正确的方向。我现在有一个在 Azure 之外工作的解决方案 - 在适当的时候,我希望这将是我可以直接应用于 Azure 的东西,我将相应地添加到这篇文章中
似乎缓存写入是导致问题的原因(权限)。
我已经实现的解决方法/修复是将以下行添加到 xconf 文件中(我把它放在/fop 结束标记之前,但认为它不重要,只要它是 fop 的直接子节点)
<use-cache>false</use-cache>
希望这能为其他人节省几天的麻烦和压力
2017 年 7 月 4 日更新
出于兴趣,我尝试将此行添加到纯 azure 托管版本,它不再给我权限错误,而是给我一个关于 GDI 的错误,这可能与 @PeterPan 最初建议的一致。因为我有一个在别处托管的 fop 应用程序的工作版本,所以我将保留它。
关于java - Azure 中的 org.apache.fop.apps.FOPException : . fop(访问被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42353935/
我使用嵌入在 Java 应用程序中的 Apache FOP 1.1 成功地将 XML 转换为 PDF。不幸的是,我被指示降级到 FOP 1.0 以遵守公司许可。因此,我用 1.1 jar 替换了 1.
我刚刚使用 Apache FOP 制作了要提交给照片打印服务的 PDF/X 相册。一切似乎都很好,但字距调整。使用自定义衬线字体,例如“portfolio”这个词没有正确呈现(问题在于 f-o,因为
我需要使用 XSL - Apache FOP (Java) 将 XML 转换为 PDF 文档。我收到以下错误 The method getDefaultHandler() is undefined f
我已将 FOP 版本从 fop 1.1 升级到 fop 2.3 版本,但得到 org.apache.fop.events.LoggingEventListener processEvent Image
现在我正在开发一个调用 SOAP Web 服务的 JDK-14 应用程序,在收到 XML 结果之后,它接下来必须调用一个方法来通过 Apache FOP 库生成 PDF 文档。请注意,我没有为此项目使
我最近在现有应用程序中添加了一个 fop pdf 生成器。在本地一切正常,但当我部署到 Azure 上时,出现以下错误: org.apache.fop.apps.FOPException: .fop
我用: Apache fop 1.0 Java 我需要处理 unicode 高于 u0100 的特殊字符。我应该使用的目标字体是 Arial。由于我不能期望目标平台(例如 Linux)上存在 Aria
无法在 fop 中获取外部字体,正在获取消息: java.lang.UnsupportedOperationException:类 org.apache.fop.fonts.FontCache 不允许
我想创建一个有效的 PDF/A2-b 文件。在那之后想用 PDFLib 库输入 ZUGFeRD 发票。 每次我用 Online Validator 查看 PDF我收到以下错误: rechnung.pd
使用 asdf 版本管理器安装 Erlang 时,上面的构建警告表明 apache fop library没有安装在系统上,或者没有被 asdf 版本管理器识别。结果是 Erlang 文档不会作为安装
我使用 ikvm 从 fop-1.0 生成了 fop.dll: ikvmc -target:library -reference:IKVM.OpenJDK.Core.dll -recurse:{myP
我使用了 apache FOP 2.0 jar 和下面的代码 FopFactory fopFactory = FopFactory.newInstance(new File(".")); 并出现以
我需要帮助在 Java 中使用 FOP 显示西里尔字符。 我创建了内容的 xml 和将格式化新 PDF 的 xsl 文件。 它们都使用 UTF-8 字符编码。 但在结果文件中,我只看到“#”字符而不是
我正在尝试使用 FOP 生成 PDF。 我的要求—— 第 1 页 - 标题和内容 第 2 页 - 条款的静态页面 第 3 页 - 从第 1 页溢出 但是,当第 1 页没有溢出时,不会生成第 2 页。即
我正在使用 org.apache.xmlgraphics FOP 2.3 来生成表格。表的其中一列包含一个复合标识符,该标识符包含由正斜杠分隔的四个部分 注意:我在使用 1.1 版 FOP 时也遇到了
即使页面不包含前向引用并且 block 非常小,如何避免 FOP 消耗越来越多的内存? 这是一个测试 java 程序,它使用手工制作的 FO 为 FOP 提供数据,该 FO 只是一遍又一遍地重复相同
你好,我正在尝试使用 FOP 将 xml 文件转换为 pdf,但我一直遇到错误,现在我遇到了错误 Exception in thread "main" java.lang.NoClassDefFoun
我目前正在使用 FOP 从 XML 文件生成 PDF。 但我面临着两个大问题: 第一:FOP无法管理OpenType字体文件 其次:fo:float还没有实现 所以我不可能用 FOP 生成我想要的 P
嗨,我想使用 FOP 准备一个 XML 文档以供打印 (ps/pdf)。是否可以将参数发送到 FOP 以执行 xsl 处理器中存在的条件格式 XSL: no .... Copy ....
我正在使用 Apache FOP 将我的文件打印成 PDF。从 FO 转换为 PDF 时出现以下错误: Invalid property value encountered in column-num
我是一名优秀的程序员,十分优秀!