C# PDFsharp mm尺寸在打印时更小

C# PDFsharp mm尺寸在打印时更小,c#,.net,image,pdf,pdfsharp,C#,.net,Image,Pdf,Pdfsharp,我需要在一个PDF文件上打印一个图像,当打印的时候,正好是80毫米高。我知道页面大小,我知道我放在PDF上的图像的DPI。但是当我打印出来的时候,它是78.5毫米。。。我正在做的任务需要精确 我从磁盘加载图像,我知道DPI和像素高度/宽度。我将其加载到图像对象中,将垂直和水平dpi设置为300。然后将其添加到PDF中 public static void SavePdf(Image img, string filename) { // Create

我需要在一个PDF文件上打印一个图像,当打印的时候,正好是80毫米高。我知道页面大小,我知道我放在PDF上的图像的DPI。但是当我打印出来的时候,它是78.5毫米。。。我正在做的任务需要精确

我从磁盘加载图像,我知道DPI和像素高度/宽度。我将其加载到图像对象中,将垂直和水平dpi设置为300。然后将其添加到PDF中

    public static void SavePdf(Image img, string filename)
        {
            // Create a new PDF document
            PdfDocument document = new PdfDocument();
            document.Info.Title = "Test";

            // Create an empty page
            PdfPage page = document.AddPage();
            page.Width = SharedMethods.MmToPixel(520);
            page.Height = SharedMethods.MmToPixel(110);

            // Get an XGraphics object for drawing
            XGraphics gfx = XGraphics.FromPdfPage(page);

            XImage image = XImage.FromGdiPlusImage(img);

            gfx.DrawImage(image, 0, 0, image.PixelWidth, image.PixelHeight);

            // Save the document...

            document.Save(filename);


        }
图像必须从页面的左上角开始

但它似乎从顶部开始几毫米,并且似乎从80毫米减小到78.5毫米

我听说PDF的大小调整了98%,因为。。。某物这就是问题所在,我需要将我的形象提升到102%吗

注意,我知道我想要的毫米大小,所以我根据我的DPI和我在网上找到的常数将其转换为像素:

 const double milimetresPerInch = 25.4; // as one inch is 25.4 mm
 const double dpi = 300;

 public static int MmToPixel(double mm)
 {
     double pixel = mm * dpi / milimetresPerInch;
     return (int)Math.Round(pixel);
 }
编辑:

我现在使用的是XUnit.frommillum,但这是正确的吗

page.Width = XUnit.FromMillimeter(520);
page.Height = XUnit.FromMillimeter(110);
然后我加载图像,图像大小与纸张大小相同,单位为mm,如下所示:

XImage image = XImage.FromGdiPlusImage(img);
gfx.DrawImage(image, 0, 0, image.PixelWidth, image.PixelHeight);
是这样吗?它应该适合整个页面,但我注意到我使用的是像素,但也许我需要使用FromPixels或不知何故,FromMillimteres

我听说PDF的大小调整了98%,因为。。。什么

这些信息的来源

打印机通常有非打印区域,现代打印机的每侧通常有几毫米。默认情况下,Adobe Reader会在打印时减小页面大小,使整个页面适合打印区域。使用Adobe Reader打印时禁用自动缩放。 如果图像从左上角开始,部分图像可能由于非打印区域而被切断

Adobe Reader可以测量PDF页面上的项目。因此,您可以轻松验证图像是否具有应有的尺寸,这将告诉您是否存在打印或将图像嵌入PDF的问题。 Adobe Reader还可以显示页面的大小-可能页面的大小与您预期的不同


您应该使用PDFsharp的方法,如Unit.frommillum来转换单位。您的方法MmToPixel可能弊大于利。PDF页面没有像素,测量值以点为单位。

打印PDF时,实际打印的纸张尺寸是多少,打印对话框的设置是什么?该纸张为520mm x 110mm的自定义尺寸纸张。打印机对话框的其余设置保留为默认设置。如何配置打印对话框中的缩放比例?在调用DrawImage时,您应该使用page.Width而不是image.PixelWidth来表示高度。啊,谢谢。那可能就是这样了。我正在使用免费版本的acrobats PDF viewer,似乎无法验证我的盒子是否确实有80毫米高。有没有办法验证这一点?我还将查找停止调整大小的设置。我不确定如何使用Unit.Frommm。该行如何显示,page.Height=SharedMethods.MmToPixel110;是否切换为使用内置方法?考虑到您的建议,我已在初始问题的底部添加了一个编辑。我用于将mm转换为像素的函数现在仅在渲染实际图形时使用。当我把它放在pdf上时,我使用的是XUnit.fromMM,如初始问题编辑中所示。但是我被图像的位置卡住了。