En utilisant le code suivant ASP.net/iTextSharp pour analyser le contenu d'un fichier HTML en PDF et jeter dans le flux de réponse:iTextSharp XMLWorkerHelper HTML au format PDF Tableau Alignement
Response.Clear();
Response.ContentType = "application/pdf";
using (Document doc = new Document())
{
PdfWriter writer = PdfWriter.GetInstance(doc, Response.OutputStream);
doc.Open();
using (TextReader reader = File.OpenText(Server.MapPath("~/Test.htm")))
{
XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, reader);
}
doc.Close();
}
Response.End();
Cela fonctionne, mais le Le fichier PDF résultant n'a pas le même style que la page HTML d'origine. Pour commencer, l'analyseur css intégré ne semble pouvoir fonctionner qu'avec des styles et des classes d'étiquettes directes (pas de chaînage comme: thead th { background-color:#999; }
). Deuxièmement, il semble que les frontières soient une affaire de tout ou rien. Il n'a pas de concept de border-top, border-bottom, etc, et border-collapse ne réduit pas les frontières des cellules adjacentes, donc les frontières finissent par être deux fois plus épaisses que je le veux. Enfin, je n'arrive pas à comprendre comment aligner une table sur le côté gauche ou droit du document. C'est toujours centré. J'ai essayé d'emballer dans un div avec text-align, j'ai essayé de régler l'attribut align, j'ai essayé de régler text-align directement sur la table. Vous n'arrivez pas à comprendre ça?
Voici mon document de démonstration que je suis en train d'utiliser comme preuve de concept:
<!DOCTYPE html>
<html>
<head>
<title>This is the title</title>
<meta name="description" content="This is the description" />
<meta name="keywords" content="abc, 123, xyz" />
<style type="text/css">
body { font-family:Arial, Verdana, Sans-Serif; font-size:9pt; }
.dataGrid { font-family:Arial, Verdana, Sans-Serif; font-size:9pt; border-collapse: collapse; border:1px solid #000; width:80%; margin:0; text-align:left; }
th { padding:3px 4px; font-weight:bold; border:1px solid #000; }
td { padding:3px 4px; border:1px solid #000; }
.head { border-bottom:2px solid #000; background-color:#9BBA1F; font-weight:bold; }
.odd { background-color:#fff; }
.even { background-color:#D6EB87; }
.foot { border-top:2px solid #000; background-color:#BAB0C4; font-weight:bold; }
h1 { font-size:14pt; color:#FFA200; text-align:center; }
.right { text-align:right; }
.center { text-align:center; }
.left { text-align:left; }
</style>
</head>
<body>
<h1>Sample Document</h1>
<div style="text-align:left;">
<table class="dataGrid" align="left">
<thead>
<tr class="head">
<th width="70%">Name</th>
<th width="15%" class="center">Qty</th>
<th width="15%" class="center">Price</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>ABC</td>
<td class="center">2</td>
<td class="right">$5.00</td>
</tr>
<tr class="even">
<td>XYZ</td>
<td class="center">1</td>
<td class="right">$10.00</td>
</tr>
<tr class="odd">
<td>123</td>
<td class="center">3</td>
<td class="right">$2.00</td>
</tr>
<tr class="even">
<td>789</td>
<td class="center">1</td>
<td class="right">$4.00</td>
</tr>
</tbody>
<tfoot>
<tr class="foot">
<td class="right">Totals</td>
<td class="center">7</td>
<td class="right">$30.00</td>
</tr>
</tfoot>
</table>
</div>
</body>
</html>