XSLT和XSL-FO有什么区别?
我读过的每一个资源都像处理它们一样处理它们,或者至少非常紧密地绑定它们.
有很多旧的文本,比如2002年的书,说明我们必须使用"CSS for Web"和"XSL-FO for print".我认为在现今(2012)我们最终可以使用CSS和渲染引擎来理解CSS2的分页媒体和CSS3的东西......但是"新文本",程序员的共识和软件的投资在哪里呢?
XSL-FO或"XSL格式化对象"(W3C标准)是从XML或XHTML内容生成PDF文档的最常用技术.XSL-FO 1.1版 于2006年发布,2001年发布1.0.
CSS2.1来自2011年,但CSS2.0是1998年的标准,2008年修订......我认为标准年龄不是问题.使用HTML,XHTML或XML的CSS具有"打印力":参见PrinceXML,WebKit打印模块(或wkhtmltopdf),ABCpdf等工具.
在CSS和XSL-FO之间进行选择:使用CSS2,您可以将文本完全适合纸质页面等.这不是分页,多列布局,放置脚注,运行页眉或页面边距......两者, CSS(分页媒体)和XSL-FO是做到这一点的好标准.
PS:关于这个上下文有一些相关的问题/答案,关于webkit转换,用PHP转换和关于HTML的Generation PDF.没有人对这个提出的问题有很好的答案.
我正在使用FOP 1.0版来创建PDF.在其中一个页面中,我想显示一个图像(2552 x 4200像素),如果它不完全适合页面,则将其缩小.据我所知,在邮件列表中,建议的方法是:
<fo:external-graphic inline-progression-dimension.maximum="100%"
content-height="scale-down-to-fit"
content-width="scale-down-to-fit"
src="..."/>
Run Code Online (Sandbox Code Playgroud)
不幸的是,仍然没有显示整个图像.图像的下半部分被切掉.任何人都可以给我一个关于我可能做错的提示吗?
我目前正在创建一个非常好的PDF.它在技术上没有任何问题.但是,TOC很难看.
TOC是通过xsl生成的,xsl通过jinja2传递给页面顶部的简单细节.我修改了XSL以精确匹配客户的品牌和设计.然而,该名单的高度不断增加.
这是当前的结果(很抱歉模糊文本)你可以看到toc在新页面上的正确位置拾取,但似乎没有办法在新页面上应用上边距:

代码: 这是xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:outline="http://wkhtmltopdf.org/outline"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
indent="yes" />
<xsl:template match="outline:outline">
<html>
<head>
<title>Table of Contents</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
body{
background-color: #fff;
margin-left: 0px;
margin-top: 0px;
color:#1e1e1e;
font-family: arial, verdana,sans-serif;
font-size: 90px;
}
.contentSection{
position:relative;
height:3200px;
width:6100px;
}
.profile{
position:absolute;
display:inline-block;
top:200px !important;
}
h1 {
text-align: left;
font-size: 70px;
font-family: arial;
color: #ef882d;
}
li {
border-bottom: 1px dashed rgb(45,117,183);
}
span {float: …Run Code Online (Sandbox Code Playgroud) 我需要在同一行上左右对齐文本.这应该是可能的,但我似乎找不到办法.我正在使用Apache FOP将xml转换为pdf.
有人可以帮助我做到这一点吗?
如何使用XSL-FO将分页符添加到文档中?我正在使用Apache FOP来创建PDF,如果这有所作为的话.
我正在使用XSL FO生成包含信息表的PDF文件.其中一列是"描述"列.我填充其中一个Description字段的字符串示例如下:
This is an example Description.<br/>List item 1<br/>List item 2<br/>List item 3<br/>List item 4
Run Code Online (Sandbox Code Playgroud)
在与此描述对应的表格单元格内,我希望输出显示如下:
This is an example Description.
List item 1
List item 2
List item 3
List item 4
Run Code Online (Sandbox Code Playgroud)
我从其他地方搜索过,你可以使用<fo:block></fo:block>另一个<fo:block>元素在XSL FO中进行换行.因此,甚至在我用我的XSL样式表解析XML之前,我会替换所有出现的<br/>with <fo:block/>,以便字符串的文字值现在看起来像:
This is an example Description.<fo:block/>List item 1<fo:block/>List item 2<fo:block/>List item 3<fo:block/>List item 4
Run Code Online (Sandbox Code Playgroud)
当我使用的描述字符串使用时获得问题<xsl:value-of>,例如如下:
<fo:block>
<xsl:value-of select="descriptionStr"/>
</fo:block>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,输出到我的PDF文档的值是文字值,因此它看起来与上一个包含所有<fo:block/>文字的示例完全相同.我已经尝试<fo:block/>在另一个字符串的中间手动硬编码,并且它正确显示.例如,如果我在样式表中写入:
<fo:block>Te<fo:block/>st</fo:block>
Run Code Online (Sandbox Code Playgroud)
它将正确显示为:
Te
st
Run Code Online (Sandbox Code Playgroud)
但是当<fo:block/>它在<xsl:value-of select=""/>语句的值内时似乎不会发生.我试过在SO以及Google等上搜索这个都无济于事.任何建议或帮助将不胜感激.谢谢!
我希望在XSL/FO中反转for-each循环.
例如xml
<data>
<record id="1"/>
<record id="2"/>
<record id="3"/>
<record id="4"/>
<record id="5"/>
<record id="6"/>
</data>
Run Code Online (Sandbox Code Playgroud)
与xsl
<xsl:for-each select="descendant-or-self::*/record">
<xsl:value-of select="@id"/>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
我正在寻找输出654321而不是123456
这怎么可能?
我想在第二个单元格中将文本对齐到底部.第一个单元格延伸到2行,因为宽度不足而且没有问题但是第二个单元格中的文本只有一行并显示在单元格的顶部.我怎样才能将它对齐到底部?
我在行,单元格和块级别上尝试了vertical-align ="bottom"text-align ="bottom"text-align ="end"..它们中的任何一个都有效吗?!?
<fo:table font="normal 10 pt Arial, sans-serif" width="100%">
<fo:table-column column-width="40mm"/>
<fo:table-column column-width="130mm"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell padding-before="3pt" padding-after="3pt">
<fo:block font-weight="bold">Pricing Rate in % p.a. / "Pensionssatz in % p.a.":</fo:block>
</fo:table-cell>
<fo:table-cell padding-before="3pt" padding-after="3pt">
<fo:block>
**This text I want to be aligned to bottom (in the second line)**
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的模板:
<xsl:template match="p">
<fo:block>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
即使块为空,如何告诉FO保持空行.
xsl-fo ×10
xslt ×5
pdf ×4
xml ×3
alignment ×1
apache-fop ×1
css ×1
image ×1
pagination ×1
python ×1
size ×1
wkhtmltopdf ×1