La conversión de HTML a PDF es común, desde las facturas hasta los informes, pero las configuraciones predeterminadas rara vez se ajustan a sus necesidades de marca y impresión. Aspose.HTML for .NET,Puedes controlar con precisión Tamaño de página, Margen, Orientación,y Reglas de CSS Media Para producir PDFs consistentes y profesionales, esta guía muestra una configuración limpia y repetible y incluye una muestra completa de C#.
Para llevar
- Uso
Converter.ConvertHTMLconPdfSaveOptionsPara una fuerte conversión HTML → PDF. - Configuración
PageSetup.AnyPage2 Sitio Tamaño y Margen (A4/A3/custom); seleccione el retrato o el paisaje por tamaño. - Aplica
options.Css.MediaType(Príncipe vs pantallaPara cumplir con el CSS correcto. - Generar múltiples variantes (por ejemplo, retrato A4 + paisaje A3) del mismo HTML para diferentes audiencias.
Guía paso a paso
1) Set up the project
Instalar el paquete NuGet y crear un proyecto de consola (pasos en Cómo correr).
2) Load HTML content
Cargar un archivo existente o crear un HTMLDocument de una cadena. proporcionar a Base de URI Resolver CSS relativo, imágenes y fuentes.
3) Configure page geometry and media
Uso PdfSaveOptions.PageSetup.AnyPage Definición Tamaño y Margen,y el set Css.MediaType El objetivo @media print reglas cuando sea necesario.
4) Convert to PDF
llamado Converter.ConvertHTML(document, options, path) Para escribir el archivo PDF.
Ejemplo completo y compilable (C#)
using System;
using System.IO;
using Aspose.Html;
using Aspose.Html.Converters;
using Aspose.Html.Saving; // PdfSaveOptions
using Aspose.Html.Rendering; // MediaType
using Aspose.Html.Drawing; // Length, Size, Margin, Page
namespace HtmlToPdfCustomization
{
internal static class Program
{
// How to run:
// 1) dotnet new console -n HtmlToPdfCustomization
// 2) cd HtmlToPdfCustomization
// 3) dotnet add package Aspose.HTML
// 4) Replace Program.cs with this file's contents
// 5) dotnet run -- "path-to-input.html" (optional)
private static void Main(string[] args)
{
string outDir = Path.Combine(Directory.GetCurrentDirectory(), "out");
Directory.CreateDirectory(outDir);
// Load HTML from file if provided; otherwise, use inline HTML
HTMLDocument document;
if (args.Length > 0 && File.Exists(args[0]))
{
document = new HTMLDocument(args[0]);
}
else
{
string html = "<!DOCTYPE html>" +
"<html><head><meta charset=\\\"utf-8\\\">" +
"<title>HTML to PDF (Aspose.HTML)</title>" +
"<style>body{font-family:Arial,Helvetica,sans-serif;margin:24px}" +
".lead{color:#444} table{width:100%;border-collapse:collapse}" +
"th,td{border:1px solid #ddd;padding:6px 8px;text-align:left}" +
"@media print{body{font-size:12pt}.lead{color:#000}}</style>" +
"</head><body>" +
"<h1>Order Summary</h1>" +
"<p class=\\\"lead\\\">This PDF respects print CSS and custom page settings.</p>" +
"<table><tr><th>Item</th><th>Qty</th><th>Price</th></tr>" +
"<tr><td>Widget A</td><td>3</td><td>$12.00</td></tr>" +
"<tr><td>Widget B</td><td>2</td><td>$9.50</td></tr></table>" +
"</body></html>";
document = new HTMLDocument(html, ".");
}
using (document)
{
var mm = Length.FromMillimeters;
// Variant 1: A4 portrait with 12.7 mm margins, using print CSS
var a4 = new PdfSaveOptions();
a4.Css.MediaType = MediaType.Print;
a4.PageSetup.AnyPage = new Page(
new Size(mm(210), mm(297)), // A4
new Margin(mm(12.7), mm(12.7), mm(12.7), mm(12.7))
);
string a4Path = Path.Combine(outDir, "order-a4.pdf");
Converter.ConvertHTML(document, a4, a4Path);
Console.WriteLine($"Saved: {a4Path}");
// Variant 2: A3 landscape with tighter margins, using screen CSS
var a3Landscape = new PdfSaveOptions();
a3Landscape.Css.MediaType = MediaType.Screen;
a3Landscape.PageSetup.AnyPage = new Page(
new Size(mm(420), mm(297)), // A3 landscape
new Margin(mm(10), mm(10), mm(10), mm(10))
);
string a3Path = Path.Combine(outDir, "order-a3-landscape.pdf");
Converter.ConvertHTML(document, a3Landscape, a3Path);
Console.WriteLine($"Saved: {a3Path}");
// Variant 3: Custom 6 x 9 inches trim with narrow margins (print CSS)
var custom = new PdfSaveOptions();
custom.Css.MediaType = MediaType.Print;
custom.PageSetup.AnyPage = new Page(
new Size(Length.FromInches(6), Length.FromInches(9)),
new Margin(mm(5), mm(5), mm(5), mm(5))
);
string customPath = Path.Combine(outDir, "order-6x9.pdf");
Converter.ConvertHTML(document, custom, customPath);
Console.WriteLine($"Saved: {customPath}");
}
}
}
}
Lo que hace este código
- cargas HTML de un archivo o de una cadena de memoria con un URI base.
- Configuración - El
PdfSaveOptionsPara retratos A4, paisajes A3 y un tamaño de corte personalizado de 6×9 pulgadas. - Aplicaciones - El
MediaType.PrintoMediaType.ScreenPara cumplir con sus reglas de CSS. - Exportaciones Tres PDFs personalizados en una
out/El Folio.
Problemas y tips
- Estilos equivocados:• TOGGLE
options.Css.MediaTypeEntrePrintyScreenPara combinar tu estilo. - Contenido cortado: aumentar el tamaño de la página o los márgenes; los formatos más amplios ayudan a las tablas grandes.
- FUENTES FALTAS: asegúrese de que las fuentes estén disponibles para el render o embedded a través de
@font-face. - El desempeño:Simplifique el DOM/CSS pesado; prefiere los activos estáticos en caché.
FAQ
Q1.¿Cómo puedo establecer el tamaño de la página y los márgenes? Uso PdfSaveOptions.PageSetup.AnyPage = new Page(Size, Margin) Con unidades de Length (Miles o milímetros de longitud).
Q2. ¿Puedo forzar los estilos de impresión? Sí, el set options.Css.MediaType = MediaType.Print así @media print Las reglas se aplican.
Q3. ¿Cómo puedo hacer páginas de paisajes? Proporciona un paisaje Size (por ejemplo, A3 420 × 297 mm) al crear el Page.
Q4. ¿Puedo exportar varias variantes de un HTML? Creación separada PdfSaveOptions Objetos (Diferentes Css.MediaType y los tamaños) y la llamada Converter.ConvertHTML Para cada uno.
Q5. ¿Necesito un motor de navegador instalado? No. Aspose.HTML hace que el servidor sea sin navegadores externos.
Conclusión
Uso PdfSaveOptions Con CSS con conocimiento de medios, puede crear PDFs polidos adaptados a las necesidades de impresión, archivo o ejecutiva. Comienza con el retrato A4 para documentos generales, agrega paisajes A3 para diseños amplios y mantiene un tamaño de corte personalizado para folletos o informes.