在Coldfusion中将Word文档转换为PDF

在Coldfusion中将Word文档转换为PDF,coldfusion,Coldfusion,在显示标准操作程序(SOP)的页面上工作,并允许非管理员下载PDF文件中的SOP。客户决定他们不希望管理员只上传PDF文件,他们想要上传.doc和.docx文件的选项。但我需要下载链接来生成PDF 现在上传一个.doc/.docx或一个.pdf文件将使用谷歌浏览器显示我想要的内容。但是当我尝试下载测试文件时,如果上载的文件是.doc/.docx,则无法打开该文件。我已经看过了,我肯定我错过了一些愚蠢的事情 正如在另一个问题上建议的那样,我正在使用cfdocumnet 下载链接: <cfou

在显示标准操作程序(SOP)的页面上工作,并允许非管理员下载PDF文件中的SOP。客户决定他们不希望管理员只上传PDF文件,他们想要上传.doc和.docx文件的选项。但我需要下载链接来生成PDF

现在上传一个.doc/.docx或一个.pdf文件将使用谷歌浏览器显示我想要的内容。但是当我尝试下载测试文件时,如果上载的文件是.doc/.docx,则无法打开该文件。我已经看过了,我肯定我错过了一些愚蠢的事情

正如在另一个问题上建议的那样,我正在使用cfdocumnet

下载链接:

<cfoutput>
   <li class="active">                 
      <ahref="/files/SOP/SOP.pdf" 
        download="SOP.pdf" target="_blank">Download SOP</a>
   </li>
