Clojure. Пример создания файла открытого документа - PullRequest
0 голосов
/ 28 января 2020
import java.net.URI;

import org.odftoolkit.simple.TextDocument;
import org.odftoolkit.simple.table.Cell;
import org.odftoolkit.simple.table.Table;
import org.odftoolkit.simple.text.list.List;

public class HelloWorld {
    public static void main(String[] args) {
        TextDocument outputOdt;
    try {
        outputOdt = TextDocument.newTextDocument();

        // add image
        outputOdt.newImage(new URI("odf-logo.png"));

        // add paragraph
        outputOdt.addParagraph("Hello World, Hello Simple ODF!");

        // add list
        outputOdt.addParagraph("The following is a list.");
        List list = outputOdt.addList();
        String[] items = {"item1", "item2", "item3"};
        list.addItems(items);

        // add table
        Table table = outputOdt.addTable(2, 2);
        Cell cell = table.getCellByPosition(0, 0);
        cell.setStringValue("Hello World!");

        outputOdt.save("HelloWorld.odt");
    } catch (Exception e) {
        System.err.println("ERROR: unable to create output file.");
    }
  }
 }

1 Ответ

2 голосов
/ 28 января 2020

Вам потребуется импортировать библиотеку ODF Kit в зависимости:

 [org.odftoolkit/simple-odf "0.9.0-RC1"]]

Версия Clojure:

(ns clj-odf.core
 (:import java.net.URI
          org.odftoolkit.simple.TextDocument
          org.odftoolkit.simple.table.Cell
          org.odftoolkit.simple.table.Table
          org.odftoolkit.simple.text.list.List))

(defn generate-odf [filename]
  (let [outputOdt (TextDocument/newTextDocument)
        uri       (URI. "/home/manuel/Documents/lisplogo_fancy_256.png")
        items     (into-array String ["Primer Asunto" "Segundo punto" "Tercer negocio" "Too long list"])]
 (try
   (println "Generating ODF file")
   (.addParagraph outputOdt "Hello World, taradazo Hello Simple ODF!")
   (.newImage outputOdt uri)
   (.addParagraph outputOdt "Hello World, taradazo Hello Simple ODF AFTER IMAGE!")
   (.addParagraph outputOdt "The following is a list.")

   ;; doto macro, first argument is passed to all the next nested forms  
   (doto (.addList outputOdt) 
    (.addItems items))


   ;; ".." threading macro, Expands into a member access (.) of the first member on the first
   ;; argument, followed by the next member on the result, etc.
  (.. outputOdt
     (addTable 2 2)
     (getCellByPosition 0 1)
     (setStringValue "I'm in some cell table!"))


   (.save outputOdt filename)
   (catch Exception e (str "ERROR: unable to create output file: " (.getMessage e))))))

Результат:

enter image description here

...