2

我有以下条形码图像:

在此处输入图像描述

我正在使用以下 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 时,图像看起来比预期的大,并且失真:

在此处输入图像描述

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

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

4

1 回答 1

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%”的意思。你和我都知道它应该是什么意思,但 Adob​​e 显然有不同的想法。

于 2011-11-17T16:53:39.667 回答