PDFBox-Carriage in Konik

203 views
Skip to first unread message

Vadim

unread,
Aug 7, 2014, 7:30:25 AM8/7/14
to koni...@googlegroups.com
Hallo zusammen,

heute hat sich Stefan gemeldet und er würde bei der PDFBox integration in Konik mithelfen.  


Ich wollte mit PDFBox schon längst fertig sein aber das Modell zieht sich länger hin als gedacht, da ich dort ständig Ungereimtheiten stosse. 


Meine Idee war mit PDFBox ein anderes Konzept zu verwenden als ich es für iText gemacht haben.  
Es war insofern komisch da iText Carriage eine Abhängigkeit auf Konik hatte und nicht umgekehrt.:

Mit PDFBox wollte ich den schritt machen und die Abhängigkeit umdrehen. 
Dazu habe ich mir verschiede Konzepte angeschaut, DI, SPI, ResourceFinder,  OSGI und JPF. 
Am ende habe ich mich entschlossen Service Loader von Java 1.6 ist zu verwenden. Damit hat man keine weiteren Abhängigkeiten und sollte alles "out of the box" funktionieren.


Als Resultat zieht man in seinem Project Konik an und eine der PDF Carriages, diejenige welche auf dem Classpath ist wird automatisch verwendet. Damit ist eine Konfiguration unnötig. 








Jochen Stärk

unread,
Aug 7, 2014, 8:12:31 AM8/7/14
to koni...@googlegroups.com
Great, looking forward to this, let me know if I can be of any help, otherwise I will concentrate on Gnuaccounting 0.8.6 w/ Mustang 1.1 and ZUGFeRD 1.0.

Stefan Seidel

unread,
Aug 8, 2014, 7:29:39 AM8/8/14
to koni...@googlegroups.com
Klingt interessant. Static Binding wie SLF4J das macht wäre auch eine Option - einfach Class.forName("io.konik.pdf.StaticCarriageBinder") und die carriages implementieren jeweils diese Klasse. Damit müsste man eben auch nur die beiden dependencies hinzufügen und es funktioniert einfach.

Ich hab mir die noch nicht so angesehen, aber brauchen die Carriages nicht sowieso konik, um z.B. Metadaten aus dem XML zu lesen?

Stefan

Vadim

unread,
Aug 8, 2014, 7:45:08 AM8/8/14
to koni...@googlegroups.com

On Friday, August 8, 2014 1:29:39 PM UTC+2, Stefan Seidel wrote:

Klingt interessant. Static Binding wie SLF4J das macht wäre auch eine Option - einfach Class.forName("io.konik.pdf.StaticCarriageBinder") und die carriages implementieren jeweils diese Klasse. Damit müsste man eben auch nur die beiden dependencies hinzufügen und es funktioniert einfach.

 hört sich gut an, klingt als wäre es eine Option. Ich werde es mir anschauen. 

Ich hab mir die noch nicht so angesehen, aber brauchen die Carriages nicht sowieso konik, um z.B. Metadaten aus dem XML zu lesen?
Das ganze spiel schon zusammen. Diesen einen Parameter für die Guideline/Profil kann man auch übergeben. 
Ich würde gerne Konik ins Zentrum setzen, und nicht die PDF Carriages.

Jochen Stärk

unread,
Oct 25, 2014, 11:27:04 AM10/25/14
to koni...@googlegroups.com
Wie benutz ich denn den PDFBoxInvoiceAppender?
Einfach den PdfHandler ersetzen geht leider nicht und mit dem bekomme ich ein io.konik.harness.exception.InvoiceAppendError: Error appending Invoice.

Der PDFBoxInvoiceExtractor gibt mir ein Byte[] zurück, ich gehe mal davon aus das liefert mir dann XML(?), parse ich das dann selber oder unterstützt mich Konik da irgendwie?

Nebenbei: Im Konik-Beispiel ist CountryCode, Reference, DocumentCode wohl im Import, für Unbedarfte könnt mans angeben (das sähe dann ungefähr so aus wie unten). Bei ZfDate hab ich weder today noch nextmonth gefunden?



   Invoice invoice = new Invoice(ConformanceLevel.BASIC);   
   Date d=new Date();
   invoice.setHeader(new Header()
      .setInvoiceNumber("20131122-42")
      .setCode(DocumentCode._380)
      .setIssued(new ZfDateDay(d.getTime()))
      .setName("Rechnung"));

   Trade trade = new Trade();
   trade.setAgreement(new Agreement()    
         .setSeller(new TradeParty()
               .setName("Seller Inc.")
               .setAddress(new Address("80331", "Marienplatz 1", "München", CountryCode.DE))
               .addTaxRegistrations(new TaxRegistration("DE122...", Reference.FC)))
         .setBuyer(new TradeParty()
               .setName("Buyer Inc.")
               .setAddress(new Address("50667", "Domkloster 4", "Köln", CountryCode.DE))
               .addTaxRegistrations(new TaxRegistration("DE123...", Reference.FC))));

   trade.setDelivery(new Delivery(new ZfDateDay(d.getTime())));

   trade.setSettlement(new Settlement()
         .setPaymentReference("20131122-42")
         .setCurrency(CurrencyCode.EUR)
         .addPaymentMeans(new PaymentMeans()
            .setPayerAccount(new FinancialAccount("DE01234.."))
               .setPayerInstitution(new FinancialInstitution("GENO...")))
         .setMonetarySummation(new MonetarySummation()
            .setLineTotal(new Amount(100, CurrencyCode.EUR))
            .setTaxTotal(new Amount(19, CurrencyCode.EUR))
            .setGrandTotal(new Amount(119, CurrencyCode.EUR))));

   trade.addItem(new Item()
      .setProduct(new Product().setName("Saddle"))
      .setDelivery(new SpecifiedDelivery(new Quantity(1, UnitOfMeasurement.UNIT))));
   invoice.setTrade(trade);



Vadim

unread,
Oct 25, 2014, 11:44:30 AM10/25/14
to koni...@googlegroups.com
Hoi Jochen,

wieso geht PdfHandler nicht? fehlt dir eine passende Methode? Normalerweise macht man dies so wie auf der Webseite beschrieben. 
Wenn du nur PDFBox-Carriage benutzen möchtest dann würde ich es einfach instanziieren.  
new PDFBoxInvoiceAppender()
new PDFBoxInvoiceExtractor()

Wegen dem Beispiel:
Übersichtshalber habe ich today und next month nicht im code snippet definiert.
Das gesamte Bsp. mit allen imports steht auch im Text in der Doku. 

Das mit dem Import  werde ich mal aufnehmen. 
Wie gesagt das Ziel ist es den Leser auf den ersten Blick nicht zu verwirren. (sondern auf den zweiten mit den static import) aber dafür gibt es ja das gesamte Bsp. im file.
Dein Vorschlag werde ich in die Doku aufnehmen. 

Wenn du noch Hilfe brauchst sag bescheid.

Grüsse,
Vadim



Reply all
Reply to author
Forward
0 new messages