aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2023-04-25App.java: Use command line arguments in `replacePdfFieldFont`Teddy Wing
Make the program dynamic and use the command line arguments when performing font replacement.
2023-04-25App.java: Set remaining command line option variablesTeddy Wing
Set `input`, `find`, `replace`, and `output` from command line arguments. These will be used to generate the output PDF.
2023-04-25Add a shell script to make it easier to execute the JARTeddy Wing
2023-04-24App.java: Print program versionTeddy Wing
Thanks to this Stack Overflow answer by mysomic (https://stackoverflow.com/users/27241/mysomic) for explaining how to get the program version in a Maven pom.xml context: https://stackoverflow.com/questions/2712970/get-maven-artifact-version-at-runtime/12571330#12571330
2023-04-24App.java: Start adding command line option parsingTeddy Wing
Used the following resources to see how to parse command line options using commons-cli: - https://reintech.io/blog/java-command-line-applications-parsing-processing-arguments - https://commons.apache.org/proper/commons-cli/usage.html Reusing the options from 'pdf-form-replace-font'.
2023-04-24pom.xml: Add 'maven-shade-plugin' to build an uber-jarTeddy Wing
Package everything including our dependencies into a single JAR file. Thanks to these Stack Overflow answers for explaining that I needed to exclude the signature files from the final package: - https://stackoverflow.com/questions/999489/invalid-signature-file-when-attempting-to-run-a-jar/6743609#6743609 - https://stackoverflow.com/questions/34855649/invalid-signature-file-digest-for-manifest-main-attributes-exception-while-tryin/34856095#34856095
2023-04-23App.java: Extract font replacement code to functionTeddy Wing
Move this to a new function to make room in `main()` for command line argument parsing.
2023-04-23App.java: Remove "*" importsTeddy Wing
Not sure what the commn Java style is for wildcard imports, but I didn't really like them, so replace them with explicit type imports.
2023-04-23App.java: Remove commented in-progress codeTeddy Wing
Now that we have something that works, remove the old code from when I was testing things out.
2023-04-23Move 'Main.java' to 'App.java'Teddy Wing
Build our earlier code with Maven.
2023-04-23pom.xml: Add iText 7.2.5 dependencyTeddy Wing
Thanks to this Stack Overflow answer by Raphaƫl Colantonio (https://stackoverflow.com/users/3728901/rapha%c3%abl-colantonio) for the tip about type:pom : https://stackoverflow.com/questions/70086051/itextpdf-dependency-not-found-by-maven/70090910#70090910 Without that tag, the compile failed.
2023-04-23.gitignore: Ignore the Maven target/ directoryTeddy Wing
2023-04-23Regenerate Maven project structureTeddy Wing
The previous one wouldn't compile because I used hyphens in my package name. Regenerate the project structure replacing the hyphens with underscores: $ mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-simple -DarchetypeVersion=1.4 ... Define value for property 'groupId': com.teddywing.pdf_form_replace_font2 Define value for property 'artifactId': pdf-form-replace-font2 Define value for property 'version' 1.0-SNAPSHOT: : 0.0.1-SNAPSHOT Define value for property 'package' com.teddywing.pdf_form_replace_font2: : Confirm properties configuration: groupId: com.teddywing.pdf_form_replace_font2 artifactId: pdf-form-replace-font2 version: 0.0.1-SNAPSHOT package: com.teddywing.pdf_form_replace_font2 Y: :
2023-04-23Generate a Maven project structureTeddy Wing
I followed the Maven Getting Started (https://maven.apache.org/guides/getting-started/index.html) guide to set up a project structure so I could use it to manage dependencies. I picked the 'maven-archetype-simple' archetype (https://maven.apache.org/archetypes/maven-archetype-simple/). This code was generated with the following command and interactive prompts: $ mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-simple -DarchetypeVersion=1.4 Define value for property 'groupId': com.teddywing.pdf-form-replace-font2 Define value for property 'artifactId': pdf-form-replace-font2 Define value for property 'version' 1.0-SNAPSHOT: : 0.0.1-SNAPSHOT Define value for property 'package' com.teddywing.pdf-form-replace-font2: : Confirm properties configuration: groupId: com.teddywing.pdf-form-replace-font2 artifactId: pdf-form-replace-font2 version: 0.0.1-SNAPSHOT package: com.teddywing.pdf-form-replace-font2 Y: :
2023-04-23Main.java: Switch form field font to Courier NewTeddy Wing
2023-04-23Main.java: Don't embed the fontTeddy Wing
This finally works. My guess is that the library was embedding the font and, crucially, _subsetting_ the font. But since we don't set any values before writing out the PDF, it was probably subsetting to 0 glyphs, effectively making it appear that the desired font wasn't being set. Forcing no embedding renders the font correctly.
2023-04-23Main.java: Trying to use a TTF to replace the font, not workingTeddy Wing
Still working on this, trying to figure out why the font replacement isn't working.
2023-04-23Main.java: Debug font sizeTeddy Wing
2023-04-23Main.java: Only change font if it matches a given font nameTeddy Wing
Don't change all of the input fields' font to the replacement, only those with a specific font we want to replace.
2023-04-22Change PDF form field fontTeddy Wing
Use iText to change the font of interactive form fields in a PDF. Changes the font in 'f1040.pdf' to Courier. This code is based on the following example from iText: https://kb.itextsupport.com/home/it7kb/ebooks/itext-7-jump-start-tutorial-for-net/chapter-5-manipulating-an-existing-pdf-document-net#Chapter5:ManipulatinganexistingPDFdocument|.NET-Changingthepropertiesofformfields For now I just downloaded the dependencies' JAR files and put them in a 'lib/' directory rather than have to learn how to use a dependency management tool like Maven. Here is the contents of the 'lib/' directory: barcodes-7.2.2.jar commons-7.2.2.jar font-asian-7.2.2.jar forms-7.2.2.jar hyph-7.2.2.jar io-7.2.2.jar kernel-7.2.2.jar layout-7.2.2.jar pdfa-7.2.2.jar pdftest-7.2.2.jar sign-7.2.2.jar slf4j-api-1.7.9.jar styled-xml-parser-7.2.2.jar svg-7.2.2.jar To run this: $ make $ make run