Firdaus Archive

Blog pribadi untuk curhat, share tentang script, software, kuliah, project IT dan seputar IT.

Tampilkan postingan dengan label Source Code. Tampilkan semua postingan

Untuk Cetak di Printer Epson Dot Matrix dan Agar Bisa Autocut Menggunakan Bahasa Pemrograman Apapun

Bisa Memakai 2 Cara ini

printData += '<crlf><crlf><crlf><crlf><crlf><char29>V0';

printData += '\r\n\r\n\r\n\x1D\x56\x01';









Untuk Python Bisa Coba di Bawah ini : Original Source Code (https://github.com/python-escpos/python-escpos/issues/129)

This comment is not directly related to Issue #18:


I am describing a possible extension, which I intend to resubmit later as a new 

issue.


Here is an experiment, for people who have a combination thermal & slip 

printer. The paper type can be selected:


HW_PRINT_ROLL = '\x1B\x63\x30\x03' # 80mm roll, thermal

HW_PRINT_SLIP = '\x1B\x63\x30\x04' # Slip / Cheque, dot matrix


Common settings, like the type face and character geometry, can be set on the 

dot matrix slip printer, the same way as done for the thermal engine.


E.paper('slip')


E.set('left','A','B',1,2)


If anyone tests this, please be mindful of both the logical and physical length 

of your slip. My printer seems not to sense the end of a narrow slip. It is 

okay with an A4 sheet.


PAPER_SLIP_OUT  = '\x1B\x4B\xC0' # Eject slip or cheque


The method I use to eject is a slip-reverse command. It reverses the feed 

direction on a flat paper path TM-H5000II, and feeds a slip out forward on the 

TM-H6000.


E.cut('slip')


Always return to the roll paper type when finished.


E.paper('roll')



% hg diff


diff -r 849dabb63ce0 escpos/constants.py

--- a/escpos/constants.py   Thu May 30 08:56:33 2013 -0700

+++ b/escpos/constants.py   Sat Jan 18 15:14:30 2014 +1100

@@ -10,16 +10,21 @@

 HW_INIT   = '\x1b\x40'         # Clear data in buffer and reset modes

 HW_SELECT = '\x1b\x3d\x01'     # Printer select

 HW_RESET  = '\x1b\x3f\x0a\x00' # Reset printer hardware

+# Printer paper

+HW_PRINT_ROLL = '\x1B\x63\x30\x03' # 80mm roll, thermal

+HW_PRINT_SLIP = '\x1B\x63\x30\x04' # Slip / Cheque, dot matrix

 # Cash Drawer

 CD_KICK_2 = '\x1b\x70\x00'     # Sends a pulse to pin 2 [] 

 CD_KICK_5 = '\x1b\x70\x01'     # Sends a pulse to pin 5 [] 

 # Paper

 PAPER_FULL_CUT  = '\x1d\x56\x00' # Full cut paper

 PAPER_PART_CUT  = '\x1d\x56\x01' # Partial cut paper

+PAPER_SLIP_OUT  = '\x1B\x4B\xC0' # Eject slip or cheque

 # Text format   

 TXT_NORMAL      = '\x1b\x21\x00' # Normal text

 TXT_2HEIGHT     = '\x1b\x21\x10' # Double height text

 TXT_2WIDTH      = '\x1b\x21\x20' # Double width text

+TXT_4SQUARE     = '\x1b\x21\x30' # Quad area text

 TXT_UNDERL_OFF  = '\x1b\x2d\x00' # Underline font OFF

 TXT_UNDERL_ON   = '\x1b\x2d\x01' # Underline font 1-dot ON

 TXT_UNDERL2_ON  = '\x1b\x2d\x02' # Underline font 2-dot ON

diff -r 849dabb63ce0 escpos/escpos.py

--- a/escpos/escpos.py  Thu May 30 08:56:33 2013 -0700

+++ b/escpos/escpos.py  Sat Jan 18 15:14:30 2014 +1100

@@ -189,8 +189,8 @@

             self._raw(TXT_NORMAL)

             self._raw(TXT_2HEIGHT)

         elif height == 2 and width == 2:

-            self._raw(TXT_2WIDTH)

-            self._raw(TXT_2HEIGHT)

+            self._raw(TXT_NORMAL)

+            self._raw(TXT_4SQUARE)

         else: # DEFAULT SIZE: NORMAL

             self._raw(TXT_NORMAL)

         # Type

@@ -203,7 +203,6 @@

         elif type.upper() == "U2":

             self._raw(TXT_BOLD_OFF)

             self._raw(TXT_UNDERL2_ON)

-            self._raw(TXT_ITALIC_OFF)

         elif type.upper() == "BU":

             self._raw(TXT_BOLD_ON)

             self._raw(TXT_UNDERL_ON)

@@ -227,6 +226,15 @@

             self._raw(TXT_ALIGN_LT)



+    def paper(self, type='ROLL'):

+        if type.upper() == '':

+            self._raw(HW_PRINT_ROLL)

+        elif type.upper() == 'ROLL':

+            self._raw(HW_PRINT_ROLL)

+        elif type.upper() == 'SLIP':

+            self._raw(HW_PRINT_SLIP)

+

+

     def cut(self, mode=''):

         """ Cut paper """

         # Fix the size between last line and cut

@@ -234,6 +242,10 @@

         self._raw("\n\n\n\n\n\n")

         if mode.upper() == "PART":

             self._raw(PAPER_PART_CUT)

+        if mode.upper() == "FULL":

+            self._raw(PAPER_FULL_CUT)

+        if mode.upper() == "PART":

+            self._raw(PAPER_SLIP_OUT)

         else: # DEFAULT MODE: FULL CUT

             self._raw(PAPER_FULL_CUT) 

Untuk Cetak di Printer Epson Dot Matrix dan Agar Ukurannya bisa 1/4 Letter atau 1/2 Letter Menggunakan Bahasa Pemrograman Apapun

Gunakan fungsi page break di fast-report atau gunakan Character khusus untuk mengirim command ke printer seperti #12 untuk page break


Code Snippet :  CommandString = 'Hello, this is a test page!' + #10#12;

Specifically, the #12 character constant is the control character for a Form Feed, which is the command that an Epson dot-matrix printer like the LX-310 understands as a page break. The #10 character is a Line Feed, which moves the print head to the next line.


Contoh Untuk Delphi memakai di bawah ini untuk Cetak Draft

procedure PrintMe(Content: TStringList);

var

sPrinter, sDriver, sPort, sTitle: array[0..255] of Char;

hPrinter, hDevMode: THandle;

DocInfo1: TDocInfo1;

W: DWORD;

S: String;

C: Char;

I: Integer;

begin

// page-break

C := #12;


// initialize the document structure

with DocInfo1 do begin

pDocName := StrPCopy(sTitle, 'Your Title Here');

pOutputFile := nil;

pDatatype := 'RAW';

end;


// get the current printer (sPrinter)

Printer.GetPrinter(sPrinter, sDriver, sPort, hDevMode);


// open the printer

OpenPrinter(sPrinter, hPrinter, nil);

try

try

// start document to spooler

StartDocPrinter(hPrinter, 1, @DocInfo1);

StartPagePrinter(hPrinter);


// send the 'Source' to the printer

for I := 0 to Source.Count - 1 do begin

S := Source.Strings;

if not WritePrinter(hPrinter, PChar(S), Length(S), W) then

Break;

end;


// send a page-break to the printer (optional)

if not WritePrinter(hPrinter, @C, 1, W) then

Break;


// end the page

EndPagePrinter(hPrinter);


// end the document

EndDocPrinter(hPrinter);

finally

// close the printer

ClosePrinter(hPrinter);

end;

except

// abort the job

AbortPrinter(hPrinter);

raise;

end;

end;


https://www.tek-tips.com/threads/printing-text-on-dotmatrix-printer.921897/

Tutorial dan Source Code Aplikasi QR Code PHP & MySQL

 

QR Code
QR Code

Kali ini saya akan share tutorial Create dan Scan QR Code menggunakan PHP dan langsung terhubung dengan database MySQL, saya menggunakan library dari github, berikut adalah library yang saya pakai

Untuk membuat QR Code saya menggunakan https://github.com/t0k4rt/phpqrcode (PHP)

Untuk scan QR Code saya menggunakan https://github.com/ifirdausku/webcodecamjs (Javascript)

Contoh project yang menggunakan keduanya (Source code create dan scan ijasah)

https://github.com/ifirdausku/scan-create-qr-code-php

Silahkan download dulu jika anda ingin mengikuti tutorial ini, jika ingin langsung download source codenya saya sediakan dibawah

Saya asumsikan anda sudah paham HTML, CSS, basic PHP dan Javascript, karena saya menggunakan bootstrap, jquery dalam tutorial ini.

Aplikasi ini HANYA DAPAT BERJALAN PADA HTTPS, jadi jika anda menjalankannya tidak menggunakan HTTPS pada chrome maka akan gagal karena kamera tidak bisa diakses.

Setelah anda download 2 library diatas, jadikan dalam 1 folder (disini saya membuat folder bernama qr) , lalu masukkan dalam htdocs

htdocs
Jadikan dalam 1 folder
Setelah itu copy file di bawah ini, lalu simpan dengan nama index.php

Alarm Visual Basic 6.0

Aplikasi ini dibuat untuk memenuhi persyaratan kuliah VB di Semester 3, aplikasi ini sangat simpel dan hanya menggunakan 1 Form saja, cara penggunaanya pun mudah, tinggal memasukkan berapa menit alarm akan berbunyi dan lalu klik add, setelah itu klik activate, alarm bisa diatur untuk beberapa kali dapat berbunyi.
Berikut penampakan Programnya dan juga link downloadnya saya sertakan di bawah
Alarm VB6
VB6Alarm


Jika anda tidak memiliki Visual Basic 6.0 dilahkan download disini :  Bagas31 VB6

Script Konverter Hexa ke Desimal (Beserta Simulation Table)

Tadi, gue udah share Script Konverter dari Biner ke Desimal, nah gue nge-share lagi dengan beda topik(bukan nama temen sekelas gue ya). Sekarang gue mau berbagi script terbaru buatan temen gue dengan sangat (tidak) ikhlas, yaitu Konverter Hexa ke Desimal beserta simulation tablenya.

Seperti biasanya, buat yang mau scriptnya, silahkan ketik sendiri. Kalo 'nggak mau ya close-tab ini aja. Gitu aja kok repot, wedus.
Pake ada yang bilang, kelamaan lah, script error lah. Tai, lo tuh nyadar. Makannya jangan jadi spammer mulu, giliran mau analisis script, malah 'ndak bisa, kan gendeng.

Gak usah basa-basi nih pake aja scriptnya dibawah.
script

Pengen cepet? nyoh download nang kene
Ojo lali komen ndeng lanek wes kenek...
Ikilo hasile su lanek kon gak percoyo iki script work 1000000000000%

16
Hasil Desimal: 10
Penghitungan:

-->

Script Konverter Binary ke Desimal (Beserta Simulation Table)

Sebelumnya, gue pernah bikin Auto Login @wifi.id, tapi lupa dimana gue nge-share-nya, tapi selagi akses untuk ke Flexi dihapus oleh Telkampret. Apa daya? Script itu dah 'nggak berguna. Shit! Bitch!
Udah, 'nggak usah dicari scriptnya, udah usang, 'nying.

Tapi gue 'nggak berhenti sampe tempat parkir di sini. Sekarang gue mau berbagi script terbaru buatan gue dengan sangat (tidak) ikhlas, yaitu Konverter Binary ke Desimal, Hexa ke Desimal, Oktal ke Desimal beserta simulation tablenya.
Buat yang mau scriptnya, silahkan ketik sendiri. Kalo 'nggak mau ya close-tab ini aja. Gitu aja kok repot, asu.
Pake ada yang bilang, pesing lah, ke hack lah. Tai, lo tuh nyadar. Makannya jangan jadi spammer mulu, giliran mau analisis script, malah 'ndak bisa, kan gendeng.

Terserah nih kode mau lo pake buat apa aja, mau lo buat tugas, skripsi, lo pelototin sampe mata lo kebakar ya urusan lo sendiri.

script

lenek pengen cepet download nang kene


Wocoen : iki script mek iso konversi bilangan biner nang desimal
Kon gak percoyo lanek script iki work 100%? nyoh jajalen dewe

Lebokno nomer biner terus kliktombol Convert su:
2
   
Hasil Desimal su: 10
Itungane:  

--> Ojo lali komen su, gak komen tak dungakno gak iso ngising 7 taun koen :v

Local Encryption Algorithm - Note to Myself

buat fungsi bernama enrkiptorfir() dan dekriptorfir()

lalu fungsi ini dibuatkan dll library seperti di windows, source code dllnya ini harus di encrypt dan hanya bisa di buka sendiri oleh yang buat

contoh isi dllnya adalah di bawah ini

variabel inputannya ini akan di kunci menggunakan encoding seperti base64 (utamanya mau pakai Ascii85) (atau yang lainnya bisa pakai XXE, UUE, binhex, Base32, Base85, Ascii85) dan di gabung jadi tidak hanya 1 fungsi


fungsi enrkiptorfir() hanya encryptor biasa tidak diberikan tanggal expired 

contoh : base64encode ( ' teksyangakandiencryptdisini ' ) maka hasilnya adalah dGVrc3lhbmdha2FuZGllbmNyeXB0ZGlzaW5p


untuk dekriptorfir() ini di buatkan decodingnya seperti fungsi encryptornya hanya saja diberikan batas expired, logika programnya seperti ini


contoh : 

if date < '2025-07-07' then

base64decode ( ' dGVrc3lhbmdha2FuZGllbmNyeXB0ZGlzaW5p ' ) 

maka hasilnya adalah teksyangakandiencryptdisini 


else 

acaklokasihuruf ( ' dGVrc3lhbmdha2FuZGllbmNyeXB0ZGlzaW5p ' ) maka hasilnya 

maka hasilnya adalah dGVrc3lhbmdha2FuZGllbmNyeXB0ZGlzaW5p di pindah pindah saja lokasinya tapi tidak mendecrypt nilai yang diberikan


_____________________________________________________________________________


cara lain adalah dengan metode encrypt hurufnya dipindah posisi sebanyak 2x akan tetapi decryptnya hanya 1x, maka harus memakai decrypt berulang kali 

contoh encryptfir( 'A' ) maka hasil yang tampil bisa jadi 'C'

tapi decryptfir( 'C' ) maka hasil yang tampil bisa jadi 'B', jika ingin mendapatkan hasil A maka lakukan decryptfir( 'C' ) lagi

akan tetapi di barengi dengan validasi tanggal juga, jika tanggal sudah melewati tertentu maka fungsi tidak berfungsi sebagaimana mestinya

____________________________________________________________________________


fungsi ini harus dipakai di tempat yang vital seperti pada saat insert data, dan pada saat update data, atau bisa juga saat load data saja dan yang di kunci hanya value2 tertentu saja seperti tanggal dll


-------------------------------------------


bisa juga dengan menggunakan aes encryption di database 


CREATE FUNCTION `encrypt_credit_card`(credit_card_number VARCHAR(255), encryption_key VARCHAR(255))

RETURNS BLOB

DETERMINISTIC

BEGIN

  RETURN AES_ENCRYPT(credit_card_number, encryption_key);

END;



SELECT AES_DECRYPT(encrypted_column, 'your_secret_key') AS decrypted_data FROM your_table;



fungsi untuk select dari kolom encryptnya, lalu untuk mengunci dan disimpan di database bisa memakai ini 


INSERT INTO users (username, encrypted_credit_card) VALUES ('John Doe', encrypt_credit_card('1234-5678-9012-3456', 'your_secret_key'));



your_secret_key = ini dijadikan text agar load di dll, jika salah maka hasil encryptnya juga akan salah

 

di dll gunakan fungsi ini 

if date < tanggal tertentu 2050-01-01 

your_secret_key yang benar

else

your_secret_key yang salah

end


jika seperti ini maka secret keynya akan benar di tanggal tertentu dan akan salah jika tanggal sudah melewati batas


this is writed at 2025-07-30