我正在评估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%以外的文字大小(我猜这可能是原因)。
有人能解释一下这里发生了什么吗?
修改 在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);
}
答案 0 :(得分:1)
我找到了答案:我得到了(没有详细记录的)TrimMargins
属性的含义错误。设置修剪边距显然会将边距的大小添加到页面的宽度或高度。这意味着如果设置了修剪边距,则页面尺寸太大,并且在显示或打印时通常会缩小。我为修剪边距设置了2厘米,使得页面显然是1.25倍太大。解决方案是让所有修剪边距为0,并在打印代码中考虑任何所需的页边距。