ColdFusion CFPDFFORM不填充PDF表单字段 [英] ColdFusion CFPDFFORM does not populate PDF form fields

查看:168
本文介绍了ColdFusion CFPDFFORM不填充PDF表单字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用一个提交按钮创建了一个带有两个表单字段,名字和姓氏(或FirstName和LastName)的快速PDF文件,并使用以下代码尝试填充新的PDF文件中的这些字段:

 < cfpdfform action =populatesource =#variables.AbsPath#\test.pdf> 
< cfpdfformparam name =FirstNamevalue =foo/>
< cfpdfformparam name =LastNamevalue =bar/>
< / cfpdfform>但是,我收到此错误:



<$>


p $ p> 系统尝试在代码或某些系统代码中使用未定义的值,通常表示编程错误。
Null指针是未定义值的另一个名称。
平台,区域设置和平台名称不得为空

我尝试读取PDF文件以确保表单字段正确使用此,它们是:

 < cfpdfform action =readsource =# variables.AbsPath#\test.pdfresult =fields/> 

< cfdump var =#fields#>

结构转出:

  FirstName:[空字符串] 
LastName:[空字符串]
提交:[空字符串]

我尝试搜索Adobe文档和其他一些网站,但找不到此错误的解决方案。我也尝试添加一个destination参数到cfpdfform标签,如果需要,但得到相同的结果。 PDF文件确实存在。有任何想法吗?提前感谢。



UPDATED:
这是堆栈跟踪:

  java.lang.NullPointerException:Platform,Locale和Platform Name不能为null 
at com.adobe.fontengine.fontmanagement.platform.PlatformFontDescription。< init>(未知来源)
at com.adobe.fontengine.font.opentype.OpenTypeFont.getPlatformFontDescription(未知源)
at com.adobe.fontengine.font.FontImpl.getPlatformFontDescription(未知源)
at com.adobe.fontengine。 font.FontImpl.getPlatformFontDescription(未知源)
at com.adobe.fontengine.fontmanagement.platform.PlatformFontResolverImpl.addFont(未知源)
at com.adobe.internal.pdftoolkit.core.fontset.impl。 PDFFontSetImpl.addFont(未知来源)
at com.adobe.internal.pdfm.util.FontSetBuilder.loadFontsPath(FontSetBuilder.java:418)
at com.adobe.internal.pdfm.util.FontSetBuilder.loadSystemFonts (FontSetBuilder.java:346)
at com.adobe.internal.pdfm.util.FontSetBuilder.makePDFFontSet(FontSetBuilder.java:239)
at com.adobe.internal.pdfm.util.FontSetBuilder.getPdfFontSet (FontSetBuilder.java:93)
at com.adobe.internal.pdfm.PDFM7Factory.getPdfFontSet(PDFM7Factory.java:97)
at coldfusion.document.DocumentServiceImpl.getAssemblerFontSet(DocumentServiceImpl.java:512)
at coldfusion.pdf.PDFForm.populateFields(PDFForm.java:292)
at coldfusion.tagext.lang.PDFFormTag.doEndTag(PDFFormTag.java:347)
at cfsubmit2ecfm1224790315.runPage(C: \ColdFusion\wwwroot\\\
Vision\projects\test\pdfform\submit.cfm:9)
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:231)
at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:416)
在coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
在coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter。 java:381)
at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)
at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
在coldfusion.filter .PathFilter.invoke(PathFilter.java:94)
at coldfusion.filter.LicenseFilter.invoke(LicenseFilter.java:27)
at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70)
at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
在coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
在coldfusion.filter.NoCacheFilter.invoke NoCacheFilter.java:46)
at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
在coldfusion .filter.CachingFilter.invoke(CachingFilter.java:62)
at coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:126)
at coldfusion.CfmServlet.service(CfmServlet.java:200)
at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
在jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
在coldfusion.monitor.event.MonitoringServletFilter。 doFilter(MonitoringServletFilter.java:42)
at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
在jrun.servlet.FilterChain.service(FilterChain.java:101)
在jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
在jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java :42)
at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
在jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
在jrun.servlet。 jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
在jrunx.scheduler.ThreadPool $ ThreadThrottle.invokeRunnable(ThreadPool.java:428)
在jrunx.scheduler.WorkerThread.run(WorkerThread.java: 66)


