Я использую iText для преобразования XHTML в PDF. Я создал XHTML с помощью конвертера XLSX в HTML и очистил его. Здесь вы можете увидеть HTML-страницу. Дело в том, что я не могу преобразовать его в эквивалентный PDF на страницах формата А4. Я пробовал новые и старые библиотеки iText, использовал ITextRenderer, XMLWorkerHelper и HTMLWorker, но никто не создал PDF правильно. Следите за моими попытками.
Пример с внешним CSS (HTML и CSS — это пути):
com.itextpdf.text.Document document = new com.itextpdf.text.Document(PageSize.A4);
PdfWriter pdfWriter = PdfWriter.getInstance
(document, new FileOutputStream(PDF));
document.open();
document.addAuthor("Real Gagnon");
document.addCreator("Real's HowTo");
document.addSubject("Thanks for your support");
document.addCreationDate();
document.addTitle("Please read this");
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
String str = readHtml();
worker.parseXHtml(pdfWriter, document, new FileInputStream(HTML), new FileInputStream(CSS));
document.close();
Пример с ITextRenderer и внутренним CSS, но поскольку он не учитывает теги шрифта, я добавил шрифт программно:
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new ByteArrayInputStream(readHtml().getBytes("UTF-8")));
ITextRenderer renderer = new ITextRenderer();
File tmpFontFile = new File(
"C:\\Android\\workspace\\GestioneCommesse\\WebContent\\resources\\font\\arial_narrow.ttf");
renderer.getFontResolver().addFont(tmpFontFile.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.setDocument(doc, null);
FileOutputStream os = new FileOutputStream(PDF);
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
tf.setOutputProperty(OutputKeys.INDENT, "yes");
tf.transform(new DOMSource(doc), new StreamResult(os));
os.close();
File file = new File("c:\\temp.pdf");
file.createNewFile();
OutputStream os2 = new FileOutputStream(file);
renderer.layout();
renderer.createPDF(os2);
os.close();
Здесь вы можете увидеть два результата, которые я получаю. В одном pdf отсутствует весь css, а в другом я не могу изменить ширину и стиль шрифта:
Example1 создан с помощью XmlWorkerHelper и Пример2 с использованием iTextRenderer
В ЭТОМ примере я получаю результат 2