Artikel teknis

Artikel teknis: Building AcroForm Fields and Actions with HotPDF in Delphi dalam bahasa Indonesia

Lokalisasi ini langsung membahas Building AcroForm Fields and Actions with HotPDF in Delphi dan memakai artikel bahasa Inggris yang sudah diperbarui sebagai acuan teknis untuk tim Delphi, PDF, dan perangkat lunak dokumen

Halaman ini mengubah artikel dasar yang diperbarui menjadi titik pemeriksaan konkret untuk desain, implementasi, dan validasi

Materi yang disinkronkan dari artikel bahasa Inggris

Artikel dasar berbahasa Inggris kini memiliki konteks implementasi, keputusan teknis, dan contoh yang lebih konkret, sehingga halaman ini diposisikan sebagai panduan kerja, bukan ringkasan pendek

Bagian penting dalam artikel dasar yang diperbarui:

  • Gunakan file masukan kecil yang dapat direproduksi sebelum fitur disambungkan ke data produksi
  • Pertahankan nama produk, nama API, nama file, dan nilai literal apa adanya
  • Simpan keluaran validator dan informasi versi bersama file contoh yang dibuat

Pilihan implementasi praktis

Mulailah dari jenis file, keluaran yang diharapkan, dan kondisi kesalahan yang harus dilihat pengguna. Lalu hubungkan setiap panggilan API dengan hasil yang bisa diperiksa agar validasi, logging, dan dukungan dapat mereproduksi kasus pelanggan

  • Gunakan file masukan kecil yang dapat direproduksi sebelum fitur disambungkan ke data produksi
  • Pertahankan nama produk, nama API, nama file, dan nilai literal apa adanya
  • Simpan keluaran validator dan informasi versi bersama file contoh yang dibuat

Kode dan titik API

Contoh kode dipertahankan apa adanya agar pengembang dapat membandingkannya langsung dengan proyek Delphi, C++Builder, dan Lazarus/FPC

procedure BuildClaimForm(Pdf: THotPDF);
begin
  // Page 1: applicant block
  Pdf.CurrentPage.AddTextField('applicant.name', '', Rect(50, 700, 300, 722));
  Pdf.CurrentPage.AddTextField('applicant.email', '', Rect(50, 660, 300, 682));
  Pdf.CurrentPage.AddCheckBox('consent', 'Y', Rect(50, 620, 70, 640), False);
  Pdf.CurrentPage.AddRadioButton('coverage', 'basic', Rect(50, 580, 70, 600), True);
  Pdf.CurrentPage.AddRadioButton('coverage', 'full', Rect(90, 580, 110, 600), False);
  Pdf.CurrentPage.AddComboBox('plan', 'Standard',
    ['Basic', 'Standard', 'Premium'], Rect(50, 540, 200, 565));

  Pdf.AddPage;  // CurrentPage now points at page 2
  Pdf.CurrentPage.AddListBox('riders', 'None',
    ['None', 'Flood', 'Earthquake'], Rect(50, 500, 200, 600));
end;
// Open a help page in the system browser
Pdf.CurrentPage.AddPushButtonWithAction('btnHelp', 'Help',
  'https://www.example.com/claims-help', Rect(320, 700, 420, 730), baURI);

// Run viewer-side JavaScript
Pdf.CurrentPage.AddPushButtonWithAction('btnRecalc', 'Recalculate',
  'app.alert("Totals updated.");', Rect(320, 660, 420, 690), baJavaScript);

// Submit as XFDF and keep empty fields in the payload
Pdf.CurrentPage.AddPushButtonWithSubmitAction('btnSubmit', 'Submit claim',
  'https://api.example.com/claims', Rect(320, 620, 420, 650),
  [sffXFDF, sffIncludeNoValueFields]);
// Reject committed values that are not plausible email addresses
Pdf.AttachFieldKeyStrokeAction('applicant.email',
  'if (event.willCommit && !/^[\w.-]+@[\w.-]+\.\w+$/.test(event.value)) event.rc = false;');

// Display US phone numbers as (NNN) NNN-NNNN
Pdf.AttachFieldFormatAction('applicant.phone',
  'event.value = event.value.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");');

// Refuse applicants under 18 at commit time
Pdf.AttachFieldValidateAction('applicant.age',
  'if (parseInt(event.value) < 18) event.rc = false;');

Pemeriksaan sebelum rilis

Periksa file keluaran dengan alat yang sama seperti yang digunakan pelanggan atau arsip. Catat versi komponen, data uji, versi validator, dan hasil yang diamati agar regresi berikutnya dapat dilacak dengan tepat

Bacaan terkait

Catatan tambahan

Tambahan ini membuat versi ringkas menjadi panduan kerja yang lebih berguna, sambil tetap selaras dengan Building AcroForm Fields and Actions with HotPDF in Delphi dan kerangka teknis artikel bahasa Inggrisnya. Teks perlu menjelaskan dari input seperti apa topik dimulai, output apa yang dituju, dan pada titik mana perilaku harus diverifikasi.

Saat menulis ulang, urutan keputusan penting: mulai dari bentuk data, lalu batas perubahan, kemudian dependensi API, dan akhirnya perilaku hasil. Jika artikel menyebut beberapa jalur, jelaskan juga jalur mana yang paling kuat untuk maintenance, support, dan reproduksi masalah.

Setiap code block, nama file, nama API, dan nilai literal harus tetap sama. Penjelasan sekitarnya boleh lebih luas, tetapi contoh kode harus menjadi referensi yang presisi agar pembaca bisa membandingkannya langsung dengan proyek Delphi, C++Builder, atau Lazarus/FPC mereka.

Bagian validation harus menyebut file sampel kecil, perbandingan output, dan pencatatan versi component atau validator. Jika halaman membahas bug fix atau migrasi, jalur reproduksi, kondisi awal yang terlihat, dan titik verifikasi harus dijelaskan dengan jelas supaya regression dapat dilacak tanpa tebakan.

Perluasan seperti ini membuat halaman tetap berguna setelah dibaca sekali: untuk reviewer sebagai alasan keputusan, untuk support sebagai konteks diagnosis, dan untuk tim pemeliharaan sebagai catatan yang bisa dirujuk saat perubahan berikutnya.

  • Jangan ubah nama produk, API, file, atau literal
  • Jika ada code block, pertahankan apa adanya
  • Jelaskan validation dengan file contoh dan output yang bisa dibandingkan
  • Uraikan urutan keputusan dengan jelas, bukan hanya ringkasan singkat