В любом случае, не зная, как работает API FPDF, кажется, что он просто сохраняет глобальные состояния.
Итак, сначала вызовите switch + colorization (карта массива была бы проще), затем добавьте -> Cell и, наконец, -> Row, как в:
while($row = mysql_fetch_array($records)){
switch ($row['ssh']) {
case '2-3Meters' :
$pdf->SetFillColor(204, 153, 0);
…
}
$pdf->Cell($row['ssh'], 1, 1, 'L', TRUE);
$pdf->Row(array(1,2,3,4,1));
}
Вы не можете сказать наверняка по самому JAR-файлу.
Загрузите шестнадцатеричный редактор и откройте один из файлов классов внутри JAR и посмотрите на байтовые смещения с 4 по 7. Информация о версии встроена.
http://en.wikipedia.org/wiki/Java_class_file
Примечание. Как указано в комментарии ниже,
эти байты сообщают вам, для какой версии был скомпилирован класс, а не какая версия его скомпилировала.
Можно легко сделать это на использовании командной строки после процесса:
, Если Вы знаете какое-либо имя класса в банке, можно использовать следующую команду:
javap -cp jarname.jar -verbose packagename.classname | findstr major
пример:
C:\pathwherejarlocated> javap -cp jackson-databind-2.8.6.jar -verbose com.fasterxml.jackson.databind.JsonMappingException | findstr major
Вывод:
major version: 51
Справочник:
JDK 1.0 — major version 45
DK 1.1 — major version 45
JDK 1.2 — major version 46
JDK 1.3 — major version 47
JDK 1.4 — major version 48
JDK 1.5 — major version 49
JDK 1.6 — major version 50
JDK 1.7 — major version 51
JDK 1.8 — major version 52
JDK 1.9 — major version 53
пз: если Вы не знаете ни одного имени класса, можно легко сделать это при помощи любого из декомпиляторов банки или путем простого использования после команды для извлечения файла банки:
jar xf myFile.jar
Каждый файл класса имеет номер версии, встроенный для уровня байтового кода, который JVM использует, чтобы узнать, нравится ли ей этот конкретный фрагмент байтового кода или нет. Это 48 для Java 1.4, 49 для Java 1.5 и 50 для Java 6.
Существует множество компиляторов, которые могут генерировать байтовый код на каждом уровне, javac использует параметр «-target», чтобы указать, какой уровень байтового кода генерировать, и Java 6 javac может генерировать байтовый код как минимум для 1.4, 1.5 и 6. Я не верю, что компилятор вставляет что-либо, что может идентифицировать сам компилятор, о чем, я думаю, вы просите. Также все чаще используется компилятор Eclipse, так как это единственный jar-файл, который может работать только с JRE.
В jar-файле обычно много классов, и каждый из них независим, поэтому вам нужно исследовать все классы в jar-файле, чтобы быть уверенным в характеристиках содержимого.
Вы можете определить бинарную версию Java, проверив первые 8 байт (или используя приложение, которое может это сделать).
Сам компилятор, насколько мне известно, не вставляет никакой идентифицирующей подписи. В файле VM spec class format я не могу обнаружить такой вещи.
Компилятор Java ( javac
) не создает jar-файлы, он переводит файлы Java в файлы классов. Инструмент Jar ( jar
) создает настоящие банки. Если пользовательский манифест не был указан, в манифесте по умолчанию будет указано, какая версия JDK использовалась для создания jar-файла.
A jar
- это просто контейнер. Это файловый архив ā la tar
. Хотя jar
может содержать интересную информацию в иерархии META-INF, он не обязан указывать винтаж классов в своем содержимом. Для этого необходимо изучить файлы классов
.
Как отметил Питер Лоури в комментарии к исходному вопросу, вы не обязательно можете узнать, в каком выпуске JDK был создан данный файл class
, но вы можете узнать версию класса байт-кода файла class
, содержащегося в jar
.
Да, это отстой, но первым шагом будет извлечение одного или нескольких классов из jar
. Например:
$ jar xf log4j-1.2.15.jar
В Linux, Mac OS X или Windows с установленным Cygwin команда file(1) знает версию класса.
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
Или, как вариант, использовать javap
из JDK, как метко заметил @jikes.thunderbolt:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
И если вы находитесь в среде Windows
без file
или grep
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW, я соглашусь, что javap
расскажет намного больше о данном class
файле, чем заданный вопрос.
В любом случае, например, другая версия класса:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
Мажорный номер версии класса соответствует следующим версиям Java JDK: