Ken Huysmans posted an updated version of iTextSharp's MergeFile subroutine. Thank you, Ken.
Some of us VB.netter's, though, need to 'transpose' the code to VB. So I thought I'd post my VB.net version and, perhaps, save others a little time.
To quote Ken's post:
iText# (iTextSharp) is a port of the iText open source java library written entirely in C# for the .NET platform. iText# is a library that allows you to generate PDF files on the fly. It is implemented as an assembly.
The code of the class I've written uses iText# and is based on the example code (Console Application) that can be found on http://itextsharp.sourceforge.net/examples/Concat.cs . However, this code seems to target an out of date version of iText# and can't be compiled without fixing some lines...
This VB sub will allow you to merge multiple PDF's to one big PDF-file:
The dateTime stamp of this (tested) code is: November 30, 2007 @ 1:30pm PST.
I'll test it in the next couple of days and fix any issues (and/or fix any issues others may bring to my attention).
One thing to ensure is that the application you've written has read/write priviledges to the folder it will use.
Option Explicit On
Option Strict On
Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Public Class PDFClass
Public Shared Sub ContactPDFs(ByVal destFile As String, ByVal sourceFiles As String())
If sourceFiles.Length <>
Console.Error.WriteLine("This tools needs at least 3 parameters:" & Microsoft.VisualBasic.Chr(10) & "java Concat destfile file1 file2 [file3 ...]")
Else
Dim f As Integer = 1
Dim reader As PdfReader = New PdfReader(destFile)
Dim n As Integer = reader.NumberOfPages
Dim doc As Document = New Document(reader.GetPageSizeWithRotation(1))
Dim writer As PdfWriter
Try
writer = PdfWriter.GetInstance(doc, New FileStream(destFile, FileMode.Create))
Console.WriteLine("There are " & n.ToString & " pages in the original file.")
doc.Open()
Dim cb As PdfContentByte = writer.DirectContent
Dim page As PdfImportedPage
Dim rotation As Integer
While f <>
Dim i As Integer = 0
While i <>
System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)
doc.SetPageSize(reader.GetPageSizeWithRotation(i))
doc.NewPage()
page = writer.GetImportedPage(reader, i)
rotation = reader.GetPageRotation(i)
If rotation = 90 OrElse rotation = 270 Then
cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height)
Else
cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0)
End If
Console.WriteLine("Processed page " & i.ToString)
End While
System.Math.Min(System.Threading.Interlocked.Increment(f), f - 1)
If f <>
reader = New PdfReader(sourceFiles(f))
n = reader.NumberOfPages
'Console.WriteLine("There are " + n.ToString + " pages in the original file.")
End If
End While
Catch ex As Exception
uErr.LastException = ex
Finally
doc.Close()
End Try
End If
End Sub
End Class
Tuesday, November 27, 2007
Subscribe to:
Posts (Atom)