Jump to content

Recommended Posts

Posted

Hi,

 

I have two folders. Both the folders have 100 pdf each named from 1 to 100. I want to combine 1.pdf from folderA with 1.pdf in folderB and create a separate PDF file. This should happen for rest of the files. The thing is pdf's with the same file name should be merged together and a separate O/P pdf of it should be created.

 

TIA

  • Moderators
Posted

mohad,

Welcome to the AutoIt forums.

What have you tried so far? We do not produce code to order - we help to get your code running properly. Think of the old saying: "Give a man a fish, you feed him for a day; give a man a net and you feed him forever". We try to be net makers and repairers, not fishmongers. So again - what have you tried for yourself?

M23

 

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

  Reveal hidden contents

 

Posted

HI,

 

Thanks for your reply.

I have this code right now  - pdftk *.pdf cat output output.pdf

But this will combine all the pdf in a folder into a single huge pdf. I want to the pdf to get merged using the file name and create it as a new pdf. 

 

Posted

You need to create a list of files in both directory using _FileListToArray, then loop through this array and do the processing you describe for each file.

My UDFs and Tutorials:

  Reveal hidden contents

 

Posted (edited)

You can also move this all files to your own directory and merge all of them.

or for merge/split PDF you can use my QuickPDF library UDF  (look in my signature)
REMARK: for split/merge you can use QuickPDF Library Lite (read free).

 

Edited by mLipok
wording

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

  • 4 years later...
Posted (edited)
  On 10/13/2015 at 4:22 PM, mLipok said:

REMARK: for split/merge you can use QuickPDF Library Lite (read free).

Expand  

It seems that split function (ExtractPages) is not included in the Lite version (From: Reference Guide, Version 11.14.1.0, Appendix C Functions available in the Lite Edition).

For merging pdf files i'm using QuickPDF.au3,

Thanks!! to mLipok

; Title .........: UDF for "Debenu Quick PDF Library"
; Description ...: A collection of functions for Debenu Quick PDF Library
; Author(s) .....: mLipok

But for extracting pages, i'm looking for alternative open libraries:

https://sejda.org/

List basic commands:

;https://www.autoitscript.com/wiki/Main_Page
#include <Constants.au3>

ConsoleWrite( _GetDOSOutput('"' & @ScriptDir & '\sejda-console-2.10.4\bin\sejda-console.bat"') & @CRLF)