解决方案

我相信这是一个字体问题,使用特定的服务器。这就是为什么相同的代码将在生产服务器而不是测试服务器上工作的原因。我遇到同样的问题,虽然我没有一个伟大的解决方案这里的我学到了。


  1. stacktrace显示有一个错误

  2. 我们的Windows服务器正在将一些 TrueType 字体列为 OpenType 字体。 strong> OpenType

     

    < cfpdf name =local.pdffileaction =readsource =some path>
    < cfscript>
    local.pdfReader = createObject(java,com.lowagie.text.pdf.PdfReader)。init(tobinary(local.pdffile));
    local.outputStream = createObject(java,java.io.ByteArrayOutputStream)。init();
    local.pdfStamper = createObject(java,com.lowagie.text.pdf.PdfStamper)。init(local.pdfReader,local.outputStream);
    local.Acroform = local.pdfStamper.getAcroFields();
    //填充表单字段
    local.Acroform.setField(Field1,Arguments.Value1);
    local.Acroform.setField(Field2,Arguments.Value2);
    //等
    local.pdfStamper.setFormFlattening(true); // optional
    local.pdfStamper.close();
    local.pdfReader.close();
    local.pdffile = local.outputStream.toByteArray();
    < / cfscript>
    <!--- flatten =no必须设置,否则将再次出现错误--->
    < cfpdf action =writesource =local.pdffiledestination =#variables.OutputPath ## local.UUID#.pdfoverwrite =yesflatten =no/&


  3. 更多诊断:只需列出所有可用的字体服务器使用Java子系统也会失败。尝试此操作。

     < cfset list = createobject(java,com.adobe.internal.pdfm.util.FontSetBuilder )> 
    < cfdump var =#list#>
    < cfset dummy = list.getPdfFontSet()>
    < cfdump var =#dummy.toString()#>
    <!--- this should fail --->


  4. 我们已经修复了我们的问题,从Windows删除所有的字体\Fonts文件夹,并隔离损坏的文件夹。


祝你好运!


I created a quick PDF file with two form fields, first name and last name (or FirstName and LastName), with a Submit button and used the following code to try to populate these fields in a new PDF file:

<cfpdfform action="populate" source="#variables.AbsPath#\test.pdf">
    <cfpdfformparam name="FirstName" value="foo" />
    <cfpdfformparam name="LastName" value="bar" />
</cfpdfform>

However, I receive this error:

The system has attempted to use an undefined value, which usually indicates a programming error, either in your code or some system code.
Null Pointers are another name for undefined values.
Platform, Locale, and Platform Name must not be null

I tried reading the PDF file to make sure the form fields were correct using this and they are:

<cfpdfform action="read" source="#variables.AbsPath#\test.pdf" result="fields" />

<cfdump var="#fields#">

The struct dumps out:

FirstName:  [empty string]
LastName:   [empty string]
Submit:     [empty string]

I tried searching the Adobe docs and around some other sites, but can't find a solution for this error. I also tried adding a "destination" parameter to the cfpdfform tag in case it was needed, but got the same result. The PDF file does exist. Any ideas? Thanks in advance.

UPDATED: Here is the stack trace:

