首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Itext7 - pdfHTML - Document SetMargins方法不工作

Itext7 - pdfHTML - Document SetMargins方法不工作
EN

Stack Overflow用户
提问于 2019-09-30 03:54:46
回答 1查看 686关注 0票数 2

我正在Itext7上工作,我遇到了麻烦,Documen不能在这个上面设置Width/HeightMargin。我研究过(通过堆栈溢出、itext7_pdfHTML电子书等等),但没有找到解决方案。

代码语言:javascript
复制
    public static byte[] GeneratePdf(string rootPath, string htmlString)
    {
        using (var stream = new MemoryStream())
        {
            using (var pdfWriter = new PdfWriter(stream))
            {
                using (var pdfDocument = new PdfDocument(pdfWriter))
                {
                    pdfDocument.SetDefaultPageSize(PageSize.A4);
                    pdfDocument.SetDefaultPageSize(PageSize.A4.Rotate());
                    var document = HtmlConverter.ConvertToDocument(htmlString, pdfDocument, GetConverterProperties(rootPath));
                    document.SetMargins(1,2,3,4);
                    document.Close();

                    return stream.ToArray();
                }
            }
        }
    }

有人能告诉我我错过了什么吗?

我有以下几个问题:

  1. 对象顺序(我的意思是MemoryStream -> PdfWriter -> pdfDocument)是正确的,不是吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-28 11:41:12

document.SetMargins更改即将出现的页面的页边距,而不是已经生成的页面。这解释了为什么在HtmlConverter.ConvertToDocument调用之后设置边距不会影响转换的结果。

相反,您可以尝试在HTML中使用@media print定义,或者在提供给HtmlConverter.ConvertToDocumentConverterProperties中使用ConverterProperties对象。

或者,您可以使用HtmlConverter.ConvertToElements而不是HtmlConverter.ConvertToDocument,并将返回的元素添加到您所选择的页面大小和页边距设置的Document中。

哪种方法是最好的,取决于任务的细节,例如,您是否可以轻松地影响HTML中的@media print定义。

关于你的另一个问题

对象顺序(我的意思是MemoryStream -> PdfWriter -> pdfDocument)是正确的,不是吗?

是的,是这样的。严格地说,您应该将byte[]的检索向下移到如下所示:

代码语言:javascript
复制
using (var stream = new MemoryStream())
{
    using (var pdfWriter = new PdfWriter(stream))
    using (var pdfDocument = new PdfDocument(pdfWriter))
    {
        [...]
    }
    return stream.ToArray();
}

在您的代码中,它可以保留在最内部的using中,因为您在document.Close()之后调用它,后者调用pdfDocument.Close,然后调用pdfWriter.Close;如果在其他代码中,您没有显式地关闭事物并指望using为您完成这些操作,那么byte[]检索需要移出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58161328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档