2013-05-30 2 views
1

Я вытягиваю свои волосы из-за этого! Я использую ColdFusion для генерации файлов .rtf, как показано ниже, для печати ярлыков Avery. По какой-то причине перед каждым именем в первом столбце появляется пробел, но только после первой строки. Это меня настораживает, потому что я посмотрел на источник, сгенерированный, и не вижу лишнего символа перед именем, хотя, когда я открываю .rtf в текстовом редакторе, я могу удалить его вручную, чтобы исправить это. Может ли кто-нибудь сказать мне, почему это дополнительное пространство? Вы можете скачать сам файл .rtf по следующему адресу:Нежелательные пробелы в файле .rtf, сгенерированном ColdFusion

http://www.bitmojo.com/Avery-Label-Test.rtf

Ну, я предполагаю, что я не могу добавлять изображения ... не стесняйтесь попросить ссылку, если вам нужно уточнение.

Добавление этого здесь, так как это было слишком долго комментарий:

Я использую CF_AVERYRTF.CFM пользовательский тег из более чем десяти лет назад ... не был обновлен, так как, насколько мне известно. Я отредактирую свой вопрос, чтобы добавить код, который действительно генерирует и сохраняет RTF. Он использует cfsavecontent, cfscript и writeoutput для создания переменной, которая сохраняется на диске в качестве файла .rtf, и когда я cfdump эту переменную до того, как .rtf будет записана на диск, я не вижу никаких дополнительных символов перед именами, но когда Я открываю источник .rtf-файла в редакторе кода. Я вижу пробел перед каждым именем, а когда я открываю .rtf в текстовом редакторе на моем mac, я вижу только пробелы перед именами в первом столбце после первой строки. . Это то, что сводит меня с ума, видя разные вещи в зависимости от того, где и как я смотрю на данные ... вот почему я разместил файл примера, чтобы кто-то мог взглянуть и хотя бы проверить, что я вижу. Вот образ симптом, как он появляется на моем Mac (пробелы облет)

screen shot http://www.bitmojo.com/Avery-Label-Screen-Shot.png

Также здесь код, который генерирует данные:

<cfsavecontent variable="ThisTag.GeneratedRTF"> 
<cfscript> 
// open RTF document with header information 
writeOutput("{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\fswiss Arial;}{\f1\fswiss Helvetica;}{\f2\fswiss Impact;}{\f3\froman Times New Roman;}}"); 
writeOutput("{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red255\green255\blue255;}"); 
writeOutput("{\info{\title VFIVE Label Generator (#request.rtfLabels.labeltitle# Output)}{\author cf_averyRTF $Revision: 1.17 $}{\operator cf_averyRTF resides at http://rtf.vfive.com}{\*\company VFIVE (http://www.vfive.com)}{\creatim\yr#Year(now())#\mo#Month(now())#\dy#Day(now())#\hr#Hour(now())#\min#Minute(now())#}{\version1}{\edmins0}{\nofpages1}{\nofwords0}{\nofchars0}{\nofcharsws0}{\vern1000}}\paperw#request.rtfLabels.paperw#\paperh#request.rtfLabels.paperh#\margl#request.rtfLabels.margl#\margr#request.rtfLabels.margr#\margt#request.rtfLabels.margt#\margb#request.rtfLabels.margb#"); 
if (Attributes.landscape) 
{ 
    writeOutput("\landscape"); 
} 
writeOutput("\gutter#request.rtfLabels.gutter# \widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\horzdoc \jexpand\viewkind1\viewscale#request.rtfLabels.viewscale#\nolnhtadjtbl \fet0\sectd \linex#request.rtfLabels.linex#\sectdefaultcl"); 

