【问题标题】:iText 7 can not set marginiText 7 无法设置边距
【发布时间】:2018-05-08 06:53:33
【问题描述】:

我有一个 HTML 字符串,我需要将其转换为 pdf,但我需要的 pdf 必须具有特定的大小和边距。我做了如示例所示,现在我有我设置的宽度和高度的 pdf,但我无法更改或删除边距,所以请帮助我。

 using (FileStream fs = new FileStream(somePDFFile, FileMode.OpenOrCreate, FileAccess.Write))
            {

                iText.Kernel.Pdf.PdfWriter pdfWriter = new iText.Kernel.Pdf.PdfWriter(fs);

                iText.Kernel.Pdf.PdfDocument pdfDoc = new iText.Kernel.Pdf.PdfDocument(pdfWriter);

                var v = pdfDoc.GetDefaultPageSize().ApplyMargins<iText.Kernel.Geom.Rectangle>(1, 1, 1, 1, true);
                pdfDoc.GetDefaultPageSize().SetWidth(250f);
                pdfDoc.GetDefaultPageSize().SetHeight(200f);
                pdfDoc.GetCatalog().SetLang(new iText.Kernel.Pdf.PdfString("en-US"));
                //Set the document to be tagged
                pdfDoc.SetTagged();



                iText.Html2pdf.ConverterProperties props = new iText.Html2pdf.ConverterProperties();

                iText.Html2pdf.HtmlConverter.ConvertToPdf(htmlString, pdfDoc, props);

                pdfDoc.Close();



            }

【问题讨论】:

    标签: java itext7


    【解决方案1】:

    我搜索了一个答案,但我只能找到这种方法:

    public void createPdf(String src, String dest) throws IOException {
        ConverterProperties properties = new ConverterProperties();
        properties.setBaseUri(new File(src).getParent());
        List<IElement> elements =
                HtmlConverter.convertToElements(new FileInputStream(src), properties);
        PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
        pdf.setTagged();
        Document document = new Document(pdf);
        document.setMargins(100, 50, 50, 100);
        for (IElement element : elements) {
            document.add((IBlockElement)element);
        }
        document.close();
    }
    

    换句话说:我将 HTML 转换为元素列表,然后将这些元素添加到我为其定义边距的 Document

    我首选的解决方案是在 &lt;body&gt; 标记级别定义边距,就像在 How to margin the body of the page (html)? 中所做的那样来解决这个问题)。

    我也尝试了convertToDocument() 方法,但我无法将immediateFlush 设置为false。我还要求团队对此进行调查。

    也许还有一个可以引入的属性,虽然我不太确定这应该是ConverterProperties 属性、PdfDocument 属性还是PdfWriter 属性。

    更新:

    您可以使用 CSS 中的 @page 规则来定义边距。例如:

    <style>
        @page {
            margin-top: 200pt;
        }
    </style>
    

    这将创建一个上边距为 200pt 的 PDF。

    【讨论】:

    • 工作正常。谢谢,我会问另一件事,因为也许我一开始就选择了复杂的方式。作为初始数据,我不仅有 HTML,我还使用可以将 HTML 转换为 PDF 的非常旧的实用程序,但没有任何设置,因此作为输出,我将 PDF 作为 A4 格式和标准边距。但正如我所说,我需要创建具有自定义宽度、高度和边距的 PDF。所以也许有一种方法可以将现有的 PDF 文件从 A4 修改为自定义大小和自定义边距(但我还没有找到方法)或创建一个带有设置的新文档(很简单),但我还没有找到如何从现有文件中添加内容PDF 到新文档。
    • 我不知道我是否理解你的问题。 [1.] 您不能重排现有 PDF 中的内容。这不是 iText 的事情。这是PDF固有的。 [2.] 您可以更改现有 PDF 的页面大小,但内容保持不变。 [3.] 您可以将现有 PDF 的完整页面导入新 PDF。我不确定这是否能回答你所有的其他问题。随意发布一个新问题,在其中详细说明上述三项中的哪一项适用于您的问题。
    • 对不起我的英语,我不是本地人。据我了解,当我将 PDF 作为 A4 并将其调整为例如 300*200 时,内容将保持原样,在这个新矩形中,我将看到原始内容的一部分,内容不会调整大小本身为新的比例。还有另一个,所以如果我有 PDF 作为 A4,只有 2 行和 qr 代码,我可以拿这 2 行和 qr 代码,并用我的自定义大小和所有设置放入新的 PDF,因为我需要PDF 作为小矩形,仅用于此内容,没有太多可用空间。如果是,请告诉我通往光明的路)))谢谢。
    • 你问题的第一部分:是的,你理解得很好。内容不会改变;如果您缩小页面大小,您将“剪辑”现有内容。至于你问题的第二部分:这不是不可能,但很难。 @mkl 不久前回答了一个类似的问题,但我找不到那个答案。也许您可以将其作为一个新问题发布,以便 mkl 可以回答。
    • 无论如何,非常感谢。我找到了解决方案,据我了解,如果您需要使用 HTML 的特殊设置创建 PDF,这是最好的方法。我将在新帖子中询问有关从一个复制到另一个的问题。
    猜你喜欢
    • 2019-06-24
    • 1970-01-01
    • 2019-10-05
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多