3

[送信] ボタンを使用して、名と姓 (または FirstName と LastName) の 2 つのフォーム フィールドを含む簡単な PDF ファイルを作成し、次のコードを使用してこれらのフィールドを新しい PDF ファイルに入力しようとしました。

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

ただし、次のエラーが表示されます。

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

これを使用してフォームフィールドが正しいことを確認するためにPDFファイルを読んでみましたが、次のとおりです。

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

<cfdump var="#fields#">

構造体は次のようにダンプします。

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

Adobe ドキュメントや他のサイトを検索してみましたが、このエラーの解決策が見つかりません。また、必要に応じて「destination」パラメーターを cfpdfform タグに追加しようとしましたが、同じ結果が得られました。PDFファイルは存在します。何か案は?前もって感謝します。

更新: スタック トレースは次のとおりです。

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)
4

4 に答える 4

6

これは、使用されている特定のサーバーのフォントの問題だと思います。これが、テスト サーバーではなく実稼働サーバーで同じコードが機能する理由です。私は同じ問題を経験しており、優れた解決策はありませんが、私が学んだことは次のとおりです。

  1. スタック トレースは、OpenTypeフォントのgetPlatformFontDescriptionを取得中にエラーが発生したことを示しています。
  2. 私たちの Windows サーバーは、一部のTrueTypeフォントをOpenTypeとしてリストしています。あなたのです?
  3. 次のコードを使用すると問題が修正されますが、これは回避策に過ぎません。

    <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. その他の診断: 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 --->
    
  5. Windows\Fonts フォルダーからすべてのフォントを削除し、破損したフォントを分離することで、現時点で問題を "修正" しました。骨の折れる作業ですが、うまくいくようです。

幸運を!

于 2012-11-15T21:07:03.057 に答える
2

PDFファイルの作成方法については言及していません。PDF ファイルの作成方法によっては、フォーム フィールドがサブフォーム内に含まれる場合があります。LiveCycle 内のテンプレートから生成された PDF はこれを行います。デフォルトでは、LiveCycle はサブフォームに「form1」という名前を付けます。これらのフォーム フィールドに入力するには、cfpdfsubform タグを含める必要があります。こちらのドキュメントを参照してください: cfpdfsubform ドキュメント

したがって、コードは次のようになります。

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

PDF ファイルを読み取るために含めたコードは、フィールドがサブフォームに含まれているかどうかを示します。ダンプには、別の構造に含まれるフォーム フィールドが表示されます。これは、cfpdfsubform タグの name 属性で使用する名前になります。

HTH。

于 2012-09-04T19:36:01.203 に答える
1

あなたの質問を読み直した後、私は間違った道を進んでいたことに気づきました。PDFのフィールドへの入力に問題があると思っていました。しかし、あなたの本当の問題はヌルポインタです。どっ!混乱して申し訳ありません。

通常、そのエラーは、使用している変数が定義されていないことを示しています。あなたの例に表示される唯一の変数は #variables.AbsPath# です。変数のスコープを指定しています。あれは正しいですか?変数スコープは、それが作成されたページ (および含まれるページ) でのみ使用できます。

その変数を定義する方法を含めませんでした。それを共有できますか?

エラーはランダムに発生していますか、それとも常に発生していますか?

エラーがその cfpdfform 行で発生していて、他の場所で発生していませんか? コードの周りに cftry/cfcatch ブロックを配置し、cfcatch 構造をダンプして、より具体的なエラーを取得します。それを試してから投稿していただけますか?

于 2012-09-05T14:45:38.160 に答える