首页 文章

PdfSharp:为什么我需要将位置和大小乘以1.25才能得到正确的结果?

提问于
浏览
-1

我正在评估PdfSharp来创建PDF文档 . 在与MigraDoc进行比较时,我认为我必须将每个位置(x,y)或大小乘以1.25以获得预期结果 . 例如,如果我将页边距设置为2厘米而没有校正,我的边距约为1.6厘米 .

page.TrimMargins = new TrimMargins
{
    All = XUnit.FromCentimeter(2)
};

当我将2乘以1.25时,我获得了预期的2厘米边距:

page.TrimMargins = new TrimMargins
{
    All = XUnit.FromCentimeter(2 * 1.25)
};

与字体大小相同 . 我必须将大小乘以1.25以获得与MigraDoc相同的大小,甚至Word都会打印 .

我的系统没有自定义缩放或100%以外的文本大小(我猜这可能是原因) .

有人能解释一下这里发生了什么吗?

Edit: 在TomasH的帮助下,我发现在没有自动缩放的情况下进行打印时,尺寸确定是完美的 . PdfSharp显然会创建太大的PDF文档 . 当我使用MigraDoc做同样的事情时,PDF也有点像我发现的那样大,但只是规模小得多 . 剩下的问题是文档太大以及MigraDoc纠正PDF大小的原因 .

这是我的完整测试代码,只给出正确的定位和尺寸修正因子:

using (PdfDocument document = new PdfDocument())
{
    // Create an empty page size A4 with defined margins
    PdfPage page = CreatePage(document);
    using (XGraphics graphics = XGraphics.FromPdfPage(page))
    {
        const double sizeCorrectionFactor = 1.25;
        // Define the page margins. They must be multiplied by 1.25 to be correct!?
        page.TrimMargins = new TrimMargins
        {
            All = XUnit.FromCentimeter(2 * sizeCorrectionFactor)
        };

        // Draw a string. The font size needs to be multiplied by 1.25 to be correct!?
        double x = 0;
        double y = 0;
        graphics.DrawRectangle(XPens.Black, XBrushes.White, 0, 0, page.Width, page.Height);
        graphics.DrawString("PdfSharp Measure Demo", new XFont("Verdana", 20 * sizeCorrectionFactor), XBrushes.Navy, x, y, XStringFormats.TopLeft);

        // Draw a rectangle. Position and size must be multiplied by 1.25 to be correct!?
        x = XUnit.FromCentimeter(2 * sizeCorrectionFactor);
        y = XUnit.FromCentimeter(2 * sizeCorrectionFactor);
        double width = XUnit.FromCentimeter(5 * sizeCorrectionFactor);
        double height = XUnit.FromCentimeter(5 * sizeCorrectionFactor);
        graphics.DrawRectangle(XPens.Red, XBrushes.Silver, x, y, width, height);
    }

    string pdfFilePath = Path.GetTempFileName() + ".pdf";
    document.Save(pdfFilePath);

    Process.Start(pdfFilePath);
}

1 回答

  • 1

    我找到了答案:我得到了(没有详细记录) TrimMargins 属性错误的含义 . 设置修剪边距显然会将边距的大小添加到页面的宽度或高度 . 这意味着如果设置了修剪边距,则页面尺寸太大,并且在显示或打印时通常会缩小 . 我为修剪边距设置了2厘米,使得页面显然是1.25倍太大 . 解决方案是让所有修剪边距为0,并在打印代码中考虑任何所需的页边距 .

相关问题