【发布时间】:2017-11-28 09:39:20
【问题描述】:
我需要在 PDF 文件上打印一个图像,该文件在打印时正好是 80 毫米高。我知道页面大小,我知道我放在 PDF 上的图像的 DPI。但是当我打印出来时,它的尺寸是 78.5 毫米……而且我正在做的任务需要精确。
我从磁盘加载图像,我知道 DPI,我知道像素高度/宽度。我将它加载到 Image 对象中(将垂直和水平 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% 吗?
注意,我知道我想要的 mm 大小,所以我根据我的 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?
【问题讨论】:
-
打印 PDF 时,实际打印的纸张尺寸是多少?打印(对话框)设置是什么?
-
纸张是 520 毫米 x 110 毫米的自定义尺寸纸张。打印机对话框的其余设置保留为默认设置。
-
打印对话框中的缩放比例是如何配置的?
-
在调用
DrawImage时,您应该使用page.Width而不是image.PixelWidth(高度类似)。
标签: c# .net image pdf pdfsharp