C# PDFsharp mm尺寸在打印时更小
我需要在一个PDF文件上打印一个图像,当打印的时候,正好是80毫米高。我知道页面大小,我知道我放在PDF上的图像的DPI。但是当我打印出来的时候,它是78.5毫米。。。我正在做的任务需要精确 我从磁盘加载图像,我知道DPI和像素高度/宽度。我将其加载到图像对象中,将垂直和水平dpi设置为300。然后将其添加到PDF中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
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,如初始问题编辑中所示。但是我被图像的位置卡住了。