Java 将 SVG 转换为具有 UTF-8 字符的 PNG 的代码
Java code to convert SVG to PNG with UTF-8 character
我正在使用以下代码从 SVG 文件创建 PNG 并将其写入 Servlet 输出流。 SVG 文件在 AXIS 名称中包含 UTF-8(日语)字符。
ServletOutputStream out = response.getOutputStream();
InputStream svgFileStream = new FileInputStream(svgFile);
TranscoderInput inputSvgImage = new TranscoderInput(svgFileStream);
PNGTranscoder converter = new PNGTranscoder();
TranscoderOutput outputPngImage = new TranscoderOutput(out);
converter.transcode(inputSvgImage, outputPngImage);
上面的代码在我的本地运行良好,但是当我将它上传到服务器时,它显示的是方块而不是字符。当有英文字符而不是日文字符时,它在本地和服务器上都可以正常工作。
如果您遇到同样的问题,能否告诉我。
它可以与 Tomcat 相关吗?
我检查了来自服务器的 SVG 文件,其中可以看到 UTF-8 字符。
我还尝试使用 "UTF-8" InputStreamReader 而不是 InputStream 但没有用。
根据发现的一个响应,我尝试在 TranscoderOutput 中使用 "UTF-8" Write 而不是 ServletOutputStream,但它没有创建任何图像。
谢谢
更新
只要它在你的本地工作正常并且你因此提供了一个 png 图像,它必须独立于应用程序服务器的编码配置,并且你的 svg 文件本身编码正确我不认为它是编码问题。
@Eugene K. 是的,有些 java 类 隐含地使用 os 默认语言环境,但我无法重现问题尽管我没有日语语言环境,但给出了相同的代码。
恕我直言,服务器很可能安装了一些丢失的字体。
这可能不是一种优雅的方式,也与 Java 无关,但作为一种解决方案,如果你有机会以某种方式编辑你的源 svg 文件,它也可以动态地进行一些字符串操作,如果如果您需要,您可以提供一种包含日文字符的字体并从您的 servlet 提供它。然后将这些添加到您的 svg 文件并为您的文本指定字体系列:
<defs>
<style type="text/css">
<![CDATA[
@font-face {
font-family: Somefont;
src: url('http://localhost:8080/Somefont.ttf');
}
]]>
</style>
</defs>
<text font-family="Somefont" font-size="40" fill="blue">Text for test!</text>
希望对您有所帮助!
我正在使用以下代码从 SVG 文件创建 PNG 并将其写入 Servlet 输出流。 SVG 文件在 AXIS 名称中包含 UTF-8(日语)字符。
ServletOutputStream out = response.getOutputStream(); InputStream svgFileStream = new FileInputStream(svgFile); TranscoderInput inputSvgImage = new TranscoderInput(svgFileStream); PNGTranscoder converter = new PNGTranscoder(); TranscoderOutput outputPngImage = new TranscoderOutput(out); converter.transcode(inputSvgImage, outputPngImage);
上面的代码在我的本地运行良好,但是当我将它上传到服务器时,它显示的是方块而不是字符。当有英文字符而不是日文字符时,它在本地和服务器上都可以正常工作。
如果您遇到同样的问题,能否告诉我。 它可以与 Tomcat 相关吗?
我检查了来自服务器的 SVG 文件,其中可以看到 UTF-8 字符。 我还尝试使用 "UTF-8" InputStreamReader 而不是 InputStream 但没有用。
根据发现的一个响应,我尝试在 TranscoderOutput 中使用 "UTF-8" Write 而不是 ServletOutputStream,但它没有创建任何图像。
谢谢
更新
只要它在你的本地工作正常并且你因此提供了一个 png 图像,它必须独立于应用程序服务器的编码配置,并且你的 svg 文件本身编码正确我不认为它是编码问题。
@Eugene K. 是的,有些 java 类 隐含地使用 os 默认语言环境,但我无法重现问题尽管我没有日语语言环境,但给出了相同的代码。 恕我直言,服务器很可能安装了一些丢失的字体。
这可能不是一种优雅的方式,也与 Java 无关,但作为一种解决方案,如果你有机会以某种方式编辑你的源 svg 文件,它也可以动态地进行一些字符串操作,如果如果您需要,您可以提供一种包含日文字符的字体并从您的 servlet 提供它。然后将这些添加到您的 svg 文件并为您的文本指定字体系列:
<defs>
<style type="text/css">
<![CDATA[
@font-face {
font-family: Somefont;
src: url('http://localhost:8080/Somefont.ttf');
}
]]>
</style>
</defs>
<text font-family="Somefont" font-size="40" fill="blue">Text for test!</text>
希望对您有所帮助!