diff --git a/.github/workflows/test-kotlin-samples.yml b/.github/workflows/test-kotlin-samples.yml index bb36300..38c4f0d 100644 --- a/.github/workflows/test-kotlin-samples.yml +++ b/.github/workflows/test-kotlin-samples.yml @@ -17,7 +17,7 @@ jobs: strategy: matrix: os: [windows-latest, ubuntu-latest] - dir: ['TextExtract', 'FlattenTransparency', 'SplitPDF', 'ConvertToOffice', 'ListWords'] + dir: ['TextExtract', 'FlattenTransparency', 'SplitPDF', 'ConvertToOffice', 'MergePDF', 'ListWords'] steps: - name: Checkout uses: actions/checkout@v4 diff --git a/MergePDF/.idea/runConfigurations/MergePDF.xml b/MergePDF/.idea/runConfigurations/MergePDF.xml new file mode 100644 index 0000000..054131c --- /dev/null +++ b/MergePDF/.idea/runConfigurations/MergePDF.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/MergePDF/pom.xml b/MergePDF/pom.xml new file mode 100644 index 0000000..730c47a --- /dev/null +++ b/MergePDF/pom.xml @@ -0,0 +1,231 @@ + + + 4.0.0 + com.datalogics.pdfl.samples + MergePDF + 1.0-SNAPSHOT + + + + mavenCentral + https://repo1.maven.org/maven2/ + + + + + UTF-8 + official + 1.8 + 1.8 + 1.8 + + + + + Windows64 + + + windows + amd64 + + + + win-x86-64-jni + + + + MacArm + + + mac + aarch64 + + + + mac-arm-64-jni + + + + Linux64 + + + + Linux + amd64 + + + + linux-x86-64-jni + + + + + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + 1.9.21 + + + com.datalogics.pdfl + pdfl + 18.31.0 + pom + + + com.datalogics.pdfl + pdfl + 18.31.0 + + + com.datalogics.pdfl + pdfl + 18.31.0 + zip + ${jni.classifier} + + + com.datalogics.pdfl + pdfl + 18.31.0 + zip + resources + + + com.datalogics.pdfl + pdfl + 18.31.0 + javadoc + + + + + src/main/kotlin + + + org.jetbrains.kotlin + kotlin-maven-plugin + 1.9.21 + + + compile + compile + + compile + + + + + + maven-surefire-plugin + 2.22.2 + + + maven-failsafe-plugin + 2.22.2 + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + MergePDF + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack-resources + generate-resources + + unpack + + + + + com.datalogics.pdfl + pdfl + resources + zip + ${project.build.directory}/lib/Resources + + + + + + unpack-jni + generate-resources + + unpack + + + + + com.datalogics.pdfl + pdfl + ${jni.classifier} + zip + ${project.build.directory}/lib + + + + + + unpack-license + generate-resources + + unpack + + + + + com.datalogics.pdfl + pdfl + license + zip + ${project.build.directory}/lib + + + + + + + + maven-assembly-plugin + + + package + + single + + + + + + + true + com.datalogics.pdfl.samples.MergePDFKt + + + + jar-with-dependencies + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.2 + + + + + + diff --git a/MergePDF/src/main/kotlin/com/datalogics/pdfl/samples/MergePDF.kt b/MergePDF/src/main/kotlin/com/datalogics/pdfl/samples/MergePDF.kt new file mode 100644 index 0000000..4d6a0f7 --- /dev/null +++ b/MergePDF/src/main/kotlin/com/datalogics/pdfl/samples/MergePDF.kt @@ -0,0 +1,59 @@ +package com.datalogics.pdfl.samples + +import com.datalogics.PDFL.* +import java.util.EnumSet + +/* + * + * This sample demonstrates merging one PDF document into another. The program + * offers two optional input documents and defines a default output document. The sample + * takes the content from the second PDF input document and inserts it in the first + * input document, and saves the result to the output PDF document. + * + * Copyright (c) 2024, Datalogics, Inc. All rights reserved. + * + */ +fun main(args: Array) { + println("MergePDF sample:") + + val lib = Library() + + var sInput1 = Library.getResourceDirectory() + "Sample_Input/merge_pdf1.pdf" + var sInput2 = Library.getResourceDirectory() + "Sample_Input/merge_pdf2.pdf" + var sOutput = "MergePDF-out.pdf" + + if (args.isNotEmpty()) + sInput1 = args[0] + if (args.size > 1) + sInput2 = args[1] + if (args.size > 2) + sOutput = args[2] + + println("Adding $sInput1 and $sInput2 and writing to $sOutput") + + val doc1 = Document(sInput1) + val doc2 = Document(sInput2) + + try { + doc1.insertPages( + Document.LAST_PAGE, doc2, 0, Document.ALL_PAGES, EnumSet.of( + PageInsertFlags.BOOKMARKS, PageInsertFlags.THREADS, + // For best performance processing large documents, set the following flags. + PageInsertFlags.DO_NOT_MERGE_FONTS, PageInsertFlags.DO_NOT_RESOLVE_INVALID_STRUCTURE_PARENT_REFERENCES, PageInsertFlags.DO_NOT_REMOVE_PAGE_INHERITANCE + ) + ) + } catch (ex: LibraryException) { + if (!ex.message!!.contains("An incorrect structure tree was found in the PDF file but operation continued")) { + throw ex + } + println(ex.message) + } + + // For best performance processing large documents, set the following flags. + doc1.save(EnumSet.of(SaveFlags.FULL, SaveFlags.SAVE_LINEARIZED_NO_OPTIMIZE_FONTS, SaveFlags.COMPRESSED), sOutput) + + doc1.close() + doc2.close() + + lib.delete() +}