itext7 + pdfHtml:如何在 ConvertToPdf 上设置纵向和适合内容
itext7 + pdfHtml: how set portrait orientation and fit content on ConvertToPdf
我做了一个简单的 html 到 pdf 的转换以获得横向。
在 pdfHtml release notes 中,我看到默认方向应该是纵向,但我看到的是横向。
我找不到 option/parameter/setting 来执行此操作。
可能它在我看不见的 ConverterProperties 对象中:-(
有什么建议吗?
这是我的非常简单的代码
public byte[] HtmlToPdf(string html)
{
using (Stream htmlSource = new MemoryStream(Encoding.UTF8.GetBytes(html)))
using (MemoryStream pdfDest = new MemoryStream())
{
ConverterProperties converterProperties = new ConverterProperties();
HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties);
return pdfDest.ToArray();
}
}
回答后编辑(我的方向正确!):
现在我必须找到一种方法来缩小内容以适合内容并在不剪切图像的情况下获得正确的边距。
public static byte[] HtmlToPdf(string html)
{
using (Stream htmlSource = new MemoryStream(Encoding.UTF8.GetBytes(html)))
using (MemoryStream pdfDest = new MemoryStream())
{
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(pdfDest));
pdfDocument.SetDefaultPageSize(PageSize.A4.Rotate());
ConverterProperties converterProperties = new ConverterProperties();
HtmlConverter.ConvertToPdf(htmlSource, pdfDocument, converterProperties);
return pdfDest.ToArray();
}
}
HTML 结果:
PDF 结果:
我解决了将库从 itext7 更改为 DinkToPdf 的问题。我发现它使用起来非常简单,足以满足我的需求。
库改成DinkToPdf后的MVC控制器
public byte[] PdfCreatorController(IConverter converter)
string html = await reader.ReadToEndAsync();
var globalSettings = new GlobalSettings
{
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
Margins = new MarginSettings { Top = 10 },
DocumentTitle = "Report",
Out = string.Empty,
};
var objectSettings = new ObjectSettings
{
PagesCount = true,
HtmlContent = html,
WebSettings = { DefaultEncoding = "utf-8", UserStyleSheet = Path.Combine(Directory.GetCurrentDirectory(), "assets", "styles.css") },
};
var pdf = new HtmlToPdfDocument()
{
GlobalSettings = globalSettings,
Objects = { objectSettings }
};
return = _converter.Convert(pdf);
}
PDF 结果
我做了一个简单的 html 到 pdf 的转换以获得横向。 在 pdfHtml release notes 中,我看到默认方向应该是纵向,但我看到的是横向。
我找不到 option/parameter/setting 来执行此操作。
可能它在我看不见的 ConverterProperties 对象中:-(
有什么建议吗?
这是我的非常简单的代码
public byte[] HtmlToPdf(string html)
{
using (Stream htmlSource = new MemoryStream(Encoding.UTF8.GetBytes(html)))
using (MemoryStream pdfDest = new MemoryStream())
{
ConverterProperties converterProperties = new ConverterProperties();
HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties);
return pdfDest.ToArray();
}
}
回答后编辑(我的方向正确!):
现在我必须找到一种方法来缩小内容以适合内容并在不剪切图像的情况下获得正确的边距。
public static byte[] HtmlToPdf(string html)
{
using (Stream htmlSource = new MemoryStream(Encoding.UTF8.GetBytes(html)))
using (MemoryStream pdfDest = new MemoryStream())
{
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(pdfDest));
pdfDocument.SetDefaultPageSize(PageSize.A4.Rotate());
ConverterProperties converterProperties = new ConverterProperties();
HtmlConverter.ConvertToPdf(htmlSource, pdfDocument, converterProperties);
return pdfDest.ToArray();
}
}
HTML 结果:
PDF 结果:
我解决了将库从 itext7 更改为 DinkToPdf 的问题。我发现它使用起来非常简单,足以满足我的需求。
库改成DinkToPdf后的MVC控制器
public byte[] PdfCreatorController(IConverter converter)
string html = await reader.ReadToEndAsync();
var globalSettings = new GlobalSettings
{
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
Margins = new MarginSettings { Top = 10 },
DocumentTitle = "Report",
Out = string.Empty,
};
var objectSettings = new ObjectSettings
{
PagesCount = true,
HtmlContent = html,
WebSettings = { DefaultEncoding = "utf-8", UserStyleSheet = Path.Combine(Directory.GetCurrentDirectory(), "assets", "styles.css") },
};
var pdf = new HtmlToPdfDocument()
{
GlobalSettings = globalSettings,
Objects = { objectSettings }
};
return = _converter.Convert(pdf);
}
PDF 结果