Տպելու ձևանմուշների նկարագրություն

Բովանդակություն

Ներածություն

Տպելու ձևանմուշը ֆայլ է՝ նախապես սահմանված ընդլայնմամբ, որը պարունակում է տեքստ։ Այն կարող է ներառել ինչպես հաստատուն (կոնստանտ) տեքստեր, այնպես էլ հաշվարկվող արժեքներ՝ պարամետրեր։

Պարամետրերը կարող են լինել տեքստային (ատոմիկներ), աղյուսակային կամ նկարային։ Սահմանվում են հատուկ սիմվոլներով (#, %, …), որին անմիջապես հաջորդում է պարամետրի կոդը՝ առանց բացատների, օրինակ՝ #2020, %GR.DATE, ~405։ Պարամետրերից հետո պարտադիր պետք է դրվի բացատ։

Օրինակ

alt text

Պարամետրերի արժեքների հաշվարկը կատարվում է տպելու ձևանմուշին կցված փաստաթղթի TemplateSubstitution մեթոդում կամ ձևանմուշի ընդլայնման Calculate մեթոդում։

Տպելու ձևանմուշների հասանելի ընդլայնումների ցանկին կարող եք ծանոթանալ այստեղ:

Ատոմիկներ

Տպելու ձևանմուշներում ատոմիկները նշվում են հատուկ սիմվոլներով՝ #, ^, $, որոնց անմիջապես հաջորդում է ատոմիկի կոդը (առանց բացատների), օրինակ՝ #TOTAL, ^201, $1008։

Ձևանմուշի լրացման ընթացքում բոլոր ատոմիկները փոխարինվում են համապատասխան հաշվարկված արժեքներով։

Ձևանմուշի ֆայլի տեսակից կախված՝ կիրառելի են հատուկ սիմվոլների կիրառման հետևյալ սահմանափակումները․

  • Word (*.doc, *.docx) – #, ^, $
  • Excel (*.xls, *.xlsx, *.xlsm) – #, ^
  • Text (*.txt) – միայն #
  • Html (*.html) - միայն #
  • Pdf

Pdf տեսակի ձևանմուշները ձևավորվում են Word, Excel, Html տեսակի տպելու ձևանմուշներից և կիրառվում են նույն սահմանափակումները, ինչ վերոնշյալ տեսակների համար։

Հատուկ սիմվոլների կիրառման առանձնահատկություններ և սահմանափակումներ՝

  • Word (*.doc, *.docx) տեսակի ձևանմուշների header, footer հատվածներում ^ և $ սիմվոլների կիրառումը չի սատարվում․ կիրառման դեպքում համապատասխան ատոմիկների կոդերը չեն փոխարինվում արժեքներով։
  • Word (*.doc, *.docx) տեսակի ձևանմուշների մարմնում (Body), եթե ատոմիկի համար կիառված են ^ և $ սիմվոլները և ատոմիկի արժեքը դատարկ է (string.Empty, null, բացատներ), ապա այն պարունակող պարագրաֆը ամբողջությամբ հեռացվում է։
  • Excel (*.xlsx, *.xlsm) տեսակի ձևանմուշների cell-ում, եթե ատոմիները ունեն տարբեր ֆորմատավորումներ (bold, italic, …) և կիրառված է ^ սիմվոլը, ապա դատարկ արժեք (string.Empty) ունեցող ատոմիկները չեն փոխարինվում արժեքներով։ Սակայն նույն ֆորմատավորմամբ ատոմիկների կամ ֆորմատավորման բացակայության դեպքում դատարկ արժեքը փոխարինվում է մեկ բացատով (“ “):

Նկարներ

Տպելու ձևանմուշում նկարները նշվում են # հատուկ սիմվոլով, որին հաջորդում է նկարի անունը (առանց բացատների)։ Օրինակ՝ #ClientImage։

Եթե Word (*.doc, *.docx) տեսակի ձևանմուշում նշված անունով նկարի ֆայլը բացակայում է, ապա համակարգը հեռացնում է համապատասխան placeholder-ը (օրինակ՝ #ClientImage)։ Excel (*.xlsx, *.xlsm) տեսակի ձևանմուշներում նշված դեպքում առաջանում է սխալ։

Աղյուսակներ

Տպելու ձևանմուշներում աղյուսակային տվյալները նշվում են հետևյալ ձևով՝ %table_name.column_name: Աղյուսակային արժեքի գրառումը սկսվում է % սիմվոլով, որին հաջորդում է աղյուսակի անունը և սյան անունը՝ կետով բաժանված։ Օրինակ՝ %T1.C1, %ACC.CODE։

Html տեսակի տպելու ձևանմուշներ

HTML տեսակի տպելու ձևանմուշները կարող են պարունակել ատոմիկներ, աղյուսակներ, նկարներ, ինչպես նաև ցանկացած այլ HTML, XML էլեմենտներ (CSS style, JavaScript սկրիպտային ֆունկցիաներ, ․․․):

HTML տպելու ձևանմուշները ատոմար արժեք ավելացնելու համար անհրաժեշտ է սահմանել կամայական Html էլեմենտ (օրինակ spanid կամ data-value ատրիբուտում նշելով ատոմիկի կոդը։ էլեմենտը կարող է նաև պարունակել այլ ատրիբուտներ (օրինակ style), սակայն չպետք է պարունակի ներդրված էլեմենտներ (child elements):

<span id="#ACC">any text</span>    

կամ

<span data-value="#ACC">any text</span>    

Աղյուսակներ սահմանելու համար օգտագործվում է table էլեմենտը, որի id կամ data-value ատրիբուտի արժեքը հանդիսանում է աղյուսակի կոդը։ Աղյուսակի սյունակները սահմանվում են thead էլեմենտում՝ առաջին tr տողի th էլեմենտների միջոցով։ Այդ նկարագրության հիման վրա tbody ենթաէլեմենտում ավտոմատ ավելացվում են աղյուսակի տողերը՝ պահպանելով սյունակների սահմանված հերթականությունը։

<table id="%G1" border="1" style="background-color:Red">
    <thead>
        <tr>
            <th id="%G1.1"></th>
            <th id="%G1.2"></th>
        </tr>
        <tr>
            <td>Անուն</td>
            <td>Նկարագրություն</td>
        </tr>
    </thead>
</table>

Պատկերները նկարագրելու համար օգտագործվում է img էլեմենտը, որի data-image կամ id ատրիբուտում նշվում է պատկերի կոդը։ Պատկերի իրական հասցեն կամ անվանումը տեղադրվում է src ատրիբուտում։

img_tag

Տպելու ձևանմուշների վալիդացիա

Վալիդացիան հնարավորություն է տալիս ստուգել ձևանմուշի լրացման արդյունքում չփոխարինված ատոմիկների, աղյուսակային արժեքների առկայությունը։

Այն կարելի է միացնել`

  • «Դրույթներ» (Ctrl+o) -> «Ծրագրավորողի գործիքներ» -> «Տպվող տեսքերի ստուգում» նշիչի միջոցով (այն ազդում է միայն UI-ց տպելու ձևանմուշի կանչի դեպքում)։ Նշիչի լռությամբ արժեքը false է։
  • TemplateSubstitutionService, TemplateSubstitutionController-ի մեթոդների bool check պարամետրի արժեքավորման միջոցով։

template_validate

check_parameter

Վալիդացիայի միացված լինելու դեպքում՝

  • Text (.txt) և Doc (.doc, .docx) տեսակի տպելու ձևանմուշներում, եթե լրացման արդյունքում մնում են չփոխարինված ատոմիկներ (Text դեպքում՝ ցանկացած տեսակի, օրինակ՝ #21, #CurrentDate, Doc դեպքում՝ ^ և $ տեսակների, օրինակ՝ ^105, $Code), ապա առաջանում է սխալ։
  • Doc (.doc, .docx) և Excel (.xlsx, .xlsm) տեսակի տպելու ձևանմուշներում, եթե լրացման արդյունքում մնում են չփոխարինված ատոմիկներ (Doc դեպքում՝ # տեսակի, օրինակ՝#Acc, Excel դեպքում՝ ցանկացած տեսակի, օրինակ` #Acc, ^16), ապա ստուգվում է տվյալ ատոմիկի առկայությունը նկարների բազմությունում (TemplateSubstitution.imagesubstitutions)։ Նշված բազմությունում բացակայության դեպքում առաջանում է սխալ։
  • Doc (.doc, .docx) տեսակի տպելու ձևանմուշներում, եթե լրացման արդյունքում մնում են չփոխարինված աղյուսակային արժեքներ (օրինակ՝ %T1.C1), ապա առաջանում է սխալ։

Տպելու ձևանմուշի հաշվարկման և լրացման օրինակ

var printTemplateSubstitution = new PrintTemplateSubstitution();
printTemplateSubstitution.AtomicSubstitutions.Add("C01", "Թեստային կազմակերպություն");
printTemplateSubstitution.AtomicSubstitutions.Add("1", 1);

PrintTemplateSubstitutionGrid gridSubstitutions1 = printTemplateSubstitution.GridSubstitutions.Add("Prices");

gridSubstitutions1.AddColumn("Code", "Product's code");
gridSubstitutions1.AddColumn("Price", "Product's price");

for (int i = 0; i < 2; i++)
{
    gridSubstitutions1.AddRow();
    int id = i + 1;
    int price = id * 100;

    gridSubstitutions1.SetValue(i, "Code", id);
    gridSubstitutions1.SetValue(i, "Price", price);
}

template_input_example

template_output_example