2

我只是想尝试使用Flying Saucer从 xhtml 代码生成 PDF。所以我所做的是在 LibreOffice 中进行布局,让它生成 xhtml 代码并(想要)将其交给解析库(在 java 中)以生成 pdf。但是,我无法以 1:1 接管所有 xml 代码,因为我需要转义一些东西。所以我用“<”转义了所有“<”,用“>”转义了所有“>”和所有双引号带有“\”“。

当试图解析整个事情时,我得到以下错误:

[Fatal Error] :1:2: Reference is not allowed in prolog.

我试图通过一些逻辑思考和谷歌搜索来追踪它。如果我理解正确,以下是我的“序言”:

    buf.append("&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;");
    buf.append("&lt;!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN\" \"http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd\"&gt;");
    buf.append("&lt;html xmlns=\"http://www.w3.org/1999/xhtml\"&gt;&lt;!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--&gt;&lt;head profile=\"http://dublincore.org/documents/dcmi-terms/\"&gt;&lt;meta http-equiv=\"Content-Type\" content=\"application/xhtml+xml; charset=utf-8\"/&gt;&lt;title xml:lang=\"en-US\"&gt;- no title specified&lt;/title&gt;&lt;meta name=\"DCTERMS.title\" content=\"\" xml:lang=\"en-US\"/&gt;&lt;meta name=\"DCTERMS.language\" content=\"en-US\" scheme=\"DCTERMS.RFC4646\"/&gt;&lt;meta name=\"DCTERMS.source\" content=\"http://xml.openoffice.org/odf2xhtml\"/&gt;&lt;meta name=\"DCTERMS.issued\" content=\"2012-11-20T20:59:05.11\" scheme=\"DCTERMS.W3CDTF\"/&gt;&lt;meta name=\"DCTERMS.provenance\" content=\"\" xml:lang=\"en-US\"/&gt;&lt;meta name=\"DCTERMS.subject\" content=\",\" xml:lang=\"en-US\"/&gt;&lt;link rel=\"schema.DC\" href=\"http://purl.org/dc/elements/1.1/\" hreflang=\"en\"/&gt;&lt;link rel=\"schema.DCTERMS\" href=\"http://purl.org/dc/terms/\" hreflang=\"en\"/&gt;&lt;link rel=\"schema.DCTYPE\" href=\"http://purl.org/dc/dcmitype/\" hreflang=\"en\"/&gt;&lt;link rel=\"schema.DCAM\" href=\"http://purl.org/dc/dcam/\" hreflang=\"en\"/&gt;&lt;style type=\"text/css\"&gt;");

对巨大(和丑陋)的事情感到抱歉,但好吧..我做的下一件事是每行注释掉一行,看看哪里有问题。

如果我注释掉前两行,错误仍然出现,在第三行之后我得到一个不同的错误(“内容不允许在序言中”或类似)

但是,这是第三行..我找不到错误,感谢您的帮助:)

        buf.append("&lt;html xmlns=\"http://www.w3.org/1999/xhtml\"&gt;&lt;!--This file was converted to xhtml by OpenOffice.org - see http://xml.openoffice.org/odf2xhtml for more info.--&gt;&lt;head profile=\"http://dublincore.org/documents/dcmi-terms/\"&gt;&lt;meta http-equiv=\"Content-Type\" content=\"application/xhtml+xml; charset=utf-8\"/&gt;&lt;title xml:lang=\"en-US\"&gt;- no title specified&lt;/title&gt;&lt;meta name=\"DCTERMS.title\" content=\"\" xml:lang=\"en-US\"/&gt;&lt;meta name=\"DCTERMS.language\" content=\"en-US\" scheme=\"DCTERMS.RFC4646\"/&gt;&lt;meta name=\"DCTERMS.source\" content=\"http://xml.openoffice.org/odf2xhtml\"/&gt;&lt;meta name=\"DCTERMS.issued\" content=\"2012-11-20T20:59:05.11\" scheme=\"DCTERMS.W3CDTF\"/&gt;&lt;meta name=\"DCTERMS.provenance\" content=\"\" xml:lang=\"en-US\"/&gt;&lt;meta name=\"DCTERMS.subject\" content=\",\" xml:lang=\"en-US\"/&gt;&lt;link rel=\"schema.DC\" href=\"http://purl.org/dc/elements/1.1/\" hreflang=\"en\"/&gt;&lt;link rel=\"schema.DCTERMS\" href=\"http://purl.org/dc/terms/\" hreflang=\"en\"/&gt;&lt;link rel=\"schema.DCTYPE\" href=\"http://purl.org/dc/dcmitype/\" hreflang=\"en\"/&gt;&lt;link rel=\"schema.DCAM\" href=\"http://purl.org/dc/dcam/\" hreflang=\"en\"/&gt;&lt;style type=\"text/css\"&gt;");

提前致谢!

编辑1: http ://validator.w3.org/check验证它是完全正确的!

4

1 回答 1

2

您似乎对这篇博客文章的糟糕布局感到困惑。如果您下载示例代码,您会看到 '<' 和 '>' 字符没有转换为“<” 和“>” 在作者的实际代码和数据中。

为了将引号放入硬编码的 Java 字符串中,您当然必须对它们进行转义。但是你不应该需要任何这种 xml 转义。

于 2012-11-20T23:25:14.357 回答