ITextRenderer: Dostosuj wysokość strony do zawartości
Używam ITextRenderer do generowania pliku PDF z HTML, a co muszę zrobić, to paragon fiskalny. Ten paragon ma dynamiczną szerokość i oczywiście dynamiczną zawartość. To powiedziawszy, wysokość treści zawsze będzie inna i właśnie teraz staram się znaleźć sposób na dostosowanie wysokości strony PDF do treści. Jeśli jest za duży, na końcu znajduje się długa biała sekcja, a jeśli ma to na celu skrócenie pliku PDF, należy go paginować i potrzebuję go tylko na jednej stronie.
używam@page {size: Wpx Hpx;}
aby ustawić rozmiar strony, ale jest to prawie niemożliwe (byłoby bardzo bolesne) obliczyć wysokość zawartości na podstawie szerokości i danych.
Oto kod generujący plik PDF:
ITextRenderer renderer = new ITextRenderer();
byte[] bytes = htmlDocumentString.toString().getBytes("UTF-8");
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource(bais);
Document doc = builder.parse(is);
renderer.setDocument(doc, null);
renderer.layout();
renderer.createPDF(outputStream);
outputStream.flush();
outputStream.close();
Próbowałem teżrenderer.getSharedContext().setPrint(false);
, ale to rzuca NPE.
Również@page {-fs-page-sequence: "none";}
bez szczęścia.
-------------- "Rozwiązanie" ----------------
Rozwiązanie, które znalazłem, nie jest nawet idealne, ale działa!
@page {
size: Wpx 1px;
}
* { page-break-inside: always; }
Spowoduje to wygenerowanie stron 1px dla całej zawartości. Następnie muszę tylko powiedzieć drukarce, aby wydrukowała wszystkie strony0px margin
między stronami.
Dlaczego to rozwiązanie nie jest idealne? Rozmiar pliku wynosi od 1 do 2 KB do 200 KB .. niezbyt dobry, gdy przesyłamy strumieniowo przez 3G.