我有一个使用TinyButStrong和OpenTBS插件的PHP程序。我尝试了很多例子并直接编辑了xml。然而,我没有得到它,所有的实验开始让我感到沮丧,所以这是我的问题:
模板只是给客户的标准信件,其地址信息如下:
[a;block=w:body]
[a.company_name; magnet=w:p]
[a.first_name][a.last_name]
[a.street]
[a.postalcode] [a.city]
[a.country]
作为xml,它看起来像:
<w:p w:rsidR="001A4536" w:rsidRDefault="007D3CAF">
<w:r w:rsidRPr="007D3CAF">
<w:t>[a;block=w:body]</w:t>
</w:r>
</w:p>
<w:p w:rsidR="007D3CAF" w:rsidRDefault="007D3CAF">
<w:r w:rsidRPr="007D3CAF">
<w:t xml:space="preserve">[a.company_name; magnet=w:p] </w:t>
</w:r>
</w:p>
<w:p w:rsidR="007D3CAF" w:rsidRDefault="007D3CAF">
<w:r w:rsidRPr="007D3CAF">
<w:t>[a.first_name] [a.last_name]</w:t>
</w:r>
</w:p>
<w:p w:rsidR="007D3CAF" w:rsidRDefault="007D3CAF" w:rsidP="007D3CAF">
<w:r>
<w:t>[a.street]</w:t>
</w:r>
</w:p>
<w:p w:rsidR="007D3CAF" w:rsidRDefault="007D3CAF" w:rsidP="007D3CAF">
<w:r>
<w:t>[a.postalcode] [a.city]</w:t>
</w:r>
</w:p>
如果没有公司名称或没有名字和名字,就不应该浪费一条线。我如何实现这一目标?
如果创建word文档比使用openTBS有更好的方法,我也会考虑这个吗?
答案 0 :(得分:1)
首先,您的块定义block=w:body
不合适,因为XML内容中只能有一个<w:body>
元素。但是,对于数据中的每条记录,TBS将复制此元素。
您应该使用block=w:body
更改block=tbs:p+tbs:p+tbs:p+tbs:p+tbs:p
,[a.company_name; magnet=w:p]
定义超过5个段落的块。
如果没有公司名称或没有名字和姓氏 不应该浪费一条线。我如何实现这一目标?
正确使用TBS字段magnet
。
对于firstname + lastname,你可以使用相同的名称,但在这种情况下,你必须定义一个数据列,它是两者的串联,以便在其上使用static
{
HttpsURLConnection
.setDefaultHostnameVerifier(new HostnameVerifier()
{
@Override
public boolean verify(String hostname,
SSLSession sslSession)
{
if (hostname
.equals("xxx.secure.xyz.com")) { return true; }
return false;
}
});
}
public void createPDF()
throws Exception {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext
.getExternalContext();
HttpSession session = (HttpSession) externalContext
.getSession(true);
HttpServletRequest request = (HttpServletRequest) externalContext
.getRequest();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
String pageUrl = request.getRequestURL().toString();
pageUrl = pageUrl + ";jsessionid=" + session.getId();
try
{
ITextRenderer renderer = new ITextRenderer(28.66F, 16);
InputStream url = new URL(pageUrl).openStream();
Document document = XMLResource.load(url).getDocument();
renderer.setDocument(document, pageUrl);
renderer.layout();
HttpServletResponse response = (HttpServletResponse) externalContext
.getResponse();
response.reset();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition",
"inline; filename=\"" + "hello" + "\"");
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
"must-revalidate, post-check=0,pre-check=0");
response.setHeader("Pragma", "public");
ServletOutputStream browserStream = response
.getOutputStream();
renderer.createPDF(browserStream);
}
catch (Exception ex)
{
Logger.getLogger(PdfBean.class.getName()).log(
Level.SEVERE, null, ex);
}
facesContext.responseComplete();
}
参数。如果您无法定义数据列,则可以使用参数ondata和自定义PHP函数来添加虚拟列。