文本宽度因printdocument&而异。 iTextSharp的 [英] Text Width differs for printdocument & itextsharp

查看:109
本文介绍了文本宽度因printdocument&而异。 iTextSharp的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想测量printdocument&中字符串的宽度。 itextSharp,它显示不同的宽度,

Printdocument显示363.5点& Itextsharp显示333.42点,我的代码出了什么问题。



I want to measure the width of a string in printdocument & itextSharp, it shows different width,
Printdocument shows 363.5 points & Itextsharp shows 333.42 points, what is wrong with my code.

Imports System.IO
Imports System.Drawing.Printing
Imports iTextSharp.text.pdf
Imports iTextSharp.text



Public Class Form1
    Public egraphics As Graphics
    Public prnDocument As New System.Drawing.Printing.PrintDocument

    Private TMPbmp As New Bitmap(1, 1)
    Private TMPgfx As Graphics = Graphics.FromImage(TMPbmp)
    Private TxtSize As SizeF
    Private lstrstring As String



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim psize As New Printing.PaperSize("Custom", 595, 842)

        lstrstring = "Abcdghijyzw"

        AddHandler prnDocument.PrintPage, AddressOf PrintPage

        prnDocument.DefaultPageSettings.PaperSize = psize
        prnDocument.DefaultPageSettings.Margins.Top = 0
        prnDocument.DefaultPageSettings.Margins.Left = 0
        prnDocument.DefaultPageSettings.Margins.Bottom = 0
        prnDocument.DefaultPageSettings.Margins.Right = 0
        prnDocument.Print()
        ITextSharpPrint()
    End Sub

    Private Sub PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
        Dim fReportFont As System.Drawing.Font
        Dim lstringformat As New StringFormat

        lstringformat = System.Drawing.StringFormat.GenericTypographic

        egraphics = e.Graphics
        egraphics.PageUnit = GraphicsUnit.Point
        fReportFont = New System.Drawing.Font(Trim("Helvetica"), 60, FontStyle.Regular)
        egraphics.DrawString(lstrstring, fReportFont, New SolidBrush(Color.Black), 200, 100, lstringformat)
        MsgBox(egraphics.MeasureString(lstrstring, fReportFont).Width)

    End Sub


    Private Sub ITextSharpPrint()

        Using fs As System.IO.FileStream = New FileStream("C:\Kgm.pdf", FileMode.Create)

            Dim document As New iTextSharp.text.Document(PageSize.A4, 0, 0, 0, 0)
            Dim writer As PdfWriter = PdfWriter.GetInstance(document, fs)
            Dim tFont As iTextSharp.text.Font

            document.Open()
            Dim cb As PdfContentByte = writer.DirectContent

            cb.BeginText()

           
            tFont = FontFactory.GetFont("Helvetica", 60, 0)

            Dim lbase As BaseFont
            lbase = tFont.BaseFont

            cb.SetFontAndSize(tFont.BaseFont, 60)
            cb.SetTextMatrix(100, document.PageSize.Height - 200)
            cb.ShowText(lstrString)

            MsgBox(lbase.GetWidthPoint(lstrstring, 60))


            cb.EndText()
            document.Close()
            writer.Close()
            fs.Close()

        End Using
    End Sub
End Class

推荐答案

请参阅我对该问题的评论。此CodeProject文章演示了测量字符串的方法的改进版本:绕过Graphics.MeasureString限制 [ ^ ]。< br $>


-SA
Please see my comment to the question. This CodeProject article demonstrates the improved version of the method of measuring the string: Bypass Graphics.MeasureString limitations[^].

—SA


这篇关于文本宽度因printdocument&amp;而异。 iTextSharp的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