Preskočiť na hlavný obsah

Word z HTML v Jave

Tento krátky článok ukazuje ako pomocou knižnice docx4j vytvoriť dokument typu docx (Word).

Potrebné knižnice môžeme nájsť na webe Docx4Java.org alebo v centrálnom repozitári mavenu (tuto cestu som si zvolil aj ja).

Maven dependency:

<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j</artifactId>
    <version>6.0.1</version>
    <type>jar</type>
</dependency>
<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j-ImportXHTML</artifactId>
    <version>6.0.1</version>
</dependency>

Vzorové použitie

Vytvorenie docx dokumentu s jednou tabuľkou:

package net.adamjak.tomas.htmltodocx;

import java.io.File;
import javax.xml.bind.JAXBException;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart;

public class Main {

    private static final String HTML_CODE = "<html><head></head><body><h2>HTML Table</h2><table><tr><th>Company</th><th>Contact</th><th>Country</th></tr><tr><td>Alfreds Futterkiste</td><td>Maria Anders</td><td>Germany</td></tr><tr><td>Centro comercial Moctezuma</td><td>Francisco Chang</td><td>Mexico</td></tr><tr><td>Ernst Handel</td><td>Roland Mendel</td><td>Austria</td></tr><tr><td>Island Trading</td><td>Helen Bennett</td><td>UK</td></tr><tr><td>Laughing Bacchus Winecellars</td><td>Yoshi Tannamuri</td><td>Canada</td></tr><tr><td>Magazzini Alimentari Riuniti</td><td>Giovanni Rovelli</td><td>Italy</td></tr></table></body></html>";
    private static final String USER_DIR = System.getProperty("user.dir");
    private static final File OUTPUT_FILE = new File(USER_DIR + "/output.docx");

    public static void main(String[] args) throws Docx4JException, JAXBException {
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();

        NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
        wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
        ndp.unmarshalDefaultNumbering();

        XHTMLImporterImpl xHTMLImporter = new XHTMLImporterImpl(wordMLPackage);

        wordMLPackage.getMainDocumentPart().getContent().addAll(xHTMLImporter.convert(HTML_CODE, null));
        wordMLPackage.save(OUTPUT_FILE);
    }
}

Zdroje:

[1] https://www.docx4java.org/trac/docx4j
[2] https://github.com/plutext/docx4j-ImportXHTML/blob/master/src/samples/java/org/docx4j/samples/ConvertInXHTMLDocument.java

Komentáre

Obľúbené príspevky z tohto blogu

Príklad paralelného výpočtu v Jave s využitím Fork/Join frameworku

JDK 7 prišlo s novou možnosťou paralelného programovania. Java bola rozšírené o balíček java.util.concurrent v ktorom sa nachádzajú nové triedy ktoré umožňujú jednoduchšie paralelné programovanie nad viac ako jedným (jednovláknovým) jadrom procesora. Hlavné triedy frameworku Fork/Join ktorý uľahčuje paralelné programovanie sú: ForkJoinTask<V> – abstraktná trieda definujúca úlohu ForkJoinPool – trieda riadiaca vykonávanie úloh typu ForkJoinTask<V> RecursiveAction – podtrieda triedy ForkJoinTask<V> určená pre úlohy nevracajúce hodnoty RecursiveTask<V> – podtrieda triedy ForkJoinTask<V> určená pre úlohy vracajúce hodnoty Príklad V príklade bude zotrieďované pole celých čísel troma triediacimi algoritmami (Bubble sort, Selection sort a Insertion sort) so zložitosťou O(n 2 ) . Na lepšiu ukážku budú použité len 2 jadrá procesora čím dosiahneme, že jedna z úloh bude musieť čakať na dokončenie inej. Trieda Main.java : import java.util.ArrayList;

Java - Súčet Listu s objektami BigDecimal

Pri používaní typu BigDecimal som narazil na zaujímavú úlohu a to sčítanie všetkých hodnôt v Liste. Majmä nasledovne definovaný list: List < BigDecimal > listOfBigDecimals = new LinkedList (); 1. spôsob je klasicke preiterovanie celého listu: BigDecimal sum = BigDecimal . ZERO ; for ( BigDecimal number : listOfBigDecimals ) { sum = sum . add ( number ); } 2. spôsobom je využitie stream.reduce() : BigDecimal sum = listOfBigDecimals . stream () . reduce ( BigDecimal . ZERO , BigDecimal :: add ); BONUS: spôsob s použitím reduce() v Kotline : val sum : BigDecimal = listOfBigDecimal . reduce { a , n -> a . add ( n ) }

Formátovanie poznámok pod čiarov v LaTeXe

Najjednoduchšou cestou je použitie hand nastavení z balíčka footmisc . Pre nastavenie odsadenie použijeme voľbu \fotnotemargin nasledovne: \documentclass{article} \usepackage{lipsum} \usepackage[hang]{footmisc} \setlength\footnotemargin{10pt} \begin{document} \null\vfill % iba pre príklad \lipsum*[4]Test\footnote{\lipsum[4]} \end{document} Citované z : http://tex.stackexchange.com/questions/126877/how-can-i-align-a-multiple-line-footnote-text-right-to-the-footnote-mark#126878