我正在使用fop将fo文件转换为pdf。请参阅例外:
org.apache.fop.fo.ValidationException: Invalid property encountered on "fo:block-container": display (See position 44:73)
我使用jTidy转换xhtml和xalan从antennahouse将xhtml转换为xsl样式的fo文件。
它是fo文件的第44行:
<fo:block-container role="html:div" display="inline-block" width="30px"><fo:block start-indent="0pt" end-indent="0pt">Prov:</fo:block></fo:block-container>
如何解决这个问题。谢谢
更新:XHTML 代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Untitled Document</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #333;
}
table.iss-account-aging-page {
border-collapse: collapse;
margin: 0 auto;
width: 100%;
font-size: 12px;
padding: 0;
color: #000;
border: 1px solid #666;
}
table.iss-account-aging-page tr {
page-break-inside: avoid;
}
table.iss-account-aging-page tr th {
text-align: center;
padding: 3px;
font-weight: bold;
color: #165ba8;
font-size: 12px;
border-bottom: 1px solid #666;
}
table.iss-account-aging-page tr th span {
color: #165ba8;
}
table.iss-account-aging-page tr td {
padding: 3px;
font-size: 12px;
color: #000;
border-bottom: 1px solid #666;
}
.iss-page-print-report-patient-left-info {
margin: 0 0 6px 0;
}
label.iss-page-print-report-patient-left-info {
width: 60px;
float: left;
text-align: right;
margin: 0 4px 0 0;
display: block;
clear: both;
font-weight: bold;
color: #444;
font-size: 11px;
}
.iss-account-aging-page-practice-name {
color: #2288FD;
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 18px;
font-weight: bold;
text-align: center;
width: 100%;
}
table.iss-account-aging-page-footer-tbl {
float: right;
border-collapse: collapse;
margin-top: 10px;
width: 60%;
font-size: 12px;
}
table.iss-account-aging-page-footer-tbl tr td {
border: 1px solid #666;
padding: 3px 0;
color: #045e98;
text-align: center;
}
table.iss-account-aging-page-footer-tbl tr th {
text-align: center;
text-transform: uppercase;
font-weight: bold;
color: #03628b;
border: 1px solid #666;
padding: 3px 0;
}
</style>
</head>
<body>
<div style="width:795px; margin:5px auto; overflow:hidden; padding:0;">
<div class="iss-account-aging-page-practice-name">
Sonas DDS
</div>
<div style="float:left; margin-left:10px; padding-bottom:5px;">
<p>ADdress </p>
<p>Montclair, CA 91763</p>
<p>Phone: <span>111-111-1111</span></p>
<p>Fax: <span></span></p>
</div>
<div style="clear:both; margin: 5px 0 5px 0; border-top: 1px solid #ccc;"></div>
<div style="padding-left: 10px;"><span style="font-weight:bold;">Date: </span>11/07/2014</div>
<div style="clear:both; text-align:center; margin-bottom: 10px;">
<p style="font-family: Georgia, Times New Roman,Times,serif; font-size: 16px; font-weight: bold; text-transform: uppercase">
Reports
</p>
</div>
<table class="iss-account-aging-page-footer-tbl">
<tr>
<th>0 - 30 DAYS</th>
<th>31 - 60 DAYS</th>
<th>61 - 90 DAYS</th>
<th>91+ DAYS</th>
</tr>
<tr>
<td>$0.00</td>
<td>$0.00</td>
<td>$0.00</td>
<td>$3,748,199.10</td>
</tr>
</table>
<div style="clear:both;"> </div>
<table class="iss-account-aging-page">
<tr>
<th colspan="2">PATIENT INFORMATION</th>
<th style="text-align:right;">0-30</th>
<th style="text-align:right;">31-60</th>
<th style="text-align:right;">61-90</th>
<th style="text-align:right;">91+</th>
</tr>
<tr>
<td style="width:174px; vertical-align:top; padding-left:4px; padding-right:26px;">
<p style="font-family: Georgia, Times New Roman,Times,serif; font-size: 13px; font-weight: bold;">A Patient</p>
<p>ADdress2</p>
<p style="padding-bottom: 6px;">LA</p>
<p style="padding-bottom: 6px;">E-Mail: </p>
<div style="float:left; padding-bottom: 6px;">
<div style="display: inline-block; width: 30px;">Item:</div>
<div style="display: inline-block;">item info</div>
</div>
<div style="clear: both;"></div>
<p style="padding-bottom: 6px;">item 2: item info</p>
<p style="padding-bottom: 6px;">item 3: item info</p>
</td>
<td style="width:166px; vertical-align:top;">
<p class="iss-page-print-report-patient-left-info">
<label class="iss-page-print-report-patient-left-info">Phone:</label>(H) 111-111-1111
</p>
<p class="iss-page-print-report-patient-left-info">
<label class="iss-page-print-report-patient-left-info"> </label>(M)
</p>
<p class="iss-page-print-report-patient-left-info">
<label class="iss-page-print-report-patient-left-info"> </label>(O)
</p>
<p class="iss-page-print-report-patient-left-info" style="text-transform: capitalize">
<label class="iss-page-print-report-patient-left-info">Status:</label>Single
</p>
<p class="iss-page-print-report-patient-left-info">
<label class="iss-page-print-report-patient-left-info">ID:</label>123456
</p>
<p class="iss-page-print-report-patient-left-info" style="text-transform: capitalize">
<label class="iss-page-print-report-patient-left-info">Gender:</label>Male
</p>
<p class="iss-page-print-report-patient-left-info">
<label class="iss-page-print-report-patient-left-info">Birth Date:</label>
</p>
</td>
<td style="vertical-align:top; width:70px;">
<div style="text-align:right;">$0.00</div>
</td>
<td style="vertical-align:top; width:70px;">
<div style="text-align:right;">$0.00</div>
</td>
<td style="vertical-align:top; width:70px;">
<div style="text-align:right;">$0.00</div>
</td>
<td style="vertical-align:top; width:70px;">
<div style="text-align:right;">$2,950.00</div>
</td>
</tr>
</table>
</div>
</body>
</html>
这是我的java代码
FileInputStream FIS= null;
try {
//tidy
FIS = new FileInputStream("D:\\Test.xhtml");
FileOutputStream FOS = new FileOutputStream("D:\\testXHTML.xHtml");
Tidy T=new Tidy();
T.setXHTML(true);
Document D = T.parseDOM(FIS,FOS);
//xalan
DOMSource xmlDomSource = new DOMSource(D);
DOMResult domResult = new DOMResult();
Transformer transformerXalan = getTransformer("D:\\Test\\xhtml2fo-xsl-read-only\\xhtml2fo.xsl");
transformerXalan.transform(xmlDomSource, new StreamResult(new FileOutputStream("D:\\result.fo")));
//fop
FopFactory fopFactory = FopFactory.newInstance();
OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("D:/myfile.pdf")));
org.apache.fop.apps.Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(); // identity transformer
Source src = new StreamSource(new File("D:\\result.fo"));
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
因此,您使用AntennaHouse的XSLT样式表将xhtml转换为fo,然后使用Apache FOP生成pdf输出。
这些样式表开头的注释指出(添加了强调):
由于此样式表最初是由Antenna House开发用于XSL格式,因此它可能与其他XSL-FO处理器不兼容。
因此,其他格式化程序的输出出现问题并不奇怪;特别是,XSL格式化程序支持CSS属性(其中显示
),而FOP不支持。
但是,可以通过使用标准的fo元素和属性来实现所需的输出(具有固定宽度的内联堆叠区域),特别是inline-容器
s:
<fo:block>
<!-- first "inline block" -->
<fo:inline-container role="html:div" width="40px">
<fo:block start-indent="0pt" end-indent="0pt" background-color="#AAFFFF">Alpha</fo:block>
</fo:inline-container>
<!-- second "inline block" -->
<fo:inline-container role="html:div" width="40px">
<fo:block start-indent="0pt" end-indent="0pt" background-color="#FFAAFF">Beta</fo:block>
</fo:inline-container>
<!-- third "inline block" -->
<fo:inline-container role="html:div" width="40px">
<fo:block start-indent="0pt" end-indent="0pt" background-color="#FFFFAA">A a a a a a a</fo:block>
</fo:inline-container>
...
</fo:block>
编辑:我忘记提到建议的解决方案适用于FOP的主干版本,因为fo: inline-的容器
的实现是在FOP 1.1发布之后完成的。
我试图使用Apache Fop和Java生成PDF,但生成的Pdf总是一个空白页。它都嵌套在一个网络应用程序中,割断器是玻璃鱼。 有人有什么建议吗? 以下是我的xsl: 示例XML文件如下所示: 编辑:应该生成pdf的Java代码。。。 第二次编辑: 我发现我的outputStream有问题。我想显示另存为对话框,以便从web应用程序下载生成的文件。我不明白,我的输出有什么问题。。。
我曾尝试使用ApacheFop将HTML转换为PDF。(HTML-- 它适用于简单的html文件。 它不适用于带有样式(通过嵌入的css或样式属性)的html文件。PDF已创建,但完全未格式化。我试图转换超文本标记语言文件,我没有太多的样式/内容控制。 在我的用例中,为每个html创建xslt并不实用。 目前,我确实有一个与flyingsaucer一起工作的实现。但是,该要求要求在没有AGPL许可
我有以下fop.conf,在Windows下工作正常: 但是因为应用程序还需要在没有提供Arial的操作系统上运行,所以我决定在Java应用程序的< code > src/main/resources/fonts/Arial . TTF 中添加一个字体。 所以我试着这样引用字体: 但它不使用字体。 调试时,我看到fopFactoryBuilder有一个名为< code>baseUri的字段,是否可
应用程序通常会通过抛出另一个异常来响应异常。 实际上,第一个异常引起第二个异常。 它可以是非常有助于用户知道什么时候一个异常导致另一个异常。 “异常链(Chained Exceptions)”帮助程序员做到这一点。 以下是Throwable中支持异常链的方法和构造函数。 Throwable getCause() Throwable initCause(Throwable) Throwable(St
你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception): '''A u
问题内容: 异常存储在哪里?堆,堆。如何为异常分配和释放内存?现在,如果您有多个需要处理的异常,是否创建了所有这些异常的对象? 问题答案: 我假设为异常分配的内存分配方式与所有其他对象(在堆上)分配方式相同。 这曾经是个问题,因为您不能为OutOfMemoryError分配内存,这就是直到Java 1.6之前 才没有堆栈跟踪的原因。现在,它们也为stacktrace预分配了空间。 如果您想知道在抛
异常Exception 以传统的try,catch抓取异常 如果在业务层不catch,框架层会捕捉,并返回一个500的server error响应。 如果在开发环境会返回一个500的具体错误的trace响应。 try { throw new \Exception("Error Processing Request", 1); //yield throwExc
因为Java编程语言不需要捕获方法或声明未检查异常(包括 RuntimeException、Error及其子类),程序员可能会试图编写只抛出未检查异常的代码,或使所有异常子类继承自RuntimeException。这两个快捷方式都允许程序员编写代码,而不必担心编译器错误,也不用担心声明或捕获任何异常。虽然这对于程序员似乎很方便,但它避开了捕获或者声明异常的需求,并且可能会导致其他人在使用您的类而产