打印时 PDFsharp mm 尺寸较小

PDFsharp mm size is smaller when printed

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

我从磁盘加载图像,我知道 DPI,我知道像素 height/width。我将它加载到一个图像对象中(将垂直和水平 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.FromMillimeter,但是这样正确吗?

page.Width = XUnit.FromMillimeter(520);
page.Height = XUnit.FromMillimeter(110);

然后我加载图像,它与纸张尺寸(以毫米为单位)相同,如下所示:

XImage image = XImage.FromGdiPlusImage(img);
gfx.DrawImage(image, 0, 0, image.PixelWidth, image.PixelHeight);

是吗?它应该适合整个页面,但我注意到我正在使用像素,但也许我需要使用 FromPixels 或某种方式,FromMillimteres?

I heard PDFs resize by 98% due to ... something.

该信息的来源?

打印机通常有非打印区域,现代打印机通常每边有几毫米。默认情况下,Adobe Reader 会在打印时缩小页面大小以将整个页面放入打印区域。使用 Adob​​e Reader.
打印时禁用自动缩放 如果图像从左上角开始,部分图像可能会因非打印区域而被截断。

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

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