IText зависает при добавлении элемента в документ ⇐ JAVA
-
Anonymous
IText зависает при добавлении элемента в документ
У меня есть устаревшее приложение, использующее itext 5.5.6, и я использую его для преобразования HTML в PDF. Я столкнулся с проблемой, когда конечный пользователь вводит очень большое слово, например:
ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа!!! это приводит к тому, что Itext зависает в следующей строке и не генерирует никаких исключений:
document.add(myPdfPTable) Такое поведение происходит только на сервере приложений Websphere ND 9.0.5.13 и не происходит на сервере tomcat
ниже мой код:
public DocumentgeneratePDF(Document document,String fontPath,String html) выдает исключение { Шрифт arabicFont = FontFactory.getFont(fontPath, BaseFont.IDENTITY_H, 14); FontFactory.register(fontPath); Шрифт полужирный = FontFactory.getFont(fontPath, BaseFont.IDENTITY_H, 14f, Font.BOLD); Шрифт Regularfont = FontFactory.getFont(fontPath, BaseFont.IDENTITY_H, 10); List pdfElements = getElementsFromHtml(html, fontPath); PdfPTable contentTable = новый PdfPTable (1); contentTable.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); contentTable.setSplitLate(ложь); contentTable.setWidthPercentage(90); contentTable.setExtendLastRow(истина); for (Элемент element: pdfElements) { Ячейка PdfPCell = новый PdfPCell(); cell.setNoWrap(ложь); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setVerticalAlignment(Element.ALIGN_CENTER); cell.setBorder(Rectangle.NO_BORDER); cell.setArabicOptions(ColumnText.DIGITS_EN2AN); ячейка.addElement(элемент); contentTable.addCell(ячейка); } document.add(contentTable); возвратный документ; } public ArrayList getElementsFromHtml(final String html, String fontPath) выдает IOException { окончательные элементы ElementList = новый ElementList(); Файл стиля StringBuilder = новый StringBuilder(); stylefile.append("body {размер шрифта: 14pt;font-family:MyCustomFont;line-height: 1,5;dir:rtl}"); stylefile.append("table{padding: 0px;border-spacing: 0px;font-size: 14pt;}"); stylefile.append("td{height:30px;}"); CSSResolver cssResolver = новый StyleAttrCSSResolver(); CssFile cssFile = XMLWorkerHelper.getCSS(new ByteArrayInputStream(stylefile.toString().getBytes())); cssResolver.addCss(cssFile); XMLWorkerFontProvider fontProvider = новый XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFOONTS); fontProvider.register(fontPath, "MyCustomFont"); CssAppliers cssAppliers = новый CssAppliersImpl (fontProvider); HtmlPipelineContext htmlContext = новый HtmlPipelineContext (cssAppliers); htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory()); окончательный ElementHandlerPipeline end = новый ElementHandlerPipeline (elements, null); окончательный HtmlPipeline htmlPipeline = новый HtmlPipeline (htmlContext, end); окончательный CssResolverPipeline cssPipeline = новый CssResolverPipeline (cssResolver, htmlPipeline); окончательный рабочий XMLWorker = новый XMLWorker(cssPipeline, true); окончательный XMLParser p = новый XMLParser(worker, Charset.forName("UTF-8")); окончательная строка разрешенаHtml = "" + html + ""; p.parse(new ByteArrayInputStream(resolvedHtml.getBytes(Charset.forName("UTF-8"))), Charset.forName("UTF-8")); вернуть новый ArrayList(elements); }
У меня есть устаревшее приложение, использующее itext 5.5.6, и я использую его для преобразования HTML в PDF. Я столкнулся с проблемой, когда конечный пользователь вводит очень большое слово, например:
ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа!!! это приводит к тому, что Itext зависает в следующей строке и не генерирует никаких исключений:
document.add(myPdfPTable) Такое поведение происходит только на сервере приложений Websphere ND 9.0.5.13 и не происходит на сервере tomcat
ниже мой код:
public DocumentgeneratePDF(Document document,String fontPath,String html) выдает исключение { Шрифт arabicFont = FontFactory.getFont(fontPath, BaseFont.IDENTITY_H, 14); FontFactory.register(fontPath); Шрифт полужирный = FontFactory.getFont(fontPath, BaseFont.IDENTITY_H, 14f, Font.BOLD); Шрифт Regularfont = FontFactory.getFont(fontPath, BaseFont.IDENTITY_H, 10); List pdfElements = getElementsFromHtml(html, fontPath); PdfPTable contentTable = новый PdfPTable (1); contentTable.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); contentTable.setSplitLate(ложь); contentTable.setWidthPercentage(90); contentTable.setExtendLastRow(истина); for (Элемент element: pdfElements) { Ячейка PdfPCell = новый PdfPCell(); cell.setNoWrap(ложь); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setVerticalAlignment(Element.ALIGN_CENTER); cell.setBorder(Rectangle.NO_BORDER); cell.setArabicOptions(ColumnText.DIGITS_EN2AN); ячейка.addElement(элемент); contentTable.addCell(ячейка); } document.add(contentTable); возвратный документ; } public ArrayList getElementsFromHtml(final String html, String fontPath) выдает IOException { окончательные элементы ElementList = новый ElementList(); Файл стиля StringBuilder = новый StringBuilder(); stylefile.append("body {размер шрифта: 14pt;font-family:MyCustomFont;line-height: 1,5;dir:rtl}"); stylefile.append("table{padding: 0px;border-spacing: 0px;font-size: 14pt;}"); stylefile.append("td{height:30px;}"); CSSResolver cssResolver = новый StyleAttrCSSResolver(); CssFile cssFile = XMLWorkerHelper.getCSS(new ByteArrayInputStream(stylefile.toString().getBytes())); cssResolver.addCss(cssFile); XMLWorkerFontProvider fontProvider = новый XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFOONTS); fontProvider.register(fontPath, "MyCustomFont"); CssAppliers cssAppliers = новый CssAppliersImpl (fontProvider); HtmlPipelineContext htmlContext = новый HtmlPipelineContext (cssAppliers); htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory()); окончательный ElementHandlerPipeline end = новый ElementHandlerPipeline (elements, null); окончательный HtmlPipeline htmlPipeline = новый HtmlPipeline (htmlContext, end); окончательный CssResolverPipeline cssPipeline = новый CssResolverPipeline (cssResolver, htmlPipeline); окончательный рабочий XMLWorker = новый XMLWorker(cssPipeline, true); окончательный XMLParser p = новый XMLParser(worker, Charset.forName("UTF-8")); окончательная строка разрешенаHtml = "" + html + ""; p.parse(new ByteArrayInputStream(resolvedHtml.getBytes(Charset.forName("UTF-8"))), Charset.forName("UTF-8")); вернуть новый ArrayList(elements); }
Мобильная версия