</cfoutput>

  • 检查管理员(变量在别处创建)和表单以上载文件:

    <cfif isAdmin>
      <h3>Upload New SOP</h3>
      <cfparam name="form.fileUpload" default="">
      <cftry>
        <cffile action="upload"
            fileField="fileUpload"
            destination="#expandPath('.')#\files\SOP\"
            accept="application/pdf,
                 application/msword,
                 application/vnd.openxmlformats-officedocument.wordprocessingml.document,
                 application/x-tika-msoffice"
            nameconflict="OVERWRITE">
    
        <cfset fileName=CFFILE.serverfile>
    
        <cfdocument 
              format="PDF"
              srcfile="#expandPath('.')#\files\SOP\#fileName#"
              filename="#expandPath('.')#\files\SOP\SOP.pdf"
              overwrite="YES">
        </cfdocument>
        <p>Thank you, your file has been uploaded.</p>
        <cfoutput>#fileName#</cfoutput>
    
        <form enctype="multipart/form-data" method="post">
          <input type="file" name="fileUpload"/>
          <input type="submit" name="submit" value="Upload File"/>
        </form>
        <cfcatch type="any">
          <!--- file is not written to disk if error is thrown  --->
          <!--- prevent zero length files --->
          <cfif FindNoCase("No data was received in the uploaded", cfcatch.message)>
            <p>No data was received in the uploaded file.</p>
          <!--- prevent invalid file types --->
          <cfelseif FindNoCase("The MIME type or the Extension of the uploaded file", cfcatch.message)>
            <p>Invalid file type. Please upload file as a PDF or Word Doc</p>
          <!--- prevent empty form field --->
          <cfelseif FindNoCase("did not contain a file.", cfcatch.message)>
            <p>Please seclect a PDF to upload.</p>
          <!---all other errors --->
          <cfelse>
            <p>Unhandled File Upload Error</p>
            <cflog type="Error" file="#application.applicationname#_dcnsopupload_error" text="#cfcatch.Message# - #cfcatch.Detail#" />
            <cfoutput>#cfcatch.Detail#</cfoutput>
          </cfif>
        </cfcatch>
      </cftry>
    </cfif>
    
    
    上传新SOP
    谢谢,您的文件已上载

    #文件名# 上载的文件中未收到任何数据

    无效的文件类型。请以PDF或Word文档的形式上载文件

    请选择要上载的PDF

    未处理的文件上载错误

    #详细资料#

    另一方面,因为我希望下载的.pdf文件名为“SOP.pdf”,有没有办法在重命名并转换后删除用户上传的文件?服务器上没有30个不同的过期SOP文档。

    表单上载代码看起来有误。由于
    cfparam
    ,它可能在提交表单之前尝试运行上载/转换。删除
    cfparam
    ,并在尝试处理文件字段之前,使用它验证文件字段是否已提交

    首先尝试一个简化的示例,只使用表单和上载代码(无错误处理)

    
    
    此外,尽管有点过时,但关于保护文件上载的一些提示仍然有效(例如不将文件上载到web根目录):


    表单上载代码看起来有误。由于
    cfparam
    ,它可能在提交表单之前尝试运行上载/转换。删除
    cfparam
    ,并在尝试处理文件字段之前,使用它验证文件字段是否已提交

    首先尝试一个简化的示例,只使用表单和上载代码(无错误处理)

    
    
    此外,尽管有点过时,但关于保护文件上载的一些提示仍然有效(例如不将文件上载到web根目录):


    什么版本的ColdFusion?而且,
    cfif isAdmin
    是限制功能的不可靠方法。另外,这些文件是在什么版本的Word中创建的?是否有错误?因为表单/上传代码在我看来是错误的。由于cfparam,它可能正在运行,试图在提交文件之前运行上载/转换。尝试创建一个只包含表单和上载的简单示例-无错误处理<代码>将上传/cf文档代码放在此处显示表单听起来不错!实际上,重新阅读整个线程,我收回了我所说的关于静态文件名的内容。您可能希望在此处使用静态文件名。原因是,在任何时候,服务器上都可能只有一个SOP副本。(我错误地认为这是一个动态生成的下载-即每个用户的下载不同-因此您需要唯一的文件名以避免冲突,但这里不是这种情况)。ColdFusion的哪个版本?另外,
    cfif isAdmin
    是限制功能的不可靠方式。另外,这些文件是在什么版本的Word中创建的?是否有错误?因为表单/上传代码在我看来是错误的。由于cfparam,它可能正在运行,试图在提交文件之前运行上载/转换。尝试创建一个只包含表单和上载的简单示例-无错误处理<代码>将上传/cf文档代码放在此处显示表单听起来不错!实际上,重新阅读整个线程,我收回了我所说的关于静态文件名的内容。您可能希望在此处使用静态文件名。原因是,在任何时候,服务器上都可能只有一个SOP副本。(我错误地认为这是一个动态生成的下载-即每个用户的下载不同-因此您需要唯一的文件名以避免冲突,但这里不是这种情况)。fileDelete(uploadedFIle)是我昨天刚刚整理的,试图清理客户端上传的文件。这就是我最终得到的,让一切都运转起来。现在,我们只想看看客户的想法(以及他们决定要改变的工作方式)。再次感谢!fileDelete(uploadedFIle)是我昨天刚刚整理好的,试图清理客户端上传的文件。这就是我最终得到的,让一切都运转起来。现在,我们只想看看客户的想法(以及他们决定要改变的工作方式)。再次感谢!
    <!--- If file was uploaded, process it ---> 
    <cfif structKeyExists(FORM, "fileUpload")> 
    
        <cffile action="upload"
            fileField="fileUpload"
            destination="#GetTempDirectory()#"
            accept="application/pdf,application/msword,
            application/vnd.openxmlformats-officedocument.wordprocessingml.document,
            application/x-tika-msoffice"
            nameconflict="makeunique">
    
        <cfset savedFilePath = cffile.serverDirectory &"/"& cffile.serverFile>
    
        <!--- 
            more file validation here ... 
        --->
    
        <!--- convert file ---> 
        <cfdocument format="PDF"
            srcfile="#savedFilePath#"
            filename="#expandPath('.')#\files\SOP\SOP.pdf"
            overwrite="YES">
        </cfdocument>
    
        <!--- cleanup temp file --->
        <cfif fileExists(uploadedFile)>
            <cfset fileDelete(uploadedFile)>
        </cfif>
    
    <!--- Otherwise, just display the form ---> 
    <cfelse>
        <form enctype="multipart/form-data" method="post">
            <input type="file" name="fileUpload"/>
            <input type="submit" name="submit" value="Upload File"/>
        </form>
    </cfif>