Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plone 自定义文件视图以在浏览器中查看PDF_Plone - Fatal编程技术网

Plone 自定义文件视图以在浏览器中查看PDF

Plone 自定义文件视图以在浏览器中查看PDF,plone,Plone,我仍然在为我们的内部网运行Plone 3.0.6。我试图升级到当前版本,但总是遇到障碍。等我有更多时间的时候,我会再来一次 现在,我只需要定制/portal\u skins/plone\u content/file\u view,让它在浏览器中打开pdf附件,而不是下载它们。我们正在安装一个新的信息亭系统,该系统将在浏览器中显示PDF,但无法浏览和查看文件系统中的文件 我已经做了很多搜索,并找到了其他做过这件事的人,但不是我正在运行的版本。我不是任何类型的开发人员,所以我不知道他们在我的系统上做

我仍然在为我们的内部网运行Plone 3.0.6。我试图升级到当前版本,但总是遇到障碍。等我有更多时间的时候,我会再来一次

现在,我只需要定制/portal\u skins/plone\u content/file\u view,让它在浏览器中打开pdf附件,而不是下载它们。我们正在安装一个新的信息亭系统,该系统将在浏览器中显示PDF,但无法浏览和查看文件系统中的文件

我已经做了很多搜索,并找到了其他做过这件事的人,但不是我正在运行的版本。我不是任何类型的开发人员,所以我不知道他们在我的系统上做了什么

以下是文件视图的当前代码

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
      lang="en"
      metal:use-macro="here/main_template/macros/master"
      i18n:domain="plone">

<body>

<div metal:fill-slot="main">
    <tal:main-macro metal:define-macro="main" 
           tal:define="size python:here.getObjSize(here);
                       content_type here/get_content_type|here/Format;
                       kssClassesView context/@@kss_field_decorator_view; 
                       getKssClasses nocall:kssClassesView/getKssClassesInlineEditable">

        <div tal:replace="structure provider:plone.abovecontenttitle" />

        <h1 class="documentFirstHeading"> 
            <metal:field use-macro="python:here.widget('title', mode='view')">
            Title
            </metal:field>
        </h1>

        <div tal:replace="structure provider:plone.belowcontenttitle" />

        <p class="documentDescription">
            <metal:field use-macro="python:here.widget('description', mode='view')">
            Description
            </metal:field>
        </p>

        <div tal:replace="structure provider:plone.abovecontentbody" />


        <p>
            <metal:field use-macro="python:here.widget('file', mode='view')">
            File
            </metal:field>
        </p>

        <div tal:condition="python: content_type.startswith('text')">
            <h2 i18n:translate="heading_file_contents">File contents</h2>
            <pre tal:content="here/get_data|here/data|nothing">
            </pre>
        </div>

        <div metal:use-macro="here/document_relateditems/macros/relatedItems">
            show related items if they exist
        </div>

        <div tal:replace="structure provider:plone.belowcontentbody" />

    </tal:main-macro>
</div>

</body>

</html>
有人能告诉我需要更改什么才能在浏览器中查看PDF吗

当前,当我选择指向PDF的链接时,它看起来是这样的

我需要它看起来像这样

不带/at_下载/文件

任何帮助都将不胜感激

谢谢


大卫

你说得对,你需要这样的东西:

如果不将视图附加到url,可以通过触发文件下载来实现

例如:

:显示默认文件视图这是Plone默认值 :应触发下载 要触发下载,您必须在您的文件类型上实现此功能,或对现有文件类型进行修补。 一个可能的入口点是FileFied index_html方法

这是Plone 4.3.x的一个工作示例:

从plone.app.blob导入字段 从plone.app.blob.download import handleIfModifiedSince,handleRequestRange 从urllib导入报价 从webdav.common导入rfc1123\u日期 从zope.component导入getMultiAdapter 类FileField.FileField: def index_htmlself,实例,请求=None,响应=None, charset='utf-8',disposition='inline': 踢下载。 将包括文件名和内容类型的数据写入响应 如果请求为无: REQUEST=instance.REQUEST 如果响应为无: RESPONSE=REQUEST.RESPONSE RESPONSE.setHeader'Last-Modified',rfc1123\u dateinstance.\u p\u mtime RESPONSE.setHeader'Content-Type',self.getContentTypeinstance RESPONSE.setHeader'Accept-Ranges','bytes' 如果HandleIFModifiedSince实例、请求、响应: 回来 长度=self.get_sizeinstance RESPONSE.setHeader'Content-Length',Length filename=self.getFilenameinstance 如果文件名不是“无”: 如果isinstancefilename为unicode: filename=filename.encodecharset,错误=ignore 创建特定于用户代理的处置标头 IE需要一个url引用的文件名 其他浏览器需要不带引号的文件名 user\u agent=REQUEST.get'HTTP\u user\u agent', 如果用户代理中的“MSIE”: 标题值='%s;文件名=%s'%1!', 引号名称 其他: 标题值='%s;文件名=%s“%s”,文件名 RESPONSE.setHeaderContent-disposition,标题值 请求\范围=HandlerRequestRange实例、长度、请求、响应 通知文件下载,但不通知范围请求 如果请求范围和请求范围中没有“开始”[“开始”]>0: portal_state=getMultiAdapterinstance,instance.REQUEST, name='plone\u门户\u状态' 返回self.getinstance.getIterator**请求范围
<>你真的应该考虑升级你的PLAN站点,然后再执行新的功能,这可能会再次阻止你!!p> 我不知道它在plone 3.x.x中是否有效,但是 我正在使用plone 4.1.6,我想呈现一个pdf文件 在浏览器中,在chrome和firefox中工作,并像这样放置 在页面填充板中:

<a tal:attributes="href string:${edicao_url}/@@images/field_pdf"  target="_blank">View PDF</a>
其中url显示:

因此,字段是内容类型的属性! 啊,我用的也是灵巧的内容类型


我希望这对你有帮助=嗨,马蒂亚斯。我并不想完全不知所措,但我甚至在我的《普隆》版本中找不到你在说什么。我想做这家伙做的事,但我需要帮助使它适应我的老版本的Plone。我完全打算升级到Plone的当前版本,但这将不得不等到新年。谢谢。我不确定是否有可能将Plone 4.2.x实现适应您的3.0.6环境。我发布的代码是针对文件字段的,在您的例子中,这可能在Products.Archetypes或Products.ATContentTypes中。为了直接使用文件路径,您需要对文件字段进行修补。下载开始时无需重定向到at_download。您需要找到文件字段并修补直接传递文件内容的index_html方法。上面的代码是一个带有流迭代器的实现,wh ich允许开始/暂停下载。请扩展你的Q,这样我可以调整我的A。
<a tal:attributes="href string:${edicao_url}/@@images/field_pdf"  target="_blank">View PDF</a>