目前,我正在尝试添加一个水印,出现在我的pdf的每一页的背景使用iText7 pdfHtml,但我无法找到一个解决方案。例如,我希望文本“机密”出现在每一页的背景中。我尝试用css添加它,如下所示
@page {
size: Letter;
margin: .5in .5in .5in .5in;
@left-middle {
content: "Confidential";
/* z-index: 100; */
font-size: 80pt;
font-weight: bold;
opacity: .2;
text-align: center;
text-transform: uppercase;
transform: translateX(350px) rotate(-54.7deg);
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
z-index: 0;
}
}
FileInputStream htmlStream = null;
FileOutputStream pdfStream = null;
try {
ConverterProperties converterProperties = new ConverterProperties().setBaseUri(path);
converterProperties.setMediaDeviceDescription(new MediaDeviceDescription(MediaType.PRINT));
htmlStream = new FileInputStream(inputPath);
pdfStream = new FileOutputStream(outputPath);
HtmlConverter.convertToPdf(htmlStream, pdfStream, converterProperties);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (htmlStream != null) {
htmlStream.close();
}
if (pdfStream != null) {
pdfStream.close();
}
}
<!DOCTYPE html>
<html>
<link id="watermark_link" href="watermark.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>
private static void generatePDFFromHTML(String inputPath, String outputPath, String baseUrl) throws IOException {
FileInputStream htmlStream = null;
FileOutputStream pdfStream = null;
try {
ConverterProperties converterProperties = new ConverterProperties().setBaseUri(baseUrl);
converterProperties.setMediaDeviceDescription(new MediaDeviceDescription(MediaType.PRINT));
htmlStream = new FileInputStream(inputPath);
pdfStream = new FileOutputStream(outputPath);
PdfWriter writer = new PdfWriter(pdfStream);
PdfDocument pdfDocument = new PdfDocument(writer);
Watermark watermark = new Watermark("Confidential");
pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE,watermark);
HtmlConverter.convertToPdf(htmlStream, pdfDocument, converterProperties);
pdfDocument.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (htmlStream != null) {
htmlStream.close();
}
if (pdfStream != null) {
pdfStream.close();
}
}
}
protected static class Watermark implements IEventHandler {
String watermarkText;
public Watermark(String watermarkText) {
this.watermarkText = watermarkText;
}
@Override
public void handleEvent(Event event) {
//Retrieve document and
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
PdfDocument pdf = docEvent.getDocument();
PdfPage page = docEvent.getPage();
Rectangle pageSize = page.getPageSize();
PdfCanvas pdfCanvas = new PdfCanvas(page.getLastContentStream(), page.getResources(), pdf);
Canvas canvas = new Canvas(pdfCanvas, pdf, pageSize);
PdfExtGState gstate = new PdfExtGState();
gstate.setFillOpacity(.2f);
pdfCanvas.setExtGState(gstate);
double rotationDeg = -54.7d;
double rotationRad = Math.toRadians(rotationDeg);
Paragraph watermarkParagraph = new Paragraph(watermarkText)
.setFontSize(80f)
.setTextAlignment(TextAlignment.CENTER)
.setVerticalAlignment(VerticalAlignment.MIDDLE)
.setRotationAngle(rotationRad)
.setFixedPosition(100, page.getPageSize().getHeight(), page.getPageSize().getWidth());
canvas.add(watermarkParagraph);
canvas.close();
}
}
我希望这对其他试图开始使用iText PDFHTML的人有所帮助!
这里有一个解决方案来添加文本“在每个页面的背景中”。这将在现有内容后面添加文本,这样它就不会掩盖它。请注意,这并不增加透明度。透明度需要添加外部图形状态。
try (PdfDocument doc = new PdfDocument(new PdfReader(in.toFile()), new PdfWriter(out.toFile()))) {
PdfFont helvetica = PdfFontFactory.createFont();
for (int pageNum = 1; pageNum <= doc.getNumberOfPages(); pageNum++) {
PdfPage page = doc.getPage(pageNum);
// important - add a new content stream in the beginning, to render behind existing text
PdfCanvas canvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), doc);
// option 1 - manual placement
canvas.saveState();
canvas.beginText();
canvas.setFillColor(ColorConstants.GRAY);
canvas.setFontAndSize(helvetica, 80f);
canvas.moveText(0f, page.getPageSize().getHeight() - 80f);
canvas.showText("Confidential1");
canvas.endText();
canvas.restoreState();
// option 2 - let iText place it
try (Canvas canvas1 = new Canvas(canvas, doc, page.getPageSize())) {
Paragraph watermark = new Paragraph("Confidential2")
.setFontColor(ColorConstants.GRAY)
.setFont(helvetica)
.setFontSize(80f)
.setHorizontalAlignment(HorizontalAlignment.LEFT)
.setVerticalAlignment(VerticalAlignment.BOTTOM)
.setFixedPosition(0f, page.getPageSize().getHeight() - 100f, page.getPageSize().getWidth());
canvas1.add(watermark);
}
// option 3 - set opacity and place on top of existing content, plus rotation
PdfExtGState gstate = new PdfExtGState();
gstate.setFillOpacity(.2f);
canvas = new PdfCanvas(page);
canvas.saveState();
canvas.setExtGState(gstate);
try (Canvas canvas2 = new Canvas(canvas, doc, page.getPageSize())) {
double rotationDeg = -54.7d;
double rotationRad = Math.toRadians(rotationDeg);
Paragraph watermark = new Paragraph("Confidential3")
.setFont(helvetica)
.setFontSize(80f)
.setTextAlignment(TextAlignment.CENTER)
.setVerticalAlignment(VerticalAlignment.MIDDLE)
.setRotationAngle(rotationRad)
.setFixedPosition(100, page.getPageSize().getHeight(), page.getPageSize().getWidth());
canvas2.add(watermark);
}
canvas.restoreState();
}
}
增加了第三个选项,适用透明度和轮换。
本文向大家介绍如何利用python给图片添加半透明水印,包括了如何利用python给图片添加半透明水印的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍了关于python图片添加半透明水印的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 示例代码: 效果图: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢
我需要为每个有特定文本的页面添加水印,例如“删除过程”。 基于Bruno Lowagie的建议将水印直接添加到流中 迄今为止,PdfWatermark类具有: 如果我在自定义detectPages方法中将数字3添加到arrPages ArrayList中,则效果很好-它在第3页上显示所需的水印。 我遇到的问题是如何在文档中搜索文本字符串,我只能从PdfWriter writer或com访问文本字符
我正在尝试在h264视频上添加一个png水印(带有alpha通道),它是半透明的。通过使用叠加过滤器,我成功地将水印添加到视频中。 但覆盖过滤器不提供透明选项。所以我尝试使用混合过滤器。然而,当我使用原点解析时,会出现错误消息。 输出: 结果似乎与参数有关。所以我尝试在混合之前缩放水印。 FFMPEG使用这些参数。但是输出不是我预期的,因为水印被拉伸了。任何想法混合水印与不同的分辨率,而不拉伸到视
问题内容: 我正在尝试重现Firefox或Safari的搜索字段或本页右上方的搜索字段的行为。 我的意思是,当editable上没有文本时,将显示指令文本,诸如此类。当集中的文本被删除。如果焦点丢失而没有键入任何文本,则说明文本会返回。 问题答案: 注意: 请查看文本提示,以更完整地实现以下代码,并提供更多功能。 我把一些简单的东西放在一起。我敢肯定你可以整理一下。由于代码可以在JTextFiel
本文向大家介绍C#如何给word文档添加水印,包括了C#如何给word文档添加水印的使用技巧和注意事项,需要的朋友参考一下 和PDF一样,在word中,水印也分为图片水印和文本水印,给文档添加图片水印可以使文档变得更为美观,更具有吸引力。文本水印则可以保护文档,提醒别人该文档是受版权保护的,不能随意抄袭。前面我分享了如何给PDF添加水印,有人问我如何给word文档添加水印,今天正好有空,就记录一下
本文向大家介绍C#如何给PDF文件添加水印,包括了C#如何给PDF文件添加水印的使用技巧和注意事项,需要的朋友参考一下 水印种类及功能介绍 PDF水印分为两种:文本水印和图片水印。文本水印一般被用在商业领域,提醒读者该文档是受版权保护的,其他人不能抄袭或者免费使用。除了这个特征,水印还可以用来标记这个文档 的一些基本状态信息,例如是草稿状态还是最终版本?图片水印是美化PDF文件的一个很好的选择,