Func _GetDOSOutput($sCommand)
    Local $iPID, $sOutput = ""

    $iPID = Run('"' & @ComSpec & '" /c ' & $sCommand, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    While 1
        $sOutput &= StdoutRead($iPID, False, False)
        If @error Then
            ExitLoop
        EndIf
        Sleep(10)
    WEnd
    Return $sOutput
EndFunc   ;==>_GetDOSOutput

description of a command and example of usage:

ConsoleWrite( _GetDOSOutput('"' & @ScriptDir & '\sejda-console-2.10.4\bin\sejda-console.bat" simplesplit -h') & @CRLF)

some notes testing merge command

#include <Constants.au3>

Local $iPID, $sOutput = ""

;$iPID = Run(@ComSpec & " /C " & '"' & @ScriptDir & '\sejda-console-2.10.4\bin\sejda-console.bat" merge -h', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
;$iPID = Run(@ComSpec & " /C " & '"' & @ScriptDir & '\sejda-console-2.10.4\bin\sejda-console.bat" merge -l C:\files.csv -o C:\output.pdf --overwrite', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

#cs ----------------------------------------------------------------------------
 testing path with spaces
 sejda-console.bat passing parameters with spaces
 http://stackoverflow.com/questions/18192927/sejda-console-bat-passing-parameters-with-spaces
#ce ----------------------------------------------------------------------------

;$iPID = Run(@ComSpec & " /C """ & @ScriptDir & "\sejda-console-2.10.4\bin\sejda-console.bat"" merge -l C:\FILEST~1\files.csv -o C:\FILEST~1\output.pdf --overwrite", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$sFilePath = "C:\test folder with spaces\"
$sFileShort= FileGetShortName($sFilePath)

$iPID = Run(@ComSpec & " /C """ & @ScriptDir & "\sejda-console-2.10.4\bin\sejda-console.bat"" merge -l " & $sFileShort & "files.csv -o " & $sFileShort & "output.pdf --overwrite", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

ProcessWaitClose($iPID)
$sOutput = StdoutRead($iPID)
ConsoleWrite($sOutput)

;another option
;While 1
;  $sOutput &= StdoutRead($iPID, False, False)
;  If @error Then
;     ExitLoop
;  EndIf
;  Sleep(10)
;WEnd
;ConsoleWrite($sOutput)

;another option
;While 1
;    $sOutput = StdoutRead($iPID)
;    If @error Then ExitLoop;    ConsoleWrite($sOutput)
;WEnd

An example of addbackpages command

#cs ----------------------------------------------------------------------------
addbackpages
Takes one or more pages from a PDF document and adds them to one or more PDF documents after each 'n' pages.
#ce ----------------------------------------------------------------------------

#include <Constants.au3>

Global $iPID, $sOutput = ""

Global $sFolder = "C:\escaner\", $sFileName = '', $sText = ''

;Assign a Local variable the search handle of all files in the directory.
Local $hSearch = FileFindFirstFile($sFolder & "*.pdf")
;Check if the search was successful, if not display a message and exit
If $hSearch = -1 Then
  MsgBox($MB_SYSTEMMODAL, "", "Error: No files/directories matched the search pattern.")
  Exit
EndIf

While 1
   $sFileName = FileFindNextFile($hSearch)
   ; If there is no more file matching the search.
   If @error Then ExitLoop

   $sText &= " " & $sFolder & $sFileName
WEnd

;Close the search handle.
FileClose($hSearch)

$sText = StringMid($sText,2)

$iPID = Run(@ComSpec & " /C """ & @ScriptDir & "\sejda-console-2.10.4\bin\sejda-console.bat"" addbackpages -f " & $sText & " -b " & @ScriptDir & "\MyBackPage.pdf -o " & @DesktopDir & " -j overwrite", "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

ProcessWaitClose($iPID)
$sOutput = StdoutRead($iPID)
ConsoleWrite($sOutput)

 

Other references:

http://thierry.schmit.free.fr/spip/spip.php?article15

https://stackoverflow.com/questions/508144/fast-pdf-splitter-library

https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/

Edited by robertocm
Posted
  On 5/12/2020 at 5:49 PM, robertocm said:

It seems that split function (ExtractPages) is not included in the Lite version (From: Reference Guide, Version 11.14.1.0, Appendix C Functions available in the Lite Edition).

Expand  

did you try ?
I know that 11.14 reference guide is not talking about this is free (in Lite version),  but  further reference guides, mentioned this function as available in Lite Edition.

image.thumb.png.451c350fb2c2d72b3a6567d67d0d142d.png

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted (edited)

Dear mLipok

I'm not seeing in your UDF the ExtractPages function

trying this but doesn't work:

#include "QuickPDF.au3"

_QPDF_NewLibraryPath_Lite("C:\Program Files (x86)\Debenu\PDF Library\Lite\DebenuPDFLibraryLite1114.dll")
_QPDF_ExtractPages_Lite(@ScriptDir & "\documents.pdf")
If @error Then ConsoleWrite("@error = " & @error & @CRLF)

Func _QPDF_ExtractPages_Lite($sPDF_FileFullPath, $iStartPage = 1, $iPageCount = 1)
    If Not FileExists($sPDF_FileFullPath) Then Return SetError($QPDF_ERR_DIRECTORY, $QPDF_EXT_PARAM1, $QPDF_RET_FAILURE)

    Local $oQP
    If _QPDF_CreateObjectAndUnlock($oQP) = $QPDF_RET_VALID_LITE Then

        ; load document
        _QPDF_LoadFromFile($oQP, $sPDF_FileFullPath, '')
        If @error Then Return SetError($QPDF_ERR_LOADFILE, @extended, $QPDF_RET_FAILURE)

        $oQP.ExtractPages($iStartPage, $iPageCount)
        _QPDF_LastError_Set($oQP)

        ; wait for complete save
        While _WinAPI_FileInUse($sPDF_FileFullPath)
            Sleep(10)
        WEnd

    EndIf

    $oQP = Null ; CleanUp - destroy object
EndFunc   ;_QPDF_ExtractPages_Lite

Console:

! __QPDF_ErrorNotiffy: LastErrorDescription =

 

Many Thanks!

Edited by robertocm

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...