Web görüntüleyici

Web görüntüleyicide çizim ve notlar

Ziyaretçilerin sitendeki bir PDF'e çizmesine, metin vurgulamasına ve not bırakmasına izin ver; sonucu indir, işaretleri JSON olarak kendi sunucuna kaydet.

annotate özniteliğiyle ziyaretçiler bir PDF’i doğrudan sayfanda işaretleyebilir: kalemle çizer, metni vurgular ya da altını çizer, not bırakır, şekil ekler. Sonra İndir, PDF’i işaretleriyle birlikte verir. Senin sayfan bir yere göndermedikçe hiçbir şey tarayıcıdan çıkmaz.

<vive-pdf src="/dosyalar/sozlesme.pdf" annotate></vive-pdf>

Çizim araçları varsayılan olarak kapalıdır. annotate olmadan görüntüleyici onların kodunu indirmez bile; yalnızca okuma yapılan sayfalar eskisi kadar hafif kalır.

Araçlar

Araç çubuğundaki Çiz düğmesi, üstünde ikinci bir şerit açar.

Araç Ne yapar
Kalem Serbest çizim
Fosforlu kalem İşaretleme kalemi gibi geniş, yarı saydam bir çizgi
Metni vurgula, altını çiz, üstünü çiz Metnin üzerinde sürükleyerek işaretle
Not Tıklayıp bir not iğnele, açılan kutuya yaz
Dikdörtgen, elips Sürükleyerek bir çerçeve çiz
Ok Kuyruktan uca doğru sürükle

Araçların yanında altı renk, üç çizgi kalınlığı, Geri al, Yinele, Seçileni sil ve Kapat var. Bir işarete tıklamak onu seçer: sonra taşınabilir, boyutu değiştirilebilir, rengi değiştirilebilir ya da silinebilir. PDF’te zaten bulunan işaretler de seçilip değiştirilebilir.

Şerit açıkken tuşlar: Ctrl/Cmd+Z geri alır, Ctrl/Cmd+Shift+Z yineler, Delete ya da Backspace seçili işareti siler, Escape aracı bırakır.

Metin araçları gerçek metin ister

Vurgulama, altını çizme ve üstünü çizme, PDF’in gerçekten içerdiği metinde çalışır. Taranmış bir sayfa bir resimdir: orada kalemi ya da fosforlu kalemi kullan.

Notlar ı, ş, ğ ve İ dahil her harfi korur. Sayfanın üstüne doğrudan yazılan bir metin kutusu henüz yok; kullanacağı standart PDF fontları bu harfleri gösteremiyor.

İndirme ve yazdırma

Bir şey çizildikten sonra İndir, PDF’in işaretli bir kopyasını dosyanın kendi adıyla kaydeder. Yazdır onları kâğıda da basar. Sunucundaki asıl dosya değişmez.

İşaretler standart PDF notlarıdır (annotation); Adobe Acrobat, Önizleme, vivePDF uygulaması ve diğer okuyucular onları gösterir ve düzenleyebilir.

Geliştiriciler için

Dört metot ve bir olay, sayfanın işaretleri saklamasını sağlar; örneğin her kullanıcı için kendi sunucunda.

Ne yapar
annotations() Bütün sayfalardaki işaretlerin listesini verir; PDF’te zaten olanlar da dahil
setAnnotations(list) Listeyi bütün bu işaretlerin yerine koyar; vive-annotationchange göndermez ve Geri al geçmişini temizler
save() İşaretleri içeren PDF’i bir Blob olarak verir
setTool(name) Çizim şeridini bir araçla açar: pen, marker, highlight, underline, strikeout, note, rectangle, ellipse ya da arrow; null aracı bırakır
vive-annotationchange Bir işaret oluşturulunca, değişince ya da silinince { type, page } ile gelir

Sunucuna kaydetme

const viewer = document.querySelector("vive-pdf");

viewer.addEventListener("vive-ready", async () => {
  const response = await fetch("/api/isaretler?dosya=sozlesme");
  if (response.ok) await viewer.setAnnotations(await response.json());
});

let timer = 0;
viewer.addEventListener("vive-annotationchange", () => {
  clearTimeout(timer);
  timer = setTimeout(async () => {
    const marks = await viewer.annotations();
    await fetch("/api/isaretler?dosya=sozlesme", { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify(marks) });
  }, 1000);
});

PDF’in tamamını saklamak istersen istek gövdesi olarak await viewer.save() gönder.

Biçim

Her işaret küçük bir nesnedir. Konumlar sayfanın sol üst köşesinden PDF noktası (1/72 inç) cinsindendir, page 1’den başlar, color #rrggbb biçimindedir. opacity (0–1) ve text isteğe bağlıdır.

type Alanlar
pen, marker width, strokes: çizgilerin listesi, her biri { x, y } listesi
highlight, underline, strikeout boxes: her metin satırı için bir { x, y, width, height }
note box: not simgesinin yeri; text: not
rectangle, ellipse width, box: çerçeve
line, arrow width, from, to: { x, y }; okun ucu to’dadır
[
  { "type": "note", "page": 1, "color": "#FFCD45", "opacity": 1, "text": "Tarihlere bak", "box": { "x": 400, "y": 90, "width": 20, "height": 20 } },
  { "type": "pen", "page": 2, "color": "#E44234", "opacity": 1, "width": 4, "strokes": [[{ "x": 100, "y": 600 }, { "x": 220, "y": 640 }]] }
]

Bağlantılar, form alanları, damgalar ve diğer not türleri listede yer almaz; setAnnotations() onlara dokunmaz.

Girdi denetimi

setAnnotations() bir şey değiştirmeden önce listenin tamamını okur. Bir kayıt hatalıysa hiçbir şey değişmez; söz invalid koduyla ve kaydı ve alanı adlandıran bir mesajla reddedilir, örneğin annotation 3 is not valid: color must look like #rrggbb.

Sınır
Bir listedeki işaret 5 000
Bir çizimdeki nokta 20 000
Bir vurgudaki kutu 1 000
Bir nottaki karakter 2 000
Çizgi kalınlığı 0,1 ile 100 nokta arası

Yalnızca yukarıdaki alanlar okunur. Bir kayıttaki başka her şey, örneğin bir bağlantı adresi, bir resim ya da bir betik atılır; güvenilmeyen bir kaynaktan gelen liste bunları PDF’e ekleyemez.

Hatalar

Dört metot, code alanı şunlardan biri olan bir Error ile reddeder:

Kod Anlamı
annotate-off Öğede annotate özniteliği yok
not-ready Henüz açık bir belge yok; vive-ready’yi bekle
invalid setAnnotations() kullanamayacağı bir liste aldı
replaced Cevap gelmeden başka bir belge açıldı
failed İşaretler PDF’e yazılamadı