aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2023-04-26Makefile: Add an `install` targetTeddy Wing
Facilitate installation for package management. Package our `pdf-form-replace-font2` shell script so that it runs the JAR at the correct install location.
2023-04-26pom.xml: Add 'slf4j-nop' dependencyTeddy Wing
Quiet the following warning output that appeared when running the executable: $ java -jar target/pdf-form-replace-font2-0.0.1-SNAPSHOT.jar --find HelveticaLTStd-Bold --replace CourierNewPSMT --output f1040-courier.pdf f1040.pdf SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2023-04-26App.java: Remove debug printsTeddy Wing
We no longer need these.
2023-04-26App.java: Move `PdfReader`, `PdfWriter` declaration to `main`Teddy Wing
Didn't make sense to have the `replacePdfFieldFont` function do things related to command line argument parsing. I had done it that way originally because that's how my mind worked out the standard input and output handling at the time.
2023-04-26Add READMETeddy Wing
2023-04-26Makefile: Add `package` targetTeddy Wing
2023-04-26Add license (GNU GPLv3+)Teddy Wing
2023-04-26Remove tests harnessTeddy Wing
I'm not using tests here, so rather than keep useless tests cluttering the project I decided to remove them. This causes the `mvn package` task to fail, so I added a skip test configuration on the Maven Surefire plugin as described by smp7d (https://stackoverflow.com/users/395975/smp7d) on Stack Overflow: https://stackoverflow.com/questions/7456006/maven-package-install-without-test-skip-tests/7502723#7502723
2023-04-26Makefile: Remove old `all` targetTeddy Wing
No longer used now that we switched to Maven.
2023-04-26Add man pageTeddy Wing
Copy from 'pdf-form-replace-font' with small modifications to align with the present project.
2023-04-26App.java: Add Mac OS X user font directoryTeddy Wing
2023-04-26App.java: Add additional Mac OS X font locationsTeddy Wing
2023-04-26Switch to Java 8Teddy Wing
I had used Java 11 in order to use the `var` syntax, which seemed pleasantly more concise, however, I discovered that the machine I want to deploy this application to only has a Java 8 SDK, and I don't want to bother messing with it and going on a potential yak shaving quest.
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