Изображение в PDF больше размера, чем он есть на самом деле - PullRequest
2 голосов
/ 17 ноября 2011

У меня есть следующее изображение штрих-кода:

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 голосов
/ 17 ноября 2011

Здесь происходит несколько вещей, и на самом деле ни одна из них не имеет отношения к iText / iTextSharp.

Во-первых, при работе с изображениями внутри PDF всегда думайте в дюймах или сантиметрах иникогда не только пиксели.300-пиксельное изображение с разрешением 300 точек на дюйм имеет ширину 1 дюйм, а 72-пиксельное изображение с разрешением 72 точек на дюйм также имеет ширину 1 дюйм.Оба изображения будут занимать 1 дюйм в PDF, у первого будет больше пикселей, чтобы втиснуться в это пространство и потенциально выглядеть лучше.Это очень важно.

Во-вторых, используя приведенную выше информацию, когда вы печатаете PDF с 1-дюймовым изображением, а не масштабируете его (по умолчанию в Acrobat установлено значение «Подогнать, которое масштабируется»)Вы должны быть в состоянии взять линейку и измерить ровно 1 ".

В-третьих, я серьезно не знаю, что Acrobat, Photoshop или любая другая программа считают" 100% ".В Acrobat, если вы перейдете в меню «Правка», «Настройки», «Отображение страницы», вы можете отрегулировать разрешение, и это изменение соответствует 100%.Если я изменяю это на 90% и держу свою распечатку на 1-дюймовом объекте, это, кажется, соответствует самому близкому. YMMV.

Это третье, что я думаю, это ваша проблема, в основном, что означает "100%".У нас с вами есть представление о том, что это должно означать , но у Adobe, очевидно, иная идея.

...