java.lang.NullPointerException: Platform, Locale, and Platform Name must not be null
at com.adobe.fontengine.fontmanagement.platform.PlatformFontDescription.<init>(Unknown Source)
at com.adobe.fontengine.font.opentype.OpenTypeFont.getPlatformFontDescription(Unknown Source)
at com.adobe.fontengine.font.FontImpl.getPlatformFontDescription(Unknown Source)
at com.adobe.fontengine.font.FontImpl.getPlatformFontDescription(Unknown Source)
at com.adobe.fontengine.fontmanagement.platform.PlatformFontResolverImpl.addFont(Unknown Source)
at com.adobe.internal.pdftoolkit.core.fontset.impl.PDFFontSetImpl.addFont(Unknown Source)
at com.adobe.internal.pdfm.util.FontSetBuilder.loadFontsPath(FontSetBuilder.java:418)
at com.adobe.internal.pdfm.util.FontSetBuilder.loadSystemFonts(FontSetBuilder.java:346)
at com.adobe.internal.pdfm.util.FontSetBuilder.makePDFFontSet(FontSetBuilder.java:239)
at com.adobe.internal.pdfm.util.FontSetBuilder.getPdfFontSet(FontSetBuilder.java:93)
at com.adobe.internal.pdfm.PDFM7Factory.getPdfFontSet(PDFM7Factory.java:97)
at coldfusion.document.DocumentServiceImpl.getAssemblerFontSet(DocumentServiceImpl.java:512)
at coldfusion.pdf.PDFForm.populateFields(PDFForm.java:292)
at coldfusion.tagext.lang.PDFFormTag.doEndTag(PDFFormTag.java:347)
at cfsubmit2ecfm1224790315.runPage(C:\ColdFusion\wwwroot\nVision\projects\test\pdfform\submit.cfm:9)
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:231)
at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:416)
at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:381)
at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)
at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
at coldfusion.filter.PathFilter.invoke(PathFilter.java:94)
at coldfusion.filter.LicenseFilter.invoke(LicenseFilter.java:27)
at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70)
at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46)
at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)
at coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:126)
at coldfusion.CfmServlet.service(CfmServlet.java:200)
at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
at jrun.servlet.FilterChain.service(FilterChain.java:101)
at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

解决方案

I believe this is a font issue with the specific server being used. This is why the same code will work on the production server and not the testing server. I am experiencing the same issue and although I don't have a great solution here's what I learned.

  1. The stacktrace shows that there's an error getting the getPlatformFontDescription of an OpenType font.
  2. Our Windows server is listing some TrueType fonts as OpenType. Is yours?
  3. Using the following code corrected the issue, but it's a work around only.

    <cfpdf name="local.pdffile" action="read" source="some path" >
    <cfscript>
    local.pdfReader = createObject("java", "com.lowagie.text.pdf.PdfReader").init(tobinary(local.pdffile));
    local.outputStream = createObject("java", "java.io.ByteArrayOutputStream").init();
    local.pdfStamper = createObject("java", "com.lowagie.text.pdf.PdfStamper").init(local.pdfReader,local.outputStream);
    local.Acroform = local.pdfStamper.getAcroFields();
    //Populating Form Fields     
     local.Acroform.setField("Field1",Arguments.Value1);
     local.Acroform.setField("Field2",Arguments.Value2);
     // etc.
     local.pdfStamper.setFormFlattening(true); //optional
      local.pdfStamper.close();
      local.pdfReader.close();
      local.pdffile = local.outputStream.toByteArray();
     </cfscript>
     <!--- flatten="no" must be set or you will get the error again  --->
     <cfpdf action="write" source="local.pdffile" destination="#variables.OutputPath##local.UUID#.pdf" overwrite="yes" flatten="no"  />
    

  4. More Diagnostics: Simply listing all the fonts available to the server using the Java subsystem also fails. Try this.

     <cfset list=createobject("java","com.adobe.internal.pdfm.util.FontSetBuilder")>
     <cfdump var="#list#">
     <cfset dummy = list.getPdfFontSet()>
     <cfdump var="#dummy.toString()#">
     <!--- this should fail --->
    

  5. We have "fixed" our problem at the moment by removing all the fonts from the Windows\Fonts folder, and isolating the damaged ones. It's painstaking but seems to work.

Good luck!

这篇关于ColdFusion CFPDFFORM不填充PDF表单字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