在我工作过的公司,我和我的同事们,在XSL-FO之上实施了一个量身定制的文档分发系统.
我的任务是让脚本提供文档并配置CUPS打印服务器和传真服务器,所以我没有时间在XSL-FO上弄脏手.
我正在考虑在那里制作一些区域,但我需要一些模板来测试.
我在哪里可以找到关于XSL-FO的一些好的教程,因为我已经掌握了fop过程?
任何人都可以建议我一个长话(如序列号)包裹的方法吗?我试过一些商业软件,没有这样的问题.它是一个fop bug还是可能有解决方案?
我不能在文档中每个单词的每个字符后插入零长度空格.这个解决方案听起来很疯狂.
我正在使用Apache FOP和XSL-FO样式表生成PDF.在PDF中,我输出属于表的标题(html equiv h1),因此应始终保持在一起.但是,我的表格也可能包含很多数据,因此它们不一定适合一页.
所需的结果是一个规则集,允许标题与表保持一致,如果可能的话,在一个页面上都适合,但如果表数据太长而不适合一页,则会插入分页符表格同时仍将标题元素保留在与表格开头相同的页面上.
我现在的解决方案确实将标题和表保持在一起,但如果所有内容都不适合一个页面,我会得到表数据的内容溢出错误.我希望页面中断内部:避免设置在表元素上会对此有所帮助,但显然不是......建议?
示例xsl(为了便于阅读而缩短):
<!-- add test table with header that should stay on same page -->
<fo:block font-size="20pt" font-weight="bold">Table header</fo:block>
<fo:table keep-with-previous.within-page="always"
page-break-inside="avoid"
table-layout="fixed" border-width="1mm" border-style="solid">
<fo:table-column column-width="auto" />
<fo:table-column column-width="30mm" />
<fo:table-header text-align="center" background-color="silver">
<fo:table-row>
<fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
<fo:block>First name</fo:block>
</fo:table-cell>
<fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
<fo:block>Last name</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<!-- the table-rows can be repeated N times, spanning several pages -->
<fo:table-row >
<fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
<fo:block>ab</fo:block>
</fo:table-cell>
<fo:table-cell padding="1mm" border-width="1mm" …Run Code Online (Sandbox Code Playgroud) 就目前而言,我有大约12列,所有列都是完全相同的宽度.问题是某些列不需要太多空间.如何让列符合其内容?列需要是动态宽度.
我试过了
<fo:table table-layout="auto">
Run Code Online (Sandbox Code Playgroud)
和
<fo:table-column column-width="proportional-column-width(1)" column-number="1"/>
<fo:table-column column-width="proportional-column-width(1)" column-number="2"/>
<fo:table-column column-width="proportional-column-width(1)" column-number="3"/>
Run Code Online (Sandbox Code Playgroud)
似乎没有什么可以做到的.
上下文
我正在创建一个XSL-FO文档,将我的XML文本转换为PDF.
在XSL-FO中,我有两个连续的内联元素,我想在它们之间有一个空格:
<fo:block>
<xsl:number/> <xsl:value-of select="@title"/>
</fo:block>
Run Code Online (Sandbox Code Playgroud)
预期结果将是:
1简介
相反,我得到了
1简介
似乎XML不考虑这个空白区域.
尝试
我尝试了几种可能的解决方案,没有成功:
<fo:block>
<xsl:number/><fo:inline white-space="pre"> </fo:inline><xsl:value-of select="@title"/>
</fo:block>
Run Code Online (Sandbox Code Playgroud)
要么
<fo:block>
<xsl:number/><fo:inline margin-left="0.5cm"><xsl:value-of select="@title"/></fo:inline>
</fo:block>
Run Code Online (Sandbox Code Playgroud)
这些想法都没有产生可接受的结果.
问题:
如何在两个(内联)元素之间包含空格?
有没有人成功地将Apache FOP v1.0库编译成.NET DLL?我正在使用http://onjava.com/pub/a/onjava/2004/08/18/ikvm.html上的IKVM语法; 但是,编译的DLL似乎不完整.例如,我无法将FopFactory对象实例化为:
using org.apache.fop.apps;
namespace Utils
{
public class PdfRender
{
public void Render()
{
FOUserAgent foUserAgent = fop.getUserAgent();
FopFactory fopFactory = FopFactory.newInstance();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有MIME多部分数据,我想使用XSL转换为PDF:FO.我很高兴使用Apache James 阅读MIME,我掌握了Mime中的嵌入式图像数据或HTML中的内嵌图像.我努力SO搜索"[XSL-FO]内嵌图形"和"[XSL] + HTML + MIME +图像",发现不知何故对面和precurser什么我上来的.另外谷歌的"转换HTML MIME到XSL:FO"尚无定论.
我想要做的是拥有一个元素(或一组元素),在XSL:FO转换的PDF输出中呈现图形(JPG/PNG/GIF - 全部或部分).图形数据应作为Base64(或其他)编码数据包含在 .fo文件中.我发现了如何指向外部图形,但没有关于嵌入式图形数据.
那会怎么样?
使用XSL-FO(Fop),我成功创建了外部PDF的链接:
<fo:basic-link show-destination="new">
<xsl:attribute name="external-destination">foo.pdf</xsl:attribute>
</fo:basic-link>
Run Code Online (Sandbox Code Playgroud)
但是现在,我想在这个外部PDF中找到一个锚点.所以我试着建立这样的东西:
<fo:basic-link show-destination="new">
<xsl:attribute name="external-destination">foo.pdf#anchorId</xsl:attribute>
</fo:basic-link>
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我点击生成的链接时,我收到一个错误.它试图打开文件foo.pdf%23anchorId.
在我的.fo文件中,#的链接是正确的,但在PDF转换过程中,这个#被误解释了.
你有想法解决这个问题吗?
谢谢,
约翰
我们有一个基于Java的系统,该系统从数据库中读取数据,合并与预设的各数据字段XSL-FO标签和结果转换为PDF用Apache FOP.
在XSL-FO格式中它看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE Html [
<!ENTITY nbsp " ">
<!-- all other entities -->
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg" font-family="..." font-size="...">
<fo:layout-master-set>
<fo:simple-page-master master-name="Letter Page" page-width="8.500in" page-height="11.000in">
<!-- appropriate settings -->
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="Letter Page">
<!-- some static content -->
<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:table ...>
<fo:table-column ... />
<fo:table-body>
<fo:table-row>
<fo:table-cell ...>
<fo:block text-align="...">
<fo:inline font-size="..." font-weight="...">
<!-- …Run Code Online (Sandbox Code Playgroud) 我有以下模板来生成一个定义的表:
<xsl:template name="CreateTable">
<fo:block>
<fo:table border-style="solid" table-layout="fixed">
<fo:table-body>
<fo:table-row>
<xsl:for-each select="Table/Head/Cell">
<fo:table-cell border-style="solid">
<fo:block><xsl:value-of select="." /></fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
<xsl:for-each select="Table/Row">
<fo:table-row>
<xsl:for-each select="Cell">
<fo:table-cell border-style="solid">
<fo:block><xsl:value-of select="."/></fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</fo:block>
<fo:block margin-top="10pt"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
现在我想将第一行中的文本旋转90度,以便从下往上阅读.
我想出的最佳解决方案是:
设置reference-orientation="0"上<fo:table>:
<fo:table border-style="solid" table-layout="fixed" reference-orientation="0">
Run Code Online (Sandbox Code Playgroud)包围<fo:block>...</fo:block>内<fo:table-cell>具有<fo:block-container>被旋转90度:
<fo:table-cell border-style="solid">
<fo:block-container reference-orientation="90">
<fo:block><xsl:value-of select="." /></fo:block>
</fo:block-container>
</fo:table-cell>
Run Code Online (Sandbox Code Playgroud)文本是旋转的,但第一行的高度实际为0,文本显示在表格上方,覆盖了前一个文本:
为第一行的单元格定义特定高度时,文本仍在表格之前,而不在第一行内:
如何在第一行的单元格中定位文本,并根据行中最长的文本自动计算行的高度?