apache-fop 相关问题

Apache FOP是一个文档渲染引擎,它实现了W3C XSL-FO 1.1规范。

遇到XML中的空标签时添加空格

我使用 Apache FOP 创建 PDF。 我的 XML 的一部分如下所示。基本上,我试图将标签的全部内容按原样放入 PDF 中,但我在这里遇到了一些挑战。 我想要...

回答 1 投票 0

如何为 Apache FOP 目录中的每个图像创建页面序列

假设我有一个包含 n 张图像的目录。我想每页添加一张图像。 例如 : 在名为“Images”的目录中,我有以下两张图像: newpage0.jpg 和 newpage1.jpg 我...

回答 1 投票 0

Fo 内联换行不会删除将 XML 格式化为 XLS(excel)文件的 XSL 中的文本

使用 Xsl 样式表,我将输出 XML 文件(从我的工具获得)格式化为 Excel(xls 文件)。在此,我只想删除一段文字。我正在使用 fo:inline ,如下所示: &...

回答 1 投票 0

FOP pdf 生成:fo:内联边框重叠问题

使用 xsl:fo 生成 pdf 时, 我的边框与 fo:inline 标签重叠。 我正在使用 apache-xmlgraphics-fop 版本 2.7。 这是一个代码片段 使用 xsl:fo 生成 pdf 时, 我的边框与 fo:inline 标签重叠。 我正在使用 apache-xmlgraphics-fop 版本 2.7。 这是一个代码片段 <fo:block margin-top="4px"> <fo:inline border-style="solid" border-width="1px" border-color="#E8EDF7" padding="2px" fox:border-radius="3pt"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eu justo at quam hendrerit congue ac ac magna. Maecenas tincidunt vulputate justo, ut tempus lorem pulvinar a. Nulla fermentum metus sit amet metus tempus pretium. In massa sem, vestibulum a lectus eu, efficitur imperdiet odio. </fo:inline> </fo:block> 下面是输出: 您需要增加 line-height 的 fo:block。 line-stacking-strategy="max-height",默认值(请参阅https://www.w3.org/TR/xsl11/#line-stacking-strategy),在定位线条时不考虑fo:inline上的边框和填充地区。 (还是不知道为什么。) 如果FOP支持line-stacking-strategy="line-height",那么你可以在line-height上设置fo:inline,只有带有fo:inline的线才会有更宽的间距。

回答 1 投票 0

从 FOP 的 JAR 加载字体

我的应用程序 JAR 的字体目录中有 TTF 字体。 myapp.jar / 福普/ 配置文件 字体.ttf 我这样创建我的 FOP: FopFactory fopFactory = FopFactory.

回答 2 投票 0

使用 docx4j 将 docx 文件转换为 pdf 时图像周围缺少边框

我使用 docx4j 进行简单的 docx 模板工作。我替换了一些效果很好的文本。该模板还有一个带边框的图像(Word:图片工具 -> 格式 -> 图片边框)。出口...

回答 1 投票 0

如何在 XSLT 中设置 <xsl:message> 的调试级别

我正在使用 Apache FOP 生成 AFP 和 PDF。理想情况下,将创建大量 AFP 和 PDF。 我在代码的多个位置使用 xsl:message 。 我只想优先考虑一组...

回答 1 投票 0

FOP pdf 生成:根据内容并排显示表格

我想根据表格单元格的内容并排显示表格。如果单元格内容使用的页面宽度超过 50%,则下一个表格应显示在该表格下方。 要创建 pdf...

回答 1 投票 0

如何编写 Xsl 以使用 Apache fop 在 PDF 文件中创建书签

我想使用 Apache fop 创建 PDF。要求是我想使用 xsl fo stylesheets 在 PDF 中创建书签。 请给我提供一个如何实现这一目标的示例。

回答 2 投票 0

Fop 从 0.20.5 迁移到 2.9

现在我正在将基于 fop 0.20.5 的旧应用程序迁移到 2.9。 它包含几个自己编写的扩展,我想重写它们。 在这里,我目前坚持我不能...

回答 1 投票 0

如何合并从 Apache FOP 创建的 2 个 AFP

如何将使用 apache FOP 创建的大量单独的 AFP 文件合并到单个 AFP 文件中? 也欢迎任何工具建议。

回答 1 投票 0

在 XSL FO (FOP) 中添加不带标题的附加文本页面

我无法解决一个问题。我需要在 XSL FO(在 FOP 中)中的文档末尾添加更多页面,但没有页眉和页脚。 我将打印发票。我有一个简单的页面主控定义...

回答 1 投票 0

卡片正面和背面页码相同

我正在尝试创建一个样式表,将文档输出为一系列 5x8 卡片。他们希望卡片的正面和背面具有相同的页码(因此当您打印出来时,第一个...

回答 1 投票 0

从带有表列的 Apache FOP 生成 PDF 时出现异常

我的 .fo 文件中的以下代码行抛出一条消息: “行中的列号或单元格数超出了为表指定的 fo:table-columns 数。”当会议...

回答 1 投票 0

在Android设备上离线生成PDF的好方法...尝试过DOCX4J

有没有在Android设备上生成PDF文档的好方法?我有一个 DOCX 文件作为基础。 我知道这是可能的: 这是一个非常好的应用程序https://play.google.com/store/apps/details?id=cn....

回答 0 投票 0

如何将 AFP/PDF 的总页数转换为 XSL FO 中的 .txt 文件

我正在使用 Apache fop 生成 AFP 和 PDF 文件。 一切都工作得很好,但我正在努力解决一件事。 我可以使用以下命令获取每个文件的总页数: 我正在使用 Apache fop 生成 AFP 和 PDF 文件。 一切都工作得很好,但我正在努力解决一件事。 我可以使用以下命令获取每个文件的总页数: <fo:block text-align="right"> Page <fo:page-number/> of <fo:page-number-citation-last ref-id="end"/> </fo:block> 它在 AFP 和 PDF 上都能完美运行。 但是我还想实现另一件事 - 在 .txt 文件中获取总页数。 我正在使用结果文档创建 .txt 文件: <xsl:result-document href="{$FileName}.txt" method="text"> <xsl:value-of select="'abc'"/> </xsl:result-document> 在这里,我想知道文件的总页数。 我如何实现这一目标? 当写入文本文件时,您可以从 FOP 日志中提取页数。 (不是FOP用户,所以无法确认。) 或者,您可以在 PDF 上运行“pdfinfo”[1][2] 或类似的命令行实用程序来获取页数。 [1] https://superuser.com/questions/403672/how-to-count-pages-in-multiple-pdf-files [2] https://manpages.debian.org/jessie/poppler-utils/pdfinfo.1.en.html

回答 1 投票 0

fo:table-row 顶部的填充

我正在使用 Apache FOP v2.9,以及 JDK v17 下的 Saxon HE v12.3 和 XSLT 版本 3.0。 我试图在表的行级别指定填充。 根据文档,这应该可行,但是 Paddi...

回答 1 投票 0

FOP:图像重定向到服务器

我正在尝试使用 fop 中的自定义图像重定向将嵌入式自定义 fop xml 写入 pdf java 应用程序 我在旧的 xslt 文件中有以下内容 我正在尝试使用 fop 中的自定义图像重定向来编写嵌入式自定义 fop xml 到 pdf java 应用程序 我在旧的 xslt 文件中有以下内容 <fo:block text-indent="1mm" padding-before="20mm"> <xsl:variable name="barcode" select="concat('/prescriptions/', id, '/barcode.html')"/> <fo:external-graphic> <xsl:attribute name="src"> <xsl:value-of select="$barcode" /> </xsl:attribute> </fo:external-graphic> </fo:block> 我写了一个customResourceResolver package embedding; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.xmlgraphics.io.Resource; import org.apache.xmlgraphics.io.ResourceResolver; import java.io.BufferedInputStream; import java.net.URI; import java.net.URISyntaxException; public class CustomResourceResolver implements ResourceResolver { String base; String session; String cookie; String user_id; String authorization; static final Logger logger = Logger.getLogger("fop-log"); public String get_base(){ return base; } public CustomResourceResolver(String _base, String _session, String _cookie, String _user_id, String _authorization){ super(); base = _base; session = _session; cookie = _cookie; user_id = _user_id; authorization = _authorization; } @Override public Resource getResource(URI uri) throws IOException { HttpURLConnection urlConnection = null; try { String href = uri.getRawPath(); if (!href.startsWith("/") && !base.endsWith("/")) { base = base + "/"; } String new_uri; if (href.startsWith("http://") || href.startsWith("https://")) { new_uri = href; } else { new_uri = base + href; } uri = new URI(new_uri); logger.log(Level.INFO, "loading: ({0})", new_uri); URL url = uri.toURL(); urlConnection = (HttpURLConnection) url.openConnection(); if(session!= null){ urlConnection.setRequestProperty("Cookie", cookie + "=" + session); } if(authorization != null){ urlConnection.setRequestProperty("Fop-authorization", authorization ); } if(user_id != null){ urlConnection.setRequestProperty("Fop-user",user_id ); } InputStream in = new BufferedInputStream(urlConnection.getInputStream()); return new Resource(in); } catch (MalformedURLException e) { logger.log(Level.SEVERE, null, e); return null; } catch (IOException | URISyntaxException ioe) { logger.log(Level.SEVERE, null, ioe); return null; } finally { if (urlConnection != null) { urlConnection.disconnect(); } } } @Override public OutputStream getOutputStream(URI uri) throws IOException { URL url = uri.toURL(); return url.openConnection().getOutputStream(); } } 这被调用了 CustomResourceResolver resolver = new CustomResourceResolver(base, session, cookie, user_id, authorization); FopFactoryBuilder builder = new FopFactoryBuilder(new File(".").toURI(), (ResourceResolver)resolver); final FopFactory fopFactory = builder.build(); FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); OutputStream out = new java.io.FileOutputStream(pdffile); out = new java.io.BufferedOutputStream(out); try { Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out); TransformerFactory factory = TransformerFactory.newInstance(); URIResolver uiResolver = new CustomUriResolver(base, session, cookie, user_id, authorization); factory.setURIResolver(uiResolver); Transformer transformer = factory.newTransformer(new StreamSource(xsltfile)); // Set the value of a <param> in the stylesheet transformer.setParameter("versionParam", "2.0"); // Setup input for XSLT transformation Source src = new StreamSource(xmlfile); // Resulting SAX events (the generated FO) must be piped through to FOP Result res = new SAXResult(fop.getDefaultHandler()); // Start XSLT transformation and FOP processing transformer.transform(src, res); } finally { out.close(); } java 打包在单个 FopXml2Pdf.jar 内并从命令行调用 喜欢 java -jar FopXml2Pdf.jar file.xml file.xsl file.config 但是当我运行代码时我得到了 Sep 19, 2023 6:52:36 AM embedding.CustomResourceResolver getResource INFO: loading: (http://localhost:3000/prescriptions/420/barcode.html) Sep 19, 2023 6:52:36 AM org.apache.xmlgraphics.image.loader.impl.AbstractImageSessionContext createImageSource SEVERE: Unable to create ImageInputStream for InputStream from system identifier 'file:/media/sf_Clintel/careright/./' (stream is closed) Sep 19, 2023 6:52:36 AM org.apache.fop.events.LoggingEventListener processEvent SEVERE: Image not found. URI: /prescriptions/420/barcode.html. (No context info available) 我可以看到重定向正在加载正确的网址并获取正确的数据 但是 new File(".").toURI() 正在解析为文件:/media/sf_Clintel/careright/./ 我应该将其设置为什么,以便它保存资源 getResource 中的数据? 我更改了 customResourceResolver,以便它输出一个文件,然后我将其作为 InputStream 资源返回 package embedding; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.xmlgraphics.io.Resource; import org.apache.xmlgraphics.io.ResourceResolver; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.InputStreamReader; import java.net.URI; import java.net.URISyntaxException; import java.net.URLConnection; import java.nio.file.Paths; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.HashMap; public class CustomResourceResolver implements ResourceResolver { String base; String session; String cookie; String user_id; String authorization; static final Logger logger = Logger.getLogger("fop-log"); public String get_base(){ return base; } public CustomResourceResolver(String _base, String _session, String _cookie, String _user_id, String _authorization){ super(); base = _base; session = _session; cookie = _cookie; user_id = _user_id; authorization = _authorization; } @Override public Resource getResource(URI uri) throws IOException { HttpURLConnection urlConnection = null; try { String href = uri.getRawPath(); if (!href.startsWith("/") && !base.endsWith("/")) { base = base + "/"; } String new_uri; if (href.startsWith("http://") || href.startsWith("https://")) { new_uri = href; } else { new_uri = base + href; } uri = new URI(new_uri); logger.log(Level.INFO, "loading: ({0})", new_uri); URL url = uri.toURL(); urlConnection = (HttpURLConnection) url.openConnection(); if(session!= null){ urlConnection.setRequestProperty("Cookie", cookie + "=" + session); } if(authorization != null){ urlConnection.setRequestProperty("Fop-authorization", authorization ); } if(user_id != null){ urlConnection.setRequestProperty("Fop-user",user_id ); } InputStream in = new BufferedInputStream(urlConnection.getInputStream()); Timestamp timestamp = new Timestamp(System.currentTimeMillis()); String timeStamp = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(timestamp); filename = new File(Paths.get(".").toAbsolutePath().normalize().toString() +"/tmp/loading_"+timeStamp+".data"); byte[] buffer = new byte[8 * 1024]; try { OutputStream output = new FileOutputStream(filename); try { int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { output.write(buffer, 0, bytesRead); } } finally { output.close(); } } finally { in.close(); } logger.log(Level.INFO, "Adding file to cache {0} for {1}", new Object[]{filename, href}); InputStream is = new BufferedInputStream(new FileInputStream(filename)); encoding = URLConnection.guessContentTypeFromStream(is); InputStream result = new FileInputStream(filename); //Resource res = new Resource(encoding,result); Resource res = new Resource(result); logger.log(Level.INFO, "returning stream to file {0} with mime_type {1}", new Object[]{filename, res.getType()}); return res; } catch (MalformedURLException e) { logger.log(Level.SEVERE, null, e); return null; } catch (IOException | URISyntaxException ioe) { logger.log(Level.SEVERE, null, ioe); return null; } finally { if (urlConnection != null) { urlConnection.disconnect(); } } } @Override public OutputStream getOutputStream(URI uri) throws IOException { URL url = uri.toURL(); return url.openConnection().getOutputStream(); } } 但我现在明白了 SEVERE: Image not available. URI: /prescriptions/423/barcode.html. Reason: org.apache.xmlgraphics.image.loader.ImageException: The file format is not supported. No ImagePreloader found for /prescriptions/423/barcode.html (No context info available) org.apache.xmlgraphics.image.loader.ImageException: The file format is not supported. No ImagePreloader found for /prescriptions/423/barcode.html at org.apache.xmlgraphics.image.loader.ImageManager.preloadImage(ImageManager.java:181) at org.apache.xmlgraphics.image.loader.cache.ImageCache.needImageInfo(ImageCache.java:127) at org.apache.xmlgraphics.image.loader.ImageManager.getImageInfo(ImageManager.java:123) at org.apache.fop.fo.flow.ExternalGraphic.bind(ExternalGraphic.java:81) at org.apache.fop.fo.FObj.processNode(FObj.java:131) at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuilder.java:293) at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:179) at org.apache.xml.serializer.ToXMLSAXHandler.closeStartTag(ToXMLSAXHandler.java:206) at org.apache.xml.serializer.ToSAXHandler.flushPending(ToSAXHandler.java:279) at org.apache.xml.serializer.ToXMLSAXHandler.endElement(ToXMLSAXHandler.java:245) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1401) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemIf.execute(ElemIf.java:162) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394) at org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394) at org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:178) at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395) at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:178) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2272) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1358) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:711) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1275) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1253) at embedding.FopXml2Pdf.main(FopXml2Pdf.java:129) 文件已正确获取,但未嵌入 fop 文档中 我已经检查过 org.apache.xmlgraphics.image.loader.ImageException:不支持该文件格式。找不到 ImagePreloader 但这不起作用 我的罐子的顺序是: 欢迎任何额外的帮助

回答 1 投票 0

如何在 xsl fo 中的表体第一行而不是表头添加连续文本?

我正在尝试使用 Apache FOP 在我的 pdf 中创建动态表。 我已经实现了大部分目标,还需要一些微调。 我在表头中使用了 fo:retrieve-table-marker 并且它有效

回答 1 投票 0

fop pom 和模块信息示例

我尝试找到 pom.xml 和 module-info.java 的示例,以通过 JPMS(即 Java-17)以嵌入式方式使用 fop,但找不到。 例如。我的代码: FopFactoryBuilder 构建器 = 新

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.