Ошибка заполнения CFPDFForm - java.lang.NullPointerException: платформа, языковой стандарт и имя платформы не должны быть нулевыми

Я бился головой о стену, пытаясь выяснить причину ошибки ниже.

введите описание изображения здесь

Все, что я делаю, это запускаю этот очень простой CFPDFFORM для заполнения PDF-формы.

<cfset source = expandPath("Customer.pdf")>
<cfpdfform action="populate" source="#source#">
    <cfpdfformparam name="Name" value="John Doe">
    <cfpdfformparam name="Address" value="123 Test Cir">
    <cfpdfformparam name="City" value="Some City">
    <cfpdfformparam name="State" value="Some State">
    <cfpdfformparam name="Zip" value="11111">
    <cfpdfformparam name="Phone" value="123-456-7890">
</cfpdfform>

Я сделал много поисков и нашел очень мало людей, говорящих об этой ошибке. Одна страница, которую я нашел, была ColdFusion CFPDFFORM, не заполняющая поля формы PDF. Я попробовал идею просмотреть свои шрифты и найти испорченные. Я даже использовал программу под названием Fix Fonts Folder ( http://fix-fonts-folder.en.softonic.com/), которая смогла найти некоторые поврежденные шрифты. Но даже тогда я все еще получаю ошибку. Итак, я отчаянно ищу ответ.

На всякий случай я использую ColdFusion 10 Update 9 в Windows 7.

Заранее спасибо.

4 ответа

Решение

Обход найденной ошибки решил проблему. Спасибо Мигель-F

Обходной путь: "удалите все шрифты, установленные с той же датой, что и установки приложения Creative Cloud 6, или удалите Creative 6"

Я написал скрипт, который будет анализировать все файлы шрифтов в c:\windows\fonts и сообщать о плохих:

<cfset fontobj = createobject("java","com.adobe.fontengine.fontmanagement.FontLoader")>
<cfdirectory action="list" directory="c:\windows\fonts" name="fontdir">
<table border="1" style="border-collapse:collapse">
  <tr>
    <th>Font Name:</th>
    <th>Error</th>
  </tr>
  <cfloop query="fontdir">
  <cftry>
    <cfset loaded = fontobj.load(createobject("java","java.net.URL").init("file:///C|/windows/fonts/#fontdir.name#"))>
    <cfif arraylen(loaded) gt 0>
      <cfset dummy="#loaded[1].getPlatformFontDescription()[1].toString()#" >
    </cfif>
    <cfcatch>
      <cfif findnocase("platform",cfcatch.message)>
        <tr>
          <td><cfoutput>#fontdir.name#</cfoutput></td>
          <td><cfoutput>#cfcatch.message#</cfoutput></td>
        </tr>
      </cfif>
    </cfcatch>
  </cftry>
  </cfloop>
</table>

У меня тоже была такая же проблема сразу после установки CS6.0.

Платформа:

  • CF9.0
  • Win 7
  • CS6 (очевидно)

Методом проб и ошибок, как указано выше, и несколькими перезапусками coldfusion я сократил его до следующих файлов шрифтов, которые можно удалить с помощью диспетчера шрифтов, перейдя в C: \ Windows \ Fonts: -

  • AdobeNaskh-Medium.otf
  • MyriadArabic-Bold.otf
  • MyriadArabic-BoldIt.otf
  • MyriadArabic-It.otf
  • MyriadArabic-Regular.otf

Надеюсь, это кому-нибудь поможет. Мне потребовалось немало часов, чтобы починить эту "ниглу".

У меня была такая же проблема.

Мое решение (которое дополняет приведенный выше правильный ответ): вот список шрифтов, которые Adobe устанавливает вместе с Creative Suite 6: http://www.adobe.com/type/browser/fontinstall/cs6installedfonts.html

  1. Скопируйте все эти шрифты в отдельную папку и удалите из каталога Windows/Fonts.
  2. Проверьте бит CFPDFFORM и убедитесь, что он работает
  3. Вручную добавьте их обратно.

В моем случае оказалось, что ни один из этих шрифтов не был поврежден сам по себе, хотя, вероятно, не был установлен так, как Windows. Переустановка вручную несколько исправила проблему.

Еще одно замечание: я удалил все, пока MyriadPro (включая его) постоянно обновлял страницу, содержащую бит CFPDFFORM, пока он не заработал. Таким образом, для тех, кто пытается получить быстрое решение, я бы рекомендовал начать с семейства MyriadPro. Просто может оказаться, что это тот, кто ломает вещи.

Надеюсь, это поможет кому-то!

/////////////// ОБНОВЛЕНО 07.02.2014 /////////////////////////////////////////////////////////////////////////

Оказывается, я не могу комментировать, пока не будет набрано определенное количество баллов, поэтому я не могу сказать, насколько сильно помог мне ответ Джесси Карлтона (выше).

Вот еще один шаг, который решил меня ошибку:

  1. Оказывается, что некоторые из установленных шрифтов Adobe имеют нулевые значения имен, что приводит к сбою в работе cfpdfform. Чтобы найти эти файлы, используйте скрипт, который создал Джесси Карлтон (опять же, он выше в одном из ответов)

  2. По крайней мере, в моем случае все эти шрифты имели одинаковые значения (обычные и _0). Нормальные значения были видны и легко удаляются с помощью диспетчера шрифтов Windows. Тем не менее, _0 из них не были видны.

  3. Загрузите программное обеспечение, такое как FontExpert2014 (или любой другой менеджер шрифтов в этом отношении) и найдите те файлы, которые вы не могли видеть в диспетчере шрифтов Windows.

  4. Чтобы проверить, все ли поврежденные шрифты удалены, снова запустите скрипт из шага 1. Когда вы получите пустую таблицу, попробуйте бит cfpdfform, который ранее вам не удавался, и все должно быть хорошо.

* программное обеспечение из шага 3 было загружено в качестве ознакомительной версии и помогло мне.

Другие вопросы по тегам