编译基本 java 项目
Compiling basic java project
我想编译一个基本的java项目,https://sourceforge.net/projects/pdfformfiller2它的安装说明很短:
Make sure that iText library, itext-xtra-5.x.0.jar and itextpdf-5.x.0.jar, are accessible to JAVA,
e.g. these are placed in the "lib" subfolder of the current folder.
Get latest ones from: https://sourceforge.net/projects/itext/files/iText/
Compile PdfFormFiller.java
Then from the command line you give command (to see usage help):
java -jar pdfformfiller.jar
我以前从未编译过 jars,我很难正确编译 PdfFormFiller。这是我得到的地方:
wget -O pdfformfiller.zip https://sourceforge.net/projects/pdfformfiller2/files/latest/download
# author mentions 5.2.0, which is not available anymore, so we go for the latest 5.x:
wget http://kent.dl.sourceforge.net/project/itext/5.5.10/itext5-5.5.10.zip
unzip pdfformfiller.zip
unzip itext5-5.5.10.zip -d pdfformfiller/lib
cd pdfformfiller
javac -cp "lib/*" PdfFormFiller.java
mkdir META-INF
echo -e 'Manifest-Version: 1.0\nClass-Path: pdfformfiller.jar\nMain-Class: PdfFormFiller' > META-INF/MANIFEST.MF
jar -cvfm pdfformfiller.jar META-INF/MANIFEST.MF lib PdfFormFiller.class
成功且没有错误,但仍然没有 运行:
$ java -jar pdfformfiller.jar
Error: Could not find or load main class PdfFormFiller
我想我遗漏了一些微不足道的东西?
编辑
完全自动化:
iText5=5.5.10
wget -O pdfformfiller.zip https://sourceforge.net/projects/pdfformfiller2/files/latest/download
wget http://kent.dl.sourceforge.net/project/itext/${iText5}/itext5-${iText5}.zip
unzip pdfformfiller.zip
unzip itext5-${iText5}.zip -d pdfformfiller/lib
cd pdfformfiller
mkdir classes
javac -cp "lib/*" -d ./classes/ PdfFormFiller.java
mkdir META-INF
echo 'Manifest-Version: 1.0' > META-INF/MANIFEST.MF
echo "Class-Path: ./lib/itextpdf-${iText5}.jar ./lib/itext-xtra-${iText5}.jar ./lib/itext-pdfa-${iText5}.jar" >> META-INF/MANIFEST.MF
echo 'Main-Class: PdfFormFiller.PdfFormFiller' >> META-INF/MANIFEST.MF
jar -cvfm pdfformfiller.jar ./META-INF/MANIFEST.MF ./lib -C ./classes/ PdfFormFiller
编辑 2
这似乎是从 CLI 可靠地填写 pdf 表单的唯一方法:
# list fields in a file:
$ java -jar pdfformfiller.jar input.pdf -l
myfield
# prepare field data:
$ echo 'myfield αβγ' > fields
# specify font, fill the fields, flatten the form:
$ java -jar pdfformfiller.jar input.pdf -f fields -font Times_New_Roman.ttf -flatten output.pdf
很有魅力!
以下是我为使其正常工作所遵循的步骤。
首先,为了清楚起见,让我们为您编译的 类 创建一个专用文件夹。这不是强制性的,只是良好开发实践的一个例子。我省略了创建文件夹、更改目录等步骤,因为这很明显。所有命令都是运行来自项目的根目录
javac -cp "lib/*" -d ./classes/ PdfFormFiller.java
修复遗漏的两个主要问题:
a) 所需 lib
文件夹和
的参考
b) 包名:
echo -e 'Manifest-Version: 1.0\nClass-Path: ./lib/itextpdf-5.5.4.jar ./lib/itext-xtra-5.5.4.jar ./lib/itext-pdfa-5.5.4.jar\nMain-Class: PdfFormFiller.PdfFormFiller' > META-INF/MANIFEST.MF
组装jar(请注意这里使用附加选项:-C):
jar -cvfm pdfformfiller.jar ./META-INF/MANIFEST.MF ./lib -C ./classes/ PdfFormFiller
这是执行生成的 jar 文件的最终输出:
$ java -jar pdfformfiller.jar
USAGE: pdfformfiller document.pdf [ -l ] [ -v ] [ -f fields_filename ] [ -font font_file ] [ -flatten] [ output.pdf ]
document.pdf - name of source pdf file (required).
-l - only list available fields in document.pdf.
-v - verbose. Use to debug the fields_filename file.
-f fields_filename - name of file with the list of fields values to apply to document.pdf.
if ommited, stdin is used.
-font font_file - font to use. Needed UTF-8 support, e.g. cyrillic and non-latin alphabets.
-flatten - Flatten pdf forms (convert them to text disabling editing in PDF Reader).
output.pdf - name of output file. If omitted, the output if sent to stdout.
fields_filename file can be in UTF-8 as is of the following format:
On each line, one entry consists of 'field name' followed by value of that field without any quotes.
Any number of whitespaces allowed before 'field name', and one space separates 'field name' and its value.
In value, newline characters should be encoded as "\n",
'U+2029 utf-8 E280A9 : PARAGRAPH SEPARATOR PS' should be encoded as "\p",
and '\' characters should be escaped as "\".
For checkboxes, values are 'Yes'/'Off'.
Based on the Belgian iText library v. 5.2.0, http://www.itextpdf.com/
我想编译一个基本的java项目,https://sourceforge.net/projects/pdfformfiller2它的安装说明很短:
Make sure that iText library, itext-xtra-5.x.0.jar and itextpdf-5.x.0.jar, are accessible to JAVA, e.g. these are placed in the "lib" subfolder of the current folder.
Get latest ones from: https://sourceforge.net/projects/itext/files/iText/
Compile PdfFormFiller.java
Then from the command line you give command (to see usage help):
java -jar pdfformfiller.jar
我以前从未编译过 jars,我很难正确编译 PdfFormFiller。这是我得到的地方:
wget -O pdfformfiller.zip https://sourceforge.net/projects/pdfformfiller2/files/latest/download
# author mentions 5.2.0, which is not available anymore, so we go for the latest 5.x:
wget http://kent.dl.sourceforge.net/project/itext/5.5.10/itext5-5.5.10.zip
unzip pdfformfiller.zip
unzip itext5-5.5.10.zip -d pdfformfiller/lib
cd pdfformfiller
javac -cp "lib/*" PdfFormFiller.java
mkdir META-INF
echo -e 'Manifest-Version: 1.0\nClass-Path: pdfformfiller.jar\nMain-Class: PdfFormFiller' > META-INF/MANIFEST.MF
jar -cvfm pdfformfiller.jar META-INF/MANIFEST.MF lib PdfFormFiller.class
成功且没有错误,但仍然没有 运行:
$ java -jar pdfformfiller.jar
Error: Could not find or load main class PdfFormFiller
我想我遗漏了一些微不足道的东西?
编辑
完全自动化:
iText5=5.5.10
wget -O pdfformfiller.zip https://sourceforge.net/projects/pdfformfiller2/files/latest/download
wget http://kent.dl.sourceforge.net/project/itext/${iText5}/itext5-${iText5}.zip
unzip pdfformfiller.zip
unzip itext5-${iText5}.zip -d pdfformfiller/lib
cd pdfformfiller
mkdir classes
javac -cp "lib/*" -d ./classes/ PdfFormFiller.java
mkdir META-INF
echo 'Manifest-Version: 1.0' > META-INF/MANIFEST.MF
echo "Class-Path: ./lib/itextpdf-${iText5}.jar ./lib/itext-xtra-${iText5}.jar ./lib/itext-pdfa-${iText5}.jar" >> META-INF/MANIFEST.MF
echo 'Main-Class: PdfFormFiller.PdfFormFiller' >> META-INF/MANIFEST.MF
jar -cvfm pdfformfiller.jar ./META-INF/MANIFEST.MF ./lib -C ./classes/ PdfFormFiller
编辑 2
这似乎是从 CLI 可靠地填写 pdf 表单的唯一方法:
# list fields in a file:
$ java -jar pdfformfiller.jar input.pdf -l
myfield
# prepare field data:
$ echo 'myfield αβγ' > fields
# specify font, fill the fields, flatten the form:
$ java -jar pdfformfiller.jar input.pdf -f fields -font Times_New_Roman.ttf -flatten output.pdf
很有魅力!
以下是我为使其正常工作所遵循的步骤。
首先,为了清楚起见,让我们为您编译的 类 创建一个专用文件夹。这不是强制性的,只是良好开发实践的一个例子。我省略了创建文件夹、更改目录等步骤,因为这很明显。所有命令都是运行来自项目的根目录
javac -cp "lib/*" -d ./classes/ PdfFormFiller.java
修复遗漏的两个主要问题:
a) 所需
的参考lib
文件夹和b) 包名:
echo -e 'Manifest-Version: 1.0\nClass-Path: ./lib/itextpdf-5.5.4.jar ./lib/itext-xtra-5.5.4.jar ./lib/itext-pdfa-5.5.4.jar\nMain-Class: PdfFormFiller.PdfFormFiller' > META-INF/MANIFEST.MF
组装jar(请注意这里使用附加选项:-C):
jar -cvfm pdfformfiller.jar ./META-INF/MANIFEST.MF ./lib -C ./classes/ PdfFormFiller
这是执行生成的 jar 文件的最终输出:
$ java -jar pdfformfiller.jar USAGE: pdfformfiller document.pdf [ -l ] [ -v ] [ -f fields_filename ] [ -font font_file ] [ -flatten] [ output.pdf ] document.pdf - name of source pdf file (required). -l - only list available fields in document.pdf. -v - verbose. Use to debug the fields_filename file. -f fields_filename - name of file with the list of fields values to apply to document.pdf. if ommited, stdin is used. -font font_file - font to use. Needed UTF-8 support, e.g. cyrillic and non-latin alphabets. -flatten - Flatten pdf forms (convert them to text disabling editing in PDF Reader). output.pdf - name of output file. If omitted, the output if sent to stdout. fields_filename file can be in UTF-8 as is of the following format: On each line, one entry consists of 'field name' followed by value of that field without any quotes. Any number of whitespaces allowed before 'field name', and one space separates 'field name' and its value. In value, newline characters should be encoded as "\n", 'U+2029 utf-8 E280A9 : PARAGRAPH SEPARATOR PS' should be encoded as "\p", and '\' characters should be escaped as "\". For checkboxes, values are 'Yes'/'Off'. Based on the Belgian iText library v. 5.2.0, http://www.itextpdf.com/