2015-10-12 11 views
0

Я использую iText для создания PDF из XML-файла с содержимым в HTML. Все работает, кроме одной мелочи.
Когда у меня есть блок текста, содержащий часть в BOLD, BOLD не появляется в результирующем файле PDF. Если у меня есть полная фраза в BOLD, она работает нормально.
Примеры:Java: BOLD с iText в формате PDF Не работает корректно

<DIV><FONT face='Arial' size='10'><B>The BOLD for this phrase works</B></FONT></DIV> 
<DIV><FONT face='Arial' size='10'>The BOLD for <B>this part of the phrase </B> doesn't work</FONT></DIV> 

С «Italic» или «Подчеркнутый», я могу сделать тот же тест, но у меня нет этой проблемы. Он работает ...
Небольшая точность: если я использую тег <B> в сочетании с тегом <U> или <I>, для части блока текста, он тоже работает.
Пример:

<DIV><FONT face='Arial' size='10'>The combination of <B><I>BOLD and something else (U or I)</I></B> works fine.</FONT></DIV> 


Для контекста: WebApp с распорками, Ф не сохраняются в виде файла, но послали в навигатор в качестве ответа. Как было предложено ответом, я обновляю версию iText с 1.4.8 до 5.5.7.
Для кода HTML, сохраненного в XML-файле, вы можете увидеть примеры выше.
Для кода Java (я выбрал код из нескольких методов longly. Надеюсь, я ничего не забыл ...).

ByteArrayOutputStream baoutLettre = new ByteArrayOutputStream(); 
Document document = new Document(); 
PdfWriter myWriter = PdfWriter.getInstance(document, baoutLettre); 
handleHeaderFooter(request, response, document, Constantes.Type_LETTRE); 
document.open(); 
String lettreContent = FileHelper.readFile("myLetter.xml"); 
XmlParser.parse(document, new ByteArrayInputStream(lettreContent.getBytes("UTF-8")), getTagMap()); 
document.close(); 
ByteArrayOutputStream outTmp = new ByteArrayOutputStream(64000); 
PdfCopyMerge pdfCM = new PdfCopyMerge(outTmp); 
pdfCM.addDocument(baoutLettre.toByteArray()); 
pdfCM.close(); 
ByteArrayOutputStream outPDF = addPageNumber(outTmp.toByteArray(), soc, dicoEdition, request); 
outPDF.writeTo(request.getOutputStream()); 

А для класса PdfCopyMerge:

public class PdfCopyMerge { 

private ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
private Document document = null; 
private PdfCopy writer = null; 

public PdfCopyMerge(ByteArrayOutputStream stream) { 
    super(); 
    outStream = stream; 
}  
public int addDocument(byte[] pdfByteArray) { 
    int numberOfPages = 0; 
    try { 
     PdfReader reader = new PdfReader(pdfByteArray); 
     numberOfPages = reader.getNumberOfPages(); 
     if (this.document == null) { 
      this.document = new Document(reader.getPageSizeWithRotation(1)); 
      this.writer = new PdfCopy(this.document, this.getOutputStream()); 
      this.document.open(); 
     } 
     PdfImportedPage page; 
     for (int i = 0; i < numberOfPages;) { 
      ++i; 
      page = this.writer.getImportedPage(reader, i); 
      this.writer.addPage(page); 
     } 
     PRAcroForm form = reader.getAcroForm(); 
     if (form != null) { 
      this.writer.copyAcroForm(reader); 
     } 
    } catch (Exception e) { 
     logger.error(e.getMessage(),e); 
    } 
    return numberOfPages; 
} 

ли сталкиваются с той же проблемой кто-нибудь? Я ищу любые полезные идеи ...
Спасибо.

+3

Работает с текущим выпуском (5.5.7) iText и XML Worker. – rhens

+0

Можете ли вы переключить шрифты? Если да, попробуйте явно переключиться на полужирный шрифт. (Я не знаю iText достаточно хорошо, чтобы узнать, изменяют ли они шрифт для жирного шрифта или просто откармливают текущий шрифт). –

+0

Нет необходимости менять шрифт, потому что тот, который я использую, хорош, когда у меня есть полная фраза ... В моих примерах первый DIV работает нормально, но не второй. – Dunedain69

ответ