Witam,
Problem z drukowaniem jest taki, że mogę wydrukować tylko etykiety 3x5cm.
Mogę wydrukować A4 na zwykłej laserówce ale będzie to już inna drukarka co ma wpływ na rozwiązanie problemu.
Stworzyłem dokument word gdzie zapisałem kod forum.mojasymfonia.pl (bez spacji na końcu) w postaci kodu za pomocą czcionki EFN KK 128.
Potem to samo zrobiłem z {forum.mojasymfonia.pli~
Wynik:
Wygenerowałem kod przez raport i wydrukowałem jako PDF:
Poniżej w normalnym rozmiarze.
Jak widać pierwsze dwie kreski gruba i cienka prawie zlewają się i możliwe, że podobny efekt powstaje na wydruku na etykiecie. Tyle że kod wydrukowany przez drukarkę jest czysty i klarowny nie dający możliwości podejrzeń, że gdzieś zlewają się kreski (moja teoria)
Tutaj to samo tylko powiększony
Tu jak widać kod jest czysty i wyraźny bez zlewających się kresek.
Tekst zakodowany przez ZebraDesigner:
Wydruk tego kodu przez program ZebraDesigner na drukarce jest identyczny jak w projekcie, ten sam jak PDF.
Czemu WORD generuje inny kod?
Na deser kod wygenerowany przez raport i wydrukowany na drukarce:
Jak widać kod różni się od tych powyższych. Ten kod został zakodowany poprzez raport z użyciem czcionki EFN KK 128.
Kod wygląda bardzo podobnie z tym, że brakuje części wąskich kresek.
Czytnik nie czyta ostatniego kodu ale nie ma problemów z rozpoznaniem kodu z ZebraDesigner.
Tak samo kod generowany przez raport ALE wysłany do PDF i wydrukowany na zwykłej laserówce jest czytelny przez czytnik.
Czytnik nie czyta jedynie kod wygenerowanego przez raport i wydrukowanego przez drukarkę etykiet Zebra.
Poniżej zamieszczam pełen raport.
//1,"etykiety.sc","Etykiety środków trwałych - graficzny","Środki trwałe",0,3.0.4,SYSTEM,11
// Symfonia Środki Trwałe
// Etykiety środków trwałych
// (C) 2001 MATRIX.PL
#define COLS_DEF 3
#define ROWS_DEF 10
#define DOD_YMIN 165
#define DOD_XMIN 265
#define EN_KILLFOCUS 0x200
#define KK_DEF_FONT_SIZE 25.0 //było 52
#define SZER_DO_WYS 12.5
#define SZER_DO_ROZMIAR 0.083
#define MAX_SZER_KODU_DO_SZER_ET 0.99 //było 0.9
#define MAX_WYS_KODU_DO_WYS_ET 0.80 //bylo 0.18
#define TEST 3
#define OK 2
#define C128_START 104
#define C128_ASCII_START 204 //135
#define C128_ASCII_STOP 206 //137
long idgrupy = val(Arg0)
int typ = val(Arg1)
int iOrientacja = 0, iNieCalaStrona = 0, iRamki = 1, iKodKreskowy = 1, iZCzesciami = 1, iSTZCzesciami = 0, iZNazwaFirmy = 0
string strMLewy, strMPrawy, strMDolny, strMGorny, strRamki, strKodKreskowy, strSTZCzesciami, strZCzesciami, strZNazwaFirmy
string strCols, strRows
iOrientacja = VAL(GetIni("Etykiety środków trwałych", "Orientacja"))
strCols = GetIni("Etykiety środków trwałych", "Kolumny")
strRows = GetIni("Etykiety środków trwałych", "Wiersze")
strMLewy = GetIni("Etykiety środków trwałych", "Lewy")
strMPrawy = GetIni("Etykiety środków trwałych", "Prawy")
strMGorny = GetIni("Etykiety środków trwałych", "Gorny")
strMDolny = GetIni("Etykiety środków trwałych", "Dolny")
strRamki = GetIni("Etykiety środków trwałych", "Ramki")
strKodKreskowy = GetIni("Etykiety środków trwałych", "KodKreskowy")
strZCzesciami = GetIni("Etykiety środków trwałych", "ZCzesciami")
strSTZCzesciami = GetIni("Etykiety środków trwałych", "STZCzesciami")
strZNazwaFirmy = GetIni("Etykiety środków trwałych", "ZNazwaFirmy")
if strRamki != "" then iRamki = val(strRamki)
if strKodKreskowy != "" then iKodKreskowy = val(strKodKreskowy)
if strZCzesciami != "" then iZCzesciami = val(strZCzesciami)
if iZCzesciami then
if strSTZCzesciami != "" then iSTZCzesciami = val(strSTZCzesciami)
endif
if strZNazwaFirmy != "" then iZNazwaFirmy = val(strZNazwaFirmy)
if strCols == "" then strCols = using "%d", COLS_DEF
if strRows == "" then strRows = using "%d", ROWS_DEF
if strMLewy == "" then strMLewy = "0"
if strMPrawy == "" then strMPrawy = "0"
if strMGorny == "" then strMGorny = "0"
if strMDolny == "" then strMDolny = "0"
int idRadio1, idRadio2, idBut1, idCols, idRows, idFill, idClear, idChk1, idChk2
int idLewy, idPrawy, idGorny, idDolny
int idEtykiety(1)
int Etykiety(1)
int l, iNiePropaguj = 0
int iLiczbaEtykiet = val(strCols) * val(strRows)
if iLiczbaEtykiet > 0 then
grow idEtykiety, iLiczbaEtykiet - 1
grow Etykiety, iLiczbaEtykiet - 1
endif
for l = 1 to l > iLiczbaEtykiet
Etykiety(l) = 1
next l
//--------------------------------------------
int sub OnCommand_1(int id, int msg)
//--------------------------------------------
int i
select case id
case idFill
for i = 1 to i > (val(strCols) * val(strRows))
SetVal(idEtykiety(i), 1)
next i
case idClear
for i = 1 to i > (val(strCols) * val(strRows))
SetVal(idEtykiety(i), 0)
next i
endselect
Save
endsub
//--------------------------------------------
int sub OknoDodatkowe(int iDrukujWszystkie, int iNumerStrony)
//--------------------------------------------
int i, j, n, iCols, iRows, iRetVal, size_x, size_y
iRows = val(strRows)
iCols = val(strCols)
size_x = iCols * 15 + 185
size_y = iRows * 15 + 80
if size_x < DOD_XMIN then size_x = DOD_XMIN
if size_y < DOD_YMIN then size_y = DOD_YMIN
Form (using "Wybierz etykiety... (strona %d)", iNumerStrony), size_x, size_y + 40
Group (using " Strona %d ", iNumerStrony), 10, 5, iCols * 15 + 55, iRows * 15 + 45
Button "&OK", size_x - 100, 15, 80, 24, 2
idFill = Button "&Wypełnij", size_x - 100, 75, 80, 24, 1
idClear = Button "&Zeruj", size_x - 100, 105, 80, 24, 1
for j = 1 to j > iCols
Text (using "%d", j), j * 15 + 30, 20, 15, 15
next j
n = 1
for i = 1 to i > iRows
for j = 1 to j > iCols
if iDrukujWszystkie then
Etykiety(n) = 1
endif
idEtykiety(n) = ChkBox "", Etykiety(n), j * 15 + 30, 15 * i + 20, 15, 15
n += 1
next j
Text (using "%d", i), 25, 15 * i + 20, 15, 15
next i
ChkBox " Pokaż ten dialog przy drukowaniu nast. strony", iNiePropaguj, 10, size_y - 20, 240, 24
iRetVal = ExecForm OnCommand_1
endsub
//--------------------------------------------
int sub OnCommand(int id, int msg)
//--------------------------------------------
int i, marg
select case id
case 0
if msg == 0 then
Load
Enable(idBut1, 0)
if iZCzesciami == 0 then
iSTZCzesciami = 0
Enable(idChk2, 0)
endif
endif
case idBut1
Save
OknoDodatkowe(1, 1)
case idRows
if msg == EN_KILLFOCUS then
if val(GetVal(idRows)) > 0 then
iLiczbaEtykiet = val(GetVal(idCols)) * val(GetVal(idRows))
if iLiczbaEtykiet > 0 then
shrink idEtykiety, -1
shrink Etykiety, -1
grow idEtykiety, iLiczbaEtykiet - 1
grow Etykiety, iLiczbaEtykiet - 1
endif
for i = 1 to i > iLiczbaEtykiet
Etykiety(i) = 1
next i
Save
else
message "Liczba wierszy musi być większa od zera!"
SetVal(idRows, using "%d", ROWS_DEF)
endif
endif
case idCols
if msg == EN_KILLFOCUS then
if val(GetVal(idCols)) > 0 then
iLiczbaEtykiet = val(GetVal(idCols)) * val(GetVal(idRows))
if iLiczbaEtykiet > 0 then
shrink idEtykiety, -1
shrink Etykiety, -1
grow idEtykiety, iLiczbaEtykiet - 1
grow Etykiety, iLiczbaEtykiet - 1
endif
for i = 1 to i > iLiczbaEtykiet
Etykiety(i) = 1
next i
Save
else
message "Liczba kolumn musi być większa od zera!"
SetVal(idCols, using "%d", COLS_DEF)
endif
endif
case idRadio1
Enable(idBut1, 0)
case idRadio2
Enable(idBut1, 1)
case idLewy, idPrawy, idDolny, idGorny
if msg == EN_KILLFOCUS then
marg = val(GetVal(id))
SetVal(id, (using "%d", marg))
endif
case idChk1
if iZCzesciami then
iZCzesciami = 0
iSTZCzesciami = 0
Enable(idChk2, 0)
else
iZCzesciami = 1
Enable(idChk2, 1)
endif
endselect
endsub
//--------------------------------------------
int sub opis(int a)
//--------------------------------------------
endsub
//--------------------------------------------
int sub SumaKontrolna(string tekst)
//--------------------------------------------
int i, kod, suma
for i = 1 to i > len(tekst)
kod = tekst(i)
suma += (kod - 32) * i
next i
suma += C128_START
SumaKontrolna = suma % 103
if SumaKontrolna > 94 then
SumaKontrolna += 100
else
SumaKontrolna += 32
endif
endsub
//********************************************
FORM " Etykiety środków trwałych", 360, 435
//********************************************
Group " Orientacja strony ", 25, 10, 220, 50
RadioBtn " Pio&nowa", iOrientacja, 55, 30, 75, 20
RadioBtn " Po&zioma", iOrientacja, 155, 30, 75, 20
idCols = Edit "Liczba &kolumn:", strCols, 120, 75, 20, 18
idRows = Edit "Liczba wie&rszy:", strRows, 120, 95, 20, 18
Group " Drukuj etykiety ", 25, 125, 220, 70
idRadio1 = RadioBtn " Wszy&stkie na stronie", iNieCalaStrona, 40, 145, 120, 17
idRadio2 = RadioBtn " Wy&brane", iNieCalaStrona, 40, 170, 75, 17
idBut1 = Button "&Wybierz..." , 168, 165, 70, 24, 1
Group " Marginesy (x 0.1 mm) ", 25, 200, 220, 70
idLewy = Edit "&Lewy:", strMLewy, 95, 220, 30, 18
idGorny = Edit "&Górny:", strMGorny, 185, 220, 30, 18
idPrawy = Edit "&Prawy:", strMPrawy, 95, 240, 30, 18
idDolny = Edit "&Dolny:", strMDolny, 185, 240, 30, 18
ChkBox " Drukuj obramowania wokół &etykiet", iRamki, 25, 280, 200, 24
ChkBox " Drukuj nr ewidencyjny w postaci kodu kre&skowego", iKodKreskowy, 25,300, 270, 24
idChk1 = ChkBox " Drukuj etykiety dla &części składowych", iZCzesciami, 25, 320, 270, 24
idChk2 = ChkBox " Drukuj również etykietę dla samego środka", iSTZCzesciami, 40, 340, 270, 24
ChkBox " Drukuj nazwę skróconą firmy", iZNazwaFirmy, 25, 360, 270, 24
Button "&OK", 260, 15, 80, 24, 2
Button "&Anuluj" , 260, 45, 80, 24, -1
Button "&Test" , 260, 100, 80, 24, 3
int iReturn = ExecForm OnCommand
if (iReturn != 2 && iReturn != 3) then error ""
PutIni("Etykiety środków trwałych", "Orientacja", (using "%d", iOrientacja))
PutIni("Etykiety środków trwałych", "Kolumny", strCols)
PutIni("Etykiety środków trwałych", "Wiersze", strRows)
PutIni("Etykiety środków trwałych", "Lewy", strMLewy)
PutIni("Etykiety środków trwałych", "Prawy", strMPrawy)
PutIni("Etykiety środków trwałych", "Gorny", strMGorny)
PutIni("Etykiety środków trwałych", "Dolny", strMDolny)
PutIni("Etykiety środków trwałych", "Ramki", (using "%d", iRamki))
PutIni("Etykiety środków trwałych", "KodKreskowy", (using "%d", iKodKreskowy))
PutIni("Etykiety środków trwałych", "ZCzesciami", (using "%d", iZCzesciami))
if iZCzesciami then
PutIni("Etykiety środków trwałych", "STZCzesciami", (using "%d", iSTZCzesciami))
else
PutIni("Etykiety środków trwałych", "STZCzesciami", (using "%d", 0))
endif
PutIni("Etykiety środków trwałych", "ZNazwaFirmy", (using "%d", iZNazwaFirmy))
#include "rp_const_sci"
#include "hf_all_sci"
string nazwaRaportu = ""
string podtytulRaportu = ""
if iOrientacja == 0 then
SetStrona(300,0,0)
else
SetStrona(300,0,0)
endif
strona val(strMLewy), val(strMGorny), val(strMPrawy), val(strMDolny) //buduje strone o podanych marginesach w 0,1mm
int iSzerEtykiety, iWysEtykiety
iSzerEtykiety = (str.szer) / val(strCols) - 1
iWysEtykiety = (str.wys) / val(strRows) - 1
int i, j, k
//message using "szer: %d, wys: %d", str.Szer, str.Wys
//message using "szer: %d, wys: %d", iSzerEtykiety, iWysEtykiety
int iSzerKoduWedlugWysEt, iSzerKoduWedlugSzerEt, iRozmiarFontu
iSzerKoduWedlugSzerEt = iSzerEtykiety * MAX_SZER_KODU_DO_SZER_ET
iSzerKoduWedlugWysEt = iWysEtykiety * MAX_WYS_KODU_DO_WYS_ET * SZER_DO_WYS
//message using "%d, %d", iSzerKoduWedlugSzerEt, iSzerKoduWedlugWysEt
if iSzerKoduWedlugSzerEt > iSzerKoduWedlugWysEt then
iRozmiarFontu = SZER_DO_ROZMIAR * iSzerKoduWedlugWysEt
else
iRozmiarFontu = SZER_DO_ROZMIAR * iSzerKoduWedlugSzerEt
endif
int aNazwaB = CopyFont("arialDEF", 1, iRozmiarFontu * (40 / KK_DEF_FONT_SIZE))
int aNrP = CopyFont("arialDEF", 0, iRozmiarFontu * (30 / KK_DEF_FONT_SIZE))
int aNrE = CopyFont("arialDEF", 0, iRozmiarFontu * (25 / KK_DEF_FONT_SIZE))
int aNrEBig = CopyFont("arialDEF", 1, iRozmiarFontu * 1.2) //było 1.2
// - sekcja odpowiedzialna za wielkosc fontu do wypisania kodu kreskowego
// było int KK = CopyFont("kodKreskowy", 0, iRozmiarFontu)
int KK = CopyFont("kodKreskowy", 1, 30) //wartosc 200 spowodowała podzielenie kodu na dwie czesci - czyli jest ograniczenie szerokosci
int tOdstep = CopyFont("timesDEF", 0, 5)
string strNumerEwid = ""
if iReturn == TEST then
k = 1
for i = 1 to i > val(strRows)
for j = 1 to j > val(strCols)
if Etykiety(k) then
Ramka at ((j - 1) * iSzerEtykiety), ((i - 1) * iWysEtykiety), iSzerEtykiety - 1, iWysEtykiety - 1, iRamki, 0
if iZNazwaFirmy then
SetStyl(Styl(aNrE, 1))
print LF; Firma.Nazwa; " "; LF
SetStyl(Styl(tOdstep, 0))
endif
print LF
SetStyl(Styl(aNazwaB, 0))
print (using "Środek testowy\nnr %d", k); LF
SetStyl(Styl(aNrP, 0))
print (using "Numer porządkowy: %d", k); LF; LF
strNumerEwid = using "STmx %d/368/XI/00", k
if iKodKreskowy then
SetStyl(Styl(KK, 0))
print (using "%c%s%c%c", C128_ASCII_START, strNumerEwid, SumaKontrolna(strNumerEwid), C128_ASCII_STOP); LF
SetStyl(Styl(aNrE, 0))
print "Numer ewidencyjny: "; strNumerEwid
else
SetStyl(Styl(aNrEBig, 0))
print strNumerEwid; LF
SetStyl(Styl(aNrE, 0))
print "Numer ewidencyjny"
endif
koniec
endif
k += 1
next j
next i
goto wyjdz
endif
long idSrodka // long idSrodka Identyfikator środka trwałego.
InfoSrodek ISSrodek // obiekt predefiniowany Jest to definicja obiektu przechowującego informację o środku trwałym. CZYLI ISSrodek to obiekt majacy info o srodku trwałym
int iNrStrony = 1
int iCzesci = 0
int iBylyCzesci = 0
InfoWynik CzescSkl //Jest to definicja obiektu zawierającego zestaw atrybutów, stosowanych do przechowywania informacji o wynikach niektórych obliczeń wykonywanych w raportach.
string strNrEwidSr, strNrPorz
string tabZamiana(2) = (using "%c", 32), (using "%c", 159)
i = 1
j = 1
k = 1
if iReturn == OK then
if !WybierzSrodki(idgrupy, typ, 0) then message "sErrBlednaGrupa" : error ""
idSrodka = GetFirst() // GetFirst pobiera pierwszy sodek z grupy
//idSrodka Identyfikator środka trwałego.
while idSrodka
if !iCzesci then
if !Srodek(ISSrodek, idSrodka) then message "Brak danych środka" : error ""
if iZCzesciami && SrodekPosiadaCzesciSkl(idSrodka) && !iBylyCzesci then
KolejnaCzescSkladowa(CzescSkl)
strNrEwidSr = ISSrodek.NumerEwid
iCzesci = 1
endif
endif
strNrPorz = using "%d", ISSrodek.Numer
if iCzesci then
ISSrodek.Nazwa = CzescSkl.Opis1
if strNrEwidSr != "" then ISSrodek.NumerEwid = using "%s~%d", strNrEwidSr, CzescSkl.Wartosc2
strNrPorz += using "(%d)", CzescSkl.Wartosc2
endif
if Etykiety(k) then
Ramka at ((j - 1) * iSzerEtykiety), ((i - 1) * iWysEtykiety), iSzerEtykiety - 1, iWysEtykiety - 1, iRamki, 0
if iZNazwaFirmy then
SetStyl(Styl(aNrE, 1))
print LF; Firma.Nazwa; " "; LF
SetStyl(Styl(tOdstep, 0))
endif
print LF
//drukowanie nazwy srodka
// SetStyl(Styl(aNazwaB, 0))
// print ISSrodek.Nazwa; LF
//drukowanie numeru poradkowego
// SetStyl(Styl(aNrP, 0))
// print "Numer porządkowy: "; strNrPorz; LF; LF
if ISSrodek.NumerEwid != "" then
buf = ISSrodek.NumerEwid
replace "ą", "a"
replace "Ą", "A"
replace "ć", "c"
replace "Ć", "C"
replace "ę", "e"
replace "Ę", "E"
replace "ł", "l"
replace "Ł", "L"
replace "ń", "n"
replace "Ń", "N"
replace "ó", "o"
replace "Ó", "O"
replace "ś", "s"
replace "Ś", "S"
replace "ź", "z"
replace "Ź", "Z"
replace "ż", "z"
replace "Ż", "Z"
if iKodKreskowy then
//ta czesc odpowiada za konwersje numeru ewidencyjnego ..PUP-011-4/3123468hÎ w kod kreskowy
SetStyl(Styl(KK, 0)) // po wycieciu tego wyszlo ..PUP-011-4/3123468hÎ
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
SetStyl(Styl(aNrE, 0))
print ""; buf //było Numer ewidencyjny: "
else
SetStyl(Styl(aNrEBig, 0))
print buf; LF
SetStyl(Styl(aNrE, 0))
print "" //było Numer ewidencyjny: "
endif
endif
koniec
if iCzesci then
if !KolejnaCzescSkladowa(CzescSkl) then
iCzesci = 0
if !iSTZCzesciami then
idSrodka = GetNext()
iBylyCzesci = 0
else
iBylyCzesci = 1
endif
endif
else
idSrodka = GetNext()
iBylyCzesci = 0
endif
endif
if idSrodka then
j += 1
if j > val(strCols) then
j = 1
i += 1
endif
k += 1
if k > iLiczbaEtykiet then
i = 1
j = 1
k = 1
str.Nowa()
iNrStrony += 1
if iNiePropaguj then
OknoDodatkowe(0, iNrStrony)
endif
endif
endif
wend
endif
wyjdz: