Python ile UDF dosya oluşturma

Merhaba, oluşturduğum bir projede çıktıları word veya pdf olarak dosyaya kaydedebiliyorum fakat uyap doküman formatı udf dosyası oluşturmam gerekiyor. fakat konu hakkında doküman bulamadım. Konu hakkında yardımcı olabilecek biri var mı?

1 Beğeni

Muhtemelen bunun için bir API oluşturulması gerekiyor. https://uyap.gov.tr/iletisim iletişime geçip bir python projesi yaptığınızı, projenizin uyap formatında döküman vermesini istediğinizi belirtin. API desteği ile ilgili talebinizi bildirin. Github’da aşağıdaki örnek dışında birşey bulamadım o da JavaScript çalışması zaten.

1 Beğeni

Dosya standardini inceleyip (mevcut bir standarttan farkliysa) kendi kutuphanenizi olusturmaniz gerekiyor.

Dosya standardinin nerede yayinlandigini bulamadim.

3 Beğeni

Konuyu açtıktan sonra udf dosyasının aslında dosyasının ziplenmiş xml dosyasından başka birşey olmadığını fark ettim :slight_smile:

1 Beğeni

Size cevap verirken bence Xml’dir diye yazacaktım fakat emin olmadığım için yazmadım :grin:

Sayenizde öğrenmiş oldum, malum MEB de DYS üzerinde bu formatı kullanıyor.

ODF formati olmasi muhtemel. UDT de ODT.

Edit: Degilmis.

Merhaba,
ziplenmiş xml dosyası olduğunu fark ettiğinizi belirtmişsiniz. Peki sonrasında bununla ilgili kütüphaneleri bulup .udf dosyası oluşturabildiniz mi? Oluşturduysanız rica etsem benimle paylaşabilir misiniz?

1 Beğeni

Aslında bilgi yanlış ve üzerinde durmak istemedim. UDF bir zip dosyası değildir. CD romlarda kulanılan bir dosya sistemi dosyasıdır. Bu tür dosyaları 7zip, winzip, winrar vs gibi sıkıştırma programları okuyabildiğinden dosyanın bu tür bir yanılgı yaşamış olabilirsiniz.

Sanırım uyap ın bu tür bir dosya türünü kullanması nedeniyle bununla uğraşmak zorunda kalıyorlar. Ve bu dosya türü isim benzerliği midir yoksa gerçekten bu tür bir dosya mı kullanılıyor dokümanı görmem ve incelemem gerekir ki hiç işim olmadı.

Sizin de böyle bir ihtiyacınız var mı bilmem ama ufak bir internet araştırması ile ;

Uyap Editör Yardım

Size bu tür bir dosya oluşturma yöntemi gösteriyor.

Meraklısı için:

UDF dosya formatı:

Universal Disk Format - Wikipedia

Yani ikisi aynı mıdır farklı mıdır incelemek gerekir.

Burada bahsi geçen udf Uyap Document File kısaltması olan başka bir dosya türü.
UYAP editör ile manuel olarak belge oluşturabiliyoruz evet, python ile .udf formatında belge üretebilecek bir kod yazmayı araştırıyorum. Emeğiniz için teşekkür ederim.

Bana bu formatta bir dosya temin edebilir misiniz?

Eğer söylediğiniz gibi bir ihtiyaç varsa ve @aib in açıkladığı gibi odt formatını uyap udf uzantısı ile oluştuyor ise kodlamak oldukça kolay.

yani python a bir odf kütüphanesi ekleyip. Kodu oluşturmak burada oldukça kolay olacaktır. Sanırım bu konuda çok ihtiyacı olan var faydalı ve basit bir araç geliştirebiliriz.

pandas - How to read .odt using Python? - Stack Overflow

Gibi bir kodda sadece uzantıları sadece udf olarak değiştirmek gerekecektir.

OpenOffice/LibreOffice/OASIS kutuphanesi olarak odfpy,pyoo ve pyuno yükledim fakat import dediğim anda hata veriyor. Çok yeni olduğum için maalesef bunları kullanmayı bilmiyorum.

[quote=“semtex, post:11, topic:21254, full:true”]

Bana bu formatta bir dosya temin edebilir misiniz?

Eğer söylediğiniz gibi bir ihtiyaç varsa ve @aib in açıkladığı gibi odt formatını uyap udf uzantısı ile oluştuyor ise kodlamak oldukça kolay.

yani python a bir odf kütüphanesi ekleyip. Kodu oluşturmak burada oldukça kolay olacaktır. Sanırım bu konuda çok ihtiyacı olan var faydalı ve basit bir araç geliştirebiliriz.

pandas - How to read .odt using Python? - Stack Overflow

Gibi bir kodda sadece uzantıları sadece udf olarak değiştirmek gerekecektir.
[/quote

Tabi ki teslim edebilirim. Mail adresi yollamanız yeterli. Siz de uyap döküman editör indirerek bir .udf. dosyası oluşturabilirsiniz.

Örnek UDF dosyaları;

https://giresun.adalet.gov.tr/amp/uzlastirma-evrak-ornekleri-icin-tiklayiniz

Teşekkürler.

Uyap editörünü de kuruyorum. Kendi oluşturduklarım ve sizin verdikleriiz üzerinde çalışmak istiyorum.

PK ile paketlenmiş, xml formatında content.xml içeren bir dosya görüyorum. Hem binary hem de metin yönünden inceledim.

Ama içi dolu bir doküman ise ve ihtimal dahilinde adobe kullanan pdf seven dünyada iseler bir pdf dosyası şablonu ile karşı karşıyayız gibi geldi ilk izlenimim. ODT formatında değil, odt kütüphaneleri ile okunmuyor.

Detaylı araştırmak ve formata çözüm bulmak için uyap editörün de inceliyorum.

İlginize teşekkürler tekrar.

Sizden elde ettiğimiz bilgilerle elimizde bir şeyler oluştu. PK ile paketlenmiş bir adet content.xml dosyası.

Teoride, bu dosyayı açıp, xml olarak çalışıp sonra aynı isimle yeniden paketlemek yeterli olacak gibi görünmekte.

Ve fakat soru işaretlerimde var, imzalamak için eklenecek içerik nasıl eklenebilir yada hangi aşamada incelenir.

İlk aşamayı kodlayalım, sonra önümüze çıkacak diğer sorunlara bakarız.

3 Beğeni

Buradan sonra kendime cevap vererek devam edeceğim. İlgilenen olursa tabi ki soru, öneri vs bakabilirim.

Öncelikle bana ulaştırılan dosyaları hex bir editörle inceledim.

Buradaki dosya imzası: 50 DB 03 04

Bu imzaya sahip olma olasılığı olan dosyalara baktım:

Kaynak: List of file signatures - Wikipedia

Buradaki bilgilerden dosya formanın ODF olması ihtimalini göz önüne aldık.

Ama maaesef odf kütüphaneleri bu dosyayı okuyamıyor. Çünkü ODF formatında bir dosya içerisinde content.xml gibi bir dosya bulunmuyor.

Bunun yerine PK03/04 dosyalarını açabilecek bir kütüphane gerekiyor.

Ben bunun için: zipfile kütüphanesini kullandım.

Yerine zipfile36 da denebilirsiniz.

Komutu yeterli yüklemek için pip install zipfile36

Sonra basit bir kod yazdım.

import zipfile

with zipfile.ZipFile('test1.udf') as content_zip:
    content_zip.extractall()
    
with zipfile.ZipFile('test2.udf', 'w') as myzip:
    myzip.write('content.xml')
    

İçeriği dolu herhangi bir udf dosyasını test1.udf olarak kaydettim.

Kendi uyap editöründeki orijinal görüntü.

Sonra kodu çalıştırarak ikinci dosyayı oluşturdum. test2.udf

Dosyası oluşturdu.

Yani bu aşamada;

Orijinal uyap dosyası içerisindeki content.xml dosyasını çıkarıyoruz.

Sonra sıkıştırarak ikinci uyap dosyamızını oluşturmuş oluyoruz.

Şimdi yapılması gereken herhangi bir dokümanı bıradaki xml formatında, content.xml olarak hazırlayıp sıkıştırmak.

Elinizdeki dokümanı word, rtf vs alıp, xml formatına çevirip, ardından yukarıdaki basit komutla uyap dosyası haline getirebiliriz.

Burada herkes haklı.

winrar gibi bir sıkıştırma programı ile açarsanız, gördüğünüz şey bu. Yani bu bir sıkıştırılmış dosya türü.

Ama ODT de bir sıkıştırılmış dosya türü değil editörün java tabanlı olduğunu düşünürsek jar bile olabilir.

Hatta DOCX biçimindeki word dokumanları dahi sıkıştırılmış bir xml dosyası içeren dosya türü.

Ama .udf formatı dünyaca bilinen bir cd dosya biçimi.

Ne amaçlıır bu uzantıyı kullandılar bilmiyorum. Ama bilinen bir dosya uzantısını başka bir iş için kullanmak bu ızdıraba neden olabilir.

Şimdi ikinci aşamada, herhangi bir türdeki dokümanınızı, xml formatına çevirmek için ne yapmalıyız.

Göz ucuyla bir baktım, bazıları telifli, bazıları ücretli bir kaç bulup ve online çözüm var. Yerel bir kütüphane kullanmak belki mümkündür ama bakmak gerekir.

Online api desteği olan bir seçenek bana daha sıcak geldi.

Basit bir arayüz ile mesela tkinter gibi bir dosya seçip, bunu udf formatına birinci aşamada dosyayı xml e dönüştürmek, ikinci aşamada xml i, content.xml şeklinde adlandırıp, zipfile ile paketlemek yeterli görünüyor. Ama imzalanmış olması ve sertifika durumları için hala hiç bir fikrim yok. Bu imzalar content içinde ise bu imzaların da oluşturulması gerekecek ki bu kabiliyeti olmazsa aracın yapılan işin anlamı olmayacak.

Ha doküman yüklendikten sonra dijital imzalanıyorsa bu da ayrıca incelenmeli.

İlgilenen olursa devam edebilirim.

Ama anlamadığım bir konu var, hazır bir editörü varken neden alternatif çözümler gerekiyor henüz kavrayamadım.

Çünkü bu sistemi hiç kullanmadım, kısıtları ve ihtiyaçları anlatırsanız o kısımlarına da bakmaya çalışırım.

Kolay gelsin.

3 Beğeni

Vekaleten idarecilik yaptığım dönem UYAP doküman editörünü resmi yazılara cevap vermek için kullandım. Aklımda kalan, kullanışlı bir editör olmayışı. Özellikle tablo düzenleme tam bir işkence. Office uygulamalarına hakim olmayan VHKİ çalışanlar çok sıkıntı yaşıyor. Gerçi hakim olanlar da sıkıntı yaşıyor. Python ile nasıl birşey yapılması planlanıyor pek bir fikrim yok. Belki atıyorum 20 personelin her biri için aynı metinden oluşan resmi yazı hazırlanacaksa personellerin isimlerini tutan bir listede döngü kurup udf dosyaları oluşturulabilir. Fakat TÜBİTAK e-imza ile imzalanmadığı sürece tek tek yeniden UYAPta açıp imzalamak gerekir.

Bu arada emeğiniz için çok teşekkürler, yaptığınız çalışma ileride bu tarz projeler için ışık tutacak çok güzel bir başlangıç olmuş.

Merhaba;

Şimdi size bir ekran görüntüsü vereceğim, uyap editörünün kurulumundan.

Burada göreceğiniz üzere bu esya üzerindn imza için tubitak arayüzü.

jar dosyası içerisinde.

Formata uygun bir doküman oluşturulsa dahi e imza için zaten editör kullanmak zorunda kalacaklar tahmin ettiğim üzere.

Editör üzerinden bir şeyler araştırırken;

Plexus archiver kullandığını, e imza modülü içerdiğini java platformu üzerinde çalıştığını gördüm.

Jardosyaları da içeriklerine ulaşılamasın diye biraz karıştırılmış durumda.

Ufak ipuçlarını takip ediyorum.

Mesela xml dosyaları şöyle başlıyor;

<template format_id="1.7">

1.7 bana bir yerden tanıdık geldi.

Soru - EXCELDEN UDF’YE (UYAP YAZILIM) TABLO AKTARIMI | Excel WEB TR Forum - Excel, Excel Makro, Excel Fonksiyon, Excel Formül, Excel soru ve çözümleri

gibi linklere göz atarken

Nedense 1.7 bana tanıdık geldi.

PDF, Version 1.7 (ISO 32000-1:2008) (loc.gov)

Yani burada doküman şablonu muhtelemen adobe pdf uyumlu olsun amaçlandığından uyumlu bir xml dosyası şablonu tercih edilmiş. (Bu benim tahminim kanıtlanmış bir bilgi değil)

Tabi bu durumda eksi bir pdf referansına da bakmak gerekiyor.

PDF Reference, version 1.7 (adobe.com)

Yani hazır bir şablın kullanılıyor gördüşüm kadarıyla,

<?xml version="1.0" encoding="UTF-8" ?>  
   
  <template format_id="1.7" > 
  <content><![CDATA[Bu bir denemedir. 
   
   
   
   
  BU DA BİR DENEMEDİR 
  ]]></content><properties><pageFormat mediaSizeName="1" leftMargin="70.875" rightMargin="70.875" topMargin="70.875" bottomMargin="70.875" paperOrientation="1" headerFOffset="20.0" footerFOffset="20.0" /></properties><styles><style name="default" description="Geçerli" bold="false" FONT_ATTRIBUTE_KEY="javax.swing.plaf.FontUIResource[family=Tahoma,name=Tahoma,style=plain,size=11]" family="Tahoma" size="11" italic="false" /><style name="hvl-default" size="12" description="Gövde" family="Times New Roman" /></styles> 
  <elements > 
  <paragraph resolver="hvl-default"><content startOffset="0" length="2" /><content spellError="false" startOffset="2" length="16" /></paragraph><paragraph resolver="hvl-default"><content spellError="false" startOffset="18" length="1" /></paragraph><paragraph resolver="hvl-default"><content spellError="false" startOffset="19" length="1" /></paragraph><paragraph resolver="hvl-default"><content spellError="false" startOffset="20" length="1" /></paragraph><paragraph resolver="hvl-default"><content spellError="false" startOffset="21" length="1" /></paragraph><paragraph Alignment="1" resolver="hvl-default"><content spellError="false" startOffset="22" length="20" /></paragraph> 
  </elements> 
   
  </template> 
  

Örneğindeki gibi bir şablon mevcut.

Fakat bu şablonda bir doküman editörü henüz ortada yok.

Yani bir editör kullancaksanız çıktısı bu formatta olmalı.

Yada word, excel gibi bir dosyayı xml e çevirecekseniz bunlarda yukarıdaki şablona uyumlu olmalı.

Bu standart bir format gibi durmadığı gibi pdf ile ilişkisi bulunabilirse belki pdf to xml ler araştırılarak o da bulunabilir. O kısma da bakayım.

Anladığım kadarıyla rich text leri xml e onları da pdf e dönüştürmek mantığı ile ilerliyorlar.

PDF ile bağlantsını çözsek dahi bu xml şablonunu oluşturmak zahmetli. Yada bu şablona uyan bir dönüştürücü tasarlamak da ne kadar güvenilir emin değilim.

Beraber bakıp kafa yormak zorlamak isteyen olursa zorlarız sonuna kadar ama bir yerden sonra zaten e imza kısmında takılacağız, tübitak esya apilerini bana vermez sanırım. Zaten elimde e imza için test edebileceğim bir kart okuyucu yada dongle da yok. Ama doküman oluşturma aşamas üzerinde denemelere devam edebiliriz.

2 Beğeni

Boyle degilmis; XML+ZIP formati, ve Java aplikasyonundaki OpenOffice kutuphaneleri yaniltmis beni.

Hic kimsenin okuyamadigi bir format uydurmus olacaklarina inanmak istememis de olabilirim.

Kullanmayin.

Bu basliktan cekiliyorum.

1 Beğeni

Merhaba. Yeni üye olduğum için 3 mesaj sınırlaması nedeniyle başka bir üyelik açmak zorunda kaldım. Öncelikle emek veren herkese teşekkür etmek isterim.

İşim gereği bir excel tablosundan tek tek verileri çekip bir şablon dilekçeye eklemem gerekiyor. Bu işlemi benim için yaparak bana zaman kazandıracak bir kod yazmaya çalışırken bu başlığa denk geldim. Python bilgim çok zayıf. Bu nedenle yanlış yapma ihtimalim çok yüksek.

@semtex zipfile ile content.xml dosyasını dışarı çıkardığını belirttikten sonra bu dosyayı editlemek mümkün müdür diye bakındım. content.xml belgesini masaüstüne çekip wordpad ile açıp " <![CDATA[Bu bir denemedir." kısmını el ile değiştirip kaydettikten sonra fare ile sürükleyerek winrar klasörünün içine attım. Bu ilkel ve barbar yöntem ile .udf üzerinde değişiklik yapabildim.

@semtex content.xml dosyasını ziplemeyi çözdüğü için bana sadece content.xml dosyasını değiştirmek kaldı. Kendisine yüzlerce kez teşekkür ederim.

xml verilerini çekebilen birkaç kütüphane buldum fakat önce xml mantığını öğrenmem gerekiyor.

kısmına müdahale etmeyi öğrendikten sonra planım şu:
  1. Şablon dilekçemi oluşturup excelden çekilecek verileri {} ile belirterek kaydetmek,
  2. Kaydettiğim udf belgesinin xml dosyasını programa çekmek,
  3. openpyxl kütüphanesi ile elimdeki excel dosyasını programa çekmek,
  4. İlk udf dosyasının CDATA kısmını bit string değişkene atayarak formatlayarak printlemek.
  5. Printli halini xml dosyasına eklemek,
  6. xml dosyasını ziplemek
  7. Döngü halinde bu işlemi yapmak.

Destek veren herkese teşekkür ederim. XML nedir, Root, tree, child, tag nedir? Python ile bir xml dosyasında nasıl metin araması yaptırılır? Değişiklik nasıl yapılır? Bu soruları çözüp size bildireceğim.

Not: İmzalama için gerekli kütüphane var mı bilmiyorum ama en son o kısım ile ilgileneceğim. Birçok program UYAP belgesi oluşturma, imzalama, UYAP veritabanına sorgu gönderme gibi işlemleri yapabiliyor. Kullandıkları dil nedir bilmem ama sonuç olarak birileri yapabildiyse biz de yapabiliriz diye düşünüyorum.

Merhaba,
Ben de acemi bir python kullanıcı olarak soruyu ilk gördüğümde;
Basit düşünerek XML dosyasındaki içeriği değiştirmeyi düşündüm ancak bunun tekrar kullanılabilir olacağını tahmin etmedim.

Eğer bu yöntem işinize yararsa yani dediğiniz gibi UYAP editörü ile bir şablon dosya oluşturup değiştirmek istediğiniz kısımları “değişken_ad_soyad”, “degisken_tc_kimklik_no”, … gibi kaydederek excelden çektiğiniz verileri bu değerlerle değiştirip zip’leyerek istediğinizi elde edebiliyorsanız işiniz oldukça kolay.

XML içeriğini with open("content.xml", "r", encoding="utf-8") as dosya: kodu ile okumaya çalıştığımda ilk etapta hata aldım ancak sonraki denemelerimde içeriğe sorunsuz eriştim. Eğer böyle hata alırsanız, XML dosya uzantısını TXT olarak değiştirip (yeniden adlandırarak) with open("content.txt", "r", encoding="utf-8") as dosya: kodu ile içeriğe erişebilir, değişiklikleri yapıp işiniz bittikten ve dosyayı kaydedildikten sonra tekrar uzantıyı XML’e çevirebilirsiniz.

aşağıdaki basit kod ile xml dosyasının tamamı icerik değişkenine atandı,
replace() metodu yardımıyla, içerikteki “Adı Soyadı” ifadesi “Mustafa Halil” olarak değiştirildi.

with open("content.xml", "r", encoding="utf-8") as dosya:
    icerik = dosya.read()

    icerik = icerik.replace("Adı Soyadı", "Mustafa Halil")
    print(icerik)

https://giresun.adalet.gov.tr/amp/uzlastirma-evrak-ornekleri-icin-tiklayiniz adresinden indirdiğim UDF dosyalarında “documentproperties.xml” adında ikinci bir dosya gördüm. sanırım bu UDF dosyasının imzası ile alakalı. içeriği şöyle;

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="uyapsicil">134962</entry>
</properties>

e-imza için sadece imzacının sicil numarası mı kullanılıyor? basit geldi bana :slight_smile: