【问题标题】:Compressing a PDF document generated by coldfusion压缩coldfusion生成的PDF文档
【发布时间】:2015-05-26 16:18:00
【问题描述】:

我正在尝试对 CF8 中内置的 pdf 报告生成应用程序进行大修,他们有一个界面,可以生成 50 页的 pdf 法律报告并每天发送约 100 次。但是,它非常繁琐并且使已经过度工作的服务器陷入困境。是否有一个很好的 PDF 压缩脚本,我可以使用 Coldfusion 运行,或者与 Adob​​e acrobat 集成以在服务器通过电子邮件发送 pdf 之前压缩 pdf?系统已使用可用的 Coldfusion 资源进行设置以尝试并帮助完成此过程,但仍然不够。

更新:我有机会进一步深入研究这个问题。这些文件的编译方式是通过 4 个 CF 表格进行编译的,在这些表格中,有人在进入系统时手动输入法律数据。一些表单域很长(接受超过 10,000 个字符或更多)。完成后,它会运行一个 cfdocument 标签,将所有内容转换为 pdf。

【问题讨论】:

  • 如何生成 PDF? CFDOCUMENT 标签?它有多大,以 MB 为单位?
  • 它使用 CF 文档标签。它们超过 8Mb。这取决于页面。平均文档为 50 个。但一些超过 100 页的文档并不少见。他们希望看到压缩到几 Mb 的文件。如果它可以低于 1.5Mb,他们会很高兴。
  • 快速谷歌搜索将我带到用 Java 编写的iText library。我认为这是其他人在使用 CF8 时使用的选项。
  • PDF 文档是否可以进一步压缩(以及压缩多少)实际上取决于 PDF 文档及其内容。您能否发布一个示例(或伪造的)文档,以便我们查看并提出可能的建议?
  • 您的文档中有图片吗?

标签: pdf coldfusion coldfusion-8 pdf-conversion


【解决方案1】:

CFDocument 生成臃肿的 PDF。我们测试了 GhostScript 并使用以下参数将 22.3mb 的 PDF 压缩为 4mb。 (如果设置为“screen”,文件大小会进一步缩小到 2.5mb。) http://www.ghostscript.com/

要使用此功能,您必须在生成 PDF 后作为额外步骤执行此优化,并在出现任何问题或超时时使用 cftry/catch。

<CFSET ThePDFFile = "C:\test\OriginalPDF.pdf">
<cfexecute name="c:\Program Files\gs\gs9.14\bin\gswin64.exe"
arguments="-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile=#replace(ThePDFFile,'.pdf','-opt.pdf')# #ThePDFFile#" timeOut="160">
</cfexecute>

另一种解决方案是使用 WKHTML2PDF 生成 PDF。生成的文件要小得多。 ColdFusion 8-11 的质量是一致的。您可以嵌入 TrueType 字体而无需注册它们,并且它没有任何与 CFDocument 一起存在的 HTML/CSS 怪癖。 http://wkhtmltopdf.org/

这里是一篇文章的链接和一些示例 ColdFusion 代码,您可以使用它们来比较 WKHTMLTOPDF 和 CFDocument 的结果。 http://gamesover2600.tumblr.com/post/108490381084/wkhtmltopdf-demo-to-compare-w-adobe-coldfusion

【讨论】:

  • 我实现了 ghost 脚本,但是当我运行它时,浏览器在选项卡中一直显示旋转状态,几分钟没有结果
  • 您是否测试过在本地直接使用命令行运行它?如果是这样,是否需要超过 3 分钟? (不应该。)添加 CFExecute “变量”参数以确定控制台在出现错误时输出的内容。
【解决方案2】:

我实际上能够使用 NeeviaPDF 压缩应用程序解决它,并使用以下代码将其绑定到 ColdFusion:

<cfset pdf_file_name = 'qryGetFileJustUploaded' />
<cfexecute name="C:\Program Files (x86)\neeviaPDF.com\PDFcompress\cmdLine\CLcompr.exe"
arguments="C:\inetpub\wwwroot\testingFolder\PDFCompression2\pdf\#pdf_file_name# C:\inetpub\wwwroot\testingFolder\PDFCompression2\pdf\#pdf_file_name# -co -ci jpg -cq 10 -gi jpg -gq 10 -mi jbig2 -mq 1"
outputfile="C:\inetpub\wwwroot\testingFolder\PDFCompression2\output.txt"
timeout="250">
</cfexecute>

您可以将值传递给变量#pdf_file_name#,如果您想设置输出压缩pdf的名称,只需选择一个名称并将该名称放置在第二个C:\中引用#pdf_file_name#的位置.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2010-12-19
    相关资源
    最近更新 更多