Potrzebuję mieć listę punktowaną w dokumencie tekstowym z wcięciami i punktorami niestandardowymi, która jest generowana przez Javę z interfejsem Apache POI API. Szukałem i nie mogę znaleźć go dla dokumentu Word. Jest dostępny dla slajdów Powerpoint za pomocą pola tekstowego. Ale nie chcę używać pola tekstowego. Proszę daj mi znać, jak to osiągnąć. Każda pomoc doceniona. Dzięki! Z poważaniem, Arun Ganesh. PTworzenie listy wypunktowania na dokumencie tekstowym przy użyciu języka Java z interfejsem Apache POI API
Odpowiedz
POI HWPF jest niedojrzały api - wiodący deweloper otrzymał propozycję pracy Spowodowało podpisania umowy o poufności i został zmuszony do porzucić pracę w nim - i to może nie być możliwe, aby z niego korzystać do wygeneruj pliki, które chcesz.
Zobacz continuation of the post
To jest naprawdę możliwe tylko formatu OOXML w 2007 roku i do góry (za pomocą POI XWPF). Ponieważ jest oparty na XML, możesz zawsze wykonywać manipulacje DOM, aby osiągnąć to, co chcesz. Najłatwiejszym sposobem tworzenia punktów jest utworzenie listy punktorów i dodanie zakładki jako tekstu tego punktu. Podczas przetwarzania dokumentu, znaleźć zakładkę, a następnie uzyskać węzeł DOM z
`org.w3c.dom.Node bkmk = bookmark.getctBookmark).getDomNode();`
Następnie skopiuj rodzica węzła bkmk, którym jest tag pkt. Masz teraz duplikat znacznika akapitu, który ma wszystkie niezbędne znaczniki podrzędne, aby stać się częścią listy punktorów. Zobacz, w OOXML nie ma struktury listy punktorów, jest to po prostu seryjna kontynuacja akapitów, które mają podobne znaczniki sub numeracji.
<w:p>
<w:pPr>
<w:pStyle w:val="style0" />
<w:numPr>
<w:ilvl w:val="1" />
<w:numId w:val="2" />
</w:numPr>
<w:tabs>
<w:tab w:leader="none" w:pos="1807" w:val="left" />
</w:tabs>
<w:spacing w:after="0" w:before="120" />
<w:ind w:end="907" w:hanging="360" w:start="907" />
<w:jc w:val="both" />
</w:pPr>
<w:bookmarkStart w:id="1" w:name="GIVES" />
<w:r>
<w:t>To be inserted Next Bullet</w:t>
</w:r>
<w:bookmarkEnd w:id="1" />
<w:r>
<w:rPr>
<w:rFonts w:eastAsia="Times New Roman" />
<w:color w:val="000000" />
<w:lang w:eastAsia="en-US" />
</w:rPr>
</w:r>
</w:p>
Kluczowe tagi są i i nie jestem bardzo obeznany ze znaczeń XML znaczników, ale jeśli rozpakować dowolny docx i spojrzeć na document.xml (po sformatowaniu go schludny, oczywiście) widać różnice między akapitami zi bez numeracji.
Po uzyskaniu klonu tagu można przemieścić węzeł za pomocą DOM, aby uzyskać i zamienić wartość węzła według potrzeb, lub można użyć xpath, aby znaleźć węzeł (w: r/w : t). Trzeba Instalatora NamespaceContext i nadać mu odpowiedni kod, aby zrozumieć w: prefiks
NodeList nl;
XPath xp = XPathFactory.newInstance().newXPath();
NamespaceContext nsContext = new NamespaceContext(){
@Override public String getNamespaceURI(String prefix) {
if (prefix.equals("w")) {
return "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
}
return null;
}
@Override public String getPrefix(String namespaceURI) {
return null;
}
@Override public Iterator<?> getPrefixes(String namespaceURI) {
return Collections.emptyList()
.iterator();
}
};
xp.setNamespaceContext(nsContext);
nl = (NodeList) xp.evaluate("w:r/w:t", copy, XPathConstants.NODESET);
Teraz przemierzać NodeList, setNodeValue ("Hello World"). Możesz to zrobić po sklonowaniu i wykonaniu: paragraph.getParentNode().insertBefore(bkmk, paragraph);
, aby uzyskać jak najwięcej punktów. Jeśli zrobisz
twój nowy punkt zostanie umieszczony na samym końcu dokumentu!
Tak więc, musisz zrobić insertBefore (jest to jedyna manipulacja węzłem domowym dostępna poza dołączaniem). Pozostawia to twój oryginalny pusty punkt na końcu, z zakładką w nim. Musisz usunąć zakładkę z paragraph.getParentNode(). RemoveChild (paragraph);
Następnie zapisz plik z POI.
Zasadniczo POI nie obsługuje list punktowanych, ponieważ OOXML w rzeczywistości nie obsługuje list wypunktowanych. Listy wypunktowania to tylko paragrafy z znacznikami numerowania jako dziećmi.Ale z punktami POI zawsze możesz upaść na podstawowe manipulacje DOM i możesz sprawdzić DOM z rozpakowaniem i uporządkowaniem.
- 1. wstawić wiersz w programie Excel przy użyciu języka Java Apache POI
- 2. Nieprawidłowy podpis nagłówka; IOException z Apache POI w dokumencie Excel
- 3. jak wygenerować hash jak htpasswd Apache przy użyciu języka Java
- 4. Używanie Apache Poi do parsowania tabeli w tabeli w dokumencie tekstowym
- 5. Demon apache commons Błąd "Nie powiodło się tworzenie języka Java"
- 6. Tworzenie i zmienianie tabel Excel za pomocą Apache POI
- 7. Jak utworzyć kod QR przy użyciu języka Java (J2SE)
- 8. Odczytywanie z pliku Excel .xlsx przy użyciu java Apache POI 3.9 Eclipse
- 9. Apache poi format daty
- 10. Zapisuje plik w formacie xlsx przy użyciu Apache POI
- 11. Używanie kolorów niestandardowych z SXSSF (Apache POI)
- 12. Java Apache POI Excel zapisz jako PDF
- 13. Interop z clojure a z niestandardowym iteracyjnym interfejsem API Java
- 14. Apache poi page breaks
- 15. Tworzenie tabeli przy użyciu Win32 API
- 16. Apache POI: SXSSFWorkbook.dispose() nie istnieje
- 17. Wiersze POI Apache numer
- 18. Tworzenie nowej listy odtwarzania przy użyciu ContentResolver
- 19. kopiowanie arkusza skoroszytu do arkusza innego skoroszytu przy użyciu apache POI i java
- 20. Tworzenie „widok” z listy Java
- 21. Wyrównanie pionowe górnej komórki przy użyciu poi
- 22. Apache POI Performance
- 23. Edycja istniejących plików Excela za pomocą jxl api/Apache POI
- 24. Jak prawidłowo generować atrybuty RSID w plikach Worda .docx przy użyciu Apache POI?
- 25. Usuwanie URL z tekstu przy użyciu języka Java
- 26. Tworzenie usługi Spring REST z interfejsem OData
- 27. Jak utworzyć formanty formularza (radio, pole wyboru, przyciski itp.) W programie Excel przy użyciu Apache POI (Java)?
- 28. platforma dźwięku z interfejsem API
- 29. Interakcja z interfejsem API REST z Clojure
- 30. Redefine Nazwany Excel Zakres następnie Zapisz użyciu Apache POI