<mySearch ⁄>
<mySnippets order="rand" ⁄>
<myContacts ⁄><email ⁄>
<windows live messenger ⁄>
<myCurriculum type="pdf" ⁄>
<myBlog show="last" ⁄>
<myNews show="rand" ⁄>
<myNews type="cat" ⁄>
<myQuote order="random" ⁄>Na vida, a única constante é a mudança.
<myPhoto order="random" ⁄>
<myAdSense ⁄>
<myVisitorsMap ⁄>
''' <summary> ''' Class com operações comuns ''' </summary> ''' <remarks></remarks> Public Class Common ''' <summary> ''' Obter a localização da aplicação ''' </summary> ''' <returns>String</returns> ''' <remarks>A pasta é devolvida com a "\" no fim</remarks> Public Function GetApplicationPath() As String Return System.Windows.Forms.Application.StartupPath & "\" End Function ''' <summary> ''' Verificar se um determinado ficheiro existe ''' </summary> ''' <param name="FileFullPath">Localização completa do ficheiro</param> ''' <returns>Boolean</returns> ''' <remarks></remarks> Public Function FileExists(ByVal FileFullPath As String) As Boolean Dim f As New IO.FileInfo(FileFullPath) Return f.Exists End Function ''' <summary> ''' Verificar se um determinado item existe numa listbox ''' </summary> ''' <param name="ItemDescription">String</param> ''' <param name="Listbox">Lisbox</param> ''' <returns>Boolean</returns> ''' <remarks></remarks> Public Function ItemExistsInListbox(ByVal ItemDescription As String, ByVal Listbox As ListBox) As Boolean Dim count As Int16, i count = Listbox.Items.Count() For i = 0 To count - 1 If Listbox.Items.Item(i) = ItemDescription Then ItemExistsInListbox = False : Exit Function Next i ItemExistsInListbox = True End Function ''' <summary> ''' Converter itens (colocando-os entre "") de uma listbox para uma string ''' </summary> ''' <param name="ListBox">Lisbox</param> ''' <returns>String</returns> ''' <remarks></remarks> Public Function FormatFilesToMerge(ByVal ListBox As ListBox) As String Dim count, i As Int16 Dim listFiles As String = "" count = ListBox.Items.Count() For i = 0 To count - 1 listFiles = listFiles & """" & ListBox.Items.Item(i) & """" & " " Next i Return listFiles End Function End Class
''' <summary> ''' Class de suporte às operações de merge do(s) PDF(s) ''' </summary> ''' <remarks></remarks> ''' Public Class PDFCreator Inherits Common Private pdftk_filename As String = "pdftk.exe" ' nome do ficheiro ''' <summary> ''' Verificar se o ficheiro responsável pelo merge dos pdf's existe ''' </summary> ''' <returns>Boolean</returns> ''' <remarks></remarks> Public Function PDFCreatorExists() As Boolean Return FileExists(GetApplicationPath() & pdftk_filename) End Function ''' <summary> ''' Obter o nome do ficheiro responsável pelo merge dos pdf's ''' </summary> ''' <returns>String</returns> ''' <remarks></remarks> Public Function GetPDFCreatorFilename() As String Return (GetApplicationPath() & pdftk_filename) End Function ''' <summary> ''' Procedimento que vai executar o ficheiros com os argumentos ''' necessários à criação do novo PDF. ''' </summary> ''' <param name="FilesToMerge">String</param> ''' <param name="NewPDFFileName">String</param> ''' <remarks></remarks> Public Sub MergePDFFiles(ByVal FilesToMerge As String, ByVal NewPDFFileName As String) Process.Start(GetPDFCreatorFilename(), FilesToMerge & " cat output " & NewPDFFileName) End Sub End Class

<?xml version="1.0" encoding="utf-8" ?> <configuration> <applicationSettings> <PDFJoiner.NET.My.MySettings> <setting name="LNG_PDFTK_MISSING" serializeAs="String"> <value>O ficheiro pdftk.exe está em falta, como tal é impossivel continuar.</value> </setting> <setting name="LNG_CONFIRM_CLEAR_LIST" serializeAs="String"> <value>Deseja remover todos os itens da lista?</value> </setting> <setting name="LNG_REQUIRED_FILES" serializeAs="String"> <value>Terá de selecionar pelo menos 2 ficheiros PDF</value> </setting> <setting name="LNG_ITEM_ALREADY_EXISTS" serializeAs="String"> <value>O ficheiro já existe na lista! Se pretender duplicar ficheiros selecione a opção "Permitir duplicações"</value> </setting> <setting name="LNG_SELECT_ITEM" serializeAs="String"> <value>Selecione um item a remover!</value> </setting> <setting name="LNG_PDF_CREATED" serializeAs="String"> <value>Foi criado o PDF</value> </setting> </PDFJoiner.NET.My.MySettings> </applicationSettings> </configuration>
Namespace My ''' <summary> ''' Obter settings da aplicação ''' </summary> ''' <remarks>Neste caso será usado basicamente para obter mensagens</remarks> Partial Friend NotInheritable Class MySettings Function MsgPdftkMissing() As String Return Me.LNG_PDFTK_MISSING End Function Function MsgClearListbox() As String Return Me.LNG_CONFIRM_CLEAR_LIST End Function Function MsgRequiredAtLeastTwoFiles() As String Return Me.LNG_REQUIRED_FILES End Function Function MsgItemAlreadyExistsInList() As String Return Me.LNG_ITEM_ALREADY_EXISTS End Function Function MsgSelectItem() As String Return Me.LNG_SELECT_ITEM End Function Function MsgPDFCreated() As String Return Me.LNG_PDF_CREATED End Function End Class End Namespace
Imports System.Diagnostics Imports System.IO Public Class MainForm Inherits System.Windows.Forms.Form Dim Language As New My.MySettings Private Sub GeneratePDFButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GeneratePDFButton.Click 'tem de existir pelo menos 2 ficheiros para fazer o merge If LisboxPDFFiles.Items.Count < 2 Then MsgBox(Language.MsgRequiredAtLeastTwoFiles, MsgBoxStyle.Critical) : Exit Sub Dim newPDFFilename, filesToMerge As String Dim pdfCreator As New PDFCreator If Not pdfCreator.PDFCreatorExists() Then 'verificar se o ficheiro responsável pelo merge existe MsgBox(Language.MsgPdftkMissing, MsgBoxStyle.Critical) Exit Sub End If SaveFileDialog1.ShowDialog() If SaveFileDialog1.FileName = "" Then Exit Sub 'não foi selecionado um ficheiro newPDFFilename = """" & SaveFileDialog1.FileName & """" filesToMerge = pdfCreator.FormatFilesToMerge(LisboxPDFFiles) 'chamar o método responsável pela criação do PDF pdfCreator.MergePDFFiles(filesToMerge, newPDFFilename) 'mostrar a informação de que o ficheiro foi criado e qual a sua localização ResultLabel.Text = String.Format("{0} - {1}", Language.MsgPDFCreated, newPDFFilename) End Sub Private Sub AddPDFButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddPDFButton.Click Dim FileToAdd As String Dim cmm As New Common OpenFileDialog1.ShowDialog() If OpenFileDialog1.FileName = "" Then Exit Sub 'não foi selecionado um ficheiro FileToAdd = OpenFileDialog1.FileName If CheckBoxAllowDuplicates.Checked = False Then If cmm.ItemExistsInListbox(FileToAdd, LisboxPDFFiles) Then LisboxPDFFiles.Items.Add(FileToAdd) Else MsgBox(Language.MsgItemAlreadyExistsInList, MsgBoxStyle.Critical) End If Else LisboxPDFFiles.Items.Add(FileToAdd) End If End Sub Private Sub RemovePDFButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RemovePDFButton.Click 'terá de existir um item selecionado If LisboxPDFFiles.SelectedIndex = -1 Then MsgBox(Language.MsgSelectItem, MsgBoxStyle.Critical) : Exit Sub LisboxPDFFiles.Items.RemoveAt(LisboxPDFFiles.SelectedIndex) End Sub Private Sub ClearListButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClearListButton.Click Dim resposta = MsgBox(Language.MsgClearListbox, MsgBoxStyle.YesNo + MsgBoxStyle.Question) If resposta = vbNo Then Exit Sub LisboxPDFFiles.Items.Clear() End Sub Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim pdfCreator As New PDFCreator 'verificar se o ficheiro que vai fazer o merge aos pdfs existe If Not pdfCreator.PDFCreatorExists() Then MsgBox(Language.MsgPdftkMissing, MsgBoxStyle.Critical) Application.Exit() End End If pdfCreator = Nothing 'titulo do form Me.Text = String.Format("{0} {1}", Application.ProductName.ToString, Application.ProductVersion.ToString) End Sub End Class