2016-12-16 82 views
0

我已经创建了一个将文档转换为pdf的自定义操作。它的工作原理 罚款,但我想下载转换的PDF上点击相同的自定义 行动,我的意思是我想转换和下载文件点击 自定义action.How可以做到这一点? 我试过下面的代码。Alfresco - 将Doc转换为pdf并下载自定义操作

newdoc = document.transformDocument("application/pdf"); newdoc.save(); 
+0

通过共享javascript将此操作称为Repo Webscript进行转换。生成文件后,从客户端获取nodeRef并打开下载URL,如http:// localhost:8080/share/proxy/alfresco/slingshot/node/content/workspace/SpacesStore/34104a8f-6385-49e2-9cb2- 655939cdf0bf?一= TRUE。让我尝试为你创建样本。 –

回答

4

在这里,你需要传递实际的nodeRef值。股价定制-config.xml中

<action id="convert-to-pdf-download" type="javascript" label="Download As PDF" icon="document-download"> 
<param name="function">onTransformToPDFAndDownload</param> 
</action> 

<actionGroups> 
<actionGroup id="document-browse">     
<action index="107" id="convert-to-pdf-download" /> 
</actionGroup> 
<actionGroup id="document-details"> 
<action index="107" id="convert-to-pdf-download" /> 
</actionGroup> 
</actionGroups> 

增加了新的文档操作现在你需要注入您的JavaScript像下面,你需要通过原始文档的nodeRef和我在这里有硬编码。

onTransformToPDFAndDownload: function dla_onTransformToPDFAndDownload(record) { 

      Alfresco.util.Ajax.request(
      { 
      url: Alfresco.constants.PROXY_URI + "com/quanticate/quanticliq/transformer/transform?noderef=workspace://SpacesStore/ec0ca4cf-9ea4-4c12-8f2c-5b0c406e454b", 
      successCallback: 
      { 
       fn: function onTransformAction_success(response) 
       { 
        debugger; 
        var pdfNodeRef = response.json.pdfNodeRef; 
        pdfNodeRef = pdfNodeRef.replace("://","/"); 

        window.open(Alfresco.constants.PROXY_URI + "slingshot/node/content/" + pdfNodeRef +"?a=true"); 
       }, 
       scope: this 
      }, 
      failureCallback: 
      { 
       fn: function onTransformAction_failure(response) 
       { 
        Alfresco.util.PopupManager.displayMessage(
        { 
        text: "Something went wrong,please try again later" 
        }); 
       }, 
       scope: this 
      } 
     }); 
     } 

在Repowebscript, convert.get.desc.xml

<webscript> 
    <shortname>toPDF</shortname> 
    <desciption>Return PDF Node</desciption> 
    <url>/com/quanticate/quanticliq/transformer/transform</url> 
    <authentication>user</authentication> 
    <format default="json">any</format> 
</webscript> 

convert.get.json.ftl

\"{\"pdfNodeRef\" :\"${pdfNodeRef.nodeRef}\"}\" 

convert.get.js

function main() 
{ 
    var json = "{}"; 

    var docNode = search.findNode("workspace://SpacesStore/ec0ca4cf-9ea4-4c12-8f2c-5b0c406e454b"); 
    var nodeTrans = docNode.transformDocument("application/pdf"); 
    model.pdfNodeRef = nodeTrans.nodeRef; 
} 
main(); 

当您单击下载为PDF时,将生成PDF文档,放置信息文档库(或存在原始文档的位置)并自动下载。您需要检查现有PDF文件是否存在。

+0

下载后是否可以删除生成的pdf?如果是,那么怎么办? –

+0

您可以按照如何执行“删除文档”操作,参考C:\ Alfresco5 \ tomcat \ webapps \ share \ components \ documentlibrary \ actions.js文件中的_onActionDeleteConfirm方法。您需要使用AJAX Delete请求调用Web脚本并传递PDF文件noderef并确保PDF文档已下载,但理想的解决方案应该是您需要在服务器端将文档转换为PDF,将它们保存到露天温度的位置以及下载它。 –

+0

,我可以重写_onActionDeleteConfirm.call(this,record)在我的custion动作函数中吗?如果是,那么如何?我尝试过使用这种方式,但它不工作。 Alfresco.doclib.Actions.prototype._onActionDeleteConfirm.call(this,record1); –