При добавлении текста водяного знака с помощью iTextSharp, iText 7 выдает предупреждения в инструменте PAC

Вопрос 1: iTextSharp Я добавил текст водяного знака в PDF с помощью кода iTextsharp.Sample, как показано ниже. когда я проверял доступность PDF-файла с помощью инструмента PAC, я получал предупреждение «Возможно несоответствующее использование элемента структуры 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 Я добавил watermarkText с помощью iText 7. Пример кода, как показано ниже.

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();

Когда я проверяю доступность PDF-файла с помощью инструмента PAC, я получаю сообщение об ошибке «Этот PDF-файл поврежден. Не используется». Как я могу решить эту ошибку?


person Briyatis    schedule 18.04.2018    source источник


Ответы (1)


Вы добавляете контент без тегов. Это не разрешено. Прочтите FAQ на официальном веб-сайте: Как добавить номер страницы в заголовок файла PDF / A уровня A? В нем описывается та же проблема и объясняется, как добавить контент в качестве артефакта. Артефакты - это части содержимого, такие как номера страниц, верхние и нижние колонтитулы, водяные знаки, ... которые не являются частью реального содержимого.

Вы добавляете такой водяной знак:

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 имеет лучшую поддержку PDF с тегами. Раздел о PDF с тегами был полностью переписан в ISO 32000-2 (он же стандарт PDF 2.0). В iText 5 не будет поддержки PDF 2.0. Первая версия, поддерживающая PDF 2.0, - это iText 7.1.

Если вы инвестируете в разработку iText 5 сейчас, вам, возможно, придется переписать весь свой код в тот день, когда вы должны соблюдать правила для PDF с тегами, определенные в PDF 2.0. На вашем месте я бы обновился сейчас.

person Bruno Lowagie    schedule 18.04.2018