图像看起来比PDF中的实际尺寸大

时间:2011-11-17 16:11:40

标签: asp.net vb.net image itextsharp barcode-printing

我有以下条形码图片:

enter image description here

我正在使用以下iTextSharp VB.NET脚本生成包含此条形码的PDF文档:

Dim pdfDocument As iTextSharp.text.Document = Nothing

Dim filename As String = HttpContext.Current.Server.MapPath("barcode.pdf")

pdfDocument = New iTextSharp.text.Document()
Dim writer As iTextSharp.text.pdf.PdfWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(pdfDocument, New FileStream(filename, FileMode.Create))

pdfDocument.Open()

Dim cb As iTextSharp.text.pdf.PdfContentByte = writer.DirectContent

pdfDocument.NewPage()

Dim img As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(HttpContext.Current.Server.MapPath("barcode.jpg"))
pdfDocument.Add(img)

pdfDocument.Close()

Dim fInfo As New FileInfo(filename)
Dim numBytes As Long = fInfo.Length
Dim fStream As New FileStream(filename, FileMode.Open, FileAccess.Read)
Dim br As New BinaryReader(fStream)
Dim data As Byte() = br.ReadBytes(CInt(numBytes))

HttpContext.Current.Response.Clear()
HttpContext.Current.Response.AddHeader("Content-Type", "binary/octet-stream")
HttpContext.Current.Response.AddHeader("Content-Disposition", String.Format("attachment; filename=barcode.pdf;size ={0}", data.Length.ToString()))
HttpContext.Current.Response.Flush()
HttpContext.Current.Response.BinaryWrite(data)
HttpContext.Current.Response.Flush()
HttpContext.Current.Response.End()

但是,生成此PDF时,图像看起来比预期的要大,并且会失真:

enter image description here

我无法在任何地方看到我将图像设置为特定尺寸,为什么它会像这样扭曲?我该如何预防?

至关重要的是,此图像保持其预期的大小,以便条形码扫描仪可以读取它。

1 个答案:

答案 0 :(得分:0)

这里有一些事情,实际上没有一个与iText / iTextSharp有关。

首先,当处理PDF内部的图像时,总是以英寸或厘米为单位,而不仅仅是像素。 300DPI的300像素图像是1英寸宽,72DPI的72像素图像也是1英寸宽。这两个图像在PDF中占据1英寸,前者只会有更多的像素进入该空间并可能看起来更好。这非常重要。

其次,使用上述信息,当您使用1“图像打印PDF并且不缩放(Acrobat中的默认设置是适合哪种比例)时,您应该能够抓住标尺和测量正好1“。

第三,我真的不知道Acrobat,Photoshop或任何其他程序认为“100%”。在Acrobat中,如果您转到“编辑”,“首选项”,“页面显示”,则可以调整“分辨率”,并且该更改的定义为100%。如果我将其更改为90%并保持我的打印输出上有一个1“对象,它似乎匹配最接近的.YMMV。

我认为第三件事是你的问题,主要是“100%”的意思。你和我都知道应该意味着什么,但Adobe显然有不同的想法。