2017-12-15 7 views
0

iTextsharpライブラリをXmlWorkerバージョン5.5.12.0で使用しています。リストの問題はDIVで囲まれています。c#iTextsharpでxmlworkerが生成されたPDFが破損していますリスト

<body> 
 
<span> 
 
\t <ul> 
 
\t \t <ul> 
 
\t \t \t <li>Project Management 
 
\t \t \t \t <ul> 
 
\t \t \t \t \t <li> 
 
\t \t \t \t \t \t <a class="jwiki-small" data-containerid="2544" data-containertype="14" data-objectid="14695" data-objecttype="102" href="https://SampleUrl.com/DOC-146">Sample Text</a> 
 
\t \t \t \t \t </li> 
 
\t \t \t \t </ul> 
 
\t \t \t </li> 
 
\t \t </ul> 
 
\t </ul> 
 
</span> 
 
</body>

やPDF下の画像のように正しく見えます。

enter image description here

しかし、フォーマットの問題

は一度スタートリストは、あらゆるレベルでの事業部で囲まれています。 pdfのリストはインラインになります。

enter image description here

<body> 
 
<div> 
 
\t <span> 
 
\t \t <ul> 
 
\t \t \t <ul> 
 
\t \t \t \t <li>Project Management 
 
\t \t \t \t \t <ul> 
 
\t \t \t \t \t \t <li> 
 
\t \t \t \t \t \t \t <a class="jwiki-small" data-containerid="2544" data-containertype="14" data-objectid="14695" data-objecttype="102" href="https://SampleUrl.com/DOC-146">Sample Text</a> 
 
\t \t \t \t \t \t </li> 
 
\t \t \t \t \t </ul> 
 
\t \t \t \t </li> 
 
\t \t \t </ul> 
 
\t \t </ul> 
 
\t </span> 
 
</div> 
 
</body>
私はこれを処理するために何かできることはありますか? Divがリストの形成に影響を与えるのはなぜですか?

FYI、ここでは私が使用しているCreatePDFメソッドです。まず

private void CreatePDF(string html) 
 
     { 
 
      
 

 
      var document = new Document(iTextSharp.text.PageSize.A4,20,20,20,20); 
 
      var memoryStream = new MemoryStream(); 
 
\t \t \t 
 
      using (var pdfWriter = PdfWriter.GetInstance(document, memoryStream)) 
 
      { 
 
       document.Open(); 
 
       var htmlContext = new HtmlPipelineContext(null); 
 
       htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); 
 
       htmlContext.SetImageProvider(new CustomItextImageProvider());    
 
       htmlContext.CharSet(Encoding.UTF8); 
 
       
 
       var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true); 
 
       var pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, pdfWriter))); 
 
       
 
       var xmlWorker = new XMLWorker(pipeline, true); 
 
       
 
       var xmlParser = new XMLParser(true,xmlWorker); 
 
       
 

 
       StringReader rdr = new StringReader((html)); 
 
       xmlParser.Parse(rdr); 
 

 
       pdfWriter.CloseStream = false; 
 

 
       document.AddCreator("iTextSharp"); 
 
       document.AddAuthor("ThreeWill"); 
 
       document.Close(); 
 

 
       string fileName = @"c:\temp\" + "test" + DateTime.Now.ToString("yyyy-mm-dd hh.mm.ss") + ".pdf"; 
 
       var outputFileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write); 
 
       memoryStream.Position = 0; 
 
       memoryStream.WriteTo(outputFileStream); 
 
       
 
       outputFileStream.Close(); 
 

 

 
      } 
 

 
     }

+0

iText 7.1.0 + pdfHTML 2.0.0でこれを再現できますか? –

+0

いいえ、最新のリリースでは再生できません。私はこのトピックをトピック以外のものとして閉じるように投票します。これは、それがもはや再現できない問題であることを示しています。アップグレードはそのトリックを行う必要があります。 –

+0

この質問と回答をご覧ください:https://stackoverflow.com/questions/47895935 –

答えて

1

この:<span>のご使用は厄介です。

<span>タグがドキュメントのグループインライン要素に使用される次のようw3schoolsによれば、<span>タグを定義して使用されます。

<span>タグでは、視覚的な変更は一切ありません。

<span>タグは、テキストの一部またはドキュメントの一部にフックを追加する方法を提供します。

私はあなたが得る結果を見てみると、私はリストはあなたがそれを可能にする代わりにブロック要素を残りの、インライン要素に「フラット化」されていることがわかります。しかし、私はブラウザがひどく書かれたHTMLを受け入れて、おそらくそうではなく予想通りにレンダリングするので、これをエラーとみなす理由を理解しています。

問題を解決するにはどうすればよいですか?

iTextバージョンのメンテナンスリリースは、段階的に廃止されています。メンテナンスリリースを使用しています。メンテナンスリリースとは、iTextの顧客ではない企業でこのバージョンがサポートされなくなったことを意味します。マイナーなバグだけが解決されます。 のような既知の問題は、iText 5では修正されません。

私はこれをiText 5で修正しないのはなぜですか? これはiText 7で既に修正されているためです。htmlStringは、あなたの質問からHTMLが含まれてい

FileStream fs = new FileStream("list.pdf", FileMode.Create); 
HtmlConverter.ConvertToPdf(htmlString, fs, props); 

1には、私は、次のサンプルコードを書きました。

これは私が得る結果である:

enter image description here

だから、古いiTextのバージョン(のメンテナンスリリース)のエラー文句を停止し、upgrade to iText 7 and pdfHTMLしてください! introduction of the HTML to PDF tutorialで説明されているように、多くの不満からあなたを救います。ここ数週間、同じメッセージを1日に何度も繰り返してきたので、私は多くの不満から私を救うでしょう。

関連する問題