Я оригинальный разработчик iText, и проблема, с которой вы столкнулись, объясняется в моей книге .
Вы смешиваете текстовый режим и композитный режим.
В текстовом режиме вы создаете PdfPCell
с Phrase
в качестве параметра конструктора, и вы определяете выравнивание на уровне ячейки. Однако вы работаете в сложном режиме. Этот режим запускается, как только вы используете метод addElement()
. В композитном режиме выравнивание, определенное на уровне ячейки, игнорируется (что объясняет вашу проблему). Вместо этого используется выравнивание отдельных элементов.
Как решить вашу проблему?
Либо работайте в текстовом режиме, добавив ваш Phrase
в ячейку другим способом. Или работайте в композитном режиме и используйте Paragraph
, для которого вы определяете выравнивание.
Преимущество композитного режима в текстовом режиме состоит в том, что разные абзацы в одной и той же ячейке могут иметь разные выравнивания, тогда как вы можете имеют одно выравнивание в текстовом режиме. Другим преимуществом является то, что вы можете добавить больше, чем просто текст: вы также можете добавлять изображения, списки, таблицы ... Преимущество текстового режима - скорость: для обработки содержимого ячейки требуется меньше времени обработки.
<!-- here is a complete example pretty print with more space between lines-->
<!-- be sure to pass a json string not a json object -->
<!-- use line-height to increase or decrease spacing between json lines -->
<style type="text/css">
.preJsonTxt{
font-size: 18px;
text-overflow: ellipsis;
overflow: hidden;
line-height: 200%;
}
.boxedIn{
border: 1px solid black;
margin: 20px;
padding: 20px;
}
</style>
<div class="boxedIn">
<h3>Configuration Parameters</h3>
<pre id="jsonCfgParams" class="preJsonTxt">{{ cfgParams }}</pre>
</div>
<script language="JavaScript">
$( document ).ready(function()
{
$(formatJson);
<!-- this will do a pretty print on the json cfg params -->
function formatJson() {
var element = $("#jsonCfgParams");
var obj = JSON.parse(element.text());
element.html(JSON.stringify(obj, undefined, 2));
}
});
</script>
Выделить и украсить его в HTML
использование Bootstrap
:
function pretifyJson(json, pretify) {
if (typeof json !== 'string') {
if(pretify){
json = JSON.stringify(json, undefined, 4);
}else{
json = JSON.stringify(json);
}
}
return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,
function (match) {
let cls = "<span>";
if (/^"/.test(match)) {
if (/:$/.test(match)) {
cls = "<span class='text-danger'>";
} else {
cls = "<span>";
}
} else if (/true|false/.test(match)) {
cls = "<span class='text-primary'>";
} else if (/null/.test(match)) {
cls = "<span class='text-info'>";
}
return cls + match + "</span>";
}
);
}