打印时 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 会在打印时缩小页面大小以将整个页面放入打印区域。使用 Adobe Reader.
打印时禁用自动缩放
如果图像从左上角开始,部分图像可能会因非打印区域而被截断。
Adobe Reader 可以测量 PDF 页面上的项目。因此,您可以轻松验证图像是否具有应有的尺寸,这将告诉您打印或将图像嵌入 PDF 时是否存在问题。
Adobe Reader 还可以向您显示页面的大小 - 也许页面的毫米大小与您预期的不同。
您应该使用 Unit.FromMillimeter
等 PDFsharp 的方法来转换单位。您的方法 MmToPixel
弊大于利。 PDF 页面没有像素,测量值以磅为单位。
我需要在 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 会在打印时缩小页面大小以将整个页面放入打印区域。使用 Adobe Reader.
打印时禁用自动缩放
如果图像从左上角开始,部分图像可能会因非打印区域而被截断。
Adobe Reader 可以测量 PDF 页面上的项目。因此,您可以轻松验证图像是否具有应有的尺寸,这将告诉您打印或将图像嵌入 PDF 时是否存在问题。
Adobe Reader 还可以向您显示页面的大小 - 也许页面的毫米大小与您预期的不同。
您应该使用 Unit.FromMillimeter
等 PDFsharp 的方法来转换单位。您的方法 MmToPixel
弊大于利。 PDF 页面没有像素,测量值以磅为单位。