如何在 itext7 C# 中将页面大小从 A3 缩放到 A4?

How to scale the page size from A3 to A4 in itext7 C #?

我尝试将 HTML 转换为 A4 页面大小的 PDF。但是内容太长,PDF 分成了 2 页。我只想把它放在一页上。所以我的想法是将 PDF 转换为 A3 大小,然后缩小到 A4 大小。 但另一个问题是从 A3 页面大小缩小到 A4 页面大小。

1) 将您的 html 转换为 A3 尺寸的文档

2) 遍历页面并将每个页面复制为 formXObject

3) 对于每个页面 formXObject:

a) 用 0.5 系数缩放它;

b) 添加到生成的文档中。

合适的Java代码如下(移植到C#应该没有问题,因为iText的API是一样的):

    // 1
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfDocument pdfDocument = new PdfDocument(new PdfWriter(baos));
    pdfDocument.setDefaultPageSize(PageSize.A3);
    HtmlConverter.convertToPdf(new FileInputStream(sourcePath), pdfDocument);

    PdfDocument resultantDocument = new PdfDocument(new PdfWriter(destPath));

    pdfDocument = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
    // 2
    for (int i = 1; i <= pdfDocument.getNumberOfPages(); i++) {
        PdfPage page = pdfDocument.getPage(i);
        PdfFormXObject formXObject = page.copyAsFormXObject(resultantDocument);
        PdfCanvas pdfCanvas = new PdfCanvas(resultantDocument.addNewPage());
        // 3a and 3b
        pdfCanvas.addXObject(formXObject, 0.5f, 0, 0, 0.5f, 0, 0);
    }

    pdfDocument.close();
    resultantDocument.close();