PDF düzenleme

Arkadaşlar merhaba.

Rails projemdeki PDF dosyalarıma filigran eklemek istiyorum (fligran her dosya için özel olacak biçimde).
Active Storage kullanıyorum.
Direct upload kullanıyorum.
Model’de
images & watermarked_images adlı iki attachment alanı var.
ayrıca watermarked:boolean alanı var.

  1. Direct upload ile dosyayı aldıktan sonra model callback ile filigranlı dosya üretip dosya sistemine kaydediyorum. (images otomatikman dosyayı almış oluyor)

  2. Eğer watermarked:boolean false ise;
    Aynı modelin işlem kaydı sona ermeden callback ile dosya’dan okuduğum PDF’i
    watermarked_images alanına kaydediyorum.
    watermarked:boolean = true yapıyorum.

  3. Bu adımda geçici oluşturduğum Filigranlı dosyayı sistemden silmem lazım.

  4. Bu adımda images attachmentları silmem lazım(çünkü filigranlı hali bana yetiyor.)

İkinci adım sonunda ActiveStorage::IntegrityError hatası alıyorum.

Asıl sorum şu ki, daha farklı nasıl bir iş akış süreci olabilir? (Bu yöntemde bir çok sorun çıkıyor ve bir dosya için 3 kez kopyalama yapılmış oluyor.)

İlgili kod aşağıda (Tavsiyelerinize ihtiyacım var.)

Selam,

Burada farklı yaklaşımlar olabilir, aklıma ilk gelenler şöyle:

-1. Client tarafında JavaScript’e PDF’i oluşturtmak(ve watermark’ı da burda eklemek).* :slight_smile:
0. PDF’i oluştururken ederken watermark eklemek. Burada aldığımız görselleri ve parametreye göre pdf üretmek için async bir job çalıştırmak.

  1. Block storage’a koyduktan sonra, create event’inin lambda’yı tetikleyerek watermark’ın eklenmesi.
  2. after_save hook’unda bir tane job(eski terminolojide worker) create etmek, sidekiq’in arkada o dosyayı alıp, watermark ekleyip güncellemesi.

Bu işlemler bitene kadar da dosyayı göstermek istemiyorsan ilgili flag’lere bakabilirsin belki.

→ Diske her gittiğimizde bizim işimiz yavaşlayacak. Aynı zamanda image tablomuz gün geçtikçe şişecek gibi duruyor. Ve bu imajlar bizim işimize yaramayacaksa neden bir yerlere yazıyoruz ve siliyoruz ki. Bunlar bizim için hep maliyet aslında.

→ Watermark’ı ilk aşamada eklemek daha iyi bir yaklaşım gibi gözüküyor. Böylece tekrar okuma-yazma yapmamıza gerek kalmıyor.


Sorununuzu çözdüyse bir kahve ısmarlamak isterseniz :coffee:

2 Likes

Selam öneriler için teşekkürler. Bir kaç gündür deneme yapıyorum hemen cevap yazamadım.
Create veya update durumlarında arka plan işi tetiklenecek şeklinde bir kurgu yaptım.
Fakat benim yaptığım işlem model üzerinde uygulanan bir güncelleme olduğu için sonsuz döngüyle sonuçlanıyor.

Tetikleme işlemini controller üzerine koyunca sorun çözüldü.

Katılıyorum fakat PDF düzenleme için HexaPDF kullanıyorum. Filigranladığım PDF dosyasını stream nesnesi olarak upload’a gönderemiyorum. Dokümantasyonda stream nesnesi parameteresi var fakat ben beceremedim. Diske yazınca problem çözülüyor. Bende dosyaları filigranlayıp diske yazyor, ActiveStorage ile upload ettikten sonra dosyaları diskten siliyorum.

Selamlar.