// loop over each row in the dataset 
for (ii = 1; ii LTE arrayLen(thisTag.assocAttribs); ii = ii + 1) 
{ 

    // if this is the first cell of a row, create the row (like <tr>) 
    if (NOT ((ii + request.rtfLabels.columns - 1) MOD request.rtfLabels.columns)) 
    { 
     // output the <tr>-like row start, cellBoundary 
     writeOutput("\trowd \trrh#request.rtfLabels.trrhcell#\trkeep" & cellBoundary); 

     // output row setup (align, indent, etc) 
     writeOutput(" \pard\plain \q#request.rtfLabels.textalign# \li#request.rtfLabels.li#\ri#request.rtfLabels.ri#\widctlpar\intbl\faauto \f#request.rtfLabels.defaultfontface#\fs20\lang1033\langfe1033"); 
    } 

    // output each individual cell header (like <td>) 
    writeOutput("{\#request.rtfLabels.bold#\fs#request.rtfLabels.defaultfontsize#\f#request.rtfLabels.defaultfontface# "); 

    // output barcode on top if appropriate 
    if (len(trim(thisTag.assocAttribs[ii].zipCode)) AND thisTag.assocAttribs[ii].barPos EQ "top") 
    { 
     writeOutput("{\field\flddirty{\*\fldinst { BARCODE }{\lang1024\langfe1024\noproof #ThisTag.AssocAttribs[ii].zipcode#}{\\u }}{\fldrslt }}\par"); 
    } 


    // loop over the lines of content in this cell 
    for (jj = 1; jj LTE arrayLen(ThisTag.AssocAttribs[ii].arrCell); jj = jj + 1) 
    { 

     // content to be displayed? 
     if (len(trim(thisTag.assocAttribs[ii].arrCell[jj].content)) OR NOT thisTag.assocAttribs[ii].stripBlankLines) 
     { 
      // are we bolding this line of content? 
      if (thisTag.assocAttribs[ii].arrCell[jj].bold) 
      { 
       writeOutput("\b"); 
      } 
      else 
      { 
       writeOutput("\b0"); 
      } 

      writeOutput("\fs#ThisTag.AssocAttribs[ii].arrCell[jj].fs#\f#ThisTag.AssocAttribs[ii].arrCell[jj].f##ThisTag.AssocAttribs[ii].arrCell[jj].content#"); 

      if (jj LT arrayLen(ThisTag.AssocAttribs[ii].arrCell)) 
      { 
       writeOutput("\par"); 
      } 
     } 
    } 

    // close out cell (like a </td>) 
    writeOutput("}{\fs#request.rtfLabels.defaultfontsize#\f#request.rtfLabels.defaultfontface# "); 

    // output barcode on bottom if appropriate 
    if (len(trim(thisTag.assocAttribs[ii].zipCode)) AND thisTag.assocAttribs[ii].barPos EQ "bottom") 
    { 
     writeOutput(" {\field\flddirty{\*\fldinst { BARCODE }{\lang1024\langfe1024\noproof #ThisTag.AssocAttribs[ii].zipcode#}{\\u }}{\fldrslt }}"); 
    } 

    // prepare to close this cell </td> 
    writeOutput("\cell } "); 

    // close this cell out like a </td> 
    if (ii MOD request.rtfLabels.columns) 
    { 
     writeOutput(" \pard \q#request.rtfLabels.textalign# \li#request.rtfLabels.li#\ri#request.rtfLabels.ri#\widctlpar\intbl\faauto {\cell }"); 
    } 
    else 
    { 
     writeOutput("\pard\plain \q#request.rtfLabels.textalign# \li#request.rtfLabels.li#\ri#request.rtfLabels.ri#\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright \fs#request.rtfLabels.defaultfontsize#\f#request.rtfLabels.defaultfontface#\lang1033\langfe1033"); 
    } 

    // if this is the last cell of a row, end it (like a </tr>) ---> 
    if (NOT (ii MOD request.rtfLabels.columns)) 
    { 
     // start close: output code + cellCloser + " \row }" 
     writeOutput("\pard\plain \q#request.rtfLabels.textalign# \li#request.rtfLabels.li#\ri#request.rtfLabels.ri#\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright \fs#request.rtfLabels.defaultfontsize#\f#request.rtfLabels.defaultfontface#\lang1033\langfe1033 {\trowd \trrh#request.rtfLabels.trrhcell#\trkeep " & cellCloser & " \row }#chr(13)##chr(10)#"); 

     // add an extra spacer row? 
     if (request.rtfLabels.useSpacer) 
     { 

      // output complete spacerRow as defined above   
      writeOutput(spacerRow); 

     } 
    }  

// end of outer for loop 
} 

// close out document 
writeOutput("\pard \q#request.rtfLabels.textalign# \li#request.rtfLabels.li#\ri#request.rtfLabels.ri#\widctlpar\aspalpha\aspnum\faauto\adjustright { \par }{ \par }}"); 
</cfscript> 
</cfsavecontent> 
+4

Можете ли вы показать нам код ColdFusion, который генерирует файл? Вы подавляете пробелы с чем-то вроде '' или ''? [Параметры пробела ColdFusion] (http: // www.raymondcamden.com/index.cfm/2006/7/26/ColdFusion-Whitespace-Options) –

+0

См. дополнительную информацию и код. Этот тег использует и , хотя я не уверен, как это повлияет на то, как данные генерируются выше. –

+0

Когда я просматриваю связанный файл .rtf в своем текстовом редакторе, я вижу одно место после каждой ссылки на '\ f0' в документе. Похоже, что этот код выводится этой переменной 'ThisTag.AssocAttribs [ii] .arrCell [jj] .f' перед вашим контентом. Проверьте эту переменную для конечного пространства. (Вы можете окружить его функцией 'Trim()'). –

ответ

0

Это разрешилось теперь, когда я обновился до ColdFusion 2016, поэтому я собираюсь записать его как ошибку в ColdFusion, которая была решена Adobe.

1

Мы не можем много говорить об этом без посмотрев код. Добавленный к тому, что сказал @ Miguel-F, если вы используете какие-либо свои собственные функции в этом процессе, получили ли они output="false"?

У CF есть неприятная привычка к прохождению простуды (например, от отступа вашего исходного кода), если вы специально не контролируете его. Это не вызывает проблемы (кроме вздутия) для отображаемого HTML, поскольку спецификация HTML говорит, что ее следует игнорировать, поэтому браузер делает это. Это не относится к другим форматам файлов.

Это почти наверняка будет проходить мимо белого пространства вашего кода.

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

UPDATE Если вы используете пользовательский тег, убедитесь, что у вас есть <cfsilent> теги вокруг вызова к нему и вокруг всего внутри него, которое испускает что-либо. Пользовательские теги: ужасно для испускания ложных пробелов.

+0

Добавил примечание к моему вопросу вместе с кодом ... странно, что когда я делаю cfdump перед записью на диск, я не вижу лишних пробелов , но, возможно, он не отображается на веб-странице cfdump. Когда я открываю .rtf в Coda, я вижу пробелы, но он всегда присутствует в начале каждой строки во всех ярлыках. Все еще не уверен, почему он будет отображаться только в определенных местах при просмотре файла .rtf в программе, которая показывает его форматирование по назначению. –

+0

Ну, как я уже сказал ... веб-браузеры не испускают ложных пробелов. Не имеет значения, что вы используете CFDUMP на стороне CF вещей ... все, что просматривает браузер, это разметка и ложные пробелы, которые она игнорирует. –

Смежные вопросы