2014-12-03 30 views
0

以下代碼:撒克遜:XSLT圖像處理:不能從XS轉換:字符串到字節

<xsl:message>[threfUrl] <xsl:value-of select="$threfUrl" /></xsl:message> 
<xsl:variable name="actualHeight" select="itext:getPlainHeight(itext:getInstance($threfUrl))" /> 

引發此錯誤:

[xslt] [threfUrl] file:/data/dtemple/share/dita_share/png_debug/screenshot_example.png 
[xslt] /tools/dita_ot/1.6/plugins/com.altera.pdf/cfg/fo/xsl/altera_commons.xsl:1124: Fatal Error! Cannot convert from xs:string to byte 

的PNG文件存在並且是可讀的。使用Saxon 9.命名空間:itext =「java:com.itextpdf.text.Image」

任何有關錯誤的信息(錯誤信息無效)或如何解決? 「file:/」語法是否正確?

+0

請分享'itext'前綴和您正在使用撒克遜的確切版本的命名空間。你是否試圖調用Java方法?哪個班?該方法的簽名如何看起來像完全一樣? – 2014-12-03 16:27:49

回答

1

假設您正在使用http://api.itextpdf.com/itext/com/itextpdf/text/Image.html#Image%28java.net.URL%29嘗試select="itext:getPlainHeight(itext:new($threfUrl))"。如果不工作,然後構造URL明確,如

<xsl:variable name="actualHeight" xmlns:url="java:java.net.URL" select="itext:getPlainHeight(itext:new(url:new($threfUrl)))" /> 

我所引用的文件說

Constructor Detail 
Image 

public Image(URL url) 

    Constructs an Image -object, using an url . 

    Parameters: 
     url - the URL where the image can be found. 

,這樣的構造是公開的。

也許這個API有不同的版本,我不知道你爲什麼會得到一個錯誤。另一次嘗試可能是你原來的嘗試,但傳遞一個URL,所以

<xsl:variable name="actualHeight" xmlns:url="java:java.net.URL" select="itext:getPlainHeight(itext:getInstance(url:new($threfUrl)))" /> 
+0

感謝Martin提供了必要的細節!構造函數受到保護,因此itext:new()不起作用。 getInstance()的問題是有很多重載,例如期望一個Url和期望一個Image;和xs:字符串不能轉換爲任何。使用url:new()應該有所幫助(我假設$ thefUrl是一個字符串,因爲我們沒有被告知,否則),但解決重載的方法可能仍然是棘手的。至於最初的錯誤,getInstance()的一個重載需要一個byte [],我認爲它是以特定的過載來報告錯誤的。 – 2014-12-03 23:43:11

+0

命名空間是xmlns:itext =「java:com.itextpdf.text.Image」 兩種建議throw: 在{... inHeight(itext:new($ threfUr ..)中的第1122行的char 41上的XPath語法錯誤。}: [xslt]無法找到名爲{java:com.itextpdf.text.Image}的匹配1參數函數new()' – Dan 2014-12-04 08:42:05

+0

@Dan,我編輯了答案以嘗試另一個建議,基本上是您的原始嘗試,但傳遞URL而不是一個字符串 – 2014-12-04 09:45:47