- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 iText 2.1.7,我正在使用 writer.getDirectcontent() 方法在绝对位置添加页眉和页脚。一切正常,除了第一页中的字体比第二页更暗。
注意第一页和第二页的页眉和页脚
有什么帮助吗?
这是我做的
Reader stringReader = new StringReader(svgXmlDoc);
Document document = new Document(PageSize.A4.rotate());
ByteArrayOutputStream content = new ByteArrayOutputStream();
try {
PdfWriter writer = PdfWriter.getInstance(document, content);
document.open();
PdfService event = new PdfService();
event.setHeader(date.toString());
event.onOpenDocument(writer, document);
event.onEndPage(writer, document);
event.onCloseDocument(writer, document);
writer.setPageEvent(event);
Image image1 = Image.getInstance("Infinity-Loop.png");
image1.scalePercent(35);
PdfPTable signature = new PdfPTable(numberOfSignature);
signature.setTotalWidth(document.getPageSize().getWidth()
- document.leftMargin() - document.rightMargin());
signature.setLockedWidth(true);
signature.setWidthPercentage(100);
signature.getDefaultCell().setFixedHeight(20);
signature.getDefaultCell().setHorizontalAlignment(
Element.ALIGN_RIGHT);
for (int i = 0; i < numberOfSignature; i++) {
PdfPCell cell = new PdfPCell(new Paragraph(
String.valueOf("____________")));
cell.setBorder(Rectangle.NO_BORDER);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
signature.addCell(cell);
}
PdfPTable header = new PdfPTable(3);
float[] columnWidths = {1f,2f,1f};
header.setWidths(columnWidths);
header.setTotalWidth(document.getPageSize().getWidth()
- document.leftMargin() - document.rightMargin());
header.setLockedWidth(true);
header.setWidthPercentage(100);
header.getDefaultCell().setPadding(15);
header.getDefaultCell().setBorder(Rectangle.NO_BORDER);
PdfPCell logocell = new PdfPCell(image1, false);
logocell.setRowspan(3);
logocell.setFixedHeight(72);
logocell.setBorder(Rectangle.NO_BORDER);
header.addCell(logocell);
PdfPCell Title = new PdfPCell(new Phrase(title,
FontFactory.getFont(FontFactory.TIMES_ROMAN, 18,
Font.PLAIN, new Color(0, 0, 0))));
Title.setBorder(Rectangle.NO_BORDER);
Title.setHorizontalAlignment(Element.ALIGN_CENTER);
header.addCell(Title);
header.addCell("");
header.completeRow();
PdfPCell SubTitle = new PdfPCell(new Phrase(subTitle));
SubTitle.setBorder(Rectangle.NO_BORDER);
SubTitle.setHorizontalAlignment(Element.ALIGN_CENTER);
header.addCell(SubTitle);
header.addCell("");
header.completeRow();
PdfPCell dataRange = new PdfPCell(new Phrase(
dateRange));
dataRange.setBorder(Rectangle.NO_BORDER);
dataRange.setHorizontalAlignment(Element.ALIGN_CENTER);
header.addCell(dataRange);
header.addCell("");
header.completeRow();
ArrayList tmp = header.getRows(0, header.getRows().size());
header.getRows().clear();
header.getRows().addAll(tmp);
int width = (int) ((int) document.getPageSize().getWidth()
- document.leftMargin() - document.rightMargin());
int height = 350;
PdfContentByte cb = writer.getDirectContent();
PdfTemplate template = cb.createTemplate(width, height);
Graphics2D g2 = template.createGraphics(width, height);
PrintTranscoder prm = new PrintTranscoder();
TranscoderInput ti = new TranscoderInput(stringReader);
prm.transcode(ti, null);
PageFormat pg = new PageFormat();
Paper pp = new Paper();
pp.setSize(width, height);
pp.setImageableArea(0, 0, width, height);
pg.setPaper(pp);
prm.print(g2, pg, 0);
g2.dispose();
ImgTemplate img = new ImgTemplate(template);
img.setAbsolutePosition(document.left(), document.topMargin() + 100);
document.add(img);
signature.writeSelectedRows(0, -1, document.left(),
document.bottom() + document.bottomMargin() * 2,
writer.getDirectContent());
header.writeSelectedRows(0, -1, document.left(), document.top(),
writer.getDirectContent());
document.newPage();
PdfPTable statisticsTitle=new PdfPTable(1);
statisticsTitle.setTotalWidth(document.right() - document.left());
statisticsTitle.setWidthPercentage(100);
PdfPCell titleCell= new PdfPCell(new Paragraph("Statistics Report"));
titleCell.setBorder(Rectangle.NO_BORDER);
titleCell.setHorizontalAlignment(Element.ALIGN_CENTER);
statisticsTitle.addCell(titleCell);
statisticsTitle.writeSelectedRows(0, -1, document.left(), document.top()
- document.topMargin() * 2 - 10, writer.getDirectContent());
PdfPTable table;
if(measurementType.equals("Temp")){
table = new PdfPTable(6);
}
else{
table = new PdfPTable(11);
}
table.setTotalWidth(document.right() - document.left());
table.setWidthPercentage(100);
table.setHeaderRows(1);
PdfPCell h1 = new PdfPCell(new Paragraph("Description"));
h1.setGrayFill(0.7f);
h1.setRowspan(2);
h1.setVerticalAlignment(Element.ALIGN_MIDDLE);
h1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(h1);
PdfPCell h2 = new PdfPCell(new Paragraph("Temperature"));
h2.setGrayFill(0.7f);
h2.setColspan(5);
h2.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(h2);
if(measurementType.equals("TempHumi")){
PdfPCell h3 = new PdfPCell(new Paragraph("Humidity"));
h3.setGrayFill(0.7f);
h3.setColspan(5);
h3.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(h3);
}
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
PdfPCell tc1 = new PdfPCell(new Paragraph("Min"));
tc1.setGrayFill(0.7f);
tc1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(tc1);
PdfPCell tc2 = new PdfPCell(new Paragraph("Max"));
tc2.setGrayFill(0.7f);
tc2.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(tc2);
PdfPCell tc3 = new PdfPCell(new Paragraph("Avg"));
tc3.setGrayFill(0.7f);
tc3.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(tc3);
PdfPCell tc4 = new PdfPCell(new Paragraph("Std"));
tc4.setGrayFill(0.7f);
tc4.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(tc4);
PdfPCell tc5 = new PdfPCell(new Paragraph("Mkt"));
tc5.setGrayFill(0.7f);
tc5.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(tc5);
if(measurementType.equals("TempHumi")){
PdfPCell hc1 = new PdfPCell(new Paragraph("Min"));
hc1.setGrayFill(0.7f);
hc1.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(hc1);
PdfPCell hc2 = new PdfPCell(new Paragraph("Max"));
hc2.setGrayFill(0.7f);
hc2.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(hc2);
PdfPCell hc3 = new PdfPCell(new Paragraph("Avg"));
hc3.setGrayFill(0.7f);
hc3.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(hc3);
PdfPCell hc4 = new PdfPCell(new Paragraph("Std"));
hc4.setGrayFill(0.7f);
hc4.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(hc4);
PdfPCell hc5 = new PdfPCell(new Paragraph("Mkt"));
hc5.setGrayFill(0.7f);
hc5.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(hc5);
}
ArrayList tmpTable = table.getRows(0, table.getRows().size());
table.getRows().clear();
table.getRows().addAll(tmpTable);
JsonObject listloggerdatastatistics = ReportService
.getStatisticsDetails(serialnumberlist);
System.out.println("Json "+listloggerdatastatistics.get("Sensormodellist"));
for (int row = 0; row < listloggerdatastatistics.get("Sensormodellist").getAsJsonArray().size(); row++) {
JsonObject jsonobj=listloggerdatastatistics.get("Sensormodellist").getAsJsonArray().get(row).getAsJsonObject();
if (row > 20 && row % 21 == 0) {
table.completeRow();
table.writeSelectedRows(0, 22, document.left(),
document.top() - document.topMargin() * 2 - 10,
writer.getDirectContent());
table.deleteBodyRows();
table.setSkipFirstHeader(true);
signature.writeSelectedRows(0, -1, document.left(),
document.bottom() + document.bottomMargin() * 3,
writer.getDirectContent());
header.writeSelectedRows(0, -1, document.left(),
document.top(), writer.getDirectContent());
document.newPage();
}
table.addCell(jsonobj.get("Modeltype").getAsString());
table.addCell(""+jsonobj.get("Mintemperature").getAsBigDecimal().setScale(2, RoundingMode.HALF_UP));
table.addCell(""+jsonobj.get("Maxtemperature").getAsBigDecimal().setScale(2, RoundingMode.HALF_UP));
table.addCell(""+jsonobj.get("Avgtemperature").getAsBigDecimal().setScale(2, RoundingMode.HALF_UP));
table.addCell(""+jsonobj.get("Stdtemperature").getAsBigDecimal().setScale(2, RoundingMode.HALF_UP));
table.addCell(""+jsonobj.get("Mkttemperature").getAsBigDecimal().setScale(2, RoundingMode.HALF_UP));
if(measurementType.equals("TempHumi")){
table.addCell(""+jsonobj.get("Minhumidity").getAsBigDecimal().setScale(2, RoundingMode.HALF_UP));
table.addCell(""+jsonobj.get("Maxhumidity").getAsBigDecimal().setScale(2, RoundingMode.HALF_UP));
table.addCell(""+jsonobj.get("Avghumidity").getAsBigDecimal().setScale(2, RoundingMode.HALF_UP));
table.addCell(""+jsonobj.get("Stdhumidity").getAsBigDecimal().setScale(2, RoundingMode.HALF_UP));
table.addCell("-");
}
}
table.completeRow();
table.writeSelectedRows(0, -1, document.left(), document.top()
- document.topMargin() * 3 - 10, writer.getDirectContent());
signature.writeSelectedRows(0, -1, document.left(),
document.bottom() + document.bottomMargin() * 2,
writer.getDirectContent());
header.writeSelectedRows(0, -1, document.left(), document.top(),
writer.getDirectContent());
} catch (DocumentException e) {
System.err.println(e);
}
document.close();
content.close();
我正在从 SVG 构建图形图像,表格数据是从数据库中填充的
为第 X 页(共 Y 页)添加页脚的事件处理程序
public class PdfService extends PdfPageEventHelper {
/** The header text. */
String header;
/** The template with the total number of pages. */
PdfTemplate total;
/**
* Fills out the total number of pages before the document is closed.
*
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onCloseDocument(com.itextpdf.text.pdf.PdfWriter,
* com.itextpdf.text.Document)
*/
@Override
public void onCloseDocument(PdfWriter writer, Document document) {
total.reset();
ColumnText
.showTextAligned(total, Element.ALIGN_LEFT,
new Phrase(String.valueOf(writer.getPageNumber() - 1)),
2, 2, 0);
}
/**
* Adds a header to every page
*
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(com.itextpdf.text.pdf.PdfWriter,
* com.itextpdf.text.Document)
*/
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfPTable table = new PdfPTable(4);
try {
table.setWidths(new float[] { (float) (2.25), (float) (1.5), 11, 13 });
table.setTotalWidth(document.getPageSize().getWidth()
- document.leftMargin() - document.rightMargin());
table.setLockedWidth(true);
table.setWidthPercentage(100);
table.getDefaultCell().setFixedHeight(20);
table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
table.addCell(String.format("Page %d of", writer.getPageNumber()));
Image img = Image.getInstance(total);
Chunk conte = new Chunk(img, 0, 0);
Phrase chunk = new Phrase(conte);
PdfPCell cell = new PdfPCell(chunk);
cell.setBorder(Rectangle.NO_BORDER);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
cell.setVerticalAlignment(Element.ALIGN_TOP);
table.addCell(cell);
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
table.addCell("SuperAdmin");
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
table.addCell(header);
table.writeSelectedRows(0, -1, document.leftMargin(),
document.bottom(), writer.getDirectContent());
} catch (DocumentException de) {
throw new ExceptionConverter(de);
}
}
/**
* Creates the PdfTemplate that will hold the total number of pages.
*
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument(com.itextpdf.text.pdf.PdfWriter,
* com.itextpdf.text.Document)
*/
@Override
public void onOpenDocument(PdfWriter writer, Document document) {
total = writer.getDirectContent().createTemplate(15, 14);
// total.setBoundingBox(new Rectangle(-1, 6, 20, 20));
}
/**
* Allows us to change the content of the header.
*
* @param header
* The new header String
*/
public void setHeader(String header) {
this.header = header;
}
}
最佳答案
在过去,当人们有一个字体程序用于一种常规字体而没有单独的字体文件用于粗体字体时,人们找到了解决此问题的方法,并且 Adobe Reader 进行了调整以实现此解决方法。
解决方法包括在同一位置两次(或多次)写入相同的内容。当您添加一次“第 1 页,共 2 页”时,字体显示为常规字体。添加两次时,字体显示为粗体。
这就是您的情况:您添加了两次页脚。这是错误的:
document.open();
PdfService event = new PdfService();
event.setHeader(date.toString());
event.onOpenDocument(writer, document);
event.onEndPage(writer, document);
event.onCloseDocument(writer, document);
writer.setPageEvent(event);
您自己调用 event.onEndPage()
,第一次添加页脚。当一个页面完成时,iText 第二次调用 onEndPage()
方法,再次添加页脚,从而产生粗体。
你应该像这样调整你的代码:
PdfService event = new PdfService();
event.setHeader(date.toString());
writer.setPageEvent(event);
document.open();
您应该在打开文档之前向PdfWriter
实例声明该事件。您不应该自己调用 onOpenDocument()
、onEndPage()
和 onCloseDocument()
方法!它们由 iText 在内部调用。
出于 FAQ 中解释的原因,您还应该升级到最新版本. Using Open Source and contributing nothing in return is unwise. Supporting your open source communities isn’t charity, it’s good business.
关于java - itext 字体颜色在第一页变暗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23077008/
你知道更好的写法吗 font = font ? font : defaultFont; 我所知道的是: if(!font) { font = defaultFont } 我知道这是一个小工具问
我正在编写代码,但无法编译,即使类(字体)已通过 import javafx.scene.text.*; 导入我知道这个方法font包含在字体中。 这是我的代码: package helloworld
我已经构建了一个按钮,但在格式设置(即平方、内联文本等)方面遇到了问题 我目前的问题是:正文分为2部分- 上线正常-下一行是较大的字体大小 我的动画 react 正确,但文本应该在箭头的顶线和底线内。
好的,所以我想在网页上使用固定系统作为字体。我可以使用 Cufon,但我希望人们能够在鼠标悬停时选择文本并复制它。 有人有什么吗? 最佳答案 我使用 fontsquirrel 的 @font-face
我找到了 iOS 4.2 可用字体列表(链接 here ),但该列表与早期版本的 SDK 略有不同(链接 here )。 我可以很好地更改代码中的字体,但如果我使用 iOS 4.2 列表中可用的字体,
我正在尝试更改 TableView 标题上的字体颜色,其中显示“加利福尼亚/纽约”。我该怎么做? 在黑色背景上,文本需要是白色的,但无法弄清楚这一点。 谢谢 最佳答案 如果您尝试更改标题颜色,可以使用
假设我想使用 java.awt.Graphics.drawString(String str, int x, int y)在某些特定坐标处绘制字符串的方法,例如 (300, 300)。然而drawSt
我想使用Puppeteer从HTML字符串生成图像。现在我有这样的事情: const html = _.template(` Hello {{ test }}!
我正在创建一个游戏。我有一些带有文本的用户界面。最近我们想添加日语版本,但我遇到字体问题。我使用 stb_freetype 来光栅化字体,并且我支持 Unicode,所以这应该不是问题。但大多数字体似
我可以在一个文本区域中使用不同的前景色吗?不同的字体? 我想添加类似“hh:mm:ss 昵称:消息”的内容,时间为灰色,名称 - 蓝色,消息 - 黑色。 最佳答案 我在评论中犯了一个错误:你想要的是
每次我更改字体时,它都会返回到默认大小,即 12,即使我之前使用“ Jade 野”菜单更改它,它每次也只会返回到 12,我的猜测是这样我使用deriveFont()更改大小,但现在没有其他方法可以更改
我的电脑上安装了一种名为“BMW1”的自定义字体。我试图循环遍历此字体中的所有条目并将它们显示在 JTextArea 中。 我有以下代码: JTextArea displayArea = new JT
我尝试通过 Squirrel 理解生成的代码,这里是输出: @font-face { font-family: 'someFont'; src: url('someFont.eot')
我知道有多种方法可以通过 JS/DHTML 动态更改网页的字体属性,或者用 Flash 呈现的字体(使用 sIFR 或 Cufon)替换文本。但是,我找不到任何根据用户选择动态更改网页上使用的字体的好
使用具有非标准样式名称(例如“Inline”或“Outline”)而不是标准样式(例如“Bold”和“Italic”)的字体系列,如何使用 css 选择字体的不同样式? 设置 font-family
我对 html/css 有点陌生,我正在制作我的第一个网站,但我只是想不通一些东西。 首先,我在 dreaweaver 中工作...在 dreaweaver 中,一切看起来都不错,但是当我预览时,我缺
有没有办法在 Allegro5 中只绘制(或显示)图像/字体的一部分? 例如,如果我有一个正方形 A 和一个图像 B,我只想绘制/显示 B 中与 A(在本例中为 C)重叠的部分,我该怎么做? 插图:
所以,我有一个正在生成的报告 html 文件,其中有需要白色文本/字体的黑框。在通用 html 显示中一切都很好,但是当我尝试打印页面时,ctrl + p 或自定义打印功能,文本/字体保持为标准颜色,
我正在尝试制作一个非常适合 LaTeX 文档的 matlab 图形。一个已知的问题是 XTickLabel 和 YTickLabels 不使用 LaTeX 解释器渲染,导致图形不好看。 (注意:我意识
我需要在一个公共(public)位置使用默认颜色和字体,以便在桌面应用程序的多个窗口窗体中使用它。 这方面的最佳做法是什么? 我正在考虑使用应用程序设置在那里定义它们,但我想确保这是推荐的方法或者是否
我是一名优秀的程序员,十分优秀!