Examples / optimize / vbnet

Optimize

A complete, runnable vbnet program — 69 lines, shipped in your download.

Demonstrates Import & Output APIs

Same example, other languages: activex_cpp c cpp cpp_linux csharp python

examples/vbnet/optimize/optimize.vb 69 lines
' optimize -- VB.NET port of examples\Vb6\optimize
Imports System
Imports System.Runtime.InteropServices
Imports LumasPdfSdk

Module modOptimize
    Private errDel As TErrorProc

    Private Function U(ByVal v As Long) As UInteger
        Return CUInt(v And &HFFFFFFFFL)
    End Function

    Function AppPath() As String
        Return AppDomain.CurrentDomain.BaseDirectory.TrimEnd("\"c)
    End Function

    Public Function PDFError(ByVal Data As IntPtr, ByVal ErrCode As Integer, ByVal ErrMessage As String, ByVal ErrType As Integer) As Integer
        Console.WriteLine(ErrMessage)
        Return 0
    End Function

    Private Function Optimize(ByVal pdf As IntPtr, ByVal InFile As String, ByVal OutFile As String) As Boolean
        Optimize = False
        LumasPdf.pdfCreateNewPDFW(pdf, "")
        LumasPdf.pdfSetDocInfoW(pdf, TDocumentInfo.diProducer, "")

        LumasPdf.pdfSetImportFlags(pdf, U((LumasPdfConsts.ifImportAll Or LumasPdfConsts.ifImportAsPage) And Not LumasPdfConsts.ifPieceInfo))
        LumasPdf.pdfSetImportFlags2(pdf, U(LumasPdfConsts.if2UseProxy Or LumasPdfConsts.if2DuplicateCheck Or LumasPdfConsts.if2Normalize Or LumasPdfConsts.if2NoResNameCheck))
        If LumasPdf.pdfOpenImportFileW(pdf, InFile, LumasPdfConsts.ptOpen, "") < 0 Then
            LumasPdf.pdfFreePDF(pdf)
            Return False
        End If
        LumasPdf.pdfImportPDFFile(pdf, 1, 1.0, 1.0)
        LumasPdf.pdfCloseImportFile(pdf)

        LumasPdf.pdfOptimize(pdf, U(LumasPdfConsts.ofInMemory Or LumasPdfConsts.ofNewLinkNames Or LumasPdfConsts.ofDeleteInvPaths), IntPtr.Zero)

        Dim e As TPDFError
        e.StructSize = CUInt(Marshal.SizeOf(GetType(TPDFError)))
        For i As Integer = 0 To LumasPdf.pdfGetErrLogMessageCount(pdf) - 1
            LumasPdf.pdfGetErrLogMessage(pdf, CUInt(i), e)
            Console.WriteLine(Marshal.PtrToStringAnsi(e.Msg))
        Next

        If LumasPdf.pdfHaveOpenDoc(pdf) <> 0 Then
            If LumasPdf.pdfOpenOutputFileW(pdf, OutFile) = 0 Then
                LumasPdf.pdfFreePDF(pdf)
                Return False
            End If
            Optimize = (LumasPdf.pdfCloseFile(pdf) <> 0)
        End If
    End Function

    Sub Main()
        Dim pdf As IntPtr = LumasPdf.pdfNewPDF()
        errDel = New TErrorProc(AddressOf PDFError)
        LumasPdf.pdfSetOnErrorProc(pdf, IntPtr.Zero, errDel)

        LumasPdf.pdfSetCMapDirW(pdf, AppPath() & "\CMap", U(LumasPdfConsts.lcmDelayed Or LumasPdfConsts.lcmRecursive))

        Dim filePath As String = AppPath() & "\out.pdf"
        Dim inFile As String = AppPath() & "\sample_multipage.pdf"
        If Optimize(pdf, inFile, filePath) Then
            Console.WriteLine("PDF file """ & filePath & """ successfully created!")
        End If
        LumasPdf.pdfDeletePDF(pdf)
    End Sub
End Module

This file is in the SDK at examples/vbnet/optimize/optimize.vb. The build fails if this page and that file ever differ.