1

この上から髪を引っ張ってる!Avery 宛名ラベルを印刷するために、ColdFusion を使用して以下のような .rtf ファイルを生成しています。何らかの理由で、最初の列の各名前の前にスペースが表示されますが、最初の行の後にのみ表示されます。テキスト エディターで .rtf を開くと手動で文字を削除して修正できるにもかかわらず、生成されているソースを見て、名前の前に余分な文字が表示されないため、これは困惑しています。その余分なスペースがある理由を誰か教えてもらえますか? 実際の .rtf ファイルは次の URL からダウンロードできます。

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

画像を投稿できないと思います...説明が必要な場合は、お気軽にリンクをリクエストしてください。

コメントするには長すぎるため、これをここに追加します。

私は 10 年以上前の CF_AVERYRTF.CFM カスタム タグを使用しています...私の知る限り、それ以来更新されていません。質問を編集して、RTF を実際に生成して保存するコードを追加します。cfsavecontent、cfscript、および writeoutput を使用して、.rtf ファイルとしてディスクに保存される変数を作成します。.rtf ファイルがディスクに書き込まれる前にその変数を cfdump すると、名前の前に余分な文字は表示されませんが、コード エディターで .rtf ファイル ソースを開くと、各名前の前にスペースが表示されます。Mac のテキスト エディターで .rtf を開くと、最初の行の後の最初の列の名前の前にスペースしか表示されません。 .それが私を夢中にさせている理由であり、データをどこでどのように見ているかに応じて異なるものを見ています...それがサンプルファイルを投稿した理由です. 誰かが見て、少なくとも私が見ているものを確認できるようにします。これは、私の Mac に表示される症状の画像です (スペースを丸で囲みます)。

スクリーンショット 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

2 に答える 2

1

これについては、コードを見ずして語ることはできません。@ Miguel-F が言ったことに加えて、このプロセスで独自の関数を使用している場合、それらはoutput="false"指定されていますか?

CF には、特に制御しない限り、(ソース コードのインデントなどから) 空白を出血させるという厄介な癖があります。これはレンダリングされた HTML に問題 (肥大化以外) を引き起こしません。HTML の仕様では無視すべきであると述べられているため、ブラウザーはそうします。これは、他のファイル形式には当てはまりません。

ほとんどの場合、コードの空白がにじみ出ます。

これに対処するかなり簡単な方法の 1 つは、可能な限りタグではなく CFScript を使用することです (当然のことながら、これは妥当なアドバイスですが、とにかくコードを明確かつ簡潔にしてください)。

UPDATEカスタムタグを使用している場合は<cfsilent>、その呼び出しの周りにタグがあり、その中の何かを発行するすべてのタグがあることを確認してください。カスタムタグは、偽の空白を出すのがひどいです。

于 2013-05-31T06:01:54.277 に答える
0

これは、ColdFusion 2016 にアップグレードしたことで解決したので、Adobe によって解決された ColdFusion のバグとして書き留めておきます。

于 2017-03-15T02:18:56.863 に答える