2015-09-24 5 views
3

Я пытаюсь преобразовать HTML в PDF, но проблема я лицо, что HTML таблица теги ширина не получает установлен правильно ..ширина стола не установлен в iTextSharp при преобразовании HTML в PDF

Это мой HTML

<table cellpadding='4' cellspacing='4' border='0' width='100%' style='width:100%'> 
    <tr style='background-color:#000000'> 
     <td colspan='2' align='center' valign='middle' width='100%'> 
      <font face='Calibri' size='6' color='#FFFFFF'>Retail Natural Gas Deal Sheet</font> 
     </td> 
    </tr> 
    <tr> 
     <td colspan='2' width='100%'>&nbsp;</td> 
    </tr> 
    <tr> 
     <td width='90%' style='width:90%'> 
      <table cellpadding='0' cellspacing='0' border='0' width='100%'> 
       <tr> 
        <td width='42%'> 
         <font face='Calibri' size='4'> 
          <b>Deal Number</b> 
         </font> 
        </td> 
        <td width='1%'>&nbsp;</td> 
        <td width='57%'> 
         <font face='Calibri' size='4'> 
          <b>15RTLG7149</b> 
         </font> 
        </td> 
       </tr> 
       <tr> 
        <td colspan='3' width='100%'>&nbsp;</td> 
       </tr> 
       <tr> 
        <td width='42%'> 
         <font face='Calibri' size='2'> 
          <b>Trade Date</b> 
         </font> 
        </td> 
        <td width='1%'>&nbsp;</td> 
        <td width='57%'> 
         <font face='Calibri' size='2'>February 09, 2015</font> 
        </td> 
       </tr> 
       <tr> 
        <td width='42%'> 
         <font face='Calibri' size='2'> 
          <b>Price Date</b> 
         </font> 
        </td> 
        <td width='1%'>&nbsp;</td> 
        <td width='57%'> 
         <font face='Calibri' size='2'>February 09, 2015</font> 
        </td> 
       </tr> 
       <tr> 
        <td width='42%'> 
         <font face='Calibri' size='2'> 
          <b>Authorize Date</b> 
         </font> 
        </td> 
        <td width='1%'>&nbsp;</td> 
        <td width='57%'> 
         <font face='Calibri' size='2'>February 09, 2015</font> 
        </td> 
       </tr> 
       <tr> 
        <td colspan='3' width='100%'>&nbsp;</td> 
       </tr> 
      </table> 
     </td> 
     <td width='10%' style='width:10%' valign='top'> 
      <table cellpadding='0' cellspacing='0' border='0' width='100%'> 
       <tr> 
        <td colspan='2' align='center' width='100%'> 
         <font face='Calibri' size='2'> 
          <b>Volumes (MMMBtu)</b> 
         </font> 
        </td> 
       </tr> 
      </table> 
     </td> 
    </tr> 
</table> 

это C# код я использую для создания формата PDF

 Document pdfDoc = new Document(); 
     //Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); 
     //HTMLWorker htmlparser = new HTMLWorker(pdfDoc); 
     using (MemoryStream memoryStream = new MemoryStream()) 
     { 
      PdfWriter writer = PdfWriter.GetInstance(pdfDoc, memoryStream); 
      pdfDoc.Open(); 
      XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, new StringReader(HTML)); 
      pdfDoc.Close(); 
      byte[] bytes = memoryStream.ToArray(); 
      memoryStream.Close(); 

      return bytes; 
     } 

, но это, как его визуализированного в формате PDF .. Я не в состоянии найти правильные ответы .. мне нужно помогите .. Спасибо в advan се ..

http://i.stack.imgur.com/8WyBh.jpg

+0

