iTextSharp hinzufügen ( css oder eine css-Datei) und pdf-Datei herunterladen
Schließlich habe es funktioniert
var inputString = @"<html>
<body>
<table class='table-bordered'>
<thead>
<tr>
<th>Customer Name</th>
<th>Customer's Address</th>
</tr>
</thead>
<tbody>
<tr>
<td> XYZ </td>
<td> Bhubaneswar </td>
</tr>
<tr>
<td> MNP </td>
<td> Cuttack </td>
</tr>
</tbody>
</table>
</body>
</html>";
List<string> cssFiles = new List<string>();
cssFiles.Add(@"/Content/bootstrap.css");
var output = new MemoryStream();
var input = new MemoryStream(Encoding.UTF8.GetBytes(inputString));
var document = new Document();
var writer = PdfWriter.GetInstance(document, output);
writer.CloseStream = false;
document.Open();
var htmlContext = new HtmlPipelineContext(null);
htmlContext.SetTagFactory(iTextSharp.tool.xml.html.Tags.GetHtmlTagProcessorFactory());
ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
cssFiles.ForEach(i => cssResolver.AddCssFile(System.Web.HttpContext.Current.Server.MapPath(i), true));
var pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer)));
var worker = new XMLWorker(pipeline, true);
var p = new XMLParser(worker);
p.Parse(input);
document.Close();
output.Position = 0;
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=myfile.pdf");
Response.BinaryWrite(output.ToArray());
//myMemoryStream.WriteTo(Response.OutputStream); //works too
Response.Flush();
Response.Close();
Response.End();
- Ich möchte verringern Sie die Schriftgröße der Tabelle drin.
HTMLWorker
zu Gunsten von XML-Arbeiter.HTMLWorker
keine Unterstützung für CSS (und wird nie Unterstützung von CSS als seine Verwendung wurde eingestellt). Lesen Sie mehr über XML Worker auf der offiziellen iText Website.- Ich habe über diese Frage schon. Konnte es nicht lösen, mein Problem.
- Sie verwenden können :- statische Font FontSubHeading = FontFactory.GetFont("gothic", 10, Font.NORMAL, wird der neue BaseColor(System.Zeichnung.ColorTranslator.FromHtml("#404041").ToArgb())); Absatz DearName = new Paragraph("test", FontSubHeading); Dokument.Add(DearName);
- Sie sind nicht zeigen Ihre HTML + CSS, so dass es unmöglich ist, Ihre Frage zu beantworten. Siehe zum Beispiel gewusst Wie: konvertieren einer HTML-Tabelle in PDF?, wo Sie die HTML -, CSS-und der resultierenden PDF-Datei. Zu sagen "es funktioniert nicht" oder "lösen Konnte nicht mein Problem", ohne zu erklären, was nicht funktioniert oder was das Problem ist, in der Regel macht es unmöglich für die Menschen zu helfen.
- Außerdem: wenn du wirklich gelesen hättest, die Antwort auf die doppelte Frage, wäre Sie nicht mit
HTMLWorker
. Sie würde die Verwendung von XML-Arbeiter statt. - der html-Inhalt, der nur einen Tisch drinnen, nur eine Methode, um fügen Sie alle css lösen würde mein Problem.
- Gut, zeigen uns die HTML-und die CSS. Es sind viele funktionierende Beispiele auf web site. Jedoch, mit
HTMLWorker
wie dies in Ihrer Frage wird nicht funktionieren. Ändern Sie Ihre Frage, damit ich sehen kann, dass Ihr mithilfe der XML-Worker und ich könnte die Stimme zu öffnen. Jedoch, in seinem gegenwärtigen Zustand, die Antwort auf Ihre Frage ist: was wollen Sie nicht mitHTMLWorker
verwenden Sie XML-Arbeiter statt. (Erfordert eine zusätzliche DLL neben der iTextSharp-DLL.) - Ich arbeite auf hinzufügen XmlWorker Methode, wenn Sie mit einem einfachen Update, das gemacht werden kann, zu arbeiten. es löst
- Ich nicht sehen, Sie arbeiten mit XML-Arbeiter. Aktualisieren Sie Ihre Frage, zeigen Sie Ihre XML-Worker-Codes und auch zeigen Sie Ihre HTML-und CSS-Dateien.
- Sie können bitte werfen Sie einen Blick auf diese.
- Die Eingabe ist kein gültiges HTML.
- Hat funktioniert, danke.
- OK, ich wieder die Frage (obwohl es keine Frage mehr jetzt) und ich stellte den code, den ich schrieb, um zu testen die HTML.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie entdeckte sich selbst, das Haupt-problem, das Sie erlebte, war verursacht durch die Fütterung ungültiges HTML zu XML Arbeiter. Ich habe geschrieben, ein Java-Beispiel, das entspricht Ihrer (aktualisiert) C# - Beispiel:
Die resultierende Tabelle sieht wie folgt aus:
Können Sie zwicken die gespeicherten Werte in
CSS
zu erstellen, die ein schöneres Erscheinungsbild für die Tabelle.ByteArrayInputStream
ist ein standard-Java-Klasse im JDK. Es ist einInputStream
Umsetzung, das dauert einbyte[]
und dass Sie es verwenden, als eineInputStream
. Es ist nichts besonderes. Es ist einfach Java. Übrigens: wenn Sie auf der Suche zum konvertieren von HTML in PDF, bitte Lesen Sie Konvertierung von HTML in PDF mit iText bevor Sie beginnen, code zu schreiben.