我正在评估PdfSharp来创建PDF文档。与MigraDoc相比,我认为我必须将每个位置(x,y)或大小乘以1.25以获得预期结果。例如,如果我将页边距设置为2厘米而没有更正,我会得到大约1.6厘米的边距。PdfSharp:为什么我需要将位置和大小乘以1.25才能获得正确的结果?
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);
}
PDF中是错误的(例如用Adobe Reader测量)还是打印后错误?在不进行自动缩放等情况下以100%打印。确保PDF和打印机使用相同的页面大小。 –
我以100%印刷,尺寸是完美的。不知怎的,PdfSharp创建的PDF文档看起来太大了。当用MigraDoc做同样的工作时,PDF也有点太大了,但是只有更小的规模。需要弄清楚为什么是这种情况,以及MigraDoc如何修正PDF大小。 –