Вы не говорите нам, используете ли вы 'HTMLWorker' (который устарел/больше не поддерживается = ваша проблема не может быть решена) или [XML Worker] (http://itextpdf.com/product/xml_worker). Я буду тестировать с помощью XML Worker, но, пожалуйста, признайте, что ваш HTML довольно неудобен. –

+0

Да, я использую xmlworker .. обновили это в оригинальной статье. – SKumar

+0

Как HTML выглядит так, как вы ожидаете в браузере? Я думаю, что ошибка в вашем HTML, а не в XML Worker. См. Мой ответ. –

ответ

3

Я копию вставили свой HTML в текстовом редакторе (Notepad ++; отмечен 1 на снимке экрана ниже). Я открыл этот HTML-код в браузере (Chrome, отмечен 2 на снимке экрана ниже). Я конвертировал HTML в PDF (используя XML Worker, PDF помечен 3 на снимке экрана ниже).

enter image description here

Когда я сравниваю то, что я вижу в браузере с тем, что я вижу в формате PDF, у меня сложилось впечатление, что XML работник IText является делает большую работу. Не так много различий между тем, что я вижу в браузере, и тем, что я вижу в PDF.

Однако, когда я смотрю на ваш HTML, я вижу несоответствия. Вы пробовали просматривать свой HTML-код в браузере? Это не выглядит так, как вы ожидали, не так ли? Похоже, проблема не вызвана iText, но она вызвана тем, как вы создаете свой HTML. Скажите, пожалуйста, если HTML выглядит так, как вы ожидаете в браузере. Если нет, объясните, что вы ожидаете. Прямо сейчас, трудно понять проблему, поскольку то, что я вижу в PDF, очень хорошо соответствует тому, что я вижу в браузере.

Update:

В вашем вопросе, вы не добавили никаких границ (border='0'), и это было трудно понять, что вы имеете в виду. Я теперь добавил границы, так что HTML выглядит следующим образом:

enter image description here

Вы хотите PDF выглядеть следующим образом:

enter image description here

Это очень легко, если вы облегчите ваш HTML:

<table cellpadding='4' cellspacing='4' border='1' width='100%' style='width:100%'> 
    <tr style='background-color:#000000'> 
     <td colspan='2' align='center' valign='middle'> 
      <font face='Calibri' size='6' color='#FFFFFF'>XXXX XXXXX XXXXX</font> 
     </td> 
    </tr> 
    <tr> 
     <td colspan='2'>&nbsp;</td> 
    </tr> 
    <tr> 
     <td width='90%' style='width:90%'> 
      <table cellpadding='0' cellspacing='0' border='1' width='100%'> 
       <tr> 
        <td width='42%'> 
         <font face='Calibri' size='4'> 
          <b>Deal Number</b> 
         </font> 
        </td> 
        <td width='1%'>&nbsp;</td> 
        <td width='57%'> 
         <font face='Calibri' size='4'> 
          <b>XXXXXXXXXX</b> 
         </font> 
        </td> 
       </tr> 
       <tr> 
        <td colspan='3' width='100%'>&nbsp;</td> 
       </tr> 
       <tr> 
        <td width='42%'> 
         <font face='Calibri' size='2'> 
          <b>Trade Date</b> 
         </font> 
        </td> 
        <td width='1%'>&nbsp;</td> 
        <td width='57%'> 
         <font face='Calibri' size='2'>February 09, 2015</font> 
        </td> 
       </tr> 
       <tr> 
        <td width='42%'> 
         <font face='Calibri' size='2'> 
          <b>Price Date</b> 
         </font> 
        </td> 
        <td width='1%'>&nbsp;</td> 
        <td width='57%'> 
         <font face='Calibri' size='2'>February 09, 2015</font> 
        </td> 
       </tr> 
       <tr> 
        <td width='42%'> 
         <font face='Calibri' size='2'> 
          <b>Authorize Date</b> 
         </font> 
        </td> 
        <td width='1%'>&nbsp;</td> 
        <td width='57%'> 
         <font face='Calibri' size='2'>February 09, 2015</font> 
        </td> 
       </tr> 
       <tr> 
        <td colspan='3' width='100%'>&nbsp;</td> 
       </tr> 
      </table> 
     </td> 
     <td width='10%' style='width:10%' valign='top'> 
      <table cellpadding='0' cellspacing='0' border='1' width='100%'> 
       <tr> 
        <td colspan='2' align='center' width='100%'> 
         <font face='Calibri' size='2'> 
          <b>Xxxxxxx (XXXXXXX)</b> 
         </font> 
        </td> 
       </tr> 
      </table> 
     </td> 
    </tr> 
</table> 

Что я изменил? Я удалил width='100%' в тегах <td>, где colspan='2'. Эта информация неоднозначна: вы говорите, что две колонки вместе должны занимать 100% от ширины. Однако:

  • Вы уже определили это в <table> тег, где вы также имеете width='100%' и
  • Если клетка имеет Colspan 2, и вы говорите, что эта клетка должна принять 100% ширины, нет никакого способа, чтобы указать ширину каждого столбца. Нет смысла ставить там width='100%'.

iTextSharp определяет ширину столбцов на основе первой строки, где может быть найдена информация о ширине. В этом случае ширина первой строки такая информация представляет собой строку с colspan 2 в таблице с двумя столбцами. Вы определяете ширину этих двух столбцов в совокупности как 100%, а iTextSharp интерпретирует это так, как будто вы хотите сказать, что каждый столбец занимает 50% (100%/2) от ширины.

Если вы удалите эту двусмысленную информацию, iText определит ширину столбцов на основе ширины, определенной в третьей строке (это то, что вы ожидаете).

+0

его фактически правильно отображающий html, так же, как я его хочу .. я не знаю, как разместить изображение в этот комментарий .... – SKumar

+0

Я нашел проблему, добавив границы (в вашем вопросе вы использовали 'border = '0''). Я обновлю свой пример и покажу вам решение. –

+0

http://imgur.com/H58ZV51 – SKumar