问题1:iTextSharp 我使用iTextsharp.Sample代码将水印文本添加到pdf,如下所示。当我通过PAC工具检查PDF可访问性时,我收到警告说"可能不恰当地使用Span结构元素"。
public void override OnEndPage(PdfWriter writer, Document document) {
float fontSize = 80;
float xPosition = 300;
float yPosition = 400;
float angle = 45;
PdfContentByte under = writer.DirectContentUnder;
BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
Font f = new Font(baseFont, 80, Font.NORMAL, BaseColor.LIGHT_GRAY);
Phrase phrse = new Phrase("TEXT",f);
ColumnText.ShowTextAligned(under , Element.ALIGN_LEFT, phrase, 75, 680,0);
}
有人可以帮我解决这些警告吗?
问题2:iText 7 我使用iText 7添加了watermarkText。示例代码如下。
PdfGState gs1 = new PdfGState();
gs1.setFillOpacity(0.5f);
PdfCanvas canvas = new PdfCanvas(docEvent.getPage());
canvas.beginMarkedContentSequence(PdfName.ARTIFACT);
canvas.setExtGState(gs1);
new Canvas(canvas, pdfDoc, page.getPageSize())
.setFontColor(Color.LIGHT_GRAY)
.setFontSize(60)
.setFont(font)
.showTextAligned(new Paragraph("WATERMARK"), 298, 421, pdfDoc.getPageNumber(page),
TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45);
canvas.endMarkedContentSequence();
当我通过PAC工具检查PDF辅助功能时,我收到错误"此pdf已损坏。不可用&#34 ;.我怎么能解决这个错误?
答案 0 :(得分:0)
您正在添加未标记的内容。这是不允许的。请阅读官方网站上的常见问题解答:How to add a page number in the header of a PDF/A Level A file?它描述了同样的问题,并解释了如何将内容添加为工件。工件是页面编号,页眉,页脚,水印......等内容,不属于真实的内容。
您正在添加这样的水印:
ColumnText.ShowTextAligned(under , Element.ALIGN_LEFT, phrase, 75, 680,0);
将此内容标记为工件,如下所示:
under.beginMarkedContentSequence(PdfName.ARTIFACT);
ColumnText.ShowTextAligned(under , Element.ALIGN_LEFT, phrase, 75, 680,0);
under.endMarkedContentSequence();
请注意,您仍在使用iText 5.最具前瞻性的版本是iText 7. iText 7具有更好的Tagged PDF支持。关于标记PDF的部分完全在ISO 32000-2(又名PDF 2.0标准)中重写。 iText 5中不支持PDF 2.0。支持PDF 2.0的第一个版本是iText 7.1。
如果您现在投资iText 5开发,您可能必须在必须遵守PDF 2.0中定义的标记PDF规则的那一天重写所有代码。如果我是你,我现在就升级。