Как сделать размер файла pdf относительно высоты и ширины div, используя wkhtmltopdf.exe - PullRequest
0 голосов
/ 24 декабря 2011

Я попытался создать pdf с помощью wkhtmltopdf.exe, указав строку html и работая должным образом. Но я хочу предоставить пользовательский размер pdf для exe.

например: - Предположим, у меня есть div высоты 30 иширина 50. тогда сгенерированный pdf должен быть того же размера.

Ниже приведен код, который я нашел на этом форуме форума

     Private Sub WritePDF(ByVal HTML As String)
    Dim inFileName As String, outFileName As String, tempPath As String
    Dim p As Process
    Dim stdin As System.IO.StreamWriter
    Dim psi As New ProcessStartInfo()

    tempPath = Server.MapPath("~") + "\Uploads\"
    inFileName = Session.SessionID + ".htm"
    outFileName = Session.SessionID + ".pdf"

    ' run the conversion utility 
    psi.UseShellExecute = False
    'psi.FileName = "c:\Program Files (x86)\wkhtmltopdf\wkhtmltopdf.exe"
    psi.FileName = Server.MapPath("~") + "\App_Data\wkhtmltopdf.exe"
    psi.CreateNoWindow = True
    psi.RedirectStandardInput = True
    psi.RedirectStandardOutput = True
    psi.RedirectStandardError = True


    ' note that we tell wkhtmltopdf to be quiet and not run scripts 
    ' NOTE: I couldn't figure out a way to get both stdin and stdout redirected so we have to write to a file and then clean up afterwards 
    psi.Arguments = "-q -n - " & tempPath & outFileName

    p = Process.Start(psi)

    Try
        stdin = p.StandardInput
        stdin.AutoFlush = True

        stdin.Write(HTML)
        stdin.Close()

        If p.WaitForExit(15000) Then
            ' NOTE: the application hangs when we use WriteFile (due to the Delete below?); this works 
            'Response.WriteFile(tempPath + outFileName); 
            Response.BinaryWrite(System.IO.File.ReadAllBytes(tempPath & outFileName))
        End If
    Finally
        p.Close()
        p.Dispose()
    End Try

    ' delete the pdf 
    System.IO.File.Delete(tempPath & outFileName)
End Sub

1 Ответ

2 голосов
/ 06 января 2012

Если вы хотите использовать стандартный размер бумаги, вы можете использовать аргумент --page-size и указать имя формата страницы (A4, Letter и т. Д.).Если вам нужен пользовательский размер страницы, вы можете использовать аргументы --page-width и --page-height (например, --page-width 100mm - page-height 200mm).

По умолчанию wkhtmltopdf добавит поле вокруг каждой стороны страницы, которое используется для визуализации верхнего и нижнего колонтитула. Чтобы изменить поля страницы, используйте аргументы --margin-top, --margin-right, --margin-bottom и --margin-left.

Еще одна вещь, на которую следует обратить внимание, - --disable-smart-shrinking;по умолчанию wkhtmltopdf будет «угадывать» dpi pdf, вычисляя ширину html и пытаясь подогнать его под границы страницы pdf.Если вы хотите точно измерить каждый элемент на странице, вы должны добавить --disable-smart-shrinking в свой список аргументов.Однако убедитесь, что вывод html определяет точный размер страницы html (который должен совпадать с размером страницы pdf минус поля страницы), иначе wkhtmltopdf не сможет правильно отобразить страницу.

...