如何创建特定的openTBS Word模板?

时间:2015-08-10 15:50:12

标签: php ms-word opentbs tinybutstrong

我有一个使用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有更好的方法,我也会考虑这个吗?

1 个答案:

答案 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函数来添加虚拟列。