我有一个条形码,我是动态生成的,并希望传递给gsp,它稍后将成为pdf。我不需要为我自己的任何目的持久化条形码,只想简单地将图像从控制器传递到gsp。
有没有一种方法可以渲染作为变量传递的图像而不是指定src?
提前谢谢。
编辑:
因为我是从gsp生成pdf的,所以我刷新了响应的输出流,因此不能对图像也这样做,否则我会得到一个错误。
此外,使用javascript/jQuery不起作用,因为浏览器从不直接呈现页面。
看起来我唯一的选择就是将图片暂时保存在某个地方,然后删除它们……
发布于 2011-01-21 06:19:11
我最近回答了一个similar question,也许它的答案对你有用。我将在这里粘贴它的一部分。基本上就是奥德的“在这之外...”建议。
class BarcodeController {
def index = {
def img // byte array, set this to the binary contents of your image
response.setHeader('Content-length', img.length)
response.contentType = 'image/png' // or the appropriate image content type
response.outputStream << img
response.outputStream.flush()
}
}然后,您可以在标签的src中访问图像,如下所示:
<img src="${g.link(controller: 'barcode', action: 'index')}"/>这个答案似乎符合您对这个问题(关于使用PHP的类似解决方案)所做的最后一条评论。
发布于 2011-01-21 05:11:26
您可以为src属性使用data URI scheme。
数据URI方案是一种URI方案,它提供了一种在网页中包含内嵌数据的方法,就像它们是外部资源一样。
下面是维基百科文章中的一个例子:
<img src="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0
vr4MkhoXe0rZigAAAABJRU5ErkJggg==" alt="Red dot" />除此之外,如果您使用的是服务器端技术,则可以从脚本(使用正确的mime类型)流式传输图像数据,并将src属性指向该脚本。
Here是一个与grails相关的SO问题。
发布于 2015-03-31 06:17:09
我只想为这个古老的问题做点贡献。我通过向BuildConfig.groovy添加以下几行代码来实现这一点
在plugins部分中:
plugins {
// other plugins here
// ...
compile ":barcode4j:0.3"
compile ":rendering:1.0.0"
} 在dependencies部分中:
dependencies {
// other dependencies here
// ...
compile 'avalon-framework:avalon-framework:4.1.5'
}然后,我根据在网上找到的代码示例添加了一个控制器。我特别需要一个DataMatrix生成器,但添加其他生成器应该很容易,只需向控制器添加方法即可。对于质量不佳的代码我很抱歉(我是Groovy新手):
package myproject
import org.krysalis.barcode4j.impl.datamatrix.DataMatrix
import java.awt.Dimension
class BarcodeController {
// a valid PNG image, base64 encoded
static invalidBarcodeImgBase64 = """iVBORw0KGgoAA...=="""
// Needs index.gsp for testing
def index() {
['uuid': UUID.randomUUID(), 'fecha': new Date()]
}
def dataMatrix(String value) {
if ((null == value) || (value.length() < 1) || (value.length() > 2000)) {
def img = invalidBarcodeImgBase64.decodeBase64()
response.setHeader('Content-length', new Integer(img.length).toString())
response.contentType = 'image/png'
response.outputStream << img
response.outputStream.flush()
} else {
def generator = new DataMatrix()
generator.dataMatrixBean.setMinSize(new Dimension(16, 16))
renderBarcodePng(generator, value, [antiAlias: false])
}
}
def datamatrix(String value) {
dataMatrix(value)
}
}最后,这里是用于测试的条形码视图中的index.gsp:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>DataMatrix</title>
</head>
<body>
<g:img dir="barcode" file="dataMatrix?value=${uuid}"/>
<br />
<br />
<g:img dir="barcode" file="dataMatrix?value=${fecha}"/>
<br />
<br />
<g:img dir="barcode" file="dataMatrix?value=Nothing to see here"/>
</body>
</html>https://stackoverflow.com/questions/4752539
复制相似问题