调整/裁剪使用PDFsharp创建的PDF文档

时间:2017-01-03 10:44:55

标签: c# pdf pdfsharp

我正在使用PDFsharp创建一张销售票,其高度取决于购买的商品和其他销售参数。我的问题是,一旦我获得了票的最终高度,我该如何调整/裁剪最终的PDF文档?

我尝试设置一个较大的页面高度然后更改一旦知道,但这会产生一个空文档:

PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
page.Width = XUnit.FromMillimeter(80).Point;
page.Height = XUnit.FromMillimeter(800).Point;
XGraphics gfx = XGraphics.FromPdfPage(page);

double height = printHeader(gfx, saleData);
height = printItems(gfx, saleItems, height);
height = printFooter(gfx, saleData, height);

page.Height = XUnit.FromMillimeter(height + 10).Point;

document.Save(path);

作为MCVE:

class Program
{
    static void Main(string[] args)
    {
        PdfDocument document = new PdfDocument();
        XFont fontTicket = new XFont("Courier New", 9, XFontStyle.Regular);

        PdfPage page = document.AddPage();
        page.Width = XUnit.FromMillimeter(80).Point;
        page.Height = XUnit.FromMillimeter(800).Point;
        XGraphics gfx = XGraphics.FromPdfPage(page);

        int baseX = 5;
        int baseY = 10;
        gfx.DrawString("************************************", fontTicket, XBrushes.Black, XUnit.FromMillimeter(baseX), XUnit.FromMillimeter(baseY += 5));
        gfx.DrawString("***            Ticket            ***", fontTicket, XBrushes.Black, XUnit.FromMillimeter(baseX), XUnit.FromMillimeter(baseY += 5));
        gfx.DrawString("************************************", fontTicket, XBrushes.Black, XUnit.FromMillimeter(baseX), XUnit.FromMillimeter(baseY += 5));

        page.Height = XUnit.FromMillimeter(baseY + 10).Point;

        document.Save("ticket.pdf");
    }

}

如果我删除了行'page.Height = XUnit.FromMillimeter(baseY + 10).Point;'文档生成正确,但高度为800毫米。 当我添加此行时,它会生成一个具有正确尺寸但为空的文档。

1 个答案:

答案 0 :(得分:2)

您必须在创建XGraphics对象之前设置页面大小。

您可以设置CropBox,而不是设置页面高度,如下所示:

count

关于你的MCVE,我拿了一行,然后添加了两行。 用PDFsharp 1.50 beta 3b测试。较旧的版本可能表现不同。

或者进行两次传递:一次确认高度,一次设置页面高度后绘制项目。

您也可以在XForm上绘图,然后创建尺寸正确的页面并将XForm绘制到页面上。
XForm样本可以在这里找到:
http://pdfsharp.net/wiki/XForms-sample.ashx
需要更多代码,并不像设置CropBox那样